// resolution as described in RFC 4703 should be employed for the
// given update request. The default value for this flag is true.
// It may be specified at the global, shared-network, and subnet levels.
+ // This field has been replaced by ddns-conflict-resolution-mode.
+ // Parsing is maintained only for backwards compatibility.
"ddns-use-conflict-resolution": true,
+ // Enumeration, which is passed to kea-dhcp-ddns with each DDNS
+ // update request to indicate the mode used for resolving conflicts
+ // while performing DDNS updates. The acceptable values are:
+ // check-with-dhcid (this includes adding a DHCID record and checking
+ // that record via conflict detection as per RFC 4703,
+ // no-check-with-dhcid (this will ignore conflict detection but add
+ // a DHCID record when creating/updating an entry),
+ // check-exists-with-dhcid (this will check if there is an existing
+ // DHCID record but does not verify the value of the record matches
+ // the update. This will also update the DHCID record for the entry),
+ // no-check-without-dhcid (this ignores conflict detection and will
+ // not add a DHCID record when creating/updating a DDNS entry).
+ // The default value is "check-with-dhcid". It may be
+ // specified at the global, shared-network and subnet levels.
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
+
// When greater than 0.0, it is the percent of the lease's lifetime
// to use for the DNS TTL.
"ddns-ttl-percent": 0.75,
"ddns-update-on-renew": true,
// Shared-network level value. See description at the global level.
+ // This field has been replaced by ddns-conflict-resolution-mode.
+ // Parsing is maintained only for backwards compatibility.
"ddns-use-conflict-resolution": true,
+ // Shared-network level value. See description at the global level.
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
+
// Shared-network level value. See description at the global level.
"ddns-ttl-percent": 0.65,
"ddns-update-on-renew": true,
// Subnet-level value. See description at the global level.
+ // This field has been replaced by ddns-conflict-resolution-mode.
+ // Parsing is maintained only for backwards compatibility.
"ddns-use-conflict-resolution": true,
+ // Subnet-level value. See description at the global level.
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
+
// Subnet-level value. See description at the global level.
"ddns-ttl-percent": 0.55,
"ddns-generated-prefix" : "test.prefix",
"ddns-qualifying-suffix" : "test.suffix.",
"ddns-update-on-renew" : false,
- "ddns-use-conflict-resolution" : true,
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
"ddns-ttl-percent" : 0.75,
"hostname-char-set": "[^A-Za-z0-9.-]",
"hostname-char-replacement": "x",
// resolution as described in RFC 4703 should be employed for the
// given update request. The default value for this flag is true.
// It may be specified at the global, shared-network, and subnet levels.
+ // This field has been replaced by ddns-conflict-resolution-mode.
+ // Parsing is maintained only for backwards compatibility.
"ddns-use-conflict-resolution": true,
+ // Enumeration, which is passed to kea-dhcp-ddns with each DDNS
+ // update request to indicate the mode used for resolving conflicts
+ // while performing DDNS updates. The acceptable values are:
+ // check-with-dhcid (this includes adding a DHCID record and checking
+ // that record via conflict detection as per RFC 4703,
+ // no-check-with-dhcid (this will ignore conflict detection but add
+ // a DHCID record when creating/updating an entry),
+ // check-exists-with-dhcid (this will check if there is an existing
+ // DHCID record but does not verify the value of the record matches
+ // the update. This will also update the DHCID record for the entry),
+ // no-check-without-dhcid (this ignores conflict detection and will
+ // not add a DHCID record when creating/updating a DDNS entry).
+ // The default value is "check-with-dhcid". It may be
+ // specified at the global, shared-network and subnet levels.
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
+
// When greater than 0.0, it is the percent of the lease's lifetime
// to use for the DNS TTL.
"ddns-ttl-percent": 0.75,
"ddns-update-on-renew": true,
// Shared-network level value. See description at the global level.
+ // This field has been replaced by ddns-conflict-resolution-mode.
+ // Parsing is maintained only for backwards compatibility.
"ddns-use-conflict-resolution": true,
+ // Shared-network level value. See description at the global level.
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
+
// Shared-network level value. See description at the global level.
"ddns-ttl-percent": 0.65,
"ddns-update-on-renew": true,
// Subnet-level value. See description at the global level.
+ // This field has been replaced by ddns-conflict-resolution-mode.
+ // Parsing is maintained only for backwards compatibility.
"ddns-use-conflict-resolution": true,
+ // Subnet-level value. See description at the global level.
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
+
// Subnet-level value. See description at the global level.
"ddns-ttl-percent": 0.55,
"ddns-generated-prefix" : "test.prefix",
"ddns-qualifying-suffix" : "test.suffix.",
"ddns-update-on-renew" : false,
- "ddns-use-conflict-resolution" : true,
+ "ddns-conflict-resolution-mode": "check-with-dhcid",
"ddns-ttl-percent" : 0.75,
"hostname-char-set": "[^A-Za-z0-9.-]",
"hostname-char-replacement": "x",
libd2_la_SOURCES += parser_context.cc parser_context.h parser_context_decl.h
libd2_la_SOURCES += simple_add.cc simple_add.h
libd2_la_SOURCES += simple_remove.cc simple_remove.h
+libd2_la_SOURCES += simple_add_without_dhcid.cc simple_add_without_dhcid.h
+libd2_la_SOURCES += simple_remove_without_dhcid.cc simple_remove_without_dhcid.h
+libd2_la_SOURCES += check_exists_add.cc check_exists_add.h
+libd2_la_SOURCES += check_exists_remove.cc check_exists_remove.h
sbin_PROGRAMS = kea-dhcp-ddns
--- /dev/null
+// Copyright (C) 2023 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 <d2/check_exists_add.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/d2_log.h>
+
+#include <util/buffer.h>
+#include <dns/rdataclass.h>
+
+#include <functional>
+
+namespace isc {
+namespace d2 {
+
+// CheckExistsAddTransaction states
+const int CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST;
+const int CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST;
+const int CheckExistsAddTransaction::REPLACING_REV_PTRS_ST;
+
+// CheckExistsAddTransaction events
+const int CheckExistsAddTransaction::FQDN_IN_USE_EVT;
+const int CheckExistsAddTransaction::FQDN_NOT_IN_USE_EVT;
+
+CheckExistsAddTransaction::
+CheckExistsAddTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : NameChangeTransaction(io_service, ncr, forward_domain, reverse_domain,
+ cfg_mgr) {
+ if (ncr->getChangeType() != isc::dhcp_ddns::CHG_ADD) {
+ isc_throw (CheckExistsAddTransactionError,
+ "CheckExistsAddTransaction, request type must be CHG_ADD");
+ }
+}
+
+CheckExistsAddTransaction::~CheckExistsAddTransaction(){
+}
+
+void
+CheckExistsAddTransaction::defineEvents() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineEvents();
+
+ // Define CheckExistsAddTransaction events.
+ defineEvent(FQDN_IN_USE_EVT, "FQDN_IN_USE_EVT");
+ defineEvent(FQDN_NOT_IN_USE_EVT, "FQDN_NOT_IN_USE_EVT");
+}
+
+void
+CheckExistsAddTransaction::verifyEvents() {
+ // Call superclass implementation first to verify its events. These are
+ // events common to all transactions, and they must be defined.
+ // SELECT_SERVER_EVT
+ // SERVER_SELECTED_EVT
+ // SERVER_IO_ERROR_EVT
+ // NO_MORE_SERVERS_EVT
+ // IO_COMPLETED_EVT
+ // UPDATE_OK_EVT
+ // UPDATE_FAILED_EVT
+ NameChangeTransaction::verifyEvents();
+
+ // Verify CheckExistsAddTransaction events by attempting to fetch them.
+ getEvent(FQDN_IN_USE_EVT);
+ getEvent(FQDN_NOT_IN_USE_EVT);
+}
+
+void
+CheckExistsAddTransaction::defineStates() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineStates();
+
+ // Define CheckExistsAddTransaction states.
+ defineState(READY_ST, "READY_ST",
+ std::bind(&CheckExistsAddTransaction::readyHandler, this));
+
+ defineState(SELECTING_FWD_SERVER_ST, "SELECTING_FWD_SERVER_ST",
+ std::bind(&CheckExistsAddTransaction::selectingFwdServerHandler, this));
+
+ defineState(SELECTING_REV_SERVER_ST, "SELECTING_REV_SERVER_ST",
+ std::bind(&CheckExistsAddTransaction::selectingRevServerHandler, this));
+
+ defineState(ADDING_FWD_ADDRS_ST, "ADDING_FWD_ADDRS_ST",
+ std::bind(&CheckExistsAddTransaction::addingFwdAddrsHandler, this));
+
+ defineState(REPLACING_FWD_ADDRS_ST, "REPLACING_FWD_ADDRS_ST",
+ std::bind(&CheckExistsAddTransaction::replacingFwdAddrsHandler, this));
+
+ defineState(REPLACING_REV_PTRS_ST, "REPLACING_REV_PTRS_ST",
+ std::bind(&CheckExistsAddTransaction::replacingRevPtrsHandler, this));
+
+ defineState(PROCESS_TRANS_OK_ST, "PROCESS_TRANS_OK_ST",
+ std::bind(&CheckExistsAddTransaction::processAddOkHandler, this));
+
+ defineState(PROCESS_TRANS_FAILED_ST, "PROCESS_TRANS_FAILED_ST",
+ std::bind(&CheckExistsAddTransaction::processAddFailedHandler, this));
+}
+
+void
+CheckExistsAddTransaction::verifyStates() {
+ // Call superclass implementation first to verify its states. These are
+ // states common to all transactions, and they must be defined.
+ // READY_ST
+ // SELECTING_FWD_SERVER_ST
+ // SELECTING_REV_SERVER_ST
+ // PROCESS_TRANS_OK_ST
+ // PROCESS_TRANS_FAILED_ST
+ NameChangeTransaction::verifyStates();
+
+ // Verify CheckExistsAddTransaction states by attempting to fetch them.
+ getStateInternal(ADDING_FWD_ADDRS_ST);
+ getStateInternal(REPLACING_FWD_ADDRS_ST);
+ getStateInternal(REPLACING_REV_PTRS_ST);
+}
+
+void
+CheckExistsAddTransaction::readyHandler() {
+ switch(getNextEvent()) {
+ case START_EVT:
+ if (getForwardDomain()) {
+ // Request includes a forward change, do that first.
+ transition(SELECTING_FWD_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ // Reverse change only, transition accordingly.
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ }
+
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsAddTransaction::selectingFwdServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getForwardDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(ADDING_FWD_ADDRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+void
+CheckExistsAddTransaction::addingFwdAddrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildAddFwdAddressRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Forward Add");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if (rcode == dns::Rcode::NOERROR()) {
+ // We were able to add it. Mark it as done.
+ setForwardChangeCompleted(true);
+
+ // If request calls for reverse update then do that next,
+ // otherwise we can process ok.
+ if (getReverseDomain()) {
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ }
+ } else if (rcode == dns::Rcode::YXDOMAIN()) {
+ // FQDN is in use so we need to attempt to replace
+ // forward address.
+ transition(REPLACING_FWD_ADDRS_ST, FQDN_IN_USE_EVT);
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should we try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsAddTransaction::replacingFwdAddrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case FQDN_IN_USE_EVT:
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildReplaceFwdAddressRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REPLACE_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Forward Replace");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if (rcode == dns::Rcode::NOERROR()) {
+ // We were able to replace the forward mapping. Mark it as done.
+ setForwardChangeCompleted(true);
+
+ // If request calls for reverse update then do that next,
+ // otherwise we can process ok.
+ if (getReverseDomain()) {
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ }
+ } else if (rcode == dns::Rcode::NXDOMAIN()) {
+ // FQDN is NOT in use so go back and do the forward add address.
+ // Covers the case that it was there when we tried to add it,
+ // but has since been removed per RFC 4703.
+ transition(ADDING_FWD_ADDRS_ST, SERVER_SELECTED_EVT);
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REPLACE_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REPLACE_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REPLACE_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_FORWARD_REPLACE_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsAddTransaction::selectingRevServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getReverseDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(REPLACING_REV_PTRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+
+void
+CheckExistsAddTransaction::replacingRevPtrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildReplaceRevPtrsRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Reverse Replace");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if (rcode == dns::Rcode::NOERROR()) {
+ // We were able to update the reverse mapping. Mark it as done.
+ setReverseChangeCompleted(true);
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_REVERSE_REPLACE_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsAddTransaction::processAddOkHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_OK_EVT:
+ LOG_INFO(d2_to_dns_logger, DHCP_DDNS_ADD_SUCCEEDED)
+ .arg(getRequestId())
+ .arg(getNcr()->toText());
+ setNcrStatus(dhcp_ddns::ST_COMPLETED);
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsAddTransaction::processAddFailedHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_FAILED_EVT:
+ case NO_MORE_SERVERS_EVT:
+ setNcrStatus(dhcp_ddns::ST_FAILED);
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_ADD_FAILED)
+ .arg(getRequestId())
+ .arg(transactionOutcomeString());
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsAddTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsAddTransaction::buildAddFwdAddressRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getForwardDomain());
+
+ // Construct dns::Name from NCR fqdn.
+ dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
+
+ // Content on this request is based on RFC 4703, section 5.3.1
+ // First build the Prerequisite Section.
+
+ // Create 'FQDN Is Not In Use' prerequisite and add it to the
+ // prerequisite section.
+ // Based on RFC 2136, section 2.4.5
+ dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::NONE(),
+ dns::RRType::ANY(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
+
+ // Next build the Update Section.
+
+ // Create the TTL based on lease length.
+ dns::RRTTL lease_ttl(getNcr()->getLeaseLength());
+
+ // Create the FQDN/IP 'add' RR and add it to the to update section.
+ // Based on RFC 2136, section 2.5.1
+ dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::IN(),
+ getAddressRRType(), lease_ttl));
+
+ addLeaseAddressRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Now create the FQDN/DHCID 'add' RR and add it to update section.
+ // Based on RFC 2136, section 2.5.1
+ update.reset(new dns::RRset(fqdn, dns::RRClass::IN(),
+ dns::RRType::DHCID(), lease_ttl));
+ addDhcidRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+void
+CheckExistsAddTransaction::buildReplaceFwdAddressRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getForwardDomain());
+
+ // Construct dns::Name from NCR fqdn.
+ dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
+
+ // First build the Prerequisite Section.
+
+ // Create an DHCID exists prerequisite RR and add it to the
+ // pre-requisite section.
+ // Based on RFC 2136, section 2.4.1.
+ dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::ANY(),
+ dns::RRType::DHCID(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
+
+ // Next build the Update Section.
+
+ // Create the TTL based on lease length.
+ dns::RRTTL lease_ttl(getNcr()->getLeaseLength());
+
+ // Create the FQDN/IP 'delete' RR and add it to the update section.
+ // Based on RFC 2136, section 2.5.2
+ dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::ANY(),
+ getAddressRRType(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Create the DHCID 'delete' RR and add it to the update section.
+ update.reset(new dns::RRset(fqdn, dns::RRClass::ANY(),
+ dns::RRType::DHCID(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Create the FQDN/IP 'add' RR and add it to the update section.
+ // Based on RFC 2136, section 2.5.1
+ update.reset(new dns::RRset(fqdn, dns::RRClass::IN(),
+ getAddressRRType(), lease_ttl));
+ addLeaseAddressRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Create the DHCID 'add' RR and add it to the update section.
+ update.reset(new dns::RRset(fqdn, dns::RRClass::IN(),
+ dns::RRType::DHCID(), lease_ttl));
+ addDhcidRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+void
+CheckExistsAddTransaction::buildReplaceRevPtrsRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getReverseDomain());
+
+ // Create the reverse IP address "FQDN".
+ std::string rev_addr = D2CfgMgr::reverseIpAddress(getNcr()->getIpAddress());
+ dns::Name rev_ip(rev_addr);
+
+ // Create the TTL based on lease length.
+ dns::RRTTL lease_ttl(getNcr()->getLeaseLength());
+
+ // Content on this request is based on RFC 4703, section 5.4
+ // Reverse replacement has no prerequisites so straight on to
+ // building the Update section.
+
+ // Create the PTR 'delete' RR and add it to update section.
+ dns::RRsetPtr update(new dns::RRset(rev_ip, dns::RRClass::ANY(),
+ dns::RRType::PTR(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Create the DHCID 'delete' RR and add it to the update section.
+ update.reset(new dns::RRset(rev_ip, dns::RRClass::ANY(),
+ dns::RRType::DHCID(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Create the FQDN/IP PTR 'add' RR, add the FQDN as the PTR Rdata
+ // then add it to update section.
+ update.reset(new dns::RRset(rev_ip, dns::RRClass::IN(),
+ dns::RRType::PTR(), lease_ttl));
+ addPtrRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Create the DHCID 'add' RR, add the DHCID Rdata
+ // then add it to update section.
+ update.reset(new dns::RRset(rev_ip, dns::RRClass::IN(),
+ dns::RRType::DHCID(), lease_ttl));
+ addDhcidRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+} // namespace isc::d2
+} // namespace isc
--- /dev/null
+// Copyright (C) 2023 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 CHECK_EXISTS_ADD_H
+#define CHECK_EXISTS_ADD_H
+
+/// @file check_exists_add.h This file defines the class CheckExistsAddTransaction.
+
+#include <d2srv/nc_trans.h>
+#include <dns/rdata.h>
+
+namespace isc {
+namespace d2 {
+
+/// @brief Thrown if the CheckExistsAddTransaction encounters a general error.
+class CheckExistsAddTransactionError : public isc::Exception {
+public:
+ CheckExistsAddTransactionError(const char* file, size_t line,
+ const char* what) :
+ isc::Exception(file, line, what) { };
+};
+
+/// @brief Embodies the "life-cycle" required to carry out a DDNS Add update.
+///
+/// CheckExistsAddTransaction implements a state machine for adding (or replacing) a
+/// forward and/or reverse DNS mapping. The logic may be paraphrased as follows:
+///
+/// @code
+///
+/// If the request includes a forward change:
+/// Select a forward server
+/// Send the server a request to add the forward entry
+/// If the server responds with already in use:
+/// Send a server a request to delete and then add forward entry
+/// (The prerequisite in the request specifies DHCID exists instead of
+/// checking that DHCID matches exactly)
+///
+/// If the forward update is unsuccessful:
+/// abandon the update
+///
+/// If the request includes a reverse change:
+/// Select a reverse server
+/// Send a server a request to delete and then add reverse entry
+///
+/// @endcode
+///
+/// This class derives from NameChangeTransaction from which it inherits
+/// states, events, and methods common to NameChangeRequest processing.
+class CheckExistsAddTransaction : public NameChangeTransaction {
+public:
+
+ //@{ Additional states needed for NameAdd state model.
+ /// @brief State that attempts to add forward address records.
+ static const int ADDING_FWD_ADDRS_ST = NCT_DERIVED_STATE_MIN + 1;
+
+ /// @brief State that attempts to replace forward address records.
+ static const int REPLACING_FWD_ADDRS_ST = NCT_DERIVED_STATE_MIN + 2;
+
+ /// @brief State that attempts to replace reverse PTR records
+ static const int REPLACING_REV_PTRS_ST = NCT_DERIVED_STATE_MIN + 3;
+ //@}
+
+ //@{ Additional events needed for NameAdd state model.
+ /// @brief Event sent when an add attempt fails with address in use.
+ static const int FQDN_IN_USE_EVT = NCT_DERIVED_EVENT_MIN + 1;
+
+ /// @brief Event sent when replace attempt to fails with address not in use.
+ static const int FQDN_NOT_IN_USE_EVT = NCT_DERIVED_EVENT_MIN + 2;
+ //@}
+
+ /// @brief Constructor
+ ///
+ /// Instantiates an Add transaction that is ready to be started.
+ ///
+ /// @param io_service IO service to be used for IO processing
+ /// @param ncr is the NameChangeRequest to fulfill
+ /// @param forward_domain is the domain to use for forward DNS updates
+ /// @param reverse_domain is the domain to use for reverse DNS updates
+ /// @param cfg_mgr pointer to the configuration manager
+ ///
+ /// @throw CheckExistsAddTransaction error if given request is not a CHG_ADD,
+ /// NameChangeTransaction error for base class construction errors.
+ CheckExistsAddTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr);
+
+ /// @brief Destructor
+ virtual ~CheckExistsAddTransaction();
+
+protected:
+ /// @brief Adds events defined by CheckExistsAddTransaction to the event set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// events unique to NCR Add transaction processing.
+ ///
+ /// @throw StateModelError if an event definition is invalid or a duplicate.
+ virtual void defineEvents();
+
+ /// @brief Validates the contents of the set of events.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Add transaction's. This tests that the needed events are in the event
+ /// dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyEvents();
+
+ /// @brief Adds states defined by CheckExistsAddTransaction to the state set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// states unique to NCR Add transaction processing.
+ ///
+ /// @throw StateModelError if an state definition is invalid or a duplicate.
+ virtual void defineStates();
+
+ /// @brief Validates the contents of the set of states.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Add transaction's states. This tests that the needed states are in the
+ /// state dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyStates();
+
+ /// @brief State handler for READY_ST.
+ ///
+ /// Entered from:
+ /// - INIT_ST with next event of START_EVT
+ ///
+ /// The READY_ST is the state the model transitions into when the inherited
+ /// method, startTransaction() is invoked. This handler, therefore, is the
+ /// entry point into the state model execution.h Its primary task is to
+ /// determine whether to start with a forward DNS change or a reverse DNS
+ /// change.
+ ///
+ /// Transitions to:
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes a forward change.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes only a reverse change.
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not
+ /// START_EVT.
+ void readyHandler();
+
+ /// @brief State handler for SELECTING_FWD_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - ADDING_FWD_ADDRS_ST with next event of SERVER_IO_ERROR_EVT
+ /// - REPLACING_FWD_ADDRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the forward domain for the forward
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the forward domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - ADDING_FWD_ADDRS_ST with next event of SERVER_SELECTED upon successful
+ /// server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingFwdServerHandler();
+
+ /// @brief State handler for SELECTING_REV_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - ADDING_FWD_ADDRS_ST with next event of SELECT_SERVER_EVT
+ /// - REPLACING_FWD_ADDRS_ST with next event of SELECT_SERVER_EVT
+ /// - REPLACING_REV_PTRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the reverse domain for the reverse
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the reverse domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - ADDING_REV_PTRS_ST with next event of SERVER_SELECTED upon successful
+ /// server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingRevServerHandler();
+
+ /// @brief State handler for ADD_FWD_ADDRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER with next event of SERVER_SELECTED_EVT
+ /// - REPLACING_FWD_ADDRS_ST with next event of SERVER_SELECTED_EVT
+ ///
+ /// Attempts to add a forward DNS entry for a given FQDN. If this is
+ /// first invocation of the handler after transitioning into this state,
+ /// any previous update request context is deleted. If next event
+ /// is SERVER_SELECTED_EVT, the handler builds the forward add request,
+ /// schedules an asynchronous send via sendUpdate(), and returns. Note
+ /// that sendUpdate will post NOP_EVT as next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - SELECTING_REV_SERVER_ST with next event of SELECT_SERVER_EVT upon
+ /// successful addition and the request includes a reverse DNS update.
+ ///
+ /// - PROCESS_TRANS_OK_ST with next event of UPDATE_OK_EVT upon successful
+ /// addition and no reverse DNS update is required.
+ ///
+ /// - REPLACING_FWD_ADDRS_ST with next event of FQDN_IN_USE_EVT if the DNS
+ /// server response indicates that an entry for the given FQDN already
+ /// exists.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with next event of UPDATE_FAILED_EVT if the
+ /// DNS server rejected the update for any other reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this states with next event of SERVER_SELECTED_EVT_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not
+ /// SERVER_SELECTED_EVT or IO_COMPLETE_EVT.
+ void addingFwdAddrsHandler();
+
+ /// @brief State handler for REPLACING_FWD_ADDRS_ST.
+ ///
+ /// Entered from:
+ /// - ADDING_FWD_ADDRS_ST with next event of FQDN_IN_USE_EVT
+ ///
+ /// Attempts to delete and then add a forward DNS entry for a given
+ /// FQDN. If this is first invocation of the handler after transitioning
+ /// into this state, any previous update request context is deleted. If
+ /// next event is FDQN_IN_USE_EVT or SERVER_SELECTED_EVT, the handler
+ /// builds the forward replacement request, schedules an asynchronous send
+ /// via sendUpdate(), and returns. Note that sendUpdate will post NOP_EVT
+ /// as the next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - SELECTING_REV_SERVER_ST with a next event of SELECT_SERVER_EVT upon
+ /// successful replacement and the request includes a reverse DNS update.
+ ///
+ /// - PROCESS_TRANS_OK_ST with next event of UPDATE_OK_EVT upon successful
+ /// replacement and the request does not include a reverse DNS update.
+ ///
+ /// - ADDING_FWD_ADDR_STR with a next event of SERVER_SELECTED_EVT if the
+ /// DNS server response indicates that the FQDN is not in use. This could
+ /// occur if a previous add attempt indicated the FQDN was in use, but
+ /// that entry has since been removed by another entity prior to this
+ /// replacement attempt.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of UPDATE_FAILED_EVT if the
+ /// DNS server rejected the update for any other reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with a next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not:
+ /// FQDN_IN_USE_EVT, SERVER_SELECTED_EVT or IO_COMPLETE_EVT.
+ void replacingFwdAddrsHandler();
+
+ /// @brief State handler for REPLACING_REV_PTRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_REV_SERVER_ST with a next event of SERVER_SELECTED_EVT
+ ///
+ /// Attempts to delete and then add a reverse DNS entry for a given FQDN.
+ /// If this is first invocation of the handler after transitioning into
+ /// this state, any previous update request context is deleted. If next
+ /// event is SERVER_SELECTED_EVT, the handler builds the reverse replacement
+ /// add request, schedules an asynchronous send via sendUpdate(), and
+ /// returns. Note that sendUpdate will post NOP_EVT as next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - PROCESS_TRANS_OK_ST with a next event of UPDATE_OK_EVT upon
+ /// successful replacement.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of UPDATE_FAILED_EVT If the
+ /// DNS server rejected the update for any reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with a next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not:
+ /// SERVER_SELECTED_EVT or IO_COMPLETED_EVT
+ void replacingRevPtrsHandler();
+
+ /// @brief State handler for PROCESS_TRANS_OK_ST.
+ ///
+ /// Entered from:
+ /// - ADDING_FWD_ADDRS_ST with a next event of UPDATE_OK_EVT
+ /// - REPLACING_FWD_ADDRS_ST with a next event of UPDATE_OK_EVT
+ /// - REPLACING_REV_PTRS_ST with a next event of UPDATE_OK_EVT
+ ///
+ /// Sets the transaction action status to indicate success and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of END_EVT.
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not:
+ /// UPDATE_OK_EVT
+ void processAddOkHandler();
+
+ /// @brief State handler for PROCESS_TRANS_FAILED_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - ADDING_FWD_ADDRS_ST with a next event of UPDATE_FAILED_EVT
+ /// - REPLACING_FWD_ADDRS_ST with a next event of UPDATE_FAILED_EVT
+ /// - SELECTING_REV_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - REPLACING_REV_PTRS_ST with a next event of UPDATE_FAILED_EVT
+ ///
+ /// Sets the transaction status to indicate failure and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of FAIL_EVT.
+ ///
+ /// @throw CheckExistsAddTransactionError if upon entry next event is not:
+ /// UPDATE_FAILED_EVT
+ void processAddFailedHandler();
+
+ /// @brief Builds a DNS request to add an forward DNS entry for an FQDN
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for adding a
+ /// forward DNS mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// The request content is adherent to RFC 4703 section 5.3.1:
+ ///
+ /// Prerequisite RRsets:
+ /// 1. An assertion that the FQDN does not exist
+ ///
+ /// Updates RRsets:
+ /// 1. An FQDN/IP RR addition (type A for IPv4, AAAA for IPv6)
+ /// 2. An FQDN/DHCID RR addition (type DHCID)
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildAddFwdAddressRequest();
+
+ /// @brief Builds a DNS request to replace forward DNS entry for an FQDN
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for replacing a
+ /// forward DNS mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// The request content is adherent to RFC 2136 section 2.4.1
+ ///
+ /// Prerequisite RRsets:
+ /// 1. An assertion that the DHCID RR exists for the FQDN.
+ ///
+ /// Updates RRsets:
+ /// 1. A deletion of any existing FQDN RRs (type A for IPv4, AAAA for IPv6)
+ /// 2. A deletion of any existing DHCID RRs
+ /// 3. An FQDN/IP RR addition (type A for IPv4, AAAA for IPv6)
+ /// 4. An FQDN/DHCID RR addition (type DHCID)
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildReplaceFwdAddressRequest();
+
+ /// @brief Builds a DNS request to replace a reverse DNS entry for an FQDN
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for replacing a
+ /// reverse DNS mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// The request content is adherent to RFC 4703 section 5.4:
+ ///
+ /// Prerequisite RRsets:
+ /// - There are not prerequisites.
+ ///
+ /// Updates RRsets:
+ /// 1. A delete of any existing PTR RRs for the lease address
+ /// 2. A delete of any existing DHCID RRs for the lease address
+ /// 3. A PTR RR addition for the lease address and FQDN
+ /// 4. A DHCID RR addition for the lease address and lease client DHCID
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildReplaceRevPtrsRequest();
+};
+
+/// @brief Defines a pointer to a CheckExistsAddTransaction.
+typedef boost::shared_ptr<CheckExistsAddTransaction> CheckExistsAddTransactionPtr;
+
+} // namespace isc::d2
+} // namespace isc
+#endif
--- /dev/null
+// Copyright (C) 2023 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 <d2/check_exists_remove.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/d2_log.h>
+
+#include <functional>
+
+namespace isc {
+namespace d2 {
+
+
+// CheckExistsRemoveTransaction states
+const int CheckExistsRemoveTransaction::REMOVING_FWD_ADDRS_ST;
+const int CheckExistsRemoveTransaction::REMOVING_FWD_RRS_ST;
+const int CheckExistsRemoveTransaction::REMOVING_REV_PTRS_ST;
+
+// CheckExistsRemoveTransaction events
+// Currently CheckExistsRemoveTransaction does not define any events.
+
+CheckExistsRemoveTransaction::
+CheckExistsRemoveTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : NameChangeTransaction(io_service, ncr, forward_domain, reverse_domain,
+ cfg_mgr) {
+ if (ncr->getChangeType() != isc::dhcp_ddns::CHG_REMOVE) {
+ isc_throw (CheckExistsRemoveTransactionError,
+ "CheckExistsRemoveTransaction, request type must be CHG_REMOVE");
+ }
+}
+
+CheckExistsRemoveTransaction::~CheckExistsRemoveTransaction(){
+}
+
+void
+CheckExistsRemoveTransaction::defineEvents() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineEvents();
+
+ // Define CheckExistsRemoveTransaction events.
+ // Currently CheckExistsRemoveTransaction does not define any events.
+ // defineEvent(TBD_EVENT, "TBD_EVT");
+}
+
+void
+CheckExistsRemoveTransaction::verifyEvents() {
+ // Call superclass implementation first to verify its events. These are
+ // events common to all transactions, and they must be defined.
+ // SELECT_SERVER_EVT
+ // SERVER_SELECTED_EVT
+ // SERVER_IO_ERROR_EVT
+ // NO_MORE_SERVERS_EVT
+ // IO_COMPLETED_EVT
+ // UPDATE_OK_EVT
+ // UPDATE_FAILED_EVT
+ NameChangeTransaction::verifyEvents();
+
+ // Verify CheckExistsRemoveTransaction events by attempting to fetch them.
+ // Currently CheckExistsRemoveTransaction does not define any events.
+ // getEvent(TBD_EVENT);
+}
+
+void
+CheckExistsRemoveTransaction::defineStates() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineStates();
+
+ // Define CheckExistsRemoveTransaction states.
+ defineState(READY_ST, "READY_ST",
+ std::bind(&CheckExistsRemoveTransaction::readyHandler, this));
+
+ defineState(SELECTING_FWD_SERVER_ST, "SELECTING_FWD_SERVER_ST",
+ std::bind(&CheckExistsRemoveTransaction::selectingFwdServerHandler,
+ this));
+
+ defineState(SELECTING_REV_SERVER_ST, "SELECTING_REV_SERVER_ST",
+ std::bind(&CheckExistsRemoveTransaction::selectingRevServerHandler,
+ this));
+
+ defineState(REMOVING_FWD_ADDRS_ST, "REMOVING_FWD_ADDRS_ST",
+ std::bind(&CheckExistsRemoveTransaction::removingFwdAddrsHandler,
+ this));
+
+ defineState(REMOVING_FWD_RRS_ST, "REMOVING_FWD_RRS_ST",
+ std::bind(&CheckExistsRemoveTransaction::removingFwdRRsHandler,
+ this));
+
+ defineState(REMOVING_REV_PTRS_ST, "REMOVING_REV_PTRS_ST",
+ std::bind(&CheckExistsRemoveTransaction::removingRevPtrsHandler,
+ this));
+
+ defineState(PROCESS_TRANS_OK_ST, "PROCESS_TRANS_OK_ST",
+ std::bind(&CheckExistsRemoveTransaction::processRemoveOkHandler,
+ this));
+
+ defineState(PROCESS_TRANS_FAILED_ST, "PROCESS_TRANS_FAILED_ST",
+ std::bind(&CheckExistsRemoveTransaction::processRemoveFailedHandler,
+ this));
+}
+
+void
+CheckExistsRemoveTransaction::verifyStates() {
+ // Call superclass implementation first to verify its states. These are
+ // states common to all transactions, and they must be defined.
+ // READY_ST
+ // SELECTING_FWD_SERVER_ST
+ // SELECTING_REV_SERVER_ST
+ // PROCESS_TRANS_OK_ST
+ // PROCESS_TRANS_FAILED_ST
+ NameChangeTransaction::verifyStates();
+
+ // Verify CheckExistsRemoveTransaction states by attempting to fetch them.
+ getStateInternal(REMOVING_FWD_ADDRS_ST);
+ getStateInternal(REMOVING_FWD_RRS_ST);
+ getStateInternal(REMOVING_REV_PTRS_ST);
+}
+
+void
+CheckExistsRemoveTransaction::readyHandler() {
+ switch(getNextEvent()) {
+ case START_EVT:
+ if (getForwardDomain()) {
+ // Request includes a forward change, do that first.
+ transition(SELECTING_FWD_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ // Reverse change only, transition accordingly.
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ }
+
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsRemoveTransaction::selectingFwdServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getForwardDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(REMOVING_FWD_ADDRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+void
+CheckExistsRemoveTransaction::removingFwdAddrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildRemoveFwdAddressRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_FORWARD_REMOVE_ADDRS_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Forward A/AAAA Remove");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ // The RCODE will be based on a value-dependent RRset search,
+ // see RFC 2136 section 3.2.3/3.2.4.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if ((rcode == dns::Rcode::NOERROR()) ||
+ (rcode == dns::Rcode::NXRRSET())) {
+ // We were able to remove it or it wasn't there, now we
+ // need to remove any other RRs for this FQDN.
+ transition(REMOVING_FWD_RRS_ST, UPDATE_OK_EVT);
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should we try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_ADDRS_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_ADDRS_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_ADDRS_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_FORWARD_REMOVE_ADDRS_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+
+void
+CheckExistsRemoveTransaction::removingFwdRRsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case UPDATE_OK_EVT:
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildRemoveFwdRRsRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_FORWARD_REMOVE_RRS_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Forward RR Remove");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ // The RCODE will be based on a value-dependent RRset search,
+ // see RFC 2136 section 3.2.3/3.2.4.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if ((rcode == dns::Rcode::NOERROR()) ||
+ (rcode == dns::Rcode::NXRRSET())) {
+ // We were able to remove them or they were not there (
+ // Rcode of NXRRSET means there are no matching RRsets).
+ // In either case, we consider it success and mark it as done.
+ setForwardChangeCompleted(true);
+
+ // If request calls for reverse update then do that next,
+ // otherwise we can process ok.
+ if (getReverseDomain()) {
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ }
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_RRS_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_RRS_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ // @note If we exhaust the IO retries for the current server
+ // due to IO failures, we will abort the remaining updates.
+ // The rational is that we are only in this state, if the remove
+ // of the forward address RR succeeded (removingFwdAddrsHandler)
+ // on the current server. Therefore we should not attempt another
+ // removal on a different server. This is perhaps a point
+ // for discussion.
+ // @todo Should we go ahead with the reverse remove?
+ retryTransition(PROCESS_TRANS_FAILED_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_RRS_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ // If we are out of retries on this server abandon the transaction.
+ // (Same logic as the case for TIMEOUT above).
+ retryTransition(PROCESS_TRANS_FAILED_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+
+void
+CheckExistsRemoveTransaction::selectingRevServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getReverseDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(REMOVING_REV_PTRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+
+void
+CheckExistsRemoveTransaction::removingRevPtrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildRemoveRevPtrsRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Reverse Remove");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ // The RCODE will be based on a value-dependent RRset search,
+ // see RFC 2136 section 3.2.3/3.2.4.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if ((rcode == dns::Rcode::NOERROR()) ||
+ (rcode == dns::Rcode::NXRRSET())) {
+ // We were able to remove the reverse mapping or they were
+ // not there (Rcode of NXRRSET means there are no matching
+ // RRsets). In either case, mark it as done.
+ setReverseChangeCompleted(true);
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+
+void
+CheckExistsRemoveTransaction::processRemoveOkHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_OK_EVT:
+ LOG_INFO(d2_to_dns_logger, DHCP_DDNS_REMOVE_SUCCEEDED)
+ .arg(getRequestId())
+ .arg(getNcr()->toText());
+ setNcrStatus(dhcp_ddns::ST_COMPLETED);
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsRemoveTransaction::processRemoveFailedHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_FAILED_EVT:
+ case NO_MORE_SERVERS_EVT:
+ case SERVER_IO_ERROR_EVT:
+ setNcrStatus(dhcp_ddns::ST_FAILED);
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REMOVE_FAILED)
+ .arg(getRequestId())
+ .arg(transactionOutcomeString());
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(CheckExistsRemoveTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+CheckExistsRemoveTransaction::buildRemoveFwdAddressRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getForwardDomain());
+
+ // Content on this request is based on RFC 4703, section 5.5, paragraph 4.
+ // Construct dns::Name from NCR fqdn.
+ dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
+ // First build the Prerequisite Section
+
+ // Create an DHCID exists prerequisite RR and add it to the
+ // pre-requisite section
+ // Based on RFC 2136, section 2.4.1
+ dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::ANY(),
+ dns::RRType::DHCID(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
+
+ // Next build the Update Section
+
+ // Create the FQDN/IP 'delete' RR and add it to the update section.
+ // Add the RR to update section.
+ // Based on RFC 2136 section 2.5.4
+ dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::NONE(),
+ getAddressRRType(), dns::RRTTL(0)));
+ addLeaseAddressRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+void
+CheckExistsRemoveTransaction::buildRemoveFwdRRsRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getForwardDomain());
+
+ // Construct dns::Name from NCR fqdn.
+ dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
+
+ // First build the Prerequisite Section.
+
+ // Create an assertion that there are no A RRs for the FQDN.
+ // Add it to the pre-reqs.
+ // Based on RFC 2136, section 2.4.3.
+ dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::NONE(),
+ dns::RRType::A(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
+
+ // Create an assertion that there are no AAAA RRs for the FQDN.
+ // Add it to the pre-reqs.
+ // Based on RFC 2136, section 2.4.3.
+ prereq.reset(new dns::RRset(fqdn, dns::RRClass::NONE(),
+ dns::RRType::AAAA(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
+
+ // Next build the Update Section.
+
+ // Create the 'delete' of all DHCID RRs for FQDN.
+ // Add the RR to update section.
+ // Based on RFC 2136, section 2.5.2.
+ dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::ANY(),
+ dns::RRType::DHCID(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+void
+CheckExistsRemoveTransaction::buildRemoveRevPtrsRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getReverseDomain());
+
+ // Create the reverse IP address "FQDN".
+ std::string rev_addr = D2CfgMgr::reverseIpAddress(getNcr()->getIpAddress());
+ dns::Name rev_ip(rev_addr);
+
+ // Content on this request is based on RFC 4703, section 5.5, paragraph 2.
+ // First build the Prerequisite Section.
+ // (Note that per RFC 4703, section 5.4, there is no need to validate
+ // DHCID RR for PTR entries.)
+
+ // Create an assertion that the PTRDNAME in the PTR record matches the
+ // client's FQDN for the address that was released.
+ // Based on RFC 2136, section 3.2.3
+ dns::RRsetPtr prereq(new dns::RRset(rev_ip, dns::RRClass::IN(),
+ dns::RRType::PTR(), dns::RRTTL(0)));
+ addPtrRdata(prereq);
+ request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
+
+ // Now, build the Update section.
+
+ // Create a delete of any RRs for the FQDN and add it to update section.
+ // Based on RFC 2136, section 3.4.2.3
+ dns::RRsetPtr update(new dns::RRset(rev_ip, dns::RRClass::ANY(),
+ dns::RRType::ANY(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+} // namespace isc::d2
+} // namespace isc
--- /dev/null
+// Copyright (C) 2023 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 CHECK_EXISTS_REMOVE_H
+#define CHECK_EXISTS_REMOVE_H
+
+/// @file check_exists_remove.h This file defines the class CheckExistsRemoveTransaction.
+
+#include <d2srv/nc_trans.h>
+
+namespace isc {
+namespace d2 {
+
+/// @brief Thrown if the CheckExistsRemoveTransaction encounters a general error.
+class CheckExistsRemoveTransactionError : public isc::Exception {
+public:
+ CheckExistsRemoveTransactionError(const char* file, size_t line,
+ const char* what) :
+ isc::Exception(file, line, what) { };
+};
+
+/// @brief Embodies the "life-cycle" required to carry out a DDNS Remove update.
+///
+/// CheckExistsRemoveTransaction implements a state machine for removing a forward
+/// and/or reverse DNS mappings. The logic may be paraphrased as follows:
+///
+/// @code
+///
+/// If the request includes a forward change:
+/// Select a forward server
+/// Send the server a request to remove client's specific forward address RR
+/// (The prerequisite in the request specifies DHCPID exists instead of checking that
+/// DHCID matches exactly)
+/// If it succeeds or the server responds with name no longer in use
+/// Send a server a request to delete any DHCID RRs for that name.
+/// (The prerequisite in the request specifies that there are no A and AAAA records for that name)
+/// otherwise
+/// abandon the update
+///
+/// If the request includes a reverse change:
+/// Select a reverse server
+/// Send a server a request to delete reverse entry (PTR RR)
+///
+/// @endcode
+///
+/// This class derives from NameChangeTransaction from which it inherits
+/// states, events, and methods common to NameChangeRequest processing.
+class CheckExistsRemoveTransaction : public NameChangeTransaction {
+public:
+
+ //@{ Additional states needed for NameRemove state model.
+ /// @brief State that attempts to remove specific forward address record.
+ static const int REMOVING_FWD_ADDRS_ST = NCT_DERIVED_STATE_MIN + 1;
+
+ /// @brief State that attempts to remove any other forward RRs for the DHCID
+ static const int REMOVING_FWD_RRS_ST = NCT_DERIVED_STATE_MIN + 2;
+
+ /// @brief State that attempts to remove reverse PTR records
+ static const int REMOVING_REV_PTRS_ST = NCT_DERIVED_STATE_MIN + 3;
+ //@}
+
+ //@{ Additional events needed for NameRemove state model.
+ /// @brief Event sent when replace attempt to fails with address not in use.
+ /// @todo Currently none have been identified.
+ //@}
+
+ /// @brief Constructor
+ ///
+ /// Instantiates an Remove transaction that is ready to be started.
+ ///
+ /// @param io_service IO service to be used for IO processing
+ /// @param ncr is the NameChangeRequest to fulfill
+ /// @param forward_domain is the domain to use for forward DNS updates
+ /// @param reverse_domain is the domain to use for reverse DNS updates
+ /// @param cfg_mgr pointer to the configuration manager
+ ///
+ /// @throw CheckExistsRemoveTransaction error if given request is not a CHG_REMOVE,
+ /// NameChangeTransaction error for base class construction errors.
+ CheckExistsRemoveTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr);
+
+ /// @brief Destructor
+ virtual ~CheckExistsRemoveTransaction();
+
+protected:
+ /// @brief Adds events defined by CheckExistsRemoveTransaction to the event set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// events unique to NCR Remove transaction processing.
+ ///
+ /// @throw StateModelError if an event definition is invalid or a duplicate.
+ virtual void defineEvents();
+
+ /// @brief Validates the contents of the set of events.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Remove transaction's events. This tests that the needed events are in
+ /// the event dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyEvents();
+
+ /// @brief Adds states defined by CheckExistsRemoveTransaction to the state set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// states unique to NCR Remove transaction processing.
+ ///
+ /// @throw StateModelError if an state definition is invalid or a duplicate.
+ virtual void defineStates();
+
+ /// @brief Validates the contents of the set of states.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Remove transaction's states. This tests that the needed states are in
+ /// the state dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyStates();
+
+ /// @brief State handler for READY_ST.
+ ///
+ /// Entered from:
+ /// - INIT_ST with next event of START_EVT
+ ///
+ /// The READY_ST is the state the model transitions into when the inherited
+ /// method, startTransaction() is invoked. This handler, therefore, is the
+ /// entry point into the state model execution. Its primary task is to
+ /// determine whether to start with a forward DNS change or a reverse DNS
+ /// change.
+ ///
+ /// Transitions to:
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes a forward change.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes only a reverse change.
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not
+ /// START_EVT.
+ void readyHandler();
+
+ /// @brief State handler for SELECTING_FWD_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - REMOVING_FWD_ADDRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the forward domain for the forward
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the forward domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - REMOVING_FWD_ADDRS_ST with next event of SERVER_SELECTED upon
+ /// successful server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingFwdServerHandler();
+
+ /// @brief State handler for SELECTING_REV_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - REMOVING_FWD_RRS_ST with next event of SELECT_SERVER_EVT
+ /// - REMOVING_REV_PTRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the reverse domain for the reverse
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the reverse domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - REMOVING_REV_PTRS_ST with next event of SERVER_SELECTED upon
+ /// successful server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingRevServerHandler();
+
+ /// @brief State handler for REMOVING_FWD_ADDRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER with next event of SERVER_SELECTED_EVT
+ ///
+ /// Attempts to remove the forward DNS entry for a given FQDN, provided
+ /// a DHCID RR exists which matches the requesting DHCID. If this is
+ /// first invocation of the handler after transitioning into this state,
+ /// any previous update request context is deleted. If next event
+ /// is SERVER_SELECTED_EVT, the handler builds the forward remove request,
+ /// schedules an asynchronous send via sendUpdate(), and returns. Note
+ /// that sendUpdate will post NOP_EVT as next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - REMOVING_FWD_RRS_ST with next event of UPDATE_OK_EVT upon successful
+ /// removal or RCODE of indication FQDN is no longer in use (NXDOMAIN).
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with next event of UPDATE_FAILED_EVT if the
+ /// DNS server rejected the update for any reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not
+ /// SERVER_SELECTED_EVT or IO_COMPLETE_EVT
+ void removingFwdAddrsHandler();
+
+ /// @brief State handler for REMOVING_FWD_RRS_ST.
+ ///
+ /// Entered from:
+ /// - REMOVING_FWD_ADDRS_ST with next event of UPDATE_OK_EVT
+ ///
+ /// Attempts to delete any remaining RRs associated with the given FQDN
+ /// such as the DHCID RR. If this is first invocation of the handler after
+ /// transitioning into this state, any previous update request context is
+ /// deleted and the handler builds the forward remove request. It then
+ /// schedules an asynchronous send via sendUpdate(),
+ /// and returns. Note that sendUpdate will post NOP_EVT as the next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - SELECTING_REV_SERVER_ST with a next event of SELECT_SERVER_EVT upon
+ /// successful completion and the request includes a reverse DNS update.
+ ///
+ /// - PROCESS_TRANS_OK_ST with next event of UPDATE_OK_EVT upon successful
+ /// completion and the request does not include a reverse DNS update.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of UPDATE_FAILED_EVT if the
+ /// DNS server rejected the update for any other reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with a next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of SERVER_IO_ERROR_EVT if
+ /// there we have reached maximum number of retries without success on the
+ /// current server.
+ ///
+ /// @note If we exhaust the IO retries for the current server due to IO
+ /// failures, we will abort the remaining updates. The rational is that
+ /// we are only in this state, if the remove of the forward address RR
+ /// succeeded (removingFwdAddrsHandler) on the current server so we should
+ /// not attempt another removal on a different server. This is perhaps a
+ /// point for discussion. @todo Should we go ahead with the reverse remove?
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not:
+ /// UPDATE_OK_EVT or IO_COMPLETE_EVT
+ void removingFwdRRsHandler();
+
+ /// @brief State handler for REMOVING_REV_PTRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_REV_SERVER_ST with a next event of SERVER_SELECTED_EVT
+ ///
+ /// Attempts to delete a reverse DNS entry for a given FQDN. If this is
+ /// first invocation of the handler after transitioning into this state,
+ /// any previous update request context is deleted. If next event is
+ /// SERVER_SELECTED_EVT, the handler builds the reverse remove request,
+ /// schedules an asynchronous send via sendUpdate(), and then returns.
+ /// Note that sendUpdate will post NOP_EVT as next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - PROCESS_TRANS_OK_ST with a next event of UPDATE_OK_EVT upon
+ /// successful completion.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of UPDATE_FAILED_EVT If the
+ /// DNS server rejected the update for any reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with a next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not:
+ /// SERVER_SELECTED_EVT or IO_COMPLETED_EVT
+ void removingRevPtrsHandler();
+
+ /// @brief State handler for PROCESS_TRANS_OK_ST.
+ ///
+ /// Entered from:
+ /// - REMOVING_FWD_RRS_ST with a next event of UPDATE_OK_EVT
+ /// - REMOVING_REV_PTRS_ST with a next event of UPDATE_OK_EVT
+ ///
+ /// Sets the transaction action status to indicate success and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of END_EVT.
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not:
+ /// UPDATE_OK_EVT
+ void processRemoveOkHandler();
+
+ /// @brief State handler for PROCESS_TRANS_FAILED_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - REMOVING_FWD_ADDRS_ST with a next event of UPDATE_FAILED_EVT
+ /// - REMOVING_FWD_RRS_ST with a next event of UPDATE_FAILED_EVT
+ /// - REMOVING_FWD_RRS_ST with a next event of SERVER_IO_ERROR_EVT
+ /// - SELECTING_REV_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - REMOVING_REV_PTRS_ST with a next event of UPDATE_FAILED_EVT
+ ///
+ /// Sets the transaction status to indicate failure and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of FAIL_EVT.
+ ///
+ /// @throw CheckExistsRemoveTransactionError if upon entry next event is not:
+ /// UPDATE_FAILED_EVT
+ void processRemoveFailedHandler();
+
+ /// @brief Builds a DNS request to remove a forward DNS address for a FQDN.
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for removing a
+ /// forward DNS address mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// Prerequisite RRsets:
+ /// 1. An assertion that a DHCID RR exists for that FQDN.
+ ///
+ /// Updates RRsets:
+ /// 1. A delete of the FQDN/IP RR (type A for IPv4, AAAA for IPv6)
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildRemoveFwdAddressRequest();
+
+ /// @brief Builds a DNS request to remove all forward DNS RRs for a FQDN.
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for removing any
+ /// remaining DHCID RR, once all A or AAAA entries for the FQDN
+ /// have been removed. Once constructed, the request is stored as the
+ /// transaction's DNS update request.
+ ///
+ /// Prerequisite RRsets:
+ /// 1. An assertion that no A RRs for the FQDN exist
+ /// 2. An assertion that no AAAA RRs for the FQDN exist
+ ///
+ /// Updates RRsets:
+ /// 1. A delete of any DHCID RR for the FQDN
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildRemoveFwdRRsRequest();
+
+ /// @brief Builds a DNS request to remove a reverse DNS entry for a FQDN
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for removing a
+ /// reverse DNS mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// The request content is adherent to RFC 4703 section 5.5, paragraph 2:
+ ///
+ /// Prerequisite RRsets:
+ /// 1. An assertion that a PTR record matching the client's FQDN exists.
+ ///
+ /// Updates RRsets:
+ /// 1. A delete of all RRs for the FQDN
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildRemoveRevPtrsRequest();
+};
+
+/// @brief Defines a pointer to a CheckExistsRemoveTransaction.
+typedef boost::shared_ptr<CheckExistsRemoveTransaction> CheckExistsRemoveTransactionPtr;
+
+
+} // namespace isc::d2
+} // namespace isc
+#endif
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
#include <d2/nc_remove.h>
#include <d2/simple_add.h>
#include <d2/simple_remove.h>
+#include <d2/check_exists_add.h>
+#include <d2/check_exists_remove.h>
+#include <d2/simple_add_without_dhcid.h>
+#include <d2/simple_remove_without_dhcid.h>
#include <sstream>
#include <iostream>
// the transaction's IO.
NameChangeTransactionPtr trans;
if (next_ncr->getChangeType() == dhcp_ddns::CHG_ADD) {
- if (next_ncr->useConflictResolution()) {
+ switch(next_ncr->getConflictResolutionMode()) {
+ case dhcp_ddns::CHECK_WITH_DHCID:
trans.reset(new NameAddTransaction(io_service_, next_ncr,
forward_domain, reverse_domain,
cfg_mgr_));
- } else {
+ break;
+ case dhcp_ddns::CHECK_EXISTS_WITH_DHCID:
+ trans.reset(new CheckExistsAddTransaction(io_service_, next_ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr_));
+ break;
+ case dhcp_ddns::NO_CHECK_WITHOUT_DHCID:
+ trans.reset(new SimpleAddWithoutDHCIDTransaction(io_service_, next_ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr_));
+ break;
+ default:
+ // dhcp_ddns::NO_CHECK_WITH_DHCID
trans.reset(new SimpleAddTransaction(io_service_, next_ncr,
forward_domain, reverse_domain,
cfg_mgr_));
+ break;
}
} else {
- if (next_ncr->useConflictResolution()) {
+ switch(next_ncr->getConflictResolutionMode()) {
+ case dhcp_ddns::CHECK_WITH_DHCID:
trans.reset(new NameRemoveTransaction(io_service_, next_ncr,
forward_domain, reverse_domain,
cfg_mgr_));
- } else {
+ break;
+ case dhcp_ddns::CHECK_EXISTS_WITH_DHCID:
+ trans.reset(new CheckExistsRemoveTransaction(io_service_, next_ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr_));
+ break;
+ case dhcp_ddns::NO_CHECK_WITHOUT_DHCID:
+ trans.reset(new SimpleRemoveWithoutDHCIDTransaction(io_service_, next_ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr_));
+ break;
+ default:
+ // dhcp_ddns::NO_CHECK_WITH_DHCID
trans.reset(new SimpleRemoveTransaction(io_service_, next_ncr,
forward_domain, reverse_domain,
cfg_mgr_));
+ break;
}
}
--- /dev/null
+// Copyright (C) 2023 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 <d2/simple_add_without_dhcid.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/d2_log.h>
+
+#include <util/buffer.h>
+#include <dns/rdataclass.h>
+
+#include <functional>
+
+namespace isc {
+namespace d2 {
+
+// SimpleAddWithoutDHCIDTransaction states
+const int SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST;
+const int SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST;
+
+// SimpleAddWithoutDHCIDTransaction events
+const int SimpleAddWithoutDHCIDTransaction::FQDN_IN_USE_EVT;
+const int SimpleAddWithoutDHCIDTransaction::FQDN_NOT_IN_USE_EVT;
+
+SimpleAddWithoutDHCIDTransaction::
+SimpleAddWithoutDHCIDTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : NameChangeTransaction(io_service, ncr, forward_domain, reverse_domain,
+ cfg_mgr) {
+ if (ncr->getChangeType() != isc::dhcp_ddns::CHG_ADD) {
+ isc_throw (SimpleAddWithoutDHCIDTransactionError,
+ "SimpleAddWithoutDHCIDTransaction, request type must be CHG_ADD");
+ }
+}
+
+SimpleAddWithoutDHCIDTransaction::~SimpleAddWithoutDHCIDTransaction(){
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::defineEvents() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineEvents();
+
+ // Define SimpleAddWithoutDHCIDTransaction events.
+ defineEvent(FQDN_IN_USE_EVT, "FQDN_IN_USE_EVT");
+ defineEvent(FQDN_NOT_IN_USE_EVT, "FQDN_NOT_IN_USE_EVT");
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::verifyEvents() {
+ // Call superclass implementation first to verify its events. These are
+ // events common to all transactions, and they must be defined.
+ // SELECT_SERVER_EVT
+ // SERVER_SELECTED_EVT
+ // SERVER_IO_ERROR_EVT
+ // NO_MORE_SERVERS_EVT
+ // IO_COMPLETED_EVT
+ // UPDATE_OK_EVT
+ // UPDATE_FAILED_EVT
+ NameChangeTransaction::verifyEvents();
+
+ // Verify SimpleAddWithoutDHCIDTransaction events by attempting to fetch them.
+ getEvent(FQDN_IN_USE_EVT);
+ getEvent(FQDN_NOT_IN_USE_EVT);
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::defineStates() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineStates();
+
+ // Define SimpleAddWithoutDHCIDTransaction states.
+ defineState(READY_ST, "READY_ST",
+ std::bind(&SimpleAddWithoutDHCIDTransaction::readyHandler, this));
+
+ defineState(SELECTING_FWD_SERVER_ST, "SELECTING_FWD_SERVER_ST",
+ std::bind(&SimpleAddWithoutDHCIDTransaction::selectingFwdServerHandler, this));
+
+ defineState(SELECTING_REV_SERVER_ST, "SELECTING_REV_SERVER_ST",
+ std::bind(&SimpleAddWithoutDHCIDTransaction::selectingRevServerHandler, this));
+
+ defineState(REPLACING_FWD_ADDRS_ST, "REPLACING_FWD_ADDRS_ST",
+ std::bind(&SimpleAddWithoutDHCIDTransaction::replacingFwdAddrsHandler, this));
+
+ defineState(REPLACING_REV_PTRS_ST, "REPLACING_REV_PTRS_ST",
+ std::bind(&SimpleAddWithoutDHCIDTransaction::replacingRevPtrsHandler, this));
+
+ defineState(PROCESS_TRANS_OK_ST, "PROCESS_TRANS_OK_ST",
+ std::bind(&SimpleAddWithoutDHCIDTransaction::processAddOkHandler, this));
+
+ defineState(PROCESS_TRANS_FAILED_ST, "PROCESS_TRANS_FAILED_ST",
+ std::bind(&SimpleAddWithoutDHCIDTransaction::processAddFailedHandler, this));
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::verifyStates() {
+ // Call superclass implementation first to verify its states. These are
+ // states common to all transactions, and they must be defined.
+ // READY_ST
+ // SELECTING_FWD_SERVER_ST
+ // SELECTING_REV_SERVER_ST
+ // PROCESS_TRANS_OK_ST
+ // PROCESS_TRANS_FAILED_ST
+ NameChangeTransaction::verifyStates();
+
+ // Verify SimpleAddWithoutDHCIDTransaction states by attempting to fetch them.
+ getStateInternal(REPLACING_FWD_ADDRS_ST);
+ getStateInternal(REPLACING_REV_PTRS_ST);
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::readyHandler() {
+ switch(getNextEvent()) {
+ case START_EVT:
+ if (getForwardDomain()) {
+ // Request includes a forward change, do that first.
+ transition(SELECTING_FWD_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ // Reverse change only, transition accordingly.
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ }
+
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleAddWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::selectingFwdServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getForwardDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleAddWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(REPLACING_FWD_ADDRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::replacingFwdAddrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildReplaceFwdAddressRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Forward Add");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if (rcode == dns::Rcode::NOERROR()) {
+ // We were able to add it. Mark it as done.
+ setForwardChangeCompleted(true);
+
+ // If request calls for reverse update then do that next,
+ // otherwise we can process ok.
+ if (getReverseDomain()) {
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ }
+ } else {
+ // Any other value means cease. Really shouldn't happen.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(SimpleAddWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::selectingRevServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getReverseDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleAddWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(REPLACING_REV_PTRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+
+void
+SimpleAddWithoutDHCIDTransaction::replacingRevPtrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildReplaceRevPtrsRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Reverse Replace");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if (rcode == dns::Rcode::NOERROR()) {
+ // We were able to update the reverse mapping. Mark it as done.
+ setReverseChangeCompleted(true);
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REPLACE_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_REVERSE_REPLACE_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(SimpleAddWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::processAddOkHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_OK_EVT:
+ LOG_INFO(d2_to_dns_logger, DHCP_DDNS_ADD_SUCCEEDED)
+ .arg(getRequestId())
+ .arg(getNcr()->toText());
+ setNcrStatus(dhcp_ddns::ST_COMPLETED);
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleAddWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::processAddFailedHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_FAILED_EVT:
+ case NO_MORE_SERVERS_EVT:
+ setNcrStatus(dhcp_ddns::ST_FAILED);
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_ADD_FAILED)
+ .arg(getRequestId())
+ .arg(transactionOutcomeString());
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleAddWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::buildReplaceFwdAddressRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getForwardDomain());
+
+ // Construct dns::Name from NCR fqdn.
+ dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
+
+ // There are no prerequisites.
+
+ // Build the Update Section. First we delete any pre-existing
+ // FQDN/IP RR. Then we add new one.
+
+ // Create the FQDN/IP 'delete' RR and add it to update section.
+ dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::ANY(),
+ getAddressRRType(), dns::RRTTL(0)));
+
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Now make the new RRs.
+ // Create the TTL based on lease length.
+ dns::RRTTL lease_ttl(getNcr()->getLeaseLength());
+
+ // Create the FQDN/IP 'add' RR and add it to the to update section.
+ // Based on RFC 2136, section 2.5.1
+ update.reset(new dns::RRset(fqdn, dns::RRClass::IN(),
+ getAddressRRType(), lease_ttl));
+
+ addLeaseAddressRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+void
+SimpleAddWithoutDHCIDTransaction::buildReplaceRevPtrsRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getReverseDomain());
+
+ // Create the reverse IP address "FQDN".
+ std::string rev_addr = D2CfgMgr::reverseIpAddress(getNcr()->getIpAddress());
+ dns::Name rev_ip(rev_addr);
+
+ // Create the TTL based on lease length.
+ dns::RRTTL lease_ttl(getNcr()->getLeaseLength());
+
+ // There are no prerequisites.
+
+ // Create the FQDN/IP PTR 'delete' RR for this IP and add it to
+ // the update section.
+ dns::RRsetPtr update(new dns::RRset(rev_ip, dns::RRClass::ANY(),
+ dns::RRType::PTR(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Create the FQDN/IP PTR 'add' RR, add the FQDN as the PTR Rdata
+ // then add it to update section.
+ update.reset(new dns::RRset(rev_ip, dns::RRClass::IN(),
+ dns::RRType::PTR(), lease_ttl));
+ addPtrRdata(update);
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+} // namespace isc::d2
+} // namespace isc
--- /dev/null
+// Copyright (C) 2023 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 SIMPLE_ADD_WITHOUT_DHCID_H
+#define SIMPLE_ADD_WITHOUT_DHCID_H
+
+/// @file simple_add_without_dhcid.h This file defines the class SimpleAddWithoutDHCIDTransaction.
+
+#include <d2srv/nc_trans.h>
+#include <dns/rdata.h>
+
+namespace isc {
+namespace d2 {
+
+/// @brief Thrown if the SimpleAddWithoutDHCIDTransaction encounters a general error.
+class SimpleAddWithoutDHCIDTransactionError : public isc::Exception {
+public:
+ SimpleAddWithoutDHCIDTransactionError(const char* file, size_t line,
+ const char* what) :
+ isc::Exception(file, line, what) { };
+};
+
+/// @brief Embodies the "life-cycle" required to carry out a DDNS Add update
+/// without checking for conflicts. This also does not delete existing DHCID records
+/// or add DHCID records.
+///
+/// SimpleAddWithoutDHCIDTransaction implements a state machine for adding (or replacing) a
+/// forward and/or reverse DNS mapping. This state machine follows a basic
+/// remove and replace scheme, that does not attempt to avoid conflicts
+/// between updating clients. The logic may be paraphrased as follows:
+///
+/// @code
+///
+/// If the request includes a forward change:
+/// Select a forward server
+/// Send the server a request to delete and then add forward entry
+///
+/// If the request includes a reverse change:
+/// Select a reverse server
+/// Send a server a request to delete and then add reverse entry
+///
+/// @endcode
+///
+/// This class derives from NameChangeTransaction from which it inherits
+/// states, events, and methods common to NameChangeRequest processing.
+class SimpleAddWithoutDHCIDTransaction : public NameChangeTransaction {
+public:
+
+ //@{ Additional states needed for SimpleAdd state model.
+ /// @brief State that attempts to add forward address records.
+ static const int REPLACING_FWD_ADDRS_ST = NCT_DERIVED_STATE_MIN + 1;
+
+ /// @brief State that attempts to replace reverse PTR records
+ static const int REPLACING_REV_PTRS_ST = NCT_DERIVED_STATE_MIN + 3;
+ //@}
+
+ //@{ Additional events needed for SimpleAddWithoutDHCID state model.
+ /// @brief Event sent when an add attempt fails with address in use.
+ static const int FQDN_IN_USE_EVT = NCT_DERIVED_EVENT_MIN + 1;
+
+ /// @brief Event sent when replace attempt fails with address not in use.
+ static const int FQDN_NOT_IN_USE_EVT = NCT_DERIVED_EVENT_MIN + 2;
+ //@}
+
+ /// @brief Constructor
+ ///
+ /// Instantiates an Add transaction that is ready to be started.
+ ///
+ /// @param io_service IO service to be used for IO processing
+ /// @param ncr is the NameChangeRequest to fulfill
+ /// @param forward_domain is the domain to use for forward DNS updates
+ /// @param reverse_domain is the domain to use for reverse DNS updates
+ /// @param cfg_mgr pointer to the configuration manager
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransaction error if given request is not a CHG_ADD,
+ /// NameChangeTransaction error for base class construction errors.
+ SimpleAddWithoutDHCIDTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr);
+
+ /// @brief Destructor
+ virtual ~SimpleAddWithoutDHCIDTransaction();
+
+protected:
+ /// @brief Adds events defined by SimpleAddWithoutDHCID to the event set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// events unique to NCR Add transaction processing.
+ ///
+ /// @throw StateModelError if an event definition is invalid or a duplicate.
+ virtual void defineEvents();
+
+ /// @brief Validates the contents of the set of events.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Add transaction's. This tests that the needed events are in the event
+ /// dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyEvents();
+
+ /// @brief Adds states defined by SimpleAddWithoutDHCID to the state set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// states unique to NCR Add transaction processing.
+ ///
+ /// @throw StateModelError if an state definition is invalid or a duplicate.
+ virtual void defineStates();
+
+ /// @brief Validates the contents of the set of states.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Add transaction's states. This tests that the needed states are in the
+ /// state dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyStates();
+
+ /// @brief State handler for READY_ST.
+ ///
+ /// Entered from:
+ /// - INIT_ST with next event of START_EVT
+ ///
+ /// The READY_ST is the state the model transitions into when the inherited
+ /// method, startTransaction() is invoked. This handler, therefore, is the
+ /// entry point into the state model execution.h Its primary task is to
+ /// determine whether to start with a forward DNS change or a reverse DNS
+ /// change.
+ ///
+ /// Transitions to:
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes a forward change.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes only a reverse change.
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransactionError if upon entry next event is not
+ /// START_EVT.
+ void readyHandler();
+
+ /// @brief State handler for SELECTING_FWD_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - REPLACING_FWD_ADDRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the forward domain for the forward
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the forward domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - REPLACING_FWD_ADDRS_ST with next event of SERVER_SELECTED upon
+ /// successful server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingFwdServerHandler();
+
+ /// @brief State handler for SELECTING_REV_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - REPLACING_FWD_ADDRS_ST with next event of SELECT_SERVER_EVT
+ /// - REPLACING_REV_PTRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the reverse domain for the reverse
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the reverse domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - REPLACING_REV_PTRS_ST with next event of SERVER_SELECTED upon
+ /// successful server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingRevServerHandler();
+
+ /// @brief State handler for REPLACING_FWD_ADDRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER with next event of SERVER_SELECTED_EVT
+ ///
+ /// Attempts to replace a forward DNS entry for a given FQDN. If this is
+ /// first invocation of the handler after transitioning into this state,
+ /// any previous update request context is deleted. If next event
+ /// is SERVER_SELECTED_EVT, the handler builds the forward add request,
+ /// schedules an asynchronous send via sendUpdate(), and returns. Note
+ /// that sendUpdate will post NOP_EVT as next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - SELECTING_REV_SERVER_ST with next event of SELECT_SERVER_EVT upon
+ /// successful addition and the request includes a reverse DNS update.
+ ///
+ /// - PROCESS_TRANS_OK_ST with next event of UPDATE_OK_EVT upon successful
+ /// addition and no reverse DNS update is required.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with next event of UPDATE_FAILED_EVT if the
+ /// DNS server rejected the update for any other reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this states with next event of SERVER_SELECTED_EVT_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransactionError if upon entry next event is not
+ /// SERVER_SELECTED_EVT or IO_COMPLETE_EVT.
+ void replacingFwdAddrsHandler();
+
+ /// @brief State handler for REPLACING_REV_PTRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_REV_SERVER_ST with a next event of SERVER_SELECTED_EVT
+ ///
+ /// Attempts to delete and then add a reverse DNS entry for a given FQDN.
+ /// If this is first invocation of the handler after transitioning into
+ /// this state, any previous update request context is deleted. If next
+ /// event is SERVER_SELECTED_EVT, the handler builds the reverse replacement
+ /// add request, schedules an asynchronous send via sendUpdate(), and
+ /// returns. Note that sendUpdate will post NOP_EVT as next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - PROCESS_TRANS_OK_ST with a next event of UPDATE_OK_EVT upon
+ /// successful replacement.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of UPDATE_FAILED_EVT If the
+ /// DNS server rejected the update for any reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with a next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransactionError if upon entry next event is not:
+ /// SERVER_SELECTED_EVT or IO_COMPLETED_EVT
+ void replacingRevPtrsHandler();
+
+ /// @brief State handler for PROCESS_TRANS_OK_ST.
+ ///
+ /// Entered from:
+ /// - REPLACING_FWD_ADDRS_ST with a next event of UPDATE_OK_EVT
+ /// - REPLACING_REV_PTRS_ST with a next event of UPDATE_OK_EVT
+ ///
+ /// Sets the transaction action status to indicate success and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of END_EVT.
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransactionError if upon entry next event is not:
+ /// UPDATE_OK_EVT
+ void processAddOkHandler();
+
+ /// @brief State handler for PROCESS_TRANS_FAILED_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - REPLACING_FWD_ADDRS_ST with a next event of UPDATE_FAILED_EVT
+ /// - SELECTING_REV_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - REPLACING_REV_PTRS_ST with a next event of UPDATE_FAILED_EVT
+ ///
+ /// Sets the transaction status to indicate failure and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of FAIL_EVT.
+ ///
+ /// @throw SimpleAddWithoutDHCIDTransactionError if upon entry next event is not:
+ /// UPDATE_FAILED_EVT
+ void processAddFailedHandler();
+
+ /// @brief Builds a DNS request to add/replace a forward DNS entry for an
+ /// FQDN
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for adding a
+ /// forward DNS mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// Prerequisite RRsets:
+ /// - There are no prerequisites.
+ ///
+ /// Updates RRsets:
+ /// -# A delete of any existing PTR RRs for the lease address
+ /// -# An FQDN/IP RR addition (type A for IPv4, AAAA for IPv6)
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildReplaceFwdAddressRequest();
+
+ /// @brief Builds a DNS request to replace a reverse DNS entry for an FQDN
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for replacing a
+ /// reverse DNS mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// Prerequisite RRsets:
+ /// - There are no prerequisites.
+ ///
+ /// Updates RRsets:
+ /// -# A delete of any existing PTR RRs for the lease address
+ /// -# A PTR RR addition for the lease address and FQDN
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildReplaceRevPtrsRequest();
+};
+
+/// @brief Defines a pointer to a SimpleAddWithoutDHCID.
+typedef boost::shared_ptr<SimpleAddWithoutDHCIDTransaction> SimpleAddWithoutDHCIDTransactionPtr;
+
+} // namespace isc::d2
+} // namespace isc
+#endif
--- /dev/null
+// Copyright (C) 2023 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 <d2/simple_remove_without_dhcid.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/d2_log.h>
+
+#include <functional>
+
+namespace isc {
+namespace d2 {
+
+
+// SimpleRemoveWithoutDHCIDTransaction states
+const int SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST;
+const int SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST;
+
+// SimpleRemoveWithoutDHCIDTransaction events
+// Currently SimpleRemoveWithoutDHCIDTransaction does not define any events.
+
+SimpleRemoveWithoutDHCIDTransaction::
+SimpleRemoveWithoutDHCIDTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : NameChangeTransaction(io_service, ncr, forward_domain, reverse_domain,
+ cfg_mgr) {
+ if (ncr->getChangeType() != isc::dhcp_ddns::CHG_REMOVE) {
+ isc_throw (SimpleRemoveWithoutDHCIDTransactionError,
+ "SimpleRemoveWithoutDHCIDTransaction, request type must be CHG_REMOVE");
+ }
+}
+
+SimpleRemoveWithoutDHCIDTransaction::~SimpleRemoveWithoutDHCIDTransaction(){
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::defineEvents() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineEvents();
+
+ // Define SimpleRemoveWithoutDHCIDTransaction events.
+ // Currently SimpleRemoveWithoutDHCIDTransaction does not define any events.
+ // defineEvent(TBD_EVENT, "TBD_EVT");
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::verifyEvents() {
+ // Call superclass implementation first to verify its events. These are
+ // events common to all transactions, and they must be defined.
+ // SELECT_SERVER_EVT
+ // SERVER_SELECTED_EVT
+ // SERVER_IO_ERROR_EVT
+ // NO_MORE_SERVERS_EVT
+ // IO_COMPLETED_EVT
+ // UPDATE_OK_EVT
+ // UPDATE_FAILED_EVT
+ NameChangeTransaction::verifyEvents();
+
+ // Verify SimpleRemoveWithoutDHCIDTransaction events by attempting to fetch them.
+ // Currently SimpleRemoveWithoutDHCIDTransaction does not define any events.
+ // getEvent(TBD_EVENT);
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::defineStates() {
+ // Call superclass impl first.
+ NameChangeTransaction::defineStates();
+
+ // Define SimpleRemoveWithoutDHCIDTransaction states.
+ defineState(READY_ST, "READY_ST",
+ std::bind(&SimpleRemoveWithoutDHCIDTransaction::readyHandler, this));
+
+ defineState(SELECTING_FWD_SERVER_ST, "SELECTING_FWD_SERVER_ST",
+ std::bind(&SimpleRemoveWithoutDHCIDTransaction::selectingFwdServerHandler,
+ this));
+
+ defineState(SELECTING_REV_SERVER_ST, "SELECTING_REV_SERVER_ST",
+ std::bind(&SimpleRemoveWithoutDHCIDTransaction::selectingRevServerHandler,
+ this));
+
+ defineState(REMOVING_FWD_RRS_ST, "REMOVING_FWD_RRS_ST",
+ std::bind(&SimpleRemoveWithoutDHCIDTransaction::removingFwdRRsHandler,
+ this));
+
+ defineState(REMOVING_REV_PTRS_ST, "REMOVING_REV_PTRS_ST",
+ std::bind(&SimpleRemoveWithoutDHCIDTransaction::removingRevPtrsHandler,
+ this));
+
+ defineState(PROCESS_TRANS_OK_ST, "PROCESS_TRANS_OK_ST",
+ std::bind(&SimpleRemoveWithoutDHCIDTransaction::processRemoveOkHandler,
+ this));
+
+ defineState(PROCESS_TRANS_FAILED_ST, "PROCESS_TRANS_FAILED_ST",
+ std::bind(&SimpleRemoveWithoutDHCIDTransaction::processRemoveFailedHandler,
+ this));
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::verifyStates() {
+ // Call superclass implementation first to verify its states. These are
+ // states common to all transactions, and they must be defined.
+ // READY_ST
+ // SELECTING_FWD_SERVER_ST
+ // SELECTING_REV_SERVER_ST
+ // PROCESS_TRANS_OK_ST
+ // PROCESS_TRANS_FAILED_ST
+ NameChangeTransaction::verifyStates();
+
+ // Verify SimpleRemoveWithoutDHCIDTransaction states by attempting to fetch them.
+ getStateInternal(REMOVING_FWD_RRS_ST);
+ getStateInternal(REMOVING_REV_PTRS_ST);
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::readyHandler() {
+ switch(getNextEvent()) {
+ case START_EVT:
+ if (getForwardDomain()) {
+ // Request includes a forward change, do that first.
+ transition(SELECTING_FWD_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ // Reverse change only, transition accordingly.
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ }
+
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleRemoveWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::selectingFwdServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getForwardDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleRemoveWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(REMOVING_FWD_RRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::removingFwdRRsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case UPDATE_OK_EVT:
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildRemoveFwdRRsRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_FORWARD_REMOVE_RRS_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Forward RR Remove");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ // The RCODE will be based on a value-dependent RRset search,
+ // see RFC 2136 section 3.2.3/3.2.4.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if ((rcode == dns::Rcode::NOERROR()) ||
+ (rcode == dns::Rcode::NXRRSET())) {
+ // We were able to remove them or they were not there (
+ // Rcode of NXRRSET means there are no matching RRsets).
+ // In either case, we consider it success and mark it as done.
+ setForwardChangeCompleted(true);
+
+ // If request calls for reverse update then do that next,
+ // otherwise we can process ok.
+ if (getReverseDomain()) {
+ transition(SELECTING_REV_SERVER_ST, SELECT_SERVER_EVT);
+ } else {
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ }
+ } else {
+ // Any other value means cease.
+ // If we get not authorized should try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_RRS_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_RRS_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_REMOVE_RRS_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ retryTransition(SELECTING_FWD_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(SimpleRemoveWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+
+void
+SimpleRemoveWithoutDHCIDTransaction::selectingRevServerHandler() {
+ switch(getNextEvent()) {
+ case SELECT_SERVER_EVT:
+ // First time through for this transaction, so initialize server
+ // selection.
+ initServerSelection(getReverseDomain());
+ break;
+ case SERVER_IO_ERROR_EVT:
+ // We failed to communicate with current server. Attempt to select
+ // another one below.
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleRemoveWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+
+ // Select the next server from the list of forward servers.
+ if (selectNextServer()) {
+ // We have a server to try.
+ transition(REMOVING_REV_PTRS_ST, SERVER_SELECTED_EVT);
+ }
+ else {
+ // Server list is exhausted, so fail the transaction.
+ transition(PROCESS_TRANS_FAILED_ST, NO_MORE_SERVERS_EVT);
+ }
+}
+
+
+void
+SimpleRemoveWithoutDHCIDTransaction::removingRevPtrsHandler() {
+ if (doOnEntry()) {
+ // Clear the update attempts count on initial transition.
+ clearUpdateAttempts();
+ }
+
+ switch(getNextEvent()) {
+ case SERVER_SELECTED_EVT:
+ try {
+ clearDnsUpdateRequest();
+ buildRemoveRevPtrsRequest();
+ } catch (const std::exception& ex) {
+ // While unlikely, the build might fail if we have invalid
+ // data. Should that be the case, we need to fail the
+ // transaction.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_BUILD_FAILURE)
+ .arg(getRequestId())
+ .arg(getNcr()->toText())
+ .arg(ex.what());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ }
+
+ // Call sendUpdate() to initiate the async send. Note it also sets
+ // next event to NOP_EVT.
+ sendUpdate("Reverse Remove");
+ break;
+
+ case IO_COMPLETED_EVT: {
+ switch (getDnsUpdateStatus()) {
+ case DNSClient::SUCCESS: {
+ // We successfully received a response packet from the server.
+ // The RCODE will be based on a value-dependent RRset search,
+ // see RFC 2136 section 3.2.3/3.2.4.
+ const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
+ if ((rcode == dns::Rcode::NOERROR()) ||
+ (rcode == dns::Rcode::NXRRSET())) {
+ // We were able to remove the reverse mapping or they were
+ // not there (Rcode of NXRRSET means there are no matching
+ // RRsets). In either case, mark it as done.
+ setReverseChangeCompleted(true);
+ transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
+ } else {
+ // Per RFC4703 any other value means cease.
+ // If we get not authorized should try the next server in
+ // the list? @todo This needs some discussion perhaps.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_REJECTED)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn())
+ .arg(rcode.getCode());
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ }
+
+ break;
+ }
+
+ case DNSClient::TIMEOUT:
+ case DNSClient::OTHER:
+ // We couldn't send to the current server, log it and set up
+ // to select the next server for a retry.
+ // @note For now we treat OTHER as an IO error like TIMEOUT. It
+ // is not entirely clear if this is accurate.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_IO_ERROR)
+ .arg(getRequestId())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ case DNSClient::INVALID_RESPONSE:
+ // A response was received but was corrupt. Retry it like an IO
+ // error.
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REVERSE_REMOVE_RESP_CORRUPT)
+ .arg(getRequestId())
+ .arg(getCurrentServer()->toText())
+ .arg(getNcr()->getFqdn());
+
+ // If we are out of retries on this server, we go back and start
+ // all over on a new server.
+ retryTransition(SELECTING_REV_SERVER_ST);
+ break;
+
+ default:
+ // Any other value and we will fail this transaction, something
+ // bigger is wrong.
+ LOG_ERROR(d2_to_dns_logger,
+ DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS)
+ .arg(getRequestId())
+ .arg(getDnsUpdateStatus())
+ .arg(getNcr()->getFqdn())
+ .arg(getCurrentServer()->toText());
+
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ break;
+ } // end switch on dns_status
+
+ break;
+ } // end case IO_COMPLETE_EVT
+
+ default:
+ // Event is invalid.
+ isc_throw(SimpleRemoveWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+
+void
+SimpleRemoveWithoutDHCIDTransaction::processRemoveOkHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_OK_EVT:
+ LOG_INFO(d2_to_dns_logger, DHCP_DDNS_REMOVE_SUCCEEDED)
+ .arg(getRequestId())
+ .arg(getNcr()->toText());
+ setNcrStatus(dhcp_ddns::ST_COMPLETED);
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleRemoveWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::processRemoveFailedHandler() {
+ switch(getNextEvent()) {
+ case UPDATE_FAILED_EVT:
+ case NO_MORE_SERVERS_EVT:
+ case SERVER_IO_ERROR_EVT:
+ setNcrStatus(dhcp_ddns::ST_FAILED);
+ LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_REMOVE_FAILED)
+ .arg(getRequestId())
+ .arg(transactionOutcomeString());
+ endModel();
+ break;
+ default:
+ // Event is invalid.
+ isc_throw(SimpleRemoveWithoutDHCIDTransactionError,
+ "Wrong event for context: " << getContextStr());
+ }
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::buildRemoveFwdRRsRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getForwardDomain());
+
+ // There are no pre-requisites.
+
+ // Build the Update Section
+ // Construct dns::Name from NCR fqdn.
+ dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
+
+ // Build the Update Section.
+
+ // Create the FQDN/IP 'delete' RR and add it to update section.
+ dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::ANY(),
+ getAddressRRType(), dns::RRTTL(0)));
+
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+void
+SimpleRemoveWithoutDHCIDTransaction::buildRemoveRevPtrsRequest() {
+ // Construct an empty request.
+ D2UpdateMessagePtr request = prepNewRequest(getReverseDomain());
+
+ // Create the reverse IP address "FQDN".
+ std::string rev_addr = D2CfgMgr::reverseIpAddress(getNcr()->getIpAddress());
+ dns::Name rev_ip(rev_addr);
+
+ // There are no pre-requisites.
+
+ // Build the Update section.
+
+ // Create the FQDN/IP PTR 'delete' RR for this IP and add it to
+ // the update section.
+ dns::RRsetPtr update(new dns::RRset(rev_ip, dns::RRClass::ANY(),
+ dns::RRType::PTR(), dns::RRTTL(0)));
+ request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
+
+ // Set the transaction's update request to the new request.
+ setDnsUpdateRequest(request);
+}
+
+} // namespace isc::d2
+} // namespace isc
--- /dev/null
+// Copyright (C) 2023 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 SIMPLE_REMOVE_WITHOUT_DHCID_H
+#define SIMPLE_REMOVE_WITHOUT_DHCID_H
+
+/// @file simple_remove_without_dhcid.h This file defines the class SimpleRemoveWithoutDHCIDTransaction.
+
+#include <d2srv/nc_trans.h>
+
+namespace isc {
+namespace d2 {
+
+/// @brief Thrown if the SimpleRemoveWithoutDHCIDTransaction encounters a general error.
+class SimpleRemoveWithoutDHCIDTransactionError : public isc::Exception {
+public:
+ SimpleRemoveWithoutDHCIDTransactionError(const char* file, size_t line,
+ const char* what) :
+ isc::Exception(file, line, what) { };
+};
+
+/// @brief Embodies the "life-cycle" required to carry out a DDNS Remove update without
+/// removing any matching DHCID RRs.
+///
+/// SimpleRemoveWithoutDHCIDTransaction implements a state machine for removing a forward
+/// and/or reverse DNS mappings. This state machine follows a basic
+/// removal scheme, that does not attempt to avoid conflicts between updating
+/// clients. The logic may be paraphrased as follows:
+///
+/// @code
+///
+/// If the request includes a forward change:
+/// Select a forward server
+/// Send the server a request to remove client's specific forward address RR
+/// If it does not succeed
+/// abandon the update
+///
+/// If the request includes a reverse change:
+/// Select a reverse server
+/// Send a server a request to delete the matching PTR RR
+///
+/// @endcode
+///
+/// This class derives from NameChangeTransaction from which it inherits
+/// states, events, and methods common to NameChangeRequest processing.
+class SimpleRemoveWithoutDHCIDTransaction : public NameChangeTransaction {
+public:
+
+ //@{ Additional states needed for SimpleRemove state model.
+ /// @brief State that attempts to remove FQDN/IP RR for an FQDN
+ static const int REMOVING_FWD_RRS_ST = NCT_DERIVED_STATE_MIN + 2;
+
+ /// @brief State that attempts to remove reverse PTR records
+ static const int REMOVING_REV_PTRS_ST = NCT_DERIVED_STATE_MIN + 3;
+ //@}
+
+ //@{ Additional events needed for SimpleRemove state model.
+ /// @brief Event sent when replace attempt to fails with address not in use.
+ /// @todo Currently none have been identified.
+ //@}
+
+ /// @brief Constructor
+ ///
+ /// Instantiates an Remove transaction that is ready to be started.
+ ///
+ /// @param io_service IO service to be used for IO processing
+ /// @param ncr is the NameChangeRequest to fulfill
+ /// @param forward_domain is the domain to use for forward DNS updates
+ /// @param reverse_domain is the domain to use for reverse DNS updates
+ /// @param cfg_mgr pointer to the configuration manager
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransaction error if given request is not a CHG_REMOVE,
+ /// NameChangeTransaction error for base class construction errors.
+ SimpleRemoveWithoutDHCIDTransaction(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr);
+
+ /// @brief Destructor
+ virtual ~SimpleRemoveWithoutDHCIDTransaction();
+
+protected:
+ /// @brief Adds events defined by SimpleRemoveWithoutDHCIDTransaction to the event set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// events unique to NCR Remove transaction processing.
+ ///
+ /// @throw StateModelError if an event definition is invalid or a duplicate.
+ virtual void defineEvents();
+
+ /// @brief Validates the contents of the set of events.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Remove transaction's events. This tests that the needed events are in
+ /// the event dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyEvents();
+
+ /// @brief Adds states defined by SimpleRemoveWithoutDHCIDTransaction to the state set.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then defines the
+ /// states unique to NCR Remove transaction processing.
+ ///
+ /// @throw StateModelError if an state definition is invalid or a duplicate.
+ virtual void defineStates();
+
+ /// @brief Validates the contents of the set of states.
+ ///
+ /// Invokes NameChangeTransaction's implementation and then verifies the
+ /// Remove transaction's states. This tests that the needed states are in
+ /// the state dictionary.
+ ///
+ /// @throw StateModelError if an event value is undefined.
+ virtual void verifyStates();
+
+ /// @brief State handler for READY_ST.
+ ///
+ /// Entered from:
+ /// - INIT_ST with next event of START_EVT
+ ///
+ /// The READY_ST is the state the model transitions into when the inherited
+ /// method, startTransaction() is invoked. This handler, therefore, is the
+ /// entry point into the state model execution. Its primary task is to
+ /// determine whether to start with a forward DNS change or a reverse DNS
+ /// change.
+ ///
+ /// Transitions to:
+ /// - SELECTING_FWD_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes a forward change.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_SELECT_ST if request
+ /// includes only a reverse change.
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransactionError if upon entry next event is not
+ /// START_EVT.
+ void readyHandler();
+
+ /// @brief State handler for SELECTING_FWD_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - REMOVING_FWD_RRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the forward domain for the forward
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the forward domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - REMOVING_FWD_RRS_ST with next event of SERVER_SELECTED upon
+ /// successful server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingFwdServerHandler();
+
+ /// @brief State handler for SELECTING_REV_SERVER_ST.
+ ///
+ /// Entered from:
+ /// - READY_ST with next event of SELECT_SERVER_EVT
+ /// - REMOVING_FWD_RRS_ST with next event of SELECT_SERVER_EVT
+ /// - REMOVING_REV_PTRS_ST with next event of SERVER_IO_ERROR_EVT
+ ///
+ /// Selects the server to be used from the reverse domain for the reverse
+ /// DNS update. If next event is SELECT_SERVER_EVT the handler initializes
+ /// the reverse domain's server selection mechanism and then attempts to
+ /// select the next server. If next event is SERVER_IO_ERROR_EVT then the
+ /// handler simply attempts to select the next server.
+ ///
+ /// Transitions to:
+ /// - REMOVING_REV_PTRS_ST with next event of SERVER_SELECTED upon
+ /// successful server selection
+ ///
+ /// - PROCESS_TRANS_FAILED with next event of NO_MORE_SERVERS_EVT upon
+ /// failure to select a server
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransactionError if upon entry next event is not
+ /// SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT.
+ void selectingRevServerHandler();
+
+ /// @brief State handler for REMOVING_FWD_RRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER_ST with next event SEVER_SELECTED_EVT
+ ///
+ /// Attempts to delete any remaining RRs associated with the given FQDN
+ /// such as the DHCID RR. If this is first invocation of the handler after
+ /// transitioning into this state, any previous update request context is
+ /// deleted and the handler builds the forward remove request. It then
+ /// schedules an asynchronous send via sendUpdate(),
+ /// and returns. Note that sendUpdate will post NOP_EVT as the next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - SELECTING_REV_SERVER_ST with a next event of SELECT_SERVER_EVT upon
+ /// successful completion and the request includes a reverse DNS update.
+ ///
+ /// - PROCESS_TRANS_OK_ST with next event of UPDATE_OK_EVT upon successful
+ /// completion and the request does not include a reverse DNS update.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of UPDATE_FAILED_EVT if the
+ /// DNS server rejected the update for any other reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with a next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of SERVER_IO_ERROR_EVT if
+ /// there we have reached maximum number of retries without success on the
+ /// current server.
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransactionError if upon entry next event is not:
+ /// UPDATE_OK_EVT or IO_COMPLETE_EVT
+ void removingFwdRRsHandler();
+
+ /// @brief State handler for REMOVING_REV_PTRS_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_REV_SERVER_ST with a next event of SERVER_SELECTED_EVT
+ ///
+ /// Attempts to delete a reverse DNS entry for a given FQDN. If this is
+ /// first invocation of the handler after transitioning into this state,
+ /// any previous update request context is deleted. If next event is
+ /// SERVER_SELECTED_EVT, the handler builds the reverse remove request,
+ /// schedules an asynchronous send via sendUpdate(), and then returns.
+ /// Note that sendUpdate will post NOP_EVT as next event.
+ ///
+ /// Posting the NOP_EVT will cause runModel() to suspend execution of
+ /// the state model thus affecting a "wait" for the update IO to complete.
+ /// Update completion occurs via the DNSClient callback operator() method
+ /// inherited from NameChangeTransaction. When invoked this callback will
+ /// post a next event of IO_COMPLETED_EVT and then invoke runModel which
+ /// resumes execution of the state model.
+ ///
+ /// When the handler is invoked with a next event of IO_COMPLETED_EVT,
+ /// the DNS update status is checked and acted upon accordingly:
+ ///
+ /// Transitions to:
+ /// - PROCESS_TRANS_OK_ST with a next event of UPDATE_OK_EVT upon
+ /// successful completion.
+ ///
+ /// - PROCESS_TRANS_FAILED_ST with a next event of UPDATE_FAILED_EVT If the
+ /// DNS server rejected the update for any reason or the IO completed
+ /// with an unrecognized status.
+ ///
+ /// - RE-ENTER this state with a next event of SERVER_SELECTED_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has not been exhausted.
+ ///
+ /// - SELECTING_REV_SERVER_ST with next event of SERVER_IO_ERROR_EVT if
+ /// there was an IO error communicating with the server and the number of
+ /// per server retries has been exhausted.
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransactionError if upon entry next event is not:
+ /// SERVER_SELECTED_EVT or IO_COMPLETED_EVT
+ void removingRevPtrsHandler();
+
+ /// @brief State handler for PROCESS_TRANS_OK_ST.
+ ///
+ /// Entered from:
+ /// - REMOVING_FWD_RRS_ST with a next event of UPDATE_OK_EVT
+ /// - REMOVING_REV_PTRS_ST with a next event of UPDATE_OK_EVT
+ ///
+ /// Sets the transaction action status to indicate success and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of END_EVT.
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransactionError if upon entry next event is not:
+ /// UPDATE_OK_EVT
+ void processRemoveOkHandler();
+
+ /// @brief State handler for PROCESS_TRANS_FAILED_ST.
+ ///
+ /// Entered from:
+ /// - SELECTING_FWD_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - REMOVING_FWD_RRS_ST with a next event of UPDATE_FAILED_EVT
+ /// - REMOVING_FWD_RRS_ST with a next event of SERVER_IO_ERROR_EVT
+ /// - SELECTING_REV_SERVER_ST with a next event of NO_MORE_SERVERS
+ /// - REMOVING_REV_PTRS_ST with a next event of UPDATE_FAILED_EVT
+ ///
+ /// Sets the transaction status to indicate failure and ends
+ /// model execution.
+ ///
+ /// Transitions to:
+ /// - END_ST with a next event of FAIL_EVT.
+ ///
+ /// @throw SimpleRemoveWithoutDHCIDTransactionError if upon entry next event is not:
+ /// UPDATE_FAILED_EVT
+ void processRemoveFailedHandler();
+
+ /// @brief Builds a DNS request to remove forward DNS RR for a FQDN.
+ ///
+ /// Constructs a DNS update request, based upon the NCR, to remove the
+ /// forward DNS (A or AAAA) RR. Once constructed, the request
+ /// is stored as the transaction's DNS update request.
+ ///
+ /// Prerequisite RRsets:
+ /// - None
+ ///
+ /// Updates RRsets:
+ /// -# A delete of FQDN/IP RR for the FQDN
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildRemoveFwdRRsRequest();
+
+ /// @brief Builds a DNS request to remove a reverse DNS entry for a FQDN
+ ///
+ /// Constructs a DNS update request, based upon the NCR, for removing a
+ /// reverse DNS mapping. Once constructed, the request is stored as
+ /// the transaction's DNS update request.
+ ///
+ /// Prerequisite RRsets:
+ /// - None
+ ///
+ /// Updates RRsets:
+ /// -# A delete of PTR RR for the IP
+ ///
+ /// @throw This method does not throw but underlying methods may.
+ void buildRemoveRevPtrsRequest();
+};
+
+/// @brief Defines a pointer to a SimpleRemoveWithoutDHCIDTransaction.
+typedef boost::shared_ptr<SimpleRemoveWithoutDHCIDTransaction> SimpleRemoveWithoutDHCIDTransactionPtr;
+
+
+} // namespace isc::d2
+} // namespace isc
+#endif
d2_unittests_SOURCES += d2_command_unittest.cc
d2_unittests_SOURCES += simple_add_unittests.cc
d2_unittests_SOURCES += simple_remove_unittests.cc
+d2_unittests_SOURCES += simple_add_without_dhcid_unittests.cc
+d2_unittests_SOURCES += simple_remove_without_dhcid_unittests.cc
+d2_unittests_SOURCES += check_exists_add_unittests.cc
+d2_unittests_SOURCES += check_exists_remove_unittests.cc
d2_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
d2_unittests_LDFLAGS = $(AM_LDFLAGS) $(CRYPTO_LDFLAGS)
--- /dev/null
+// Copyright (C) 2023 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 <asiolink/io_service.h>
+#include <d2/check_exists_add.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/testutils/nc_test_utils.h>
+#include <dns/messagerenderer.h>
+
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::d2;
+using namespace isc::util;
+
+namespace {
+
+/// @brief Test class derived from CheckExistsAddTransaction to provide visibility
+// to protected methods.
+class CheckExistsAddStub : public CheckExistsAddTransaction {
+public:
+ CheckExistsAddStub(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : CheckExistsAddTransaction(io_service, ncr, forward_domain, reverse_domain,
+ cfg_mgr),
+ simulate_send_exception_(false),
+ simulate_build_request_exception_(false) {
+ }
+
+ virtual ~CheckExistsAddStub() {
+ }
+
+ /// @brief Simulates sending update requests to the DNS server
+ ///
+ /// This method simulates the initiation of an asynchronous send of
+ /// a DNS update request. It overrides the actual sendUpdate method in
+ /// the base class, thus avoiding an actual send, yet still increments
+ /// the update attempt count and posts a next event of NOP_EVT.
+ ///
+ /// It will also simulate an exception-based failure of sendUpdate, if
+ /// the simulate_send_exception_ flag is true.
+ ///
+ /// @param comment Parameter is unused, but present in base class method.
+ ///
+ virtual void sendUpdate(const std::string& /*comment*/) {
+ if (simulate_send_exception_) {
+ // Make the flag a one-shot by resetting it.
+ simulate_send_exception_ = false;
+ // Transition to failed.
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ return;
+ }
+
+ // Update send attempt count and post a NOP_EVT.
+ setUpdateAttempts(getUpdateAttempts() + 1);
+ postNextEvent(StateModel::NOP_EVT);
+ }
+
+ /// @brief Prepares the initial D2UpdateMessage
+ ///
+ /// This method overrides the NameChangeTransaction implementation to
+ /// provide the ability to simulate an exception throw in the build
+ /// request logic.
+ /// If the one-shot flag, simulate_build_request_exception_ is true,
+ /// this method will throw an exception, otherwise it will invoke the
+ /// base class method, providing normal functionality.
+ ///
+ /// For parameter description see the NameChangeTransaction implementation.
+ virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain) {
+ if (simulate_build_request_exception_) {
+ simulate_build_request_exception_ = false;
+ isc_throw (CheckExistsAddTransactionError,
+ "Simulated build requests exception");
+ }
+
+ return (NameChangeTransaction::prepNewRequest(domain));
+ }
+
+ /// @brief Simulates receiving a response
+ ///
+ /// This method simulates the completion of a DNSClient send. This allows
+ /// the state handler logic devoted to dealing with IO completion to be
+ /// fully exercised without requiring any actual IO. The two primary
+ /// pieces of information gleaned from IO completion are the DNSClient
+ /// status which indicates whether or not the IO exchange was successful
+ /// and the rcode, which indicates the server's reaction to the request.
+ ///
+ /// This method updates the transaction's DNS status value to that of the
+ /// given parameter, and then constructs and DNS update response message
+ /// with the given rcode value. To complete the simulation it then posts
+ /// a next event of IO_COMPLETED_EVT.
+ ///
+ /// @param status simulated DNSClient status
+ /// @param rcode simulated server response code
+ void fakeResponse(const DNSClient::Status& status,
+ const dns::Rcode& rcode) {
+ // Set the DNS update status. This is normally set in
+ // DNSClient IO completion handler.
+ setDnsUpdateStatus(status);
+
+ // Construct an empty message with the given Rcode.
+ D2UpdateMessagePtr msg(new D2UpdateMessage(D2UpdateMessage::OUTBOUND));
+ msg->setRcode(rcode);
+
+ // Set the update response to the message.
+ setDnsUpdateResponse(msg);
+
+ // Post the IO completion event.
+ postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+ }
+
+ /// @brief Selects the first forward server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectFwdServer() {
+ if (getForwardDomain()) {
+ initServerSelection(getForwardDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief Selects the first reverse server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectRevServer() {
+ if (getReverseDomain()) {
+ initServerSelection(getReverseDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief One-shot flag which will simulate sendUpdate failure if true.
+ bool simulate_send_exception_;
+
+ /// @brief One-shot flag which will simulate an exception when sendUpdate
+ /// failure if true.
+ bool simulate_build_request_exception_;
+
+ using StateModel::postNextEvent;
+ using StateModel::setState;
+ using StateModel::initDictionaries;
+ using CheckExistsAddTransaction::defineEvents;
+ using CheckExistsAddTransaction::verifyEvents;
+ using CheckExistsAddTransaction::defineStates;
+ using CheckExistsAddTransaction::verifyStates;
+ using CheckExistsAddTransaction::readyHandler;
+ using CheckExistsAddTransaction::selectingFwdServerHandler;
+ using CheckExistsAddTransaction::getCurrentServer;
+ using CheckExistsAddTransaction::addingFwdAddrsHandler;
+ using CheckExistsAddTransaction::setDnsUpdateStatus;
+ using CheckExistsAddTransaction::replacingFwdAddrsHandler;
+ using CheckExistsAddTransaction::selectingRevServerHandler;
+ using CheckExistsAddTransaction::replacingRevPtrsHandler;
+ using CheckExistsAddTransaction::processAddOkHandler;
+ using CheckExistsAddTransaction::processAddFailedHandler;
+ using CheckExistsAddTransaction::buildAddFwdAddressRequest;
+ using CheckExistsAddTransaction::buildReplaceFwdAddressRequest;
+ using CheckExistsAddTransaction::buildReplaceRevPtrsRequest;
+};
+
+typedef boost::shared_ptr<CheckExistsAddStub> CheckExistsAddStubPtr;
+
+/// @brief Test fixture for testing CheckExistsAddTransaction
+///
+/// Note this class uses CheckExistsAddStub class to exercise non-public
+/// aspects of CheckExistsAddTransaction.
+class CheckExistsAddTransactionTest : public TransactionTest {
+public:
+
+ CheckExistsAddTransactionTest() {
+ }
+
+ virtual ~CheckExistsAddTransactionTest() {
+ }
+
+ /// @brief Creates a transaction which requests an IPv4 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv4 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ CheckExistsAddStubPtr makeTransaction4(int change_mask = FWD_AND_REV_CHG) {
+ // Creates IPv4 remove request, forward, and reverse domains.
+ setupForIPv4Transaction(dhcp_ddns::CHG_ADD, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (CheckExistsAddStubPtr(new CheckExistsAddStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_, cfg_mgr_)));
+ }
+
+ /// @brief Creates a transaction which requests an IPv6 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv6 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ CheckExistsAddStubPtr makeTransaction6(int change_mask = FWD_AND_REV_CHG) {
+ // Creates IPv6 remove request, forward, and reverse domains.
+ setupForIPv6Transaction(dhcp_ddns::CHG_ADD, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (CheckExistsAddStubPtr(new CheckExistsAddStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_,
+ cfg_mgr_)));
+ }
+
+ /// @brief Create a test transaction at a known point in the state model.
+ ///
+ /// Method prepares a new test transaction and sets its state and next
+ /// event values to those given. This makes the transaction appear to
+ /// be at that point in the state model without having to transition it
+ /// through prerequisite states. It also provides the ability to set
+ /// which change directions are requested: forward change only, reverse
+ /// change only, or both.
+ ///
+ /// @param state value to set as the current state
+ /// @param event value to post as the next event
+ /// @param change_mask determines which change directions are requested
+ /// @param family selects between an IPv4 (AF_INET) and IPv6 (AF_INET6)
+ /// transaction.
+ CheckExistsAddStubPtr prepHandlerTest(unsigned int state, unsigned int event,
+ unsigned int change_mask = FWD_AND_REV_CHG,
+ short family = AF_INET) {
+ CheckExistsAddStubPtr name_add = (family == AF_INET ?
+ makeTransaction4(change_mask) :
+ makeTransaction4(change_mask));
+ name_add->initDictionaries();
+ name_add->postNextEvent(event);
+ name_add->setState(state);
+ return (name_add);
+ }
+};
+
+/// @brief Tests CheckExistsAddTransaction construction.
+/// This test verifies that:
+/// 1. Construction with invalid type of request
+/// 2. Valid construction functions properly
+TEST(CheckExistsAddTransaction, construction) {
+ asiolink::IOServicePtr io_service(new isc::asiolink::IOService());
+ D2CfgMgrPtr cfg_mgr(new D2CfgMgr());
+
+ const char* msg_str =
+ "{"
+ " \"change-type\" : 1 , "
+ " \"forward-change\" : true , "
+ " \"reverse-change\" : true , "
+ " \"fqdn\" : \"example.com.\" , "
+ " \"ip-address\" : \"192.168.2.1\" , "
+ " \"dhcid\" : \"0102030405060708\" , "
+ " \"lease-expires-on\" : \"20130121132405\" , "
+ " \"lease-length\" : 1300, "
+ " \"conflict-resolution-mode\" : \"check-exists-with-dhcid\""
+ "}";
+
+ dhcp_ddns::NameChangeRequestPtr ncr;
+ DnsServerInfoStoragePtr servers;
+ DdnsDomainPtr forward_domain;
+ DdnsDomainPtr reverse_domain;
+ DdnsDomainPtr empty_domain;
+
+ ASSERT_NO_THROW(ncr = dhcp_ddns::NameChangeRequest::fromJSON(msg_str));
+ ASSERT_NO_THROW(forward_domain.reset(new DdnsDomain("*", servers)));
+ ASSERT_NO_THROW(reverse_domain.reset(new DdnsDomain("*", servers)));
+
+ // Verify that construction with wrong change type fails.
+ EXPECT_THROW(CheckExistsAddTransaction(io_service, ncr,
+ forward_domain, reverse_domain, cfg_mgr),
+ CheckExistsAddTransactionError);
+
+ // Verify that a valid construction attempt works.
+ ncr->setChangeType(isc::dhcp_ddns::CHG_ADD);
+ EXPECT_NO_THROW(CheckExistsAddTransaction(io_service, ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr));
+}
+
+/// @brief Tests event and state dictionary construction and verification.
+TEST_F(CheckExistsAddTransactionTest, dictionaryCheck) {
+ CheckExistsAddStubPtr name_add;
+ ASSERT_NO_THROW(name_add = makeTransaction4());
+ // Verify that the event and state dictionary validation fails prior
+ // dictionary construction.
+ ASSERT_THROW(name_add->verifyEvents(), StateModelError);
+ ASSERT_THROW(name_add->verifyStates(), StateModelError);
+
+ // Construct both dictionaries.
+ ASSERT_NO_THROW(name_add->defineEvents());
+ ASSERT_NO_THROW(name_add->defineStates());
+
+ // Verify both event and state dictionaries now pass validation.
+ ASSERT_NO_THROW(name_add->verifyEvents());
+ ASSERT_NO_THROW(name_add->verifyStates());
+}
+
+/// @brief Tests construction of a DNS update request for adding a forward
+/// dns entry.
+TEST_F(CheckExistsAddTransactionTest, buildForwardAdd) {
+ // Create a IPv4 forward add transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ CheckExistsAddStubPtr name_add;
+ ASSERT_NO_THROW(name_add = makeTransaction4());
+ ASSERT_NO_THROW(name_add->buildAddFwdAddressRequest());
+ checkAddFwdAddressRequest(*name_add);
+
+ // Create a IPv6 forward add transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_add = makeTransaction6());
+ ASSERT_NO_THROW(name_add->buildAddFwdAddressRequest());
+ checkAddFwdAddressRequest(*name_add);
+}
+
+/// @brief Tests construction of a DNS update request for replacing a forward
+/// dns entry.
+TEST_F(CheckExistsAddTransactionTest, buildReplaceFwdAddressRequest) {
+ // Create a IPv4 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ CheckExistsAddStubPtr name_add;
+ ASSERT_NO_THROW(name_add = makeTransaction4());
+ ASSERT_NO_THROW(name_add->buildReplaceFwdAddressRequest());
+ checkExistsReplaceFwdAddressRequest(*name_add);
+
+ // Create a IPv6 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_add = makeTransaction6());
+ ASSERT_NO_THROW(name_add->buildReplaceFwdAddressRequest());
+ checkExistsReplaceFwdAddressRequest(*name_add);
+}
+
+/// @brief Tests the construction of a DNS update request for replacing a
+/// reverse dns entry.
+TEST_F(CheckExistsAddTransactionTest, buildReplaceRevPtrsRequest) {
+ // Create a IPv4 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ CheckExistsAddStubPtr name_add;
+ ASSERT_NO_THROW(name_add = makeTransaction4());
+ ASSERT_NO_THROW(name_add->buildReplaceRevPtrsRequest());
+ checkReplaceRevPtrsRequest(*name_add);
+
+ // Create a IPv6 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_add = makeTransaction6());
+ ASSERT_NO_THROW(name_add->buildReplaceRevPtrsRequest());
+ checkReplaceRevPtrsRequest(*name_add);
+}
+
+// Tests the readyHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is START_EVT and request includes only a forward change
+// 2. Posted event is START_EVT and request includes both a forward and a
+// reverse change
+// 3. Posted event is START_EVT and request includes only a reverse change
+// 4. Posted event is invalid
+//
+TEST_F(CheckExistsAddTransactionTest, readyHandler) {
+ CheckExistsAddStubPtr name_add;
+
+ // Create a transaction which includes only a forward change.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FORWARD_CHG));
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_add->readyHandler());
+
+ // Verify that a request requiring only a forward change, transitions to
+ // selecting a forward server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_add->getNextEvent());
+
+
+ // Create a transaction which includes both a forward and a reverse change.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FWD_AND_REV_CHG));
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_add->readyHandler());
+
+ // Verify that a request requiring both forward and reverse, starts with
+ // the forward change by transitioning to selecting a forward server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_add->getNextEvent());
+
+
+ // Create and prep a reverse only transaction.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, REVERSE_CHG));
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_add->readyHandler());
+
+ // Verify that a request requiring only a reverse change, transitions to
+ // selecting a reverse server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_add->getNextEvent());
+
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::NOP_EVT));
+
+ // Running the readyHandler should throw.
+ EXPECT_THROW(name_add->readyHandler(), CheckExistsAddTransactionError);
+}
+
+// Tests the selectingFwdServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(CheckExistsAddTransactionTest, selectingFwdServerHandler) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT));
+
+ // Call selectingFwdServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_add->getForwardDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ // Run selectingFwdServerHandler.
+ ASSERT_NO_THROW(name_add->selectingFwdServerHandler())
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_add->getCurrentServer())
+ << " num_servers: " << num_servers << " selections: " << i;
+
+ // Verify that we transitioned correctly.
+ ASSERT_EQ(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ name_add->getCurrState())
+ << " num_servers: " << num_servers << " selections: " << i;
+ ASSERT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent())
+ << " num_servers: " << num_servers << " selections: " << i;
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_add->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT))
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_add->selectingFwdServerHandler());
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NO_MORE_SERVERS_EVT,
+ name_add->getNextEvent());
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_FWD_SERVER_ST,
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->selectingFwdServerHandler(),
+ CheckExistsAddTransactionError);
+}
+
+// ************************ addingFwdAddrHandler Tests *****************
+
+// Tests that addingFwdAddrsHandler rejects invalid events.
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_InvalidEvent) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->addingFwdAddrsHandler(),
+ CheckExistsAddTransactionError);
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_FwdOnlyAddOK) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_add->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Run addingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkAddFwdAddressRequest(*name_add);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ EXPECT_EQ(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NOP_EVT,
+ name_add->getNextEvent());
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run addingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Forward completion should be true, reverse should be false.
+ EXPECT_TRUE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_fwdAndRevAddOK) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FWD_AND_REV_CHG));
+
+ // Run addingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run addingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Forward change completion should be true, reverse flag should be false.
+ EXPECT_TRUE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since the request also includes a reverse change we should
+ // be poised to start it. Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the FQDN is in use.
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_FqdnInUse) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT));
+
+ // Run addingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Simulate receiving a FQDN in use response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::YXDOMAIN());
+
+ // Run addingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since the FQDN is in use, per the RFC we must attempt to replace it.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(CheckExistsAddTransaction::FQDN_IN_USE_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_OtherRcode) {
+ CheckExistsAddStubPtr name_add;
+
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+ // Run addingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error or FQDN in use is failure. Arbitrarily choosing refused.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run addingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_Timeout) {
+ CheckExistsAddStubPtr name_add;
+
+ // Create and prep a transaction, poised to run the handler.
+ // The log message issued when this test succeeds, displays the
+ // selected server, so we need to select a server before running this
+ // test.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run addingFwdAddrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Simulate a server IO timeout.
+ name_add->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run addingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsAddTransaction::SELECTING_FWD_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_add->getNextEvent());
+ }
+ }
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_InvalidResponse) {
+ CheckExistsAddStubPtr name_add;
+
+ // Create and prep a transaction, poised to run the handler.
+ // The log message issued when this test succeeds, displays the
+ // selected server, so we need to select a server before running this
+ // test.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run addingFwdAddrsHandler to construct send the request.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Simulate a corrupt server response.
+ name_add->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run addingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsAddTransaction::SELECTING_FWD_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_add->getNextEvent());
+ }
+ }
+
+}
+
+// ************************ replacingFwdAddrHandler Tests *****************
+
+// Tests that replacingFwdAddrsHandler rejects invalid events.
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_InvalidEvent) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->replacingFwdAddrsHandler(),
+ CheckExistsAddTransactionError);
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is FQDN_IN_USE_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_FwdOnlyAddOK) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ CheckExistsAddTransaction::
+ FQDN_IN_USE_EVT, FORWARD_CHG));
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_add->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkExistsReplaceFwdAddressRequest(*name_add);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ EXPECT_EQ(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NOP_EVT,
+ name_add->getNextEvent());
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Forward completion should be true, reverse should be false.
+ EXPECT_TRUE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_FwdOnlyAddOK2) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Forward completion should be true, reverse should be false.
+ EXPECT_TRUE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is FQDN_IN_USE_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_FwdAndRevAddOK) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ CheckExistsAddTransaction::
+ FQDN_IN_USE_EVT, FWD_AND_REV_CHG));
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Forward change completion should be true, reverse flag should be false.
+ EXPECT_TRUE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since the request also includes a reverse change we should
+ // be poised to start it. Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_add->getNextEvent());
+}
+
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is FQDN_IN_USE_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the FQDN is NOT in use.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_FqdnNotInUse) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ CheckExistsAddTransaction::
+ FQDN_IN_USE_EVT, FWD_AND_REV_CHG));
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate receiving a FQDN not in use response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXDOMAIN());
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since the FQDN is no longer in use, per the RFC, try to add it.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent());
+}
+
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_OtherRcode) {
+ CheckExistsAddStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ CheckExistsAddTransaction::
+ FQDN_IN_USE_EVT, FWD_AND_REV_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error or FQDN in use is failure. Arbitrarily choosing refused.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is FQDN_IN_USE_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_Timeout) {
+ CheckExistsAddStubPtr name_add;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ CheckExistsAddTransaction::
+ FQDN_IN_USE_EVT, FWD_AND_REV_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingFwdAddrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate a server IO timeout.
+ name_add->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsAddTransaction::SELECTING_FWD_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_add->getNextEvent());
+ }
+ }
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is FQDN_IN_USE_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_CorruptResponse) {
+ CheckExistsAddStubPtr name_add;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ CheckExistsAddTransaction::
+ FQDN_IN_USE_EVT, FWD_AND_REV_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingFwdAddrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate a corrupt server response.
+ name_add->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsAddTransaction::SELECTING_FWD_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_add->getNextEvent());
+ }
+ }
+}
+
+// Tests the selectingRevServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(CheckExistsAddTransactionTest, selectingRevServerHandler) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT));
+
+ // Call selectingRevServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_add->getReverseDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ // Run selectingRevServerHandler.
+ ASSERT_NO_THROW(name_add->selectingRevServerHandler())
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_add->getCurrentServer())
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+
+ // Verify that we transitioned correctly.
+ ASSERT_EQ(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ name_add->getCurrState())
+ << " num_servers: " << num_servers << " selections: " << i;
+ ASSERT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent())
+ << " num_servers: " << num_servers << " selections: " << i;
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_add->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT))
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_add->selectingRevServerHandler());
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NO_MORE_SERVERS_EVT,
+ name_add->getNextEvent());
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_REV_SERVER_ST,
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->selectingRevServerHandler(),
+ CheckExistsAddTransactionError);
+}
+
+//************************** replacingRevPtrsHandler tests *****************
+
+// Tests that replacingRevPtrsHandler rejects invalid events.
+TEST_F(CheckExistsAddTransactionTest, replacingRevPtrsHandler_InvalidEvent) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->replacingRevPtrsHandler(),
+ CheckExistsAddTransactionError);
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingRevPtrsHandler_FwdOnlyAddOK) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ CheckExistsAddTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_add->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkReplaceRevPtrsRequest(*name_add);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ EXPECT_EQ(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NOP_EVT,
+ name_add->getNextEvent());
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Forward completion should be false, reverse should be true.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_TRUE(name_add->getReverseChangeCompleted());
+
+ // Since it is a reverse change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingRevPtrsHandler_OtherRcode) {
+ CheckExistsAddStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ CheckExistsAddTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectRevServer());
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error is failure. Arbitrarily choosing refused.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingRevPtrsHandler_Timeout) {
+ CheckExistsAddStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ CheckExistsAddTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Simulate a server IO timeout.
+ name_add->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsAddTransaction::SELECTING_REV_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_add->getNextEvent());
+ }
+ }
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingRevPtrsHandler_CorruptResponse) {
+ CheckExistsAddStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ CheckExistsAddTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Simulate a server corrupt response.
+ name_add->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_add->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsAddTransaction::SELECTING_REV_SERVER_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_add->getNextEvent());
+ }
+ }
+}
+
+// Tests the processAddOkHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_OK_EVT
+// 2. Posted event is invalid
+//
+TEST_F(CheckExistsAddTransactionTest, processAddOkHandler) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT));
+ // Run processAddOkHandler.
+ EXPECT_NO_THROW(name_add->processAddOkHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_COMPLETED, name_add->getNcrStatus());
+
+ // Verify that the model has ended.
+ EXPECT_EQ(StateModel::END_ST, name_add->getCurrState());
+ EXPECT_EQ(StateModel::END_EVT, name_add->getNextEvent());
+
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ StateModel::NOP_EVT));
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->processAddOkHandler(), CheckExistsAddTransactionError);
+}
+
+// Tests the processAddFailedHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_FAILED_EVT
+// 2. Posted event is invalid
+//
+TEST_F(CheckExistsAddTransactionTest, processAddFailedHandler) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::
+ PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT));
+ // Run processAddFailedHandler.
+ EXPECT_NO_THROW(name_add->processAddFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_add->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ EXPECT_EQ(StateModel::END_ST, name_add->getCurrState());
+ EXPECT_EQ(StateModel::END_EVT, name_add->getNextEvent());
+
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(NameChangeTransaction::
+ PROCESS_TRANS_FAILED_ST,
+ StateModel::NOP_EVT));
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->processAddFailedHandler(), CheckExistsAddTransactionError);
+}
+
+// Tests the processAddFailedHandler functionality.
+// It verifies behavior for posted event of NO_MORE_SERVERS_EVT.
+TEST_F(CheckExistsAddTransactionTest, processAddFailedHandler_NoMoreServers) {
+ CheckExistsAddStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::
+ NO_MORE_SERVERS_EVT));
+
+ // Run processAddFailedHandler.
+ EXPECT_NO_THROW(name_remove->processAddFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ EXPECT_EQ(StateModel::END_ST, name_remove->getCurrState());
+ EXPECT_EQ(StateModel::END_EVT, name_remove->getNextEvent());
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_sendUpdateException) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ name_add->simulate_send_exception_ = true;
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ ASSERT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_SendUpdateException) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ name_add->simulate_send_exception_ = true;
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ ASSERT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingRevPtrHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingRevPtrsHandler_SendUpdateException) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ name_add->simulate_send_exception_ = true;
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ ASSERT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(CheckExistsAddTransactionTest, addingFwdAddrsHandler_BuildRequestException) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::ADDING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Set the one-shot exception simulation flag.
+ name_add->simulate_build_request_exception_ = true;
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_add->addingFwdAddrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_add->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingFwdAddrsHandler_BuildRequestException) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Set the one-shot exception simulation flag.
+ name_add->simulate_build_request_exception_ = true;
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_add->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+
+// Tests replacingRevPtrHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(CheckExistsAddTransactionTest, replacingRevPtrsHandler_BuildRequestException) {
+ CheckExistsAddStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_add =
+ prepHandlerTest(CheckExistsAddTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Set the one-shot exception simulation flag.
+ name_add->simulate_build_request_exception_ = true;
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_add->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_add->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_add->getNextEvent());
+}
+
+
+}
--- /dev/null
+// Copyright (C) 2023 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 <asiolink/io_service.h>
+#include <d2/check_exists_remove.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/testutils/nc_test_utils.h>
+#include <dns/messagerenderer.h>
+
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::d2;
+using namespace isc::util;
+
+
+namespace {
+
+/// @brief Test class derived from CheckExistsRemoveTransaction to provide visibility
+// to protected methods.
+class CheckExistsRemoveStub : public CheckExistsRemoveTransaction {
+public:
+ CheckExistsRemoveStub(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : CheckExistsRemoveTransaction(io_service, ncr, forward_domain,
+ reverse_domain, cfg_mgr),
+ simulate_send_exception_(false),
+ simulate_build_request_exception_(false) {
+ }
+
+ virtual ~CheckExistsRemoveStub() {
+ }
+
+ /// @brief Simulates sending update requests to the DNS server
+ ///
+ /// This method simulates the initiation of an asynchronous send of
+ /// a DNS update request. It overrides the actual sendUpdate method in
+ /// the base class, thus avoiding an actual send, yet still increments
+ /// the update attempt count and posts a next event of NOP_EVT.
+ ///
+ /// It will also simulate an exception-based failure of sendUpdate, if
+ /// the simulate_send_exception_ flag is true.
+ ///
+ /// @param comment Parameter is unused, but present in base class method
+ ///
+ virtual void sendUpdate(const std::string& /* comment */) {
+ if (simulate_send_exception_) {
+ // Make the flag a one-shot by resetting it.
+ simulate_send_exception_ = false;
+ // Transition to failed.
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ return;
+ }
+
+ // Update send attempt count and post a NOP_EVT.
+ setUpdateAttempts(getUpdateAttempts() + 1);
+ postNextEvent(StateModel::NOP_EVT);
+ }
+
+ /// @brief Prepares the initial D2UpdateMessage
+ ///
+ /// This method overrides the NameChangeTransaction implementation to
+ /// provide the ability to simulate an exception throw in the build
+ /// request logic.
+ /// If the one-shot flag, simulate_build_request_exception_ is true,
+ /// this method will throw an exception, otherwise it will invoke the
+ /// base class method, providing normal functionality.
+ ///
+ /// For parameter description see the NameChangeTransaction implementation.
+ virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain) {
+ if (simulate_build_request_exception_) {
+ simulate_build_request_exception_ = false;
+ isc_throw (CheckExistsRemoveTransactionError,
+ "Simulated build requests exception");
+ }
+
+ return (NameChangeTransaction::prepNewRequest(domain));
+ }
+
+ /// @brief Simulates receiving a response
+ ///
+ /// This method simulates the completion of a DNSClient send. This allows
+ /// the state handler logic devoted to dealing with IO completion to be
+ /// fully exercised without requiring any actual IO. The two primary
+ /// pieces of information gleaned from IO completion are the DNSClient
+ /// status which indicates whether or not the IO exchange was successful
+ /// and the rcode, which indicates the server's reaction to the request.
+ ///
+ /// This method updates the transaction's DNS status value to that of the
+ /// given parameter, and then constructs and DNS update response message
+ /// with the given rcode value. To complete the simulation it then posts
+ /// a next event of IO_COMPLETED_EVT.
+ ///
+ /// @param status simulated DNSClient status
+ /// @param rcode simulated server response code
+ void fakeResponse(const DNSClient::Status& status,
+ const dns::Rcode& rcode) {
+ // Set the DNS update status. This is normally set in
+ // DNSClient IO completion handler.
+ setDnsUpdateStatus(status);
+
+ // Construct an empty message with the given Rcode.
+ D2UpdateMessagePtr msg(new D2UpdateMessage(D2UpdateMessage::OUTBOUND));
+ msg->setRcode(rcode);
+
+ // Set the update response to the message.
+ setDnsUpdateResponse(msg);
+
+ // Post the IO completion event.
+ postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+ }
+
+ /// @brief Selects the first forward server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectFwdServer() {
+ if (getForwardDomain()) {
+ initServerSelection(getForwardDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief Selects the first reverse server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectRevServer() {
+ if (getReverseDomain()) {
+ initServerSelection(getReverseDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief One-shot flag which will simulate sendUpdate failure if true.
+ bool simulate_send_exception_;
+
+ /// @brief One-shot flag which will simulate an exception when sendUpdate
+ /// failure if true.
+ bool simulate_build_request_exception_;
+
+ using StateModel::postNextEvent;
+ using StateModel::setState;
+ using StateModel::initDictionaries;
+ using CheckExistsRemoveTransaction::defineEvents;
+ using CheckExistsRemoveTransaction::verifyEvents;
+ using CheckExistsRemoveTransaction::defineStates;
+ using CheckExistsRemoveTransaction::verifyStates;
+ using CheckExistsRemoveTransaction::readyHandler;
+ using CheckExistsRemoveTransaction::selectingFwdServerHandler;
+ using CheckExistsRemoveTransaction::getCurrentServer;
+ using CheckExistsRemoveTransaction::removingFwdAddrsHandler;
+ using CheckExistsRemoveTransaction::setDnsUpdateStatus;
+ using CheckExistsRemoveTransaction::removingFwdRRsHandler;
+ using CheckExistsRemoveTransaction::selectingRevServerHandler;
+ using CheckExistsRemoveTransaction::removingRevPtrsHandler;
+ using CheckExistsRemoveTransaction::processRemoveOkHandler;
+ using CheckExistsRemoveTransaction::processRemoveFailedHandler;
+ using CheckExistsRemoveTransaction::buildRemoveFwdAddressRequest;
+ using CheckExistsRemoveTransaction::buildRemoveFwdRRsRequest;
+ using CheckExistsRemoveTransaction::buildRemoveRevPtrsRequest;
+};
+
+typedef boost::shared_ptr<CheckExistsRemoveStub> CheckExistsRemoveStubPtr;
+
+/// @brief Test fixture for testing CheckExistsRemoveTransaction
+///
+/// Note this class uses CheckExistsRemoveStub class to exercise non-public
+/// aspects of CheckExistsRemoveTransaction.
+class CheckExistsRemoveTransactionTest : public TransactionTest {
+public:
+ CheckExistsRemoveTransactionTest() {
+ }
+
+ virtual ~CheckExistsRemoveTransactionTest() {
+ }
+
+ /// @brief Creates a transaction which requests an IPv4 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv4 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ CheckExistsRemoveStubPtr makeTransaction4(int change_mask) {
+ // Creates IPv4 remove request, forward, and reverse domains.
+ setupForIPv4Transaction(dhcp_ddns::CHG_REMOVE, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (CheckExistsRemoveStubPtr(new CheckExistsRemoveStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_,
+ cfg_mgr_)));
+ }
+
+ /// @brief Creates a transaction which requests an IPv6 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv6 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ CheckExistsRemoveStubPtr makeTransaction6(int change_mask) {
+ // Creates IPv6 remove request, forward, and reverse domains.
+ setupForIPv6Transaction(dhcp_ddns::CHG_REMOVE, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (CheckExistsRemoveStubPtr(new CheckExistsRemoveStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_,
+ cfg_mgr_)));
+ }
+
+ /// @brief Create a test transaction at a known point in the state model.
+ ///
+ /// Method prepares a new test transaction and sets its state and next
+ /// event values to those given. This makes the transaction appear to
+ /// be at that point in the state model without having to transition it
+ /// through prerequisite states. It also provides the ability to set
+ /// which change directions are requested: forward change only, reverse
+ /// change only, or both.
+ ///
+ /// @param state value to set as the current state
+ /// @param event value to post as the next event
+ /// @param change_mask determines which change directions are requested
+ /// @param family selects between an IPv4 (AF_INET) and IPv6 (AF_INET6)
+ /// transaction.
+ CheckExistsRemoveStubPtr prepHandlerTest(unsigned int state, unsigned int event,
+ unsigned int change_mask
+ = FWD_AND_REV_CHG,
+ short family = AF_INET) {
+ CheckExistsRemoveStubPtr name_remove = (family == AF_INET ?
+ makeTransaction4(change_mask) :
+ makeTransaction6(change_mask));
+ name_remove->initDictionaries();
+ name_remove->postNextEvent(event);
+ name_remove->setState(state);
+ return (name_remove);
+ }
+
+};
+
+/// @brief Tests CheckExistsRemoveTransaction construction.
+/// This test verifies that:
+/// 1. Construction with invalid type of request
+/// 2. Valid construction functions properly
+TEST(CheckExistsRemoveTransaction, construction) {
+ asiolink::IOServicePtr io_service(new isc::asiolink::IOService());
+ D2CfgMgrPtr cfg_mgr(new D2CfgMgr());
+
+ const char* msg_str =
+ "{"
+ " \"change-type\" : 0 , "
+ " \"forward-change\" : true , "
+ " \"reverse-change\" : true , "
+ " \"fqdn\" : \"example.com.\" , "
+ " \"ip-address\" : \"192.168.2.1\" , "
+ " \"dhcid\" : \"0102030405060708\" , "
+ " \"lease-expires-on\" : \"20130121132405\" , "
+ " \"lease-length\" : 1300, "
+ " \"conflict-resolution-mode\" : \"check-exists-with-dhcid\""
+ "}";
+
+ dhcp_ddns::NameChangeRequestPtr ncr;
+ DnsServerInfoStoragePtr servers;
+ DdnsDomainPtr forward_domain;
+ DdnsDomainPtr reverse_domain;
+ DdnsDomainPtr empty_domain;
+
+ ASSERT_NO_THROW(ncr = dhcp_ddns::NameChangeRequest::fromJSON(msg_str));
+ ASSERT_NO_THROW(forward_domain.reset(new DdnsDomain("*", servers)));
+ ASSERT_NO_THROW(reverse_domain.reset(new DdnsDomain("*", servers)));
+
+ // Verify that construction with wrong change type fails.
+ EXPECT_THROW(CheckExistsRemoveTransaction(io_service, ncr,
+ forward_domain, reverse_domain, cfg_mgr),
+ CheckExistsRemoveTransactionError);
+
+ // Verify that a valid construction attempt works.
+ ncr->setChangeType(isc::dhcp_ddns::CHG_REMOVE);
+ EXPECT_NO_THROW(CheckExistsRemoveTransaction(io_service, ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr));
+}
+
+/// @brief Tests event and state dictionary construction and verification.
+TEST_F(CheckExistsRemoveTransactionTest, dictionaryCheck) {
+ CheckExistsRemoveStubPtr name_remove;
+ ASSERT_NO_THROW(name_remove = makeTransaction4(FWD_AND_REV_CHG));
+ // Verify that the event and state dictionary validation fails prior
+ // dictionary construction.
+ ASSERT_THROW(name_remove->verifyEvents(), StateModelError);
+ ASSERT_THROW(name_remove->verifyStates(), StateModelError);
+
+ // Construct both dictionaries.
+ ASSERT_NO_THROW(name_remove->defineEvents());
+ ASSERT_NO_THROW(name_remove->defineStates());
+
+ // Verify both event and state dictionaries now pass validation.
+ ASSERT_NO_THROW(name_remove->verifyEvents());
+ ASSERT_NO_THROW(name_remove->verifyStates());
+}
+
+
+/// @brief Tests construction of a DNS update request for removing forward
+/// DNS address RRs.
+TEST_F(CheckExistsRemoveTransactionTest, buildRemoveFwdAddressRequest) {
+ // Create a IPv4 forward remove transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ CheckExistsRemoveStubPtr name_remove;
+ ASSERT_NO_THROW(name_remove = makeTransaction4(FORWARD_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveFwdAddressRequest());
+ checkExistsRemoveFwdAddressRequest(*name_remove);
+
+ // Create a IPv6 forward remove transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_remove = makeTransaction6(FORWARD_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveFwdAddressRequest());
+ checkExistsRemoveFwdAddressRequest(*name_remove);
+}
+
+/// @brief Tests construction of a DNS update request for removing forward
+/// dns RR entries.
+TEST_F(CheckExistsRemoveTransactionTest, buildRemoveFwdRRsRequest) {
+ // Create a IPv4 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ CheckExistsRemoveStubPtr name_remove;
+ ASSERT_NO_THROW(name_remove = makeTransaction4(FORWARD_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveFwdRRsRequest());
+ checkExistsRemoveFwdRRsRequest(*name_remove);
+
+ // Create a IPv6 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_remove = makeTransaction6(FORWARD_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveFwdRRsRequest());
+ checkExistsRemoveFwdRRsRequest(*name_remove);
+}
+
+/// @brief Tests the construction of a DNS update request for removing a
+/// reverse dns entry.
+TEST_F(CheckExistsRemoveTransactionTest, buildRemoveRevPtrsRequest) {
+ // Create a IPv4 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ CheckExistsRemoveStubPtr name_remove;
+ ASSERT_NO_THROW(name_remove = makeTransaction4(REVERSE_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveRevPtrsRequest());
+ checkRemoveRevPtrsRequest(*name_remove);
+
+ // Create a IPv6 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_remove = makeTransaction6(REVERSE_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveRevPtrsRequest());
+ checkRemoveRevPtrsRequest(*name_remove);
+}
+
+// Tests the readyHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is START_EVT and request includes only a forward change
+// 2. Posted event is START_EVT and request includes both a forward and a
+// reverse change
+// 3. Posted event is START_EVT and request includes only a reverse change
+// 4. Posted event is invalid
+//
+TEST_F(CheckExistsRemoveTransactionTest, readyHandler) {
+ CheckExistsRemoveStubPtr name_remove;
+
+ // Create a transaction which includes only a forward change.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FORWARD_CHG));
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_remove->readyHandler());
+
+ // Verify that a request requiring only a forward change, transitions to
+ // selecting a forward server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_remove->getNextEvent());
+
+ // Create a transaction which includes both a forward and a reverse change.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FWD_AND_REV_CHG));
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_remove->readyHandler());
+
+ // Verify that a request requiring both forward and reverse, starts with
+ // the forward change by transitioning to selecting a forward server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_remove->getNextEvent());
+
+ // Create and prep a reverse only transaction.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, REVERSE_CHG));
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_remove->readyHandler());
+
+ // Verify that a request requiring only a reverse change, transitions to
+ // selecting a reverse server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_remove->getNextEvent());
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::NOP_EVT));
+
+ // Running the readyHandler should throw.
+ EXPECT_THROW(name_remove->readyHandler(), CheckExistsRemoveTransactionError);
+}
+
+
+// Tests the selectingFwdServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(CheckExistsRemoveTransactionTest, selectingFwdServerHandler) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT));
+
+ // Call selectingFwdServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_remove->getForwardDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ // Run selectingFwdServerHandler.
+ ASSERT_NO_THROW(name_remove->selectingFwdServerHandler())
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_remove->getCurrentServer())
+ << " num_servers: " << num_servers << " selections: " << i;
+
+ // Verify that we transitioned correctly.
+ ASSERT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_ADDRS_ST,
+ name_remove->getCurrState())
+ << " num_servers: " << num_servers << " selections: " << i;
+ ASSERT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent())
+ << " num_servers: " << num_servers << " selections: " << i;
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_remove->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT))
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_remove->selectingFwdServerHandler());
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NO_MORE_SERVERS_EVT,
+ name_remove->getNextEvent());
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_FWD_SERVER_ST,
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->selectingFwdServerHandler(),
+ CheckExistsRemoveTransactionError);
+}
+
+// ************************ addingFwdAddrHandler Tests *****************
+
+// Tests that removingFwdAddrsHandler rejects invalid events.
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdAddrsHandler_InvalidEvent) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->removingFwdAddrsHandler(),
+ CheckExistsRemoveTransactionError);
+}
+
+
+// Tests addingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdAddrsHandler_FwdOnlyOK) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_remove->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Run removingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkExistsRemoveFwdAddressRequest(*name_remove);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_ADDRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NOP_EVT,
+ name_remove->getNextEvent());
+
+ // Simulate receiving a successful update response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run removingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Completion flags should both still be false, as we are only partly
+ // done with forward updates.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since we succeeded, we should now attempt to remove any remaining
+ // forward RRs.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_RRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(CheckExistsRemoveTransaction::UPDATE_OK_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates FQDN is not in use.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdAddrsHandler_FqdnNotInUse) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Run removingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Simulate receiving a RRSET does not exist.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXRRSET());
+
+ // Run removingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Completion flags should both still be false, as we are only partly
+ // done with forward updates.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // There was no address RR to remove, but we will still make sure there
+ // are no other RRs for this FQDN.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_RRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(CheckExistsRemoveTransaction::UPDATE_OK_EVT,
+ name_remove->getNextEvent());
+}
+
+
+// Tests removingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdAddrsHandler_OtherRcode) {
+ CheckExistsRemoveStubPtr name_remove;
+
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Run removingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error or FQDN not in use is failure. Arbitrarily choosing
+ // refused.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run removingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+
+// Tests removingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdAddrsHandler_Timeout) {
+ CheckExistsRemoveStubPtr name_remove;
+
+ // Create and prep a transaction, poised to run the handler.
+ // The log message issued when this test succeeds, displays the
+ // selected server, so we need to select a server before running this
+ // test.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingFwdAddrsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Simulate a server IO timeout.
+ name_remove->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_ADDRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsRemoveTransaction::SELECTING_FWD_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_remove->getNextEvent());
+ }
+ }
+}
+
+// Tests removingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdAddrsHandler_InvalidResponse) {
+ CheckExistsRemoveStubPtr name_remove;
+
+ // Create and prep a transaction, poised to run the handler.
+ // The log message issued when this test succeeds, displays the
+ // selected server, so we need to select a server before running this
+ // test.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingFwdAddrsHandler to construct send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Simulate a corrupt server response.
+ name_remove->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_ADDRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(CheckExistsRemoveTransaction::SELECTING_FWD_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_remove->getNextEvent());
+ }
+ }
+
+}
+
+// ************************ removingFwdRRsHandler Tests *****************
+
+// Tests that removingFwdRRsHandler rejects invalid events.
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_InvalidEvent) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_RRS_ST,
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->removingFwdRRsHandler(),
+ CheckExistsRemoveTransactionError);
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is UPDATE_OK_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_FwdOnlyOK) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ UPDATE_OK_EVT, FORWARD_CHG));
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_remove->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkExistsRemoveFwdRRsRequest(*name_remove);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_ADDRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NOP_EVT,
+ name_remove->getNextEvent());
+
+ // Simulate receiving a successful update response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Forward completion should be true, reverse should be false.
+ EXPECT_TRUE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_FwdOnlyOK2) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate receiving a successful update response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Forward completion should be true, reverse should be false.
+ EXPECT_TRUE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_remove->getNextEvent());
+}
+
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is UPDATE_OK_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_FwdAndRevOK) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ UPDATE_OK_EVT, FWD_AND_REV_CHG));
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate receiving a successful update response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Forward change completion should be true, reverse flag should be false.
+ EXPECT_TRUE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since the request also includes a reverse change we should
+ // be poised to start it. Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SELECT_SERVER_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is UPDATE_OK_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the FQDN is NOT in use.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_FqdnNotInUse) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ UPDATE_OK_EVT, FORWARD_CHG));
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate receiving a RRSET does not exist response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXRRSET());
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Forward completion flag should be true, reverse should still be false.
+ EXPECT_TRUE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // The FQDN is no longer in use, RFC is unclear about this,
+ // but we will treat this as success.
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_OtherRcode) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ UPDATE_OK_EVT, FWD_AND_REV_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error is failure (we are also treating FQDN not in use is
+ // success). Arbitrarily choosing refused.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is UPDATE_OK_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_Timeout) {
+ CheckExistsRemoveStubPtr name_remove;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::
+ UPDATE_OK_EVT, FWD_AND_REV_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingFwdRRsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate a server IO timeout.
+ name_remove->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_RRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent());
+ } else {
+ // Server retries should be exhausted.
+ // We should abandon the transaction.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_remove->getNextEvent());
+ }
+ }
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is UPDATE_OK_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_InvalidResponse) {
+ CheckExistsRemoveStubPtr name_remove;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::
+ UPDATE_OK_EVT, FWD_AND_REV_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingFwdRRsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate a corrupt server response.
+ name_remove->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_FWD_RRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent());
+ } else {
+ // Server retries should be exhausted.
+ // We should abandon the transaction.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_remove->getNextEvent());
+ }
+ }
+}
+
+
+// Tests the selectingRevServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(CheckExistsRemoveTransactionTest, selectingRevServerHandler) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT));
+
+ // Call selectingRevServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_remove->getReverseDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ // Run selectingRevServerHandler.
+ ASSERT_NO_THROW(name_remove->selectingRevServerHandler())
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_remove->getCurrentServer())
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+
+ // Verify that we transitioned correctly.
+ ASSERT_EQ(CheckExistsRemoveTransaction::REMOVING_REV_PTRS_ST,
+ name_remove->getCurrState())
+ << " num_servers: " << num_servers << " selections: " << i;
+ ASSERT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent())
+ << " num_servers: " << num_servers << " selections: " << i;
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_remove->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT))
+ << " num_servers: " << num_servers
+ << " selections: " << i;
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_remove->selectingRevServerHandler());
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::NO_MORE_SERVERS_EVT,
+ name_remove->getNextEvent());
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ SELECTING_REV_SERVER_ST,
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->selectingRevServerHandler(),
+ CheckExistsRemoveTransactionError);
+}
+
+//************************** removingRevPtrsHandler tests *****************
+
+// Tests that removingRevPtrsHandler rejects invalid events.
+TEST_F(CheckExistsRemoveTransactionTest, removingRevPtrsHandler_InvalidEvent) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ StateModel::NOP_EVT));
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->removingRevPtrsHandler(),
+ CheckExistsRemoveTransactionError);
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingRevPtrsHandler_RevOnlyOK) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_remove->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkRemoveRevPtrsRequest(*name_remove);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_REV_PTRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(StateModel::NOP_EVT,
+ name_remove->getNextEvent());
+
+ // Simulate receiving a successful update response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Forward completion should be false, reverse should be true.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_TRUE(name_remove->getReverseChangeCompleted());
+
+ // Since it is a reverse change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates FQDN is NOT in use.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingRevPtrsHandler_FqdnNotInUse) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_remove->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkRemoveRevPtrsRequest(*name_remove);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_REV_PTRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(StateModel::NOP_EVT,
+ name_remove->getNextEvent());
+
+ // Simulate receiving a RRSET does not exist.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXRRSET());
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Forward completion should be false, reverse should be true.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_TRUE(name_remove->getReverseChangeCompleted());
+
+ // Since it is a reverse change, we should be done.
+ // Verify that we transitioned correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_OK_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingRevPtrsHandler_OtherRcode) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectRevServer());
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error is failure. Arbitrarily choosing refused.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingRevPtrsHandler_Timeout) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Simulate a server IO timeout.
+ name_remove->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_REV_PTRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_remove->getNextEvent());
+ }
+ }
+}
+
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingRevPtrsHandler_CorruptResponse) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Simulate a server corrupt response.
+ name_remove->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ EXPECT_EQ(CheckExistsRemoveTransaction::REMOVING_REV_PTRS_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_SELECTED_EVT,
+ name_remove->getNextEvent());
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ EXPECT_EQ(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::SERVER_IO_ERROR_EVT,
+ name_remove->getNextEvent());
+ }
+ }
+}
+
+// Tests the processRemoveOkHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_OK_EVT
+// 2. Posted event is invalid
+//
+TEST_F(CheckExistsRemoveTransactionTest, processRemoveOkHandler) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT));
+ // Run processRemoveOkHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveOkHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_COMPLETED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended.
+ EXPECT_EQ(StateModel::END_ST, name_remove->getCurrState());
+ EXPECT_EQ(StateModel::END_EVT, name_remove->getNextEvent());
+
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ StateModel::NOP_EVT));
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->processRemoveOkHandler(),
+ CheckExistsRemoveTransactionError);
+}
+
+// Tests the processRemoveFailedHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_FAILED_EVT
+// 2. Posted event is invalid
+//
+TEST_F(CheckExistsRemoveTransactionTest, processRemoveFailedHandler) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT));
+ // Run processRemoveFailedHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ EXPECT_EQ(StateModel::END_ST, name_remove->getCurrState());
+ EXPECT_EQ(StateModel::END_EVT, name_remove->getNextEvent());
+
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ PROCESS_TRANS_FAILED_ST,
+ StateModel::NOP_EVT));
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->processRemoveFailedHandler(),
+ CheckExistsRemoveTransactionError);
+}
+
+// Tests the processRemoveFailedHandler functionality.
+// It verifies behavior for posted event of NO_MORE_SERVERS_EVT.
+TEST_F(CheckExistsRemoveTransactionTest, processRemoveFailedHandler_NoMoreServers) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::
+ NO_MORE_SERVERS_EVT));
+
+ // Run processRemoveFailedHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ EXPECT_EQ(StateModel::END_ST, name_remove->getCurrState());
+ EXPECT_EQ(StateModel::END_EVT, name_remove->getNextEvent());
+}
+
+// Tests the processRemoveFailedHandler functionality.
+// It verifies behavior for posted event of SERVER_IO_ERROR_EVT.
+TEST_F(CheckExistsRemoveTransactionTest, processRemoveFailedHandler_ServerIOError) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(NameChangeTransaction::
+ PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::
+ SERVER_IO_ERROR_EVT));
+
+ // Run processRemoveFailedHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ EXPECT_EQ(StateModel::END_ST, name_remove->getCurrState());
+ EXPECT_EQ(StateModel::END_EVT, name_remove->getNextEvent());
+}
+
+// Tests removingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdAddrsHandler_sendUpdateException) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ name_remove->simulate_send_exception_ = true;
+
+ // Run removingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingFwdRRsHandler_SendUpdateException) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ name_remove->simulate_send_exception_ = true;
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingRevPtrHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(CheckExistsRemoveTransactionTest, removingRevPtrsHandler_SendUpdateException) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, REVERSE_CHG));
+
+ name_remove->simulate_send_exception_ = true;
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(CheckExistsRemoveTransactionTest,
+ removingFwdAddrsHandler_BuildRequestException) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_ADDRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Set the one-shot exception simulation flag.
+ name_remove->simulate_build_request_exception_ = true;
+
+ // Run removingFwdAddrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_remove->removingFwdAddrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_remove->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(CheckExistsRemoveTransactionTest,
+ removingFwdRRsHandler_BuildRequestException) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Set the one-shot exception simulation flag.
+ name_remove->simulate_build_request_exception_ = true;
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_remove->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+// Tests removingRevPTRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(CheckExistsRemoveTransactionTest,
+ removingRevPTRsHandler_BuildRequestException) {
+ CheckExistsRemoveStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(name_remove =
+ prepHandlerTest(CheckExistsRemoveTransaction::
+ REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::
+ SERVER_SELECTED_EVT, FORWARD_CHG));
+
+ // Set the one-shot exception simulation flag.
+ name_remove->simulate_build_request_exception_ = true;
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_remove->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ EXPECT_EQ(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ name_remove->getCurrState());
+ EXPECT_EQ(NameChangeTransaction::UPDATE_FAILED_EVT,
+ name_remove->getNextEvent());
+}
+
+}
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
// Start queue manager with known good config.
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
// Manually enqueue a request. This lets us test logic with queue
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}",
// Valid Remove.
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}",
// Valid Add with IPv6 address
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}"
};
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
" \"dhcid\" : \"0102030405060708\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
const char* dhcids[] = { "111111", "222222", "333333", "444444" };
// Put each transaction on the queue.
canned_ncrs_[0]->setChangeType(dhcp_ddns::CHG_ADD);
canned_ncrs_[0]->setReverseChange(true);
- canned_ncrs_[0]->setConflictResolution(false);
+ canned_ncrs_[0]->setConflictResolutionMode(dhcp_ddns::NO_CHECK_WITH_DHCID);
ASSERT_NO_THROW(queue_mgr_->enqueue(canned_ncrs_[0]));
// Call sweep once, this should:
// Put each transaction on the queue.
canned_ncrs_[0]->setChangeType(dhcp_ddns::CHG_REMOVE);
canned_ncrs_[0]->setReverseChange(true);
- canned_ncrs_[0]->setConflictResolution(false);
+ canned_ncrs_[0]->setConflictResolutionMode(dhcp_ddns::NO_CHECK_WITH_DHCID);
ASSERT_NO_THROW(queue_mgr_->enqueue(canned_ncrs_[0]));
// Call sweep once, this should:
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
" \"dhcid\" : \"0102030405060708\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
dhcp_ddns::NameChangeRequestPtr ncr;
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
" \"dhcid\" : \"0102030405060708\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
dhcp_ddns::NameChangeRequestPtr ncr;
-// Copyright (C) 2020-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2020-2023 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
" \"dhcid\" : \"0102030405060708\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"no-check-with-dhcid\""
"}";
dhcp_ddns::NameChangeRequestPtr ncr;
--- /dev/null
+// Copyright (C) 2023 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 <asiolink/io_service.h>
+#include <d2/simple_add_without_dhcid.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/testutils/nc_test_utils.h>
+#include <dns/messagerenderer.h>
+
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::d2;
+using namespace isc::util;
+
+namespace {
+
+/// @brief Test class derived from SimpleAddWithoutDHCIDTransaction to provide visibility
+// to protected methods.
+class SimpleAddWithoutDHCIDStub : public SimpleAddWithoutDHCIDTransaction {
+public:
+ SimpleAddWithoutDHCIDStub(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : SimpleAddWithoutDHCIDTransaction(io_service, ncr, forward_domain, reverse_domain,
+ cfg_mgr),
+ simulate_send_exception_(false),
+ simulate_build_request_exception_(false) {
+ }
+
+ virtual ~SimpleAddWithoutDHCIDStub() {
+ }
+
+ /// @brief Simulates sending update requests to the DNS server
+ ///
+ /// This method simulates the initiation of an asynchronous send of
+ /// a DNS update request. It overrides the actual sendUpdate method in
+ /// the base class, thus avoiding an actual send, yet still increments
+ /// the update attempt count and posts a next event of NOP_EVT.
+ ///
+ /// It will also simulate an exception-based failure of sendUpdate, if
+ /// the simulate_send_exception_ flag is true.
+ ///
+ /// @param comment Parameter is unused, but present in base class method.
+ ///
+ virtual void sendUpdate(const std::string& /*comment*/) {
+ if (simulate_send_exception_) {
+ // Make the flag a one-shot by resetting it.
+ simulate_send_exception_ = false;
+ // Transition to failed.
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ return;
+ }
+
+ // Update send attempt count and post a NOP_EVT.
+ setUpdateAttempts(getUpdateAttempts() + 1);
+ postNextEvent(StateModel::NOP_EVT);
+ }
+
+ /// @brief Prepares the initial D2UpdateMessage
+ ///
+ /// This method overrides the NameChangeTransaction implementation to
+ /// provide the ability to simulate an exception throw in the build
+ /// request logic.
+ /// If the one-shot flag, simulate_build_request_exception_ is true,
+ /// this method will throw an exception, otherwise it will invoke the
+ /// base class method, providing normal functionality.
+ ///
+ /// For parameter description see the NameChangeTransaction implementation.
+ virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain) {
+ if (simulate_build_request_exception_) {
+ simulate_build_request_exception_ = false;
+ isc_throw (SimpleAddWithoutDHCIDTransactionError,
+ "Simulated build requests exception");
+ }
+
+ return (NameChangeTransaction::prepNewRequest(domain));
+ }
+
+ /// @brief Simulates receiving a response
+ ///
+ /// This method simulates the completion of a DNSClient send. This allows
+ /// the state handler logic devoted to dealing with IO completion to be
+ /// fully exercised without requiring any actual IO. The two primary
+ /// pieces of information gleaned from IO completion are the DNSClient
+ /// status which indicates whether or not the IO exchange was successful
+ /// and the rcode, which indicates the server's reaction to the request.
+ ///
+ /// This method updates the transaction's DNS status value to that of the
+ /// given parameter, and then constructs and DNS update response message
+ /// with the given rcode value. To complete the simulation it then posts
+ /// a next event of IO_COMPLETED_EVT.
+ ///
+ /// @param status simulated DNSClient status
+ /// @param rcode simulated server response code
+ void fakeResponse(const DNSClient::Status& status,
+ const dns::Rcode& rcode) {
+ // Set the DNS update status. This is normally set in
+ // DNSClient IO completion handler.
+ setDnsUpdateStatus(status);
+
+ // Construct an empty message with the given Rcode.
+ D2UpdateMessagePtr msg(new D2UpdateMessage(D2UpdateMessage::OUTBOUND));
+ msg->setRcode(rcode);
+
+ // Set the update response to the message.
+ setDnsUpdateResponse(msg);
+
+ // Post the IO completion event.
+ postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+ }
+
+ /// @brief Selects the first forward server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectFwdServer() {
+ if (getForwardDomain()) {
+ initServerSelection(getForwardDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief Selects the first reverse server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectRevServer() {
+ if (getReverseDomain()) {
+ initServerSelection(getReverseDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief One-shot flag which will simulate sendUpdate failure if true.
+ bool simulate_send_exception_;
+
+ /// @brief One-shot flag which will simulate an exception when sendUpdate
+ /// failure if true.
+ bool simulate_build_request_exception_;
+
+ using StateModel::postNextEvent;
+ using StateModel::setState;
+ using StateModel::initDictionaries;
+ using SimpleAddWithoutDHCIDTransaction::defineEvents;
+ using SimpleAddWithoutDHCIDTransaction::verifyEvents;
+ using SimpleAddWithoutDHCIDTransaction::defineStates;
+ using SimpleAddWithoutDHCIDTransaction::verifyStates;
+ using SimpleAddWithoutDHCIDTransaction::readyHandler;
+ using SimpleAddWithoutDHCIDTransaction::selectingFwdServerHandler;
+ using SimpleAddWithoutDHCIDTransaction::getCurrentServer;
+ using SimpleAddWithoutDHCIDTransaction::setDnsUpdateStatus;
+ using SimpleAddWithoutDHCIDTransaction::replacingFwdAddrsHandler;
+ using SimpleAddWithoutDHCIDTransaction::selectingRevServerHandler;
+ using SimpleAddWithoutDHCIDTransaction::replacingRevPtrsHandler;
+ using SimpleAddWithoutDHCIDTransaction::processAddOkHandler;
+ using SimpleAddWithoutDHCIDTransaction::processAddFailedHandler;
+ using SimpleAddWithoutDHCIDTransaction::buildReplaceFwdAddressRequest;
+ using SimpleAddWithoutDHCIDTransaction::buildReplaceRevPtrsRequest;
+};
+
+typedef boost::shared_ptr<SimpleAddWithoutDHCIDStub> SimpleAddWithoutDHCIDStubPtr;
+
+/// @brief Test fixture for testing SimpleAddWithoutDHCIDTransaction
+///
+/// Note this class uses SimpleAddWithoutDHCIDStub class to exercise non-public
+/// aspects of SimpleAddWithoutDHCIDTransaction.
+class SimpleAddWithoutDHCIDTransactionTest : public TransactionTest {
+public:
+
+ SimpleAddWithoutDHCIDTransactionTest() {
+ }
+
+ virtual ~SimpleAddWithoutDHCIDTransactionTest() {
+ }
+
+ /// @brief Creates a transaction which requests an IPv4 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv4 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ SimpleAddWithoutDHCIDStubPtr makeTransaction4(int change_mask = FWD_AND_REV_CHG) {
+ // Creates IPv4 remove request, forward, and reverse domains.
+ setupForIPv4Transaction(dhcp_ddns::CHG_ADD, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (SimpleAddWithoutDHCIDStubPtr(new SimpleAddWithoutDHCIDStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_, cfg_mgr_)));
+ }
+
+ /// @brief Creates a transaction which requests an IPv6 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv6 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ SimpleAddWithoutDHCIDStubPtr makeTransaction6(int change_mask = FWD_AND_REV_CHG) {
+ // Creates IPv6 remove request, forward, and reverse domains.
+ setupForIPv6Transaction(dhcp_ddns::CHG_ADD, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (SimpleAddWithoutDHCIDStubPtr(new SimpleAddWithoutDHCIDStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_,
+ cfg_mgr_)));
+ }
+
+ /// @brief Create a test transaction at a known point in the state model.
+ ///
+ /// Method prepares a new test transaction and sets its state and next
+ /// event values to those given. This makes the transaction appear to
+ /// be at that point in the state model without having to transition it
+ /// through prerequisite states. It also provides the ability to set
+ /// which change directions are requested: forward change only, reverse
+ /// change only, or both.
+ ///
+ /// @param state value to set as the current state
+ /// @param event value to post as the next event
+ /// @param change_mask determines which change directions are requested
+ /// @param family selects between an IPv4 (AF_INET) and IPv6 (AF_INET6)
+ /// transaction.
+ SimpleAddWithoutDHCIDStubPtr prepHandlerTest(unsigned int state, unsigned int event,
+ unsigned int change_mask = FWD_AND_REV_CHG,
+ short family = AF_INET) {
+ SimpleAddWithoutDHCIDStubPtr name_add = (family == AF_INET ?
+ makeTransaction4(change_mask) :
+ makeTransaction6(change_mask));
+ name_add->initDictionaries();
+ name_add->postNextEvent(event);
+ name_add->setState(state);
+ return (name_add);
+ }
+};
+
+/// @brief Tests SimpleAddWithoutDHCIDTransaction construction.
+/// This test verifies that:
+/// 1. Construction with invalid type of request
+/// 2. Valid construction functions properly
+TEST(SimpleAddWithoutDHCIDTransaction, construction) {
+ asiolink::IOServicePtr io_service(new isc::asiolink::IOService());
+ D2CfgMgrPtr cfg_mgr(new D2CfgMgr());
+
+ const char* msg_str =
+ "{"
+ " \"change-type\" : 1 , "
+ " \"forward-change\" : true , "
+ " \"reverse-change\" : true , "
+ " \"fqdn\" : \"example.com.\" , "
+ " \"ip-address\" : \"192.168.2.1\" , "
+ " \"dhcid\" : \"0102030405060708\" , "
+ " \"lease-expires-on\" : \"20130121132405\" , "
+ " \"lease-length\" : 1300, "
+ " \"conflict-resolution-mode\" : \"no-check-without-dhcid\""
+ "}";
+
+ dhcp_ddns::NameChangeRequestPtr ncr;
+ DnsServerInfoStoragePtr servers;
+ DdnsDomainPtr forward_domain;
+ DdnsDomainPtr reverse_domain;
+ DdnsDomainPtr empty_domain;
+
+ ASSERT_NO_THROW(ncr = dhcp_ddns::NameChangeRequest::fromJSON(msg_str));
+ ASSERT_NO_THROW(forward_domain.reset(new DdnsDomain("*", servers)));
+ ASSERT_NO_THROW(reverse_domain.reset(new DdnsDomain("*", servers)));
+
+ // Verify that construction with wrong change type fails.
+ EXPECT_THROW(SimpleAddWithoutDHCIDTransaction(io_service, ncr,
+ forward_domain, reverse_domain, cfg_mgr),
+ SimpleAddWithoutDHCIDTransactionError);
+
+ // Verify that a valid construction attempt works.
+ ncr->setChangeType(isc::dhcp_ddns::CHG_ADD);
+ EXPECT_NO_THROW(SimpleAddWithoutDHCIDTransaction(io_service, ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr));
+}
+
+/// @brief Tests event and state dictionary construction and verification.
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, dictionaryCheck) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ ASSERT_NO_THROW(name_add = makeTransaction4());
+ // Verify that the event and state dictionary validation fails prior
+ // dictionary construction.
+ ASSERT_THROW(name_add->verifyEvents(), StateModelError);
+ ASSERT_THROW(name_add->verifyStates(), StateModelError);
+
+ // Construct both dictionaries.
+ ASSERT_NO_THROW(name_add->defineEvents());
+ ASSERT_NO_THROW(name_add->defineStates());
+
+ // Verify both event and state dictionaries now pass validation.
+ ASSERT_NO_THROW(name_add->verifyEvents());
+ ASSERT_NO_THROW(name_add->verifyStates());
+}
+
+/// @brief Tests construction of a DNS update request for replacing a forward
+/// dns entry.
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, buildReplaceFwdAddressRequest) {
+ // Create a IPv4 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ ASSERT_NO_THROW(name_add = makeTransaction4());
+ ASSERT_NO_THROW(name_add->buildReplaceFwdAddressRequest());
+ checkSimpleReplaceFwdAddressWithoutDHCIDRequest(*name_add);
+
+ // Create a IPv6 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_add = makeTransaction6());
+ ASSERT_NO_THROW(name_add->buildReplaceFwdAddressRequest());
+ checkSimpleReplaceFwdAddressWithoutDHCIDRequest(*name_add);
+}
+
+/// @brief Tests the construction of a DNS update request for replacing a
+/// reverse dns entry.
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, buildReplaceRevPtrsRequest) {
+ // Create a IPv4 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ ASSERT_NO_THROW(name_add = makeTransaction4());
+ ASSERT_NO_THROW(name_add->buildReplaceRevPtrsRequest());
+ checkSimpleReplaceRevPtrsWithoutDHCIDRequest(*name_add);
+
+ // Create a IPv6 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_add = makeTransaction6());
+ ASSERT_NO_THROW(name_add->buildReplaceRevPtrsRequest());
+ checkSimpleReplaceRevPtrsWithoutDHCIDRequest(*name_add);
+}
+
+// Tests the readyHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is START_EVT and request includes only a forward change
+// 2. Posted event is START_EVT and request includes both a forward and a
+// reverse change
+// 3. Posted event is START_EVT and request includes only a reverse change
+// 4. Posted event is invalid
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, readyHandler) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+
+ // Create a transaction which includes only a forward change.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FORWARD_CHG)
+ );
+
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_add->readyHandler());
+
+ // Verify that a request requiring only a forward change, transitions to
+ // selecting a forward server.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT);
+
+ // Create a transaction which includes both a forward and a reverse change.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FWD_AND_REV_CHG)
+ );
+
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_add->readyHandler());
+
+ // Verify that a request requiring both forward and reverse, starts with
+ // the forward change by transitioning to selecting a forward server.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT);
+
+ // Create and prep a reverse only transaction.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, REVERSE_CHG)
+ );
+
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_add->readyHandler());
+
+ // Verify that a request requiring only a reverse change, transitions to
+ // selecting a reverse server.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::READY_ST, StateModel::NOP_EVT)
+ );
+
+ // Running the readyHandler should throw.
+ EXPECT_THROW(name_add->readyHandler(), SimpleAddWithoutDHCIDTransactionError);
+}
+
+// Tests the selectingFwdServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, selectingFwdServerHandler) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT)
+ );
+
+ // Call selectingFwdServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_add->getForwardDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ SCOPED_TRACE(testing::Message() << " num_servers: " << num_servers
+ << " selections: " << i);
+ // Run selectingFwdServerHandler.
+ ASSERT_NO_THROW(name_add->selectingFwdServerHandler());
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_add->getCurrentServer());
+
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_add->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT));
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_add->selectingFwdServerHandler());
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::NO_MORE_SERVERS_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->selectingFwdServerHandler(),
+ SimpleAddWithoutDHCIDTransactionError);
+}
+
+// ************************ replacingFwdAddrHandler Tests *****************
+
+// Tests that replacingFwdAddrsHandler rejects invalid events.
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingFwdAddrsHandler_InvalidEvent) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->replacingFwdAddrsHandler(), SimpleAddWithoutDHCIDTransactionError);
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingFwdAddrsHandler_FwdOnlyAddOK) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, FORWARD_CHG)
+ );
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_add->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkSimpleReplaceFwdAddressWithoutDHCIDRequest(*name_add);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::NOP_EVT);
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Forward completion should be true, reverse should be false.
+ EXPECT_TRUE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT);
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingFwdAddrsHandler_OtherRcode) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, FWD_AND_REV_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error or FQDN in use is failure. Arbitrarily choosing refused.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingFwdAddrsHandler_Timeout) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, FWD_AND_REV_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingFwdAddrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate a server IO timeout.
+ name_add->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingFwdAddrsHandler_CorruptResponse) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, FWD_AND_REV_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingFwdAddrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Simulate a corrupt server response.
+ name_add->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingFwdAddrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+// Tests the selectingRevServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, selectingRevServerHandler) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT)
+ );
+
+ // Call selectingRevServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_add->getReverseDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ SCOPED_TRACE(testing::Message() << " num_servers: " << num_servers
+ << " selections: " << i);
+ // Run selectingRevServerHandler.
+ ASSERT_NO_THROW(name_add->selectingRevServerHandler());
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_add->getCurrentServer());
+
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_add->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT));
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_add->selectingRevServerHandler());
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::NO_MORE_SERVERS_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->selectingRevServerHandler(),
+ SimpleAddWithoutDHCIDTransactionError);
+}
+
+//************************** replacingRevPtrsHandler tests *****************
+
+// Tests that replacingRevPtrsHandler rejects invalid events.
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingRevPtrsHandler_InvalidEvent) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->replacingRevPtrsHandler(),
+ SimpleAddWithoutDHCIDTransactionError);
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingRevPtrsHandler_FwdOnlyAddOK) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_add->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkSimpleReplaceRevPtrsWithoutDHCIDRequest(*name_add);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::NOP_EVT);
+
+ // Simulate receiving a successful update response.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Forward completion should be false, reverse should be true.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_TRUE(name_add->getReverseChangeCompleted());
+
+ // Since it is a reverse change, we should be done.
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT);
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingRevPtrsHandler_OtherRcode) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectRevServer());
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error is failure. Arbitrarily choosing refused.
+ name_add->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingRevPtrsHandler_Timeout) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Simulate a server IO timeout.
+ name_add->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+// Tests replacingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingRevPtrsHandler_CorruptResponse) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ SimpleAddWithoutDHCIDTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_add->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run replacingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Simulate a server corrupt response.
+ name_add->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_add->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run replacingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_add, SimpleAddWithoutDHCIDTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+// Tests the processAddOkHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_OK_EVT
+// 2. Posted event is invalid
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, processAddOkHandler) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT)
+ );
+
+ // Run processAddOkHandler.
+ EXPECT_NO_THROW(name_add->processAddOkHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_COMPLETED, name_add->getNcrStatus());
+
+ // Verify that the model has ended.
+ CHECK_CONTEXT(name_add, StateModel::END_ST, StateModel::END_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->processAddOkHandler(), SimpleAddWithoutDHCIDTransactionError);
+}
+
+// Tests the processAddFailedHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_FAILED_EVT
+// 2. Posted event is invalid
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, processAddFailedHandler) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT)
+ );
+
+ // Run processAddFailedHandler.
+ EXPECT_NO_THROW(name_add->processAddFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_add->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ CHECK_CONTEXT(name_add, StateModel::END_ST, StateModel::END_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_add->processAddFailedHandler(), SimpleAddWithoutDHCIDTransactionError);
+}
+
+// Tests the processAddFailedHandler functionality.
+// It verifies behavior for posted event of NO_MORE_SERVERS_EVT.
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, processAddFailedHandler_NoMoreServers) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::NO_MORE_SERVERS_EVT)
+ );
+
+ // Run processAddFailedHandler.
+ EXPECT_NO_THROW(name_add->processAddFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_add->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ CHECK_CONTEXT(name_add, StateModel::END_ST, StateModel::END_EVT);
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingFwdAddrsHandler_SendUpdateException) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, FORWARD_CHG)
+ );
+
+ name_add->simulate_send_exception_ = true;
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ ASSERT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests replacingRevPtrHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingRevPtrsHandler_SendUpdateException) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ name_add->simulate_send_exception_ = true;
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ ASSERT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests replacingFwdAddrsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingFwdAddrsHandler_BuildRequestException) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_FWD_ADDRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, FORWARD_CHG)
+ );
+
+ // Set the one-shot exception simulation flag.
+ name_add->simulate_build_request_exception_ = true;
+
+ // Run replacingFwdAddrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_add->replacingFwdAddrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_add->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests replacingRevPtrHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(SimpleAddWithoutDHCIDTransactionTest, replacingRevPtrsHandler_BuildRequestException) {
+ SimpleAddWithoutDHCIDStubPtr name_add;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_add = prepHandlerTest(SimpleAddWithoutDHCIDTransaction::REPLACING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Set the one-shot exception simulation flag.
+ name_add->simulate_build_request_exception_ = true;
+
+ // Run replacingRevPtrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_add->replacingRevPtrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_add->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_add->getForwardChangeCompleted());
+ EXPECT_FALSE(name_add->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_add, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+}
-// Copyright (C) 2020-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2020-2023 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
" \"dhcid\" : \"0102030405060708\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"no-check-with-dhcid\""
"}";
dhcp_ddns::NameChangeRequestPtr ncr;
--- /dev/null
+// Copyright (C) 2023 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 <asiolink/io_service.h>
+#include <d2/simple_remove_without_dhcid.h>
+#include <d2srv/d2_cfg_mgr.h>
+#include <d2srv/testutils/nc_test_utils.h>
+#include <dns/messagerenderer.h>
+
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::d2;
+using namespace isc::util;
+
+
+namespace {
+
+/// @brief Test class derived from SimpleRemoveWithoutDHCIDTransaction to provide visibility
+// to protected methods.
+class SimpleRemoveWithoutDHCIDStub : public SimpleRemoveWithoutDHCIDTransaction {
+public:
+ SimpleRemoveWithoutDHCIDStub(asiolink::IOServicePtr& io_service,
+ dhcp_ddns::NameChangeRequestPtr& ncr,
+ DdnsDomainPtr& forward_domain,
+ DdnsDomainPtr& reverse_domain,
+ D2CfgMgrPtr& cfg_mgr)
+ : SimpleRemoveWithoutDHCIDTransaction(io_service, ncr, forward_domain,
+ reverse_domain, cfg_mgr),
+ simulate_send_exception_(false),
+ simulate_build_request_exception_(false) {
+ }
+
+ virtual ~SimpleRemoveWithoutDHCIDStub() {
+ }
+
+ /// @brief Simulates sending update requests to the DNS server
+ ///
+ /// This method simulates the initiation of an asynchronous send of
+ /// a DNS update request. It overrides the actual sendUpdate method in
+ /// the base class, thus avoiding an actual send, yet still increments
+ /// the update attempt count and posts a next event of NOP_EVT.
+ ///
+ /// It will also simulate an exception-based failure of sendUpdate, if
+ /// the simulate_send_exception_ flag is true.
+ ///
+ /// @param comment Parameter is unused, but present in base class method
+ ///
+ virtual void sendUpdate(const std::string& /* comment */) {
+ if (simulate_send_exception_) {
+ // Make the flag a one-shot by resetting it.
+ simulate_send_exception_ = false;
+ // Transition to failed.
+ transition(PROCESS_TRANS_FAILED_ST, UPDATE_FAILED_EVT);
+ return;
+ }
+
+ // Update send attempt count and post a NOP_EVT.
+ setUpdateAttempts(getUpdateAttempts() + 1);
+ postNextEvent(StateModel::NOP_EVT);
+ }
+
+ /// @brief Prepares the initial D2UpdateMessage
+ ///
+ /// This method overrides the NameChangeTransaction implementation to
+ /// provide the ability to simulate an exception throw in the build
+ /// request logic.
+ /// If the one-shot flag, simulate_build_request_exception_ is true,
+ /// this method will throw an exception, otherwise it will invoke the
+ /// base class method, providing normal functionality.
+ ///
+ /// For parameter description see the NameChangeTransaction implementation.
+ virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain) {
+ if (simulate_build_request_exception_) {
+ simulate_build_request_exception_ = false;
+ isc_throw (SimpleRemoveWithoutDHCIDTransactionError,
+ "Simulated build requests exception");
+ }
+
+ return (NameChangeTransaction::prepNewRequest(domain));
+ }
+
+ /// @brief Simulates receiving a response
+ ///
+ /// This method simulates the completion of a DNSClient send. This allows
+ /// the state handler logic devoted to dealing with IO completion to be
+ /// fully exercised without requiring any actual IO. The two primary
+ /// pieces of information gleaned from IO completion are the DNSClient
+ /// status which indicates whether or not the IO exchange was successful
+ /// and the rcode, which indicates the server's reaction to the request.
+ ///
+ /// This method updates the transaction's DNS status value to that of the
+ /// given parameter, and then constructs and DNS update response message
+ /// with the given rcode value. To complete the simulation it then posts
+ /// a next event of IO_COMPLETED_EVT.
+ ///
+ /// @param status simulated DNSClient status
+ /// @param rcode simulated server response code
+ void fakeResponse(const DNSClient::Status& status,
+ const dns::Rcode& rcode) {
+ // Set the DNS update status. This is normally set in
+ // DNSClient IO completion handler.
+ setDnsUpdateStatus(status);
+
+ // Construct an empty message with the given Rcode.
+ D2UpdateMessagePtr msg(new D2UpdateMessage(D2UpdateMessage::OUTBOUND));
+ msg->setRcode(rcode);
+
+ // Set the update response to the message.
+ setDnsUpdateResponse(msg);
+
+ // Post the IO completion event.
+ postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+ }
+
+ /// @brief Selects the first forward server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectFwdServer() {
+ if (getForwardDomain()) {
+ initServerSelection(getForwardDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief Selects the first reverse server.
+ /// Some state handlers require a server to have been selected.
+ /// This selects a server without going through the state
+ /// transition(s) to do so.
+ bool selectRevServer() {
+ if (getReverseDomain()) {
+ initServerSelection(getReverseDomain());
+ selectNextServer();
+ return (getCurrentServer().get() != 0);
+ }
+
+ return (false);
+ }
+
+ /// @brief One-shot flag which will simulate sendUpdate failure if true.
+ bool simulate_send_exception_;
+
+ /// @brief One-shot flag which will simulate an exception when sendUpdate
+ /// failure if true.
+ bool simulate_build_request_exception_;
+
+ using StateModel::postNextEvent;
+ using StateModel::setState;
+ using StateModel::initDictionaries;
+ using SimpleRemoveWithoutDHCIDTransaction::defineEvents;
+ using SimpleRemoveWithoutDHCIDTransaction::verifyEvents;
+ using SimpleRemoveWithoutDHCIDTransaction::defineStates;
+ using SimpleRemoveWithoutDHCIDTransaction::verifyStates;
+ using SimpleRemoveWithoutDHCIDTransaction::readyHandler;
+ using SimpleRemoveWithoutDHCIDTransaction::selectingFwdServerHandler;
+ using SimpleRemoveWithoutDHCIDTransaction::getCurrentServer;
+ using SimpleRemoveWithoutDHCIDTransaction::setDnsUpdateStatus;
+ using SimpleRemoveWithoutDHCIDTransaction::removingFwdRRsHandler;
+ using SimpleRemoveWithoutDHCIDTransaction::selectingRevServerHandler;
+ using SimpleRemoveWithoutDHCIDTransaction::removingRevPtrsHandler;
+ using SimpleRemoveWithoutDHCIDTransaction::processRemoveOkHandler;
+ using SimpleRemoveWithoutDHCIDTransaction::processRemoveFailedHandler;
+ using SimpleRemoveWithoutDHCIDTransaction::buildRemoveFwdRRsRequest;
+ using SimpleRemoveWithoutDHCIDTransaction::buildRemoveRevPtrsRequest;
+};
+
+typedef boost::shared_ptr<SimpleRemoveWithoutDHCIDStub> SimpleRemoveWithoutDHCIDStubPtr;
+
+/// @brief Test fixture for testing SimpleRemoveWithoutDHCIDTransaction
+///
+/// Note this class uses SimpleRemoveWithoutDHCIDStub class to exercise non-public
+/// aspects of SimpleRemoveWithoutDHCIDTransaction.
+class SimpleRemoveWithoutDHCIDTransactionTest : public TransactionTest {
+public:
+ SimpleRemoveWithoutDHCIDTransactionTest() {
+ }
+
+ virtual ~SimpleRemoveWithoutDHCIDTransactionTest() {
+ }
+
+ /// @brief Creates a transaction which requests an IPv4 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv4 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ SimpleRemoveWithoutDHCIDStubPtr makeTransaction4(int change_mask) {
+ // Creates IPv4 remove request, forward, and reverse domains.
+ setupForIPv4Transaction(dhcp_ddns::CHG_REMOVE, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (SimpleRemoveWithoutDHCIDStubPtr(new SimpleRemoveWithoutDHCIDStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_,
+ cfg_mgr_)));
+ }
+
+ /// @brief Creates a transaction which requests an IPv6 DNS update.
+ ///
+ /// The transaction is constructed around a predefined (i.e. "canned")
+ /// IPv6 NameChangeRequest. The request has both forward and reverse DNS
+ /// changes requested. Based upon the change mask, the transaction
+ /// will have either the forward, reverse, or both domains populated.
+ ///
+ /// @param change_mask determines which change directions are requested
+ SimpleRemoveWithoutDHCIDStubPtr makeTransaction6(int change_mask) {
+ // Creates IPv6 remove request, forward, and reverse domains.
+ setupForIPv6Transaction(dhcp_ddns::CHG_REMOVE, change_mask);
+
+ // Now create the test transaction as would occur in update manager.
+ return (SimpleRemoveWithoutDHCIDStubPtr(new SimpleRemoveWithoutDHCIDStub(io_service_, ncr_,
+ forward_domain_,
+ reverse_domain_,
+ cfg_mgr_)));
+ }
+
+ /// @brief Create a test transaction at a known point in the state model.
+ ///
+ /// Method prepares a new test transaction and sets its state and next
+ /// event values to those given. This makes the transaction appear to
+ /// be at that point in the state model without having to transition it
+ /// through prerequisite states. It also provides the ability to set
+ /// which change directions are requested: forward change only, reverse
+ /// change only, or both.
+ ///
+ /// @param state value to set as the current state
+ /// @param event value to post as the next event
+ /// @param change_mask determines which change directions are requested
+ /// @param family selects between an IPv4 (AF_INET) and IPv6 (AF_INET6)
+ /// transaction.
+ SimpleRemoveWithoutDHCIDStubPtr prepHandlerTest(unsigned int state, unsigned int event,
+ unsigned int change_mask = FWD_AND_REV_CHG,
+ short family = AF_INET) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove = (family == AF_INET ?
+ makeTransaction4(change_mask) :
+ makeTransaction6(change_mask));
+ name_remove->initDictionaries();
+ name_remove->postNextEvent(event);
+ name_remove->setState(state);
+ return (name_remove);
+ }
+
+};
+
+/// @brief Tests SimpleRemoveWithoutDHCIDTransaction construction.
+/// This test verifies that:
+/// 1. Construction with invalid type of request
+/// 2. Valid construction functions properly
+TEST(SimpleRemoveWithoutDHCIDTransaction, construction) {
+ asiolink::IOServicePtr io_service(new isc::asiolink::IOService());
+ D2CfgMgrPtr cfg_mgr(new D2CfgMgr());
+
+ const char* msg_str =
+ "{"
+ " \"change-type\" : 0 , "
+ " \"forward-change\" : true , "
+ " \"reverse-change\" : true , "
+ " \"fqdn\" : \"example.com.\" , "
+ " \"ip-address\" : \"192.168.2.1\" , "
+ " \"dhcid\" : \"0102030405060708\" , "
+ " \"lease-expires-on\" : \"20130121132405\" , "
+ " \"lease-length\" : 1300, "
+ " \"use-conflict-resolution\" : true "
+ "}";
+
+ dhcp_ddns::NameChangeRequestPtr ncr;
+ DnsServerInfoStoragePtr servers;
+ DdnsDomainPtr forward_domain;
+ DdnsDomainPtr reverse_domain;
+ DdnsDomainPtr empty_domain;
+
+ ASSERT_NO_THROW(ncr = dhcp_ddns::NameChangeRequest::fromJSON(msg_str));
+ ASSERT_NO_THROW(forward_domain.reset(new DdnsDomain("*", servers)));
+ ASSERT_NO_THROW(reverse_domain.reset(new DdnsDomain("*", servers)));
+
+ // Verify that construction with wrong change type fails.
+ EXPECT_THROW(SimpleRemoveWithoutDHCIDTransaction(io_service, ncr,
+ forward_domain, reverse_domain, cfg_mgr),
+ SimpleRemoveWithoutDHCIDTransactionError);
+
+ // Verify that a valid construction attempt works.
+ ncr->setChangeType(isc::dhcp_ddns::CHG_REMOVE);
+ EXPECT_NO_THROW(SimpleRemoveWithoutDHCIDTransaction(io_service, ncr,
+ forward_domain, reverse_domain,
+ cfg_mgr));
+}
+
+/// @brief Tests event and state dictionary construction and verification.
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, dictionaryCheck) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ ASSERT_NO_THROW(name_remove = makeTransaction4(FWD_AND_REV_CHG));
+ // Verify that the event and state dictionary validation fails prior
+ // dictionary construction.
+ ASSERT_THROW(name_remove->verifyEvents(), StateModelError);
+ ASSERT_THROW(name_remove->verifyStates(), StateModelError);
+
+ // Construct both dictionaries.
+ ASSERT_NO_THROW(name_remove->defineEvents());
+ ASSERT_NO_THROW(name_remove->defineStates());
+
+ // Verify both event and state dictionaries now pass validation.
+ ASSERT_NO_THROW(name_remove->verifyEvents());
+ ASSERT_NO_THROW(name_remove->verifyStates());
+}
+
+/// @brief Tests construction of a DNS update request for removing forward
+/// dns RR entries.
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, buildRemoveFwdRRsRequest) {
+ // Create a IPv4 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ ASSERT_NO_THROW(name_remove = makeTransaction4(FORWARD_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveFwdRRsRequest());
+ checkSimpleRemoveFwdRRsWithoutDHCIDRequest(*name_remove);
+
+ // Create a IPv6 forward replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_remove = makeTransaction6(FORWARD_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveFwdRRsRequest());
+ checkSimpleRemoveFwdRRsWithoutDHCIDRequest(*name_remove);
+}
+
+/// @brief Tests the construction of a DNS update request for removing a
+/// reverse dns entry.
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, buildRemoveRevPtrsRequest) {
+ // Create a IPv4 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ ASSERT_NO_THROW(name_remove = makeTransaction4(REVERSE_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveRevPtrsRequest());
+ checkSimpleRemoveRevPtrsWithoutDHCIDRequest(*name_remove);
+
+ // Create a IPv6 reverse replace transaction.
+ // Verify the request builds without error.
+ // and then verify the request contents.
+ ASSERT_NO_THROW(name_remove = makeTransaction6(REVERSE_CHG));
+ ASSERT_NO_THROW(name_remove->buildRemoveRevPtrsRequest());
+ checkSimpleRemoveRevPtrsWithoutDHCIDRequest(*name_remove);
+}
+
+// Tests the readyHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is START_EVT and request includes only a forward change
+// 2. Posted event is START_EVT and request includes both a forward and a
+// reverse change
+// 3. Posted event is START_EVT and request includes only a reverse change
+// 4. Posted event is invalid
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, readyHandler) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+
+ // Create a transaction which includes only a forward change.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FORWARD_CHG)
+ );
+
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_remove->readyHandler());
+
+ // Verify that a request requiring only a forward change, transitions to
+ // selecting a forward server.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT);
+
+ // Create a transaction which includes both a forward and a reverse change.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, FWD_AND_REV_CHG)
+ );
+
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_remove->readyHandler());
+
+ // Verify that a request requiring both forward and reverse, starts with
+ // the forward change by transitioning to selecting a forward server.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT);
+
+ // Create and prep a reverse only transaction.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::START_EVT, REVERSE_CHG)
+ );
+
+ // Run readyHandler.
+ EXPECT_NO_THROW(name_remove->readyHandler());
+
+ // Verify that a request requiring only a reverse change, transitions to
+ // selecting a reverse server.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::READY_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the readyHandler should throw.
+ EXPECT_THROW(name_remove->readyHandler(), SimpleRemoveWithoutDHCIDTransactionError);
+}
+
+
+// Tests the selectingFwdServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, selectingFwdServerHandler) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT)
+ );
+
+ // Call selectingFwdServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_remove->getForwardDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ SCOPED_TRACE(testing::Message() << " num_servers: " << num_servers
+ << " selections:" << i);
+ // Run selectingFwdServerHandler.
+ ASSERT_NO_THROW(name_remove->selectingFwdServerHandler());
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_remove->getCurrentServer());
+
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_remove->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT));
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_remove->selectingFwdServerHandler());
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::NO_MORE_SERVERS_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::SELECTING_FWD_SERVER_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->selectingFwdServerHandler(),
+ SimpleRemoveWithoutDHCIDTransactionError);
+}
+
+// ************************ removingFwdRRsHandler Tests *****************
+
+// Tests that removingFwdRRsHandler rejects invalid events.
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingFwdRRsHandler_InvalidEvent) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->removingFwdRRsHandler(),
+ SimpleRemoveWithoutDHCIDTransactionError);
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingFwdRRsHandler_FwdOnlyOK) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, FORWARD_CHG)
+ );
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_remove->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkSimpleRemoveFwdRRsWithoutDHCIDRequest(*name_remove);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::NOP_EVT);
+
+ // Simulate receiving a successful update response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Forward completion should be true, reverse should be false.
+ EXPECT_TRUE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since it is a forward only change, we should be done.
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT);
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingFwdRRsHandler_OtherRcode) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT,
+ FWD_AND_REV_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error is failure (we are also treating FQDN not in use is
+ // success). Arbitrarily choosing refused.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingFwdRRsHandler_Timeout) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT,
+ FWD_AND_REV_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingFwdRRsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate a server IO timeout.
+ name_remove->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes a forward and reverse change.
+// Initial posted event is UPDATE_OK_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingFwdRRsHandler_InvalidResponse) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::UPDATE_OK_EVT, FWD_AND_REV_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectFwdServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingFwdRRsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Simulate a corrupt server response.
+ name_remove->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingFwdRRsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::SELECTING_FWD_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+
+// Tests the selectingRevServerHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is SELECT_SERVER_EVT
+// 2. Posted event is SERVER_IO_ERROR_EVT
+// 3. Posted event is invalid
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, selectingRevServerHandler) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SELECT_SERVER_EVT)
+ );
+
+ // Call selectingRevServerHandler enough times to select all of the
+ // servers in it's current domain. The first time, it will be with
+ // next event of SELECT_SERVER_EVT. Thereafter it will be with a next
+ // event of SERVER_IO_ERROR_EVT.
+ int num_servers = name_remove->getReverseDomain()->getServers()->size();
+ for (int i = 0; i < num_servers; ++i) {
+ SCOPED_TRACE(testing::Message() << " num_servers: " << num_servers
+ << " selections:" << i);
+ // Run selectingRevServerHandler.
+ ASSERT_NO_THROW(name_remove->selectingRevServerHandler());
+
+ // Verify that a server was selected.
+ ASSERT_TRUE(name_remove->getCurrentServer());
+
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+
+ // Post a server IO error event. This simulates an IO error occurring
+ // and a need to select the new server.
+ ASSERT_NO_THROW(name_remove->postNextEvent(NameChangeTransaction::
+ SERVER_IO_ERROR_EVT));
+ }
+
+ // We should have exhausted the list of servers. Processing another
+ // SERVER_IO_ERROR_EVT should transition us to failure.
+ EXPECT_NO_THROW(name_remove->selectingRevServerHandler());
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::NO_MORE_SERVERS_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->selectingRevServerHandler(),
+ SimpleRemoveWithoutDHCIDTransactionError);
+}
+
+//************************** removingRevPtrsHandler tests *****************
+
+// Tests that removingRevPtrsHandler rejects invalid events.
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPtrsHandler_InvalidEvent) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler but with
+ // an invalid event.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->removingRevPtrsHandler(),
+ SimpleRemoveWithoutDHCIDTransactionError);
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates successful update.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPtrsHandler_RevOnlyOK) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_remove->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkSimpleRemoveRevPtrsWithoutDHCIDRequest(*name_remove);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ StateModel::NOP_EVT);
+
+ // Simulate receiving a successful update response.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NOERROR());
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Forward completion should be false, reverse should be true.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_TRUE(name_remove->getReverseChangeCompleted());
+
+ // Since it is a reverse change, we should be done.
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT);
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates FQDN is NOT in use.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPtrsHandler_FqdnNotInUse) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Should not be an update message yet.
+ D2UpdateMessagePtr update_msg = name_remove->getDnsUpdateRequest();
+ ASSERT_FALSE(update_msg);
+
+ // At this point completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Verify that an update message was constructed properly.
+ checkSimpleRemoveRevPtrsWithoutDHCIDRequest(*name_remove);
+
+ // Verify that we are still in this state and next event is NOP_EVT.
+ // This indicates we "sent" the message and are waiting for IO completion.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ StateModel::NOP_EVT);
+
+ // Simulate receiving a RRSET does not exist.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXRRSET());
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Forward completion should be false, reverse should be true.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_TRUE(name_remove->getReverseChangeCompleted());
+
+ // Since it is a reverse change, we should be done.
+ // Verify that we transitioned correctly.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT);
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent without error.
+// A server response is received which indicates the update was rejected.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPtrsHandler_OtherRcode) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectRevServer());
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Simulate receiving server rejection response. Per RFC, anything other
+ // than no error is failure. Arbitrarily choosing refused.
+ name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::REFUSED());
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should still be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // We should have failed the transaction. Verify that we transitioned
+ // correctly.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request send times out MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPtrsHandler_Timeout) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT,
+ REVERSE_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Simulate a server IO timeout.
+ name_remove->setDnsUpdateStatus(DNSClient::TIMEOUT);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+
+// Tests removingRevPtrsHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The update request is sent but a corrupt response is received, this occurs
+// MAX_UPDATE_TRIES_PER_SERVER times.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPtrsHandler_CorruptResponse) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create the transaction.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ // Select a server to satisfy log statements.
+ ASSERT_TRUE(name_remove->selectRevServer());
+
+ // Verify that we can make maximum number of update attempts permitted
+ // and then transition to selecting a new server.
+ int max_tries = NameChangeTransaction::MAX_UPDATE_TRIES_PER_SERVER;
+ for (int i = 1; i <= max_tries; ++i) {
+ // Run removingRevPtrsHandler to send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Simulate a server corrupt response.
+ name_remove->setDnsUpdateStatus(DNSClient::INVALID_RESPONSE);
+ name_remove->postNextEvent(NameChangeTransaction::IO_COMPLETED_EVT);
+
+ // Run removingRevPtrsHandler again to process the response.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ if (i < max_tries) {
+ // We should be ready to try again.
+ CHECK_CONTEXT(name_remove, SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT);
+ } else {
+ // Server retries should be exhausted, time for a new server.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::SELECTING_REV_SERVER_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT);
+ }
+ }
+}
+
+// Tests the processRemoveOkHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_OK_EVT
+// 2. Posted event is invalid
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, processRemoveOkHandler) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ NameChangeTransaction::UPDATE_OK_EVT)
+ );
+
+ // Run processRemoveOkHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveOkHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_COMPLETED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended.
+ CHECK_CONTEXT(name_remove, StateModel::END_ST, StateModel::END_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_OK_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->processRemoveOkHandler(),
+ SimpleRemoveWithoutDHCIDTransactionError);
+}
+
+// Tests the processRemoveFailedHandler functionality.
+// It verifies behavior for the following scenarios:
+//
+// 1. Posted event is UPDATE_FAILED_EVT
+// 2. Posted event is invalid
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, processRemoveFailedHandler) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT)
+ );
+
+ // Run processRemoveFailedHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ CHECK_CONTEXT(name_remove, StateModel::END_ST, StateModel::END_EVT);
+
+ // Create and prep transaction, poised to run the handler but with an
+ // invalid event.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ StateModel::NOP_EVT)
+ );
+
+ // Running the handler should throw.
+ EXPECT_THROW(name_remove->processRemoveFailedHandler(),
+ SimpleRemoveWithoutDHCIDTransactionError);
+}
+
+// Tests the processRemoveFailedHandler functionality.
+// It verifies behavior for posted event of NO_MORE_SERVERS_EVT.
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, processRemoveFailedHandler_NoMoreServers) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::NO_MORE_SERVERS_EVT)
+ );
+
+ // Run processRemoveFailedHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ CHECK_CONTEXT(name_remove, StateModel::END_ST, StateModel::END_EVT);
+}
+
+// Tests the processRemoveFailedHandler functionality.
+// It verifies behavior for posted event of SERVER_IO_ERROR_EVT.
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, processRemoveFailedHandler_ServerIOError) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::SERVER_IO_ERROR_EVT)
+ );
+
+ // Run processRemoveFailedHandler.
+ EXPECT_NO_THROW(name_remove->processRemoveFailedHandler());
+
+ // Verify that a server was selected.
+ EXPECT_EQ(dhcp_ddns::ST_FAILED, name_remove->getNcrStatus());
+
+ // Verify that the model has ended. (Remember, the transaction failed NOT
+ // the model. The model should have ended normally.)
+ CHECK_CONTEXT(name_remove, StateModel::END_ST, StateModel::END_EVT);
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingFwdRRsHandler_SendUpdateException) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, FORWARD_CHG)
+ );
+
+ name_remove->simulate_send_exception_ = true;
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests removingRevPtrHandler with the following scenario:
+//
+// The request includes only a reverse change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The send update request fails due to an unexpected exception.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPtrsHandler_SendUpdateException) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, REVERSE_CHG)
+ );
+
+ name_remove->simulate_send_exception_ = true;
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests removingFwdRRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingFwdRRsHandler_BuildRequestException) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_FWD_RRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, FORWARD_CHG)
+ );
+
+ // Set the one-shot exception simulation flag.
+ name_remove->simulate_build_request_exception_ = true;
+
+ // Run removingFwdRRsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_remove->removingFwdRRsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_remove->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+// Tests removingRevPTRsHandler with the following scenario:
+//
+// The request includes only a forward change.
+// Initial posted event is SERVER_SELECTED_EVT.
+// The request build fails due to an unexpected exception.
+//
+TEST_F(SimpleRemoveWithoutDHCIDTransactionTest, removingRevPTRsHandler_BuildRequestException) {
+ SimpleRemoveWithoutDHCIDStubPtr name_remove;
+ // Create and prep a transaction, poised to run the handler.
+ ASSERT_NO_THROW(
+ name_remove = prepHandlerTest(SimpleRemoveWithoutDHCIDTransaction::REMOVING_REV_PTRS_ST,
+ NameChangeTransaction::SERVER_SELECTED_EVT, FORWARD_CHG)
+ );
+
+ // Set the one-shot exception simulation flag.
+ name_remove->simulate_build_request_exception_ = true;
+
+ // Run removingRevPtrsHandler to construct and send the request.
+ // This should fail with a build request throw which should be caught
+ // in the state handler.
+ ASSERT_NO_THROW(name_remove->removingRevPtrsHandler());
+
+ // Verify we did not attempt to send anything.
+ EXPECT_EQ(0, name_remove->getUpdateAttempts());
+
+ // Completion flags should be false.
+ EXPECT_FALSE(name_remove->getForwardChangeCompleted());
+ EXPECT_FALSE(name_remove->getReverseChangeCompleted());
+
+ // Since IO exceptions should be gracefully handled, any that occur
+ // are unanticipated, and deemed unrecoverable, so the transaction should
+ // be transitioned to failure.
+ CHECK_CONTEXT(name_remove, NameChangeTransaction::PROCESS_TRANS_FAILED_ST,
+ NameChangeTransaction::UPDATE_FAILED_EVT);
+}
+
+}
-#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
/* %% [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 */
+<<<<<<< HEAD
#define YY_NUM_RULES 227
#define YY_END_OF_BUFFER 228
+=======
+#define YY_NUM_RULES 231
+#define YY_END_OF_BUFFER 232
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
+<<<<<<< HEAD
static const flex_int16_t yy_accept[2243] =
{ 0,
220, 220, 0, 0, 0, 0, 0, 0, 0, 0,
209, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 211, 0, 0, 0, 0, 0, 0,
+=======
+static const flex_int16_t yy_accept[2328] =
+ { 0,
+ 224, 224, 0, 0, 0, 0, 0, 0, 0, 0,
+ 232, 230, 10, 11, 230, 1, 224, 221, 224, 224,
+ 230, 223, 222, 230, 230, 230, 230, 230, 217, 218,
+ 230, 230, 230, 219, 220, 5, 5, 5, 230, 230,
+ 230, 10, 11, 0, 0, 212, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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,
+ 224, 224, 0, 223, 224, 3, 2, 6, 0, 224,
+ 0, 0, 0, 0, 0, 0, 4, 0, 0, 9,
+
+ 0, 213, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 215, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 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, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 8, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 210, 212, 0,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 214, 216, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 96, 0,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 100, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 0, 225,
223, 0, 222, 221, 0, 0, 0, 0, 0, 0,
0, 182, 0, 181, 0, 0, 102, 0, 0, 0,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 229, 227, 0, 226, 225, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 186, 0,
+ 185, 0, 0, 106, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
99, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+=======
+ 0, 0, 0, 0, 0, 0, 0, 103, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 18, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 19, 0, 0, 0, 0, 0, 224, 221, 0,
0, 0, 0, 0, 0, 183, 0, 185, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 106, 0, 0, 0, 0, 0, 0, 86,
0, 0, 0, 0, 0, 0, 129, 0, 0, 0,
+=======
+ 0, 0, 0, 0, 0, 0, 0, 0, 19, 0,
+ 0, 0, 0, 0, 228, 225, 0, 0, 0, 0,
+ 0, 0, 0, 187, 0, 0, 189, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 110, 0, 0, 0, 0, 0, 0, 91, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 0, 0, 0, 0, 0, 133, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 85, 0, 0, 0, 0,
+ 0, 0, 0, 0, 90, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 90, 0, 0, 42, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 117,
+=======
+ 0, 0, 0, 95, 0, 42, 0, 0, 0, 0,
+ 0, 0, 0, 0, 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, 35, 0, 0, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 12, 191, 190, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 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,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 0, 37,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 89,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 101,
+=======
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 37, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 144, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 139, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 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, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 105, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 119, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 115, 0, 0,
+=======
+ 0, 0, 0, 0, 0, 0, 0, 123, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
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,
+<<<<<<< HEAD
0, 0, 0, 94, 0, 0, 0, 0, 0, 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,
+=======
+ 0, 0, 0, 0, 0, 0, 98, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 133, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 145, 113, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 80, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 164,
+=======
+ 0, 0, 137, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 149, 117, 0, 0, 0, 0, 0, 0, 122,
+ 36, 0, 0, 0, 0, 0, 0, 0, 50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 124,
+ 43, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 85, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 98, 0, 0, 0,
+=======
+ 0, 0, 0, 0, 0, 0, 0, 0, 168, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 134, 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, 102, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 138, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 40, 0,
0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 173,
0, 0, 0, 0, 0, 0, 0, 0, 0, 46,
64, 0, 0, 137, 0, 0, 0, 128, 0, 0,
+=======
+ 58, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40, 0,
+ 0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 125, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 0,
+ 0, 0, 0, 0, 0, 57, 0, 0, 0, 135,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 169, 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, 0, 0, 0, 0, 0, 0, 0,
+ 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, 0, 0, 174, 0,
+ 0, 0, 172, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 196, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 136, 0, 0,
+ 0, 0, 0, 0, 0, 140, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 120, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 134, 0, 0, 23,
+ 0, 145, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 178, 0, 93, 0,
+ 0, 0, 0, 88, 0, 0, 0, 0, 0, 0,
+ 148, 0, 38, 0, 167, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 0, 0, 0, 0, 0, 0, 0, 113, 114,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 92, 0, 0, 0, 0,
+ 0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 142, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 200, 0, 0, 89,
+
+ 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
+ 175, 0, 0, 173, 0, 0, 164, 163, 0, 0,
+ 0, 0, 0, 0, 0, 0, 22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 188, 0, 0, 0, 0,
+ 0, 128, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 157, 0, 0, 0, 166, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 146, 0, 15, 0, 0, 44, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 177, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 46, 64, 0, 0, 141,
+ 0, 0, 0, 132, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 56, 0,
+ 96, 0, 0, 194, 0, 0, 0, 0, 0, 0,
+ 199, 0, 116, 0, 0, 0, 206, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 56, 0, 92, 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,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 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, 150, 0, 62, 61, 20, 0, 175, 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, 130, 0, 0, 0, 47, 0, 0, 0,
+ 0, 0, 0, 202, 0, 0, 126, 31, 0, 0,
+ 0, 162, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 197, 0, 170, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 29,
+ 0, 0, 0, 0, 0, 28, 0, 0, 176, 0,
+ 0, 0, 55, 0, 0, 0, 211, 0, 0, 118,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 60, 0, 0, 0,
+ 0, 0, 0, 115, 0, 0, 0, 45, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 147,
+ 0, 0, 0, 30, 0, 0, 0, 0, 0, 198,
+ 0, 0, 0, 0, 0, 158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 21, 0, 0, 201, 0, 87, 0, 51,
+
+ 0, 0, 0, 0, 195, 0, 80, 0, 0, 193,
+ 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 0, 0, 0, 0, 17, 0, 0, 0, 0,
+ 0, 0, 182, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 155, 0, 0, 0, 131, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 101, 0,
+ 0, 0, 0, 0, 52, 0, 0, 0, 0, 48,
+ 160, 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, 183, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 161, 0, 171, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 108, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
149, 0, 0, 0, 0, 0, 0, 54, 0, 67,
78, 0, 0, 107, 0, 0, 70, 0, 0, 0,
204, 0, 0, 0, 0, 0, 69, 0, 148, 26,
199, 0
+=======
+ 0, 165, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 154, 0, 62, 61, 20,
+ 0, 179, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
+ 0, 112, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 153, 0,
+
+ 0, 0, 0, 0, 0, 54, 0, 67, 0, 49,
+ 181, 0, 107, 0, 0, 0, 0, 0, 0, 0,
+ 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 77, 0, 0, 0, 0, 0, 0, 16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 75, 0, 0, 0, 0, 0, 0,
+ 0, 0, 210, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 83, 33, 0, 0, 0, 76, 0,
+
+ 0, 0, 0, 159, 0, 0, 0, 0, 0, 0,
+ 204, 207, 180, 0, 127, 108, 0, 0, 0, 0,
+ 0, 0, 0, 82, 0, 0, 72, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 151, 0, 0,
+ 0, 0, 0, 0, 156, 0, 0, 74, 0, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
+ 0, 0, 0, 0, 0, 0, 0, 150, 0, 0,
+ 184, 0, 209, 205, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 73, 0, 0, 0, 0, 0, 27, 25,
+
+ 0, 0, 0, 0, 78, 0, 0, 111, 0, 0,
+ 70, 0, 79, 0, 0, 208, 0, 0, 0, 0,
+ 0, 69, 0, 152, 26, 203, 0
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
} ;
static const YY_CHAR yy_ec[256] =
5, 8, 9, 10, 11, 12, 13, 14, 15, 16,
14, 17, 14, 18, 14, 14, 14, 19, 5, 20,
5, 21, 22, 5, 23, 24, 25, 26, 27, 28,
- 5, 29, 5, 30, 5, 31, 5, 32, 33, 34,
- 5, 35, 36, 37, 38, 39, 40, 5, 41, 5,
- 42, 43, 44, 5, 45, 5, 46, 47, 48, 49,
+ 5, 29, 30, 31, 32, 33, 5, 34, 35, 36,
+ 5, 37, 38, 39, 40, 41, 42, 43, 44, 5,
+ 45, 46, 47, 5, 48, 5, 49, 50, 51, 52,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 5, 73, 5, 5, 5, 5, 5,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 5, 76, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5
} ;
-static const YY_CHAR yy_meta[74] =
+static const YY_CHAR yy_meta[77] =
{ 0,
1, 1, 2, 1, 1, 3, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1
+ 1, 1, 1, 1, 1, 1
} ;
+<<<<<<< HEAD
static const flex_int16_t yy_base[2251] =
{ 0,
0, 72, 21, 31, 43, 51, 54, 60, 91, 99,
2242, 2242, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 2250, 45, 2248, 45, 45, 45, 45, 45,
+=======
+static const flex_int16_t yy_base[2336] =
+ { 0,
+ 0, 75, 21, 28, 39, 47, 53, 61, 95, 103,
+ 2776, 2777, 31, 2772, 151, 0, 216, 2777, 223, 230,
+ 13, 237, 2777, 2752, 124, 17, 4, 34, 2777, 2777,
+ 23, 43, 64, 2777, 2777, 2777, 56, 2760, 2710, 0,
+ 2750, 106, 2767, 2, 274, 2777, 2706, 85, 90, 2712,
+ 98, 77, 231, 235, 97, 200, 304, 229, 2704, 318,
+ 218, 62, 219, 220, 214, 257, 2713, 298, 307, 342,
+ 328, 229, 2696, 21, 347, 392, 327, 2715, 293, 0,
+ 404, 420, 435, 452, 445, 2777, 0, 2777, 409, 460,
+ 203, 228, 317, 260, 354, 343, 2777, 2712, 2756, 2777,
+
+ 300, 2777, 474, 2743, 342, 254, 2709, 368, 17, 363,
+ 2748, 366, 402, 418, 335, 2752, 0, 538, 439, 2691,
+ 2688, 2692, 432, 2688, 299, 2696, 432, 2682, 2683, 2688,
+ 76, 2698, 2681, 2690, 2680, 2689, 390, 438, 63, 2682,
+ 2680, 428, 2731, 2735, 2678, 2671, 2727, 2664, 441, 2685,
+ 2685, 2679, 243, 2672, 2670, 2671, 2663, 2668, 2662, 444,
+ 2673, 395, 2658, 2657, 2671, 464, 2657, 434, 455, 2651,
+ 508, 242, 447, 2672, 2669, 2670, 458, 2668, 2706, 2705,
+ 475, 198, 2649, 472, 2650, 482, 2642, 2659, 2651, 2653,
+ 0, 484, 490, 507, 500, 514, 518, 2649, 2777, 2697,
+
+ 546, 551, 2643, 510, 544, 552, 556, 2700, 555, 2699,
+ 549, 2698, 2777, 2777, 598, 393, 561, 2654, 2646, 2633,
+ 2644, 2648, 2649, 2629, 2640, 2644, 2641, 2640, 465, 531,
+ 2681, 2642, 2623, 2620, 2628, 2623, 2637, 2633, 2624, 2620,
+ 2632, 2632, 2620, 2622, 2625, 2605, 2609, 2622, 2624, 2621,
+ 2613, 2603, 2621, 2777, 2606, 2615, 82, 2656, 2599, 2608,
+ 2653, 2597, 2607, 2610, 569, 2606, 2648, 2590, 2592, 2603,
+ 2644, 567, 2586, 16, 2599, 2579, 2594, 590, 2584, 2590,
+ 476, 2581, 2579, 2579, 2585, 2576, 2575, 2582, 2572, 2634,
+ 2587, 2586, 2580, 537, 2587, 2582, 2574, 2564, 2579, 2578,
+
+ 2573, 2577, 2558, 2574, 2560, 2566, 2573, 2555, 532, 2560,
+ 2557, 2556, 598, 2555, 2550, 2564, 576, 2563, 2609, 2565,
+ 575, 2556, 2544, 591, 2777, 2777, 592, 2777, 2777, 2542,
+ 470, 573, 596, 2593, 600, 2603, 593, 602, 2777, 2602,
+ 2777, 2596, 646, 2777, 2555, 593, 2532, 2541, 2592, 2549,
+ 2532, 2549, 2588, 2545, 2528, 2534, 2589, 2541, 2544, 2535,
+ 2538, 2524, 2535, 2582, 2576, 2531, 2528, 621, 2534, 2577,
+ 2509, 2570, 2520, 2515, 2509, 2511, 2514, 2564, 2518, 2507,
+ 2523, 2560, 2503, 669, 2517, 2502, 2501, 2514, 2512, 2510,
+ 2510, 2509, 2504, 2511, 2506, 2502, 611, 2500, 2503, 2498,
+
+ 2484, 2496, 2492, 2545, 603, 619, 2539, 2777, 2483, 2499,
+ 2536, 2483, 2482, 2481, 2474, 2476, 2488, 2479, 2486, 2467,
+ 2484, 2479, 342, 2529, 2479, 2476, 2479, 2777, 2478, 623,
+ 2468, 2480, 616, 2455, 2456, 2477, 2468, 2458, 2512, 2454,
+ 2468, 626, 2454, 2466, 2465, 2464, 2459, 2504, 2461, 2460,
+ 2459, 2458, 2441, 2449, 2502, 2458, 2438, 2499, 2777, 2438,
+ 2437, 678, 2450, 2448, 2777, 2777, 2448, 2437, 2429, 627,
+ 2486, 2490, 2489, 2777, 2488, 615, 2777, 654, 723, 2444,
+ 653, 2486, 2425, 2436, 2478, 2428, 2430, 2432, 2419, 2427,
+ 2415, 2777, 2420, 2413, 2425, 2428, 2415, 2414, 2777, 656,
+
+ 2416, 2413, 641, 2411, 2413, 2777, 2461, 2420, 2417, 2402,
+ 2416, 2414, 2414, 2408, 681, 2415, 2403, 2396, 2450, 2777,
+ 2394, 2410, 2447, 2405, 2403, 2401, 2402, 2386, 2395, 2440,
+ 2388, 2387, 2382, 2381, 2435, 2376, 649, 2395, 2369, 2376,
+ 2381, 2391, 2428, 2432, 2777, 2374, 2370, 698, 2368, 2423,
+ 2376, 2375, 2369, 2376, 2360, 2360, 2370, 2358, 2372, 2372,
+ 2360, 2356, 2354, 2777, 2414, 2777, 2353, 2364, 2406, 2348,
+ 2347, 2352, 2361, 2355, 2349, 2358, 2403, 2397, 2356, 2340,
+ 2335, 2355, 2330, 2336, 690, 2350, 2343, 2347, 2330, 2391,
+ 2329, 2329, 2383, 2325, 2326, 2325, 2323, 2340, 2777, 2336,
+
+ 2376, 2777, 2324, 2322, 2777, 2333, 2372, 2371, 2328, 2312,
+ 2329, 2372, 690, 2777, 2777, 2777, 678, 670, 676, 2309,
+ 704, 2777, 2319, 2318, 666, 2325, 2305, 2315, 2360, 2302,
+ 2358, 2300, 2310, 2355, 2297, 2304, 2297, 2299, 2308, 2290,
+ 2290, 2305, 2304, 2288, 688, 2302, 2301, 2301, 2283, 2288,
+ 2332, 2296, 2293, 2287, 2335, 2276, 2291, 2291, 2289, 2289,
+ 2777, 2274, 2271, 2332, 2284, 2276, 2282, 2273, 2281, 2266,
+ 2320, 2281, 2263, 2275, 2267, 693, 2258, 2257, 2251, 2256,
+ 2271, 2268, 2269, 2248, 2258, 2264, 2310, 2262, 2254, 2245,
+ 2777, 2246, 2248, 2243, 2256, 2248, 2247, 2252, 2294, 2293,
+
+ 2241, 720, 2250, 2290, 2232, 2288, 2232, 2235, 2228, 2777,
+ 2242, 2221, 2225, 2239, 2234, 2230, 2278, 2227, 2234, 2275,
+ 2777, 2217, 2231, 2230, 2233, 2214, 2269, 2268, 2208, 26,
+ 8, 68, 285, 307, 2777, 300, 387, 433, 747, 482,
+ 498, 580, 567, 703, 679, 677, 666, 691, 697, 690,
+ 2777, 706, 698, 2777, 719, 733, 733, 727, 740, 706,
+ 703, 703, 718, 730, 724, 713, 709, 723, 724, 774,
+ 737, 780, 737, 745, 778, 787, 739, 739, 740, 750,
+ 755, 741, 744, 747, 756, 756, 740, 800, 750, 760,
+ 763, 804, 764, 757, 761, 758, 760, 810, 811, 772,
+
+ 819, 773, 775, 2777, 778, 773, 764, 779, 784, 781,
+ 783, 785, 784, 772, 786, 784, 792, 831, 790, 838,
+ 839, 786, 778, 788, 839, 795, 847, 2777, 848, 798,
+ 800, 796, 790, 806, 794, 804, 856, 852, 812, 801,
+ 814, 2777, 804, 815, 804, 817, 807, 820, 867, 868,
+ 808, 819, 804, 827, 818, 807, 813, 871, 832, 816,
+ 828, 875, 876, 820, 878, 839, 834, 839, 837, 884,
+ 823, 835, 838, 842, 834, 831, 2777, 898, 854, 855,
+ 843, 857, 847, 850, 861, 846, 853, 859, 860, 852,
+ 866, 890, 882, 911, 912, 886, 859, 873, 878, 875,
+
+ 857, 864, 878, 926, 880, 877, 878, 876, 885, 2777,
+ 881, 876, 891, 888, 874, 876, 895, 891, 893, 882,
+ 889, 891, 900, 943, 906, 945, 904, 894, 892, 891,
+ 902, 898, 957, 901, 912, 897, 898, 904, 920, 916,
+ 911, 961, 2777, 922, 922, 915, 926, 924, 972, 911,
+ 913, 925, 933, 931, 918, 916, 981, 935, 921, 927,
+ 925, 2777, 2777, 935, 940, 945, 933, 943, 945, 2777,
+ 2777, 946, 933, 951, 938, 940, 933, 950, 2777, 939,
+ 957, 944, 997, 945, 1000, 943, 947, 965, 1009, 2777,
+ 2777, 951, 955, 954, 951, 967, 1015, 965, 955, 956,
+
+ 952, 965, 976, 977, 972, 973, 975, 968, 970, 966,
+ 972, 972, 974, 989, 972, 1034, 988, 993, 970, 993,
+ 979, 978, 2777, 985, 986, 1038, 1039, 988, 1001, 1042,
+ 997, 987, 1002, 996, 1004, 991, 1022, 1032, 1020, 1028,
+ 1040, 1057, 1003, 998, 1057, 1058, 1017, 1060, 2777, 1066,
+ 1006, 1022, 1026, 1070, 1017, 1016, 1011, 1012, 1024, 1019,
+ 1015, 1024, 1019, 1020, 1030, 1041, 1083, 1031, 1028, 1046,
+ 1038, 1033, 1094, 1048, 1049, 1040, 2777, 1054, 1043, 1046,
+ 1054, 1056, 1041, 1053, 1058, 1055, 1053, 1103, 1066, 1050,
+ 1051, 2777, 1067, 1070, 1053, 1070, 1065, 1117, 1057, 1076,
+
+ 2777, 1075, 1078, 1064, 1059, 1077, 1120, 1075, 1071, 1068,
+ 1124, 1125, 1084, 1070, 1088, 1088, 1088, 1089, 1090, 1076,
+ 1091, 1083, 1090, 1080, 1098, 1097, 1084, 1101, 2777, 1093,
+ 1099, 1102, 1150, 1094, 2777, 1097, 1102, 1150, 1098, 1110,
+ 1104, 1105, 1103, 1105, 1115, 1163, 1104, 1105, 1105, 1167,
+ 1108, 1120, 1113, 2777, 1109, 1117, 1115, 1169, 1108, 1129,
+ 1115, 1117, 1118, 1119, 1125, 1133, 1124, 1129, 1139, 1140,
+ 1141, 1146, 1190, 1158, 1187, 1170, 1162, 1167, 2777, 1150,
+ 1146, 1142, 1156, 1139, 1139, 2777, 1140, 1203, 1143, 2777,
+ 1154, 1144, 1164, 1163, 1154, 1165, 1211, 1161, 1170, 1163,
+
+ 1167, 1171, 1154, 1171, 1172, 1167, 1225, 1169, 2777, 1222,
+ 1166, 1169, 1187, 1169, 1170, 1170, 1191, 1188, 1176, 1194,
+ 1182, 1196, 1182, 1190, 1199, 1179, 1194, 1201, 1246, 1189,
+ 1243, 2777, 1249, 1250, 1189, 1199, 1209, 1193, 1213, 1201,
+ 1197, 1204, 1213, 1201, 1208, 1209, 1221, 1265, 1209, 1267,
+ 1208, 1207, 1211, 1228, 1272, 1219, 1218, 1224, 1222, 1220,
+ 1215, 1279, 1227, 1281, 1277, 1283, 2777, 1221, 1238, 1231,
+ 1222, 1241, 1229, 1239, 1240, 1236, 1249, 1249, 2777, 1233,
+ 1229, 1236, 2777, 1237, 1300, 1256, 1237, 1256, 1257, 1259,
+ 1301, 1251, 1308, 1309, 1259, 1264, 1258, 1256, 1267, 1266,
+
+ 1250, 1255, 1261, 1274, 2777, 1288, 1301, 1289, 1303, 1290,
+ 1325, 1262, 1284, 1279, 1279, 1283, 1331, 2777, 1271, 1271,
+ 1274, 1291, 1286, 1290, 1285, 2777, 1294, 1278, 1295, 1275,
+ 1296, 1286, 1285, 1341, 1292, 2777, 1309, 1309, 1350, 1294,
+ 1303, 1353, 1308, 1313, 1299, 1362, 1302, 1303, 1317, 1315,
+ 1307, 1313, 1309, 1327, 1328, 1329, 2777, 1368, 1320, 2777,
+ 1330, 2777, 1315, 1326, 1317, 1336, 1329, 1327, 1320, 1332,
+ 1379, 1340, 1329, 1336, 1337, 1343, 2777, 1336, 2777, 1391,
+ 1341, 1330, 1394, 2777, 1395, 1334, 1340, 1347, 1394, 1353,
+ 2777, 1354, 2777, 1341, 2777, 1341, 1344, 1358, 1363, 1346,
+
+ 1408, 1362, 1363, 1406, 1355, 1360, 1414, 1410, 1360, 1417,
+ 2777, 1365, 1362, 1420, 1421, 1375, 1376, 1378, 2777, 2777,
+ 1370, 1365, 1422, 1368, 1384, 1430, 1369, 1381, 1370, 1387,
+ 1430, 1413, 1414, 1407, 1438, 2777, 1393, 1386, 1395, 1386,
+ 1397, 2777, 1445, 1379, 1390, 1405, 1444, 1393, 1404, 1390,
+ 1406, 1407, 1404, 1451, 1411, 1413, 1402, 1412, 1418, 1405,
+ 1403, 1466, 1464, 1419, 1466, 1472, 1426, 2777, 1412, 1428,
+ 1419, 1422, 1431, 1432, 1429, 1419, 1422, 1422, 1423, 1434,
+ 1429, 1487, 1431, 1489, 1429, 1434, 1493, 1489, 1427, 1442,
+ 1435, 1438, 1451, 1452, 1450, 1502, 2777, 1448, 1454, 2777,
+
+ 2777, 1459, 1451, 1461, 1446, 1505, 1449, 1449, 1513, 1514,
+ 1455, 1465, 1517, 2777, 1462, 1463, 1465, 1521, 1459, 1462,
+ 2777, 1480, 1481, 2777, 1481, 1469, 2777, 2777, 1482, 1465,
+ 1485, 1486, 1472, 1474, 1536, 1483, 2777, 1538, 1484, 1478,
+ 1541, 1506, 1524, 1539, 1526, 2777, 1545, 1501, 1549, 1496,
+ 1546, 2777, 1491, 1553, 1500, 1494, 1491, 1494, 1496, 1554,
+ 1514, 1556, 1506, 1518, 1521, 1518, 1510, 1513, 1508, 1516,
+ 1507, 2777, 1515, 1530, 1515, 2777, 1517, 1574, 1519, 1576,
+ 1535, 1535, 1538, 1538, 1535, 1582, 1541, 1542, 1534, 1535,
+ 2777, 1536, 2777, 1546, 1538, 2777, 1544, 1550, 1551, 1548,
+
+ 1595, 1540, 1555, 1556, 1548, 2777, 1558, 1546, 1547, 1547,
+ 1553, 1552, 1550, 1607, 1565, 2777, 2777, 1609, 1553, 2777,
+ 1554, 1555, 1561, 2777, 1570, 1564, 1622, 1566, 1559, 1571,
+ 1566, 1576, 1587, 1580, 1586, 1576, 1634, 1584, 2777, 1593,
+ 2777, 1590, 1638, 2777, 1588, 1616, 1617, 1623, 1608, 1616,
+ 2777, 1645, 2777, 1600, 1585, 1648, 2777, 1649, 1603, 1608,
+ 1590, 1653, 1594, 1650, 1614, 1607, 1603, 1596, 1604, 1656,
+ 1611, 1612, 1602, 1607, 1619, 1673, 1624, 1675, 1622, 1672,
+ 1633, 1633, 1629, 1676, 1621, 1626, 1624, 1686, 1627, 1635,
+ 1641, 1629, 1691, 1687, 1647, 1694, 1652, 1641, 1635, 1698,
+
+ 1637, 1638, 1652, 1702, 1656, 1656, 1705, 1644, 1661, 1657,
+ 1655, 1662, 1646, 1707, 1708, 1709, 1669, 1662, 1661, 1661,
+ 1656, 1674, 2777, 1665, 1671, 1676, 1663, 1664, 1663, 1665,
+ 1723, 1666, 2777, 1662, 1680, 1732, 2777, 1687, 1701, 1715,
+ 1714, 1703, 1705, 2777, 1739, 1689, 2777, 2777, 1680, 1691,
+ 1743, 2777, 1697, 1687, 1692, 1691, 1744, 1699, 1704, 1690,
+ 1693, 1709, 1698, 1696, 1710, 1697, 2777, 1699, 2777, 1717,
+ 1704, 1716, 1763, 1703, 1708, 1771, 1716, 1726, 1727, 2777,
+ 1775, 1712, 1772, 1727, 1774, 2777, 1722, 1781, 2777, 1721,
+ 1736, 1724, 2777, 1734, 1735, 1787, 2777, 1742, 1746, 2777,
+
+ 1785, 1748, 1724, 1742, 1743, 1752, 1734, 1741, 1753, 1752,
+ 1743, 1796, 1745, 1741, 1804, 1743, 1744, 1807, 1803, 1809,
+ 1756, 1811, 1761, 1751, 1767, 1760, 2777, 1816, 1794, 1818,
+ 1800, 1815, 1821, 2777, 1767, 1823, 1762, 2777, 1764, 1766,
+ 1776, 1823, 1768, 1783, 1770, 1832, 1786, 1772, 1779, 1779,
+ 1837, 1791, 1792, 1779, 1781, 1795, 1781, 1846, 1796, 2777,
+ 1843, 1791, 1788, 2777, 1804, 1791, 1804, 1791, 1812, 2777,
+ 1809, 1857, 1807, 1804, 1805, 2777, 1861, 1817, 1800, 1802,
+ 1818, 1811, 1801, 1817, 1818, 1827, 1817, 1872, 1829, 1813,
+ 1822, 1871, 2777, 1826, 1878, 2777, 1824, 2777, 1818, 2777,
+
+ 1825, 1882, 1883, 1880, 2777, 1881, 2777, 1863, 1869, 2777,
+ 1841, 2777, 1885, 1834, 1845, 1846, 1831, 1832, 1840, 1897,
+ 2777, 1842, 1894, 1895, 1847, 2777, 1842, 1860, 1842, 1848,
+ 1861, 1856, 2777, 1853, 1858, 1856, 1911, 1852, 1866, 1916,
+ 1861, 1858, 1858, 2777, 1873, 1874, 1875, 2777, 1876, 1866,
+ 1878, 1926, 1876, 1928, 1867, 1875, 1876, 1889, 2777, 1890,
+ 1871, 1872, 1879, 1881, 2777, 1895, 1892, 1935, 1893, 2777,
+ 2777, 1897, 1923, 1924, 1922, 1885, 1885, 1894, 1901, 1894,
+ 1893, 1904, 1891, 2777, 1907, 1895, 1898, 1957, 1894, 1913,
+ 1955, 1916, 1909, 1908, 1917, 1919, 1923, 2777, 1962, 1914,
+
+ 2777, 1920, 1912, 1974, 1914, 1976, 1977, 1978, 1933, 1980,
+ 2777, 1919, 2777, 1977, 1936, 1937, 1924, 1932, 1943, 1930,
+ 1941, 1927, 1925, 1933, 1932, 1937, 1929, 1974, 1998, 1980,
+ 2000, 1950, 1939, 1952, 1942, 1959, 1958, 2002, 1943, 1962,
+ 1963, 2777, 1968, 1961, 2003, 1967, 1954, 1969, 2017, 1971,
+ 1974, 1969, 1974, 1963, 1972, 2777, 2026, 2777, 2777, 2777,
+ 1984, 2777, 2028, 1967, 2030, 2031, 1971, 2033, 1978, 2030,
+ 2031, 1990, 2033, 1976, 1980, 1998, 2042, 1998, 2025, 2777,
+ 2021, 2777, 1991, 1985, 1982, 2044, 2007, 2000, 1996, 2053,
+ 1993, 1995, 1994, 2001, 2047, 1998, 2060, 2001, 2777, 2006,
+
+ 2016, 2018, 2020, 2003, 2011, 2777, 2006, 2777, 2018, 2777,
+ 2777, 2024, 2777, 2026, 2026, 2017, 2076, 2017, 2027, 2012,
+ 2025, 2777, 2027, 2058, 2064, 2036, 2034, 2086, 2024, 2026,
+ 2023, 2047, 2777, 2034, 2041, 2042, 2045, 2095, 2035, 2777,
+ 2092, 2036, 2044, 2053, 2039, 2055, 2054, 2057, 2050, 2045,
+ 2045, 2057, 2054, 2777, 2065, 2053, 2109, 2057, 2069, 2097,
+ 2118, 2119, 2063, 2777, 2063, 2075, 2123, 2069, 2071, 2069,
+ 2070, 2128, 2777, 2078, 2065, 2080, 2085, 2077, 2083, 2135,
+ 2136, 2137, 2091, 2139, 2140, 2081, 2085, 2082, 2098, 2081,
+ 2093, 2087, 2149, 2777, 2777, 2094, 2105, 2152, 2777, 2106,
+
+ 2091, 2109, 2100, 2777, 2101, 2115, 2111, 2104, 2099, 2105,
+ 2777, 2777, 2777, 2163, 2777, 2777, 2103, 2111, 2106, 2162,
+ 2125, 2122, 2170, 2777, 2166, 2129, 2777, 2173, 2112, 2175,
+ 2115, 2128, 2127, 2128, 2118, 2130, 2126, 2777, 2121, 2184,
+ 2134, 2143, 2136, 2183, 2777, 2134, 2128, 2777, 2140, 2777,
+ 2187, 2193, 2132, 2148, 2196, 2149, 2198, 2199, 2777, 2153,
+ 2147, 2140, 2160, 2147, 2159, 2150, 2154, 2777, 2204, 2150,
+ 2777, 2160, 2777, 2777, 2151, 2159, 2209, 2166, 2159, 2171,
+ 2218, 2163, 2163, 2159, 2161, 2176, 2224, 2225, 2164, 2180,
+ 2165, 2182, 2777, 2230, 2174, 2181, 2233, 2174, 2777, 2777,
+
+ 2184, 2236, 2181, 2238, 2777, 2186, 2185, 2777, 2241, 2187,
+ 2777, 2181, 2777, 2181, 2198, 2777, 2199, 2247, 2190, 2249,
+ 2250, 2777, 2251, 2777, 2777, 2777, 2777, 2257, 2260, 2263,
+ 2264, 2266, 2269, 2272, 2275
+ } ;
+
+static const flex_int16_t yy_def[2336] =
+ { 0,
+ 2328, 2328, 2329, 2329, 2328, 2328, 2328, 2328, 2328, 2328,
+ 2327, 2327, 2327, 2327, 2327, 2330, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2331,
+ 2327, 2327, 2327, 2332, 15, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2333, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2330,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2334, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2331, 2327,
+
+ 2332, 2327, 2327, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2335, 45, 2333, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 2249, 2242, 2242,
2242, 2242, 2242, 2242, 2242, 2242, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 2250, 2242, 2242, 115,
+=======
+ 2334, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 45,
+
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2335, 2327, 2327, 118, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 2242, 45,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 2242, 2242,
2242, 2242, 2242, 2242, 2242, 45, 45, 45, 45, 45,
45, 2242, 45, 2242, 45, 115, 2242, 45, 45, 45,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 2327, 45, 118, 2327, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
2242, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
2242, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 2242, 45, 45, 45, 45, 45, 45, 2242,
45, 45, 45, 45, 45, 45, 2242, 45, 45, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 45, 2327, 2327, 2327, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 2327, 45, 118, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 2327, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2327,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
2242, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 2242, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 2242,
+=======
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2327, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+
+ 45, 2327, 45, 45, 2327, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 2327, 2327, 2327, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 45, 2242,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 2242,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
2242, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 2242, 45, 45, 45, 45, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2327,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2327, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
2242, 45, 45, 2242, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 2242,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 2242, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 2242, 45, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 2242, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 2242, 45, 45, 45, 45, 45, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2327,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 2242, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 2242, 2242, 45, 45, 45, 45,
45, 45, 2242, 2242, 45, 45, 45, 45, 45, 45,
45, 2242, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 2242, 2242, 2242, 45, 45, 45, 45, 45,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2327, 2327, 45, 45, 45, 45, 45, 45, 2327,
+ 2327, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2327,
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 2242, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 2242,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 2242, 45, 45, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 2242, 45, 45, 45, 45, 45, 45, 45, 45,
2242, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 2242, 45,
45, 45, 45, 45, 2242, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 2242, 45, 45,
+=======
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 45, 2327, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 2327,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 2242, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 2242, 45, 45, 45, 2242, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
2242, 45, 45, 45, 45, 45, 2242, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 2242, 45, 45, 45, 2242,
+=======
+ 45, 45, 45, 45, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 2327, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2327, 45, 45, 2327,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2327, 45, 2327, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 2327, 45, 2327, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 45, 45, 45, 45, 45, 45, 2327, 2327,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2327, 45, 45, 2327,
+
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 45, 2327, 45, 45, 2327, 2327, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 2327, 45, 45, 2327, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2327, 2327, 45, 45, 2327,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 2327, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 2327, 45, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 2242, 45, 2242, 45, 45, 2242,
45, 45, 45, 45, 45, 45, 45, 45, 45, 2242,
45, 45, 2242, 45, 2242, 45, 45, 2242, 45, 45,
2242, 45, 2242, 45, 45, 45, 2242, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 2242, 45, 45, 45, 2242, 45, 45, 45,
2242, 45, 45, 2242, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+=======
+ 45, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 2327, 2327, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2327, 45, 2327, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2327,
+ 45, 45, 45, 45, 45, 2327, 45, 45, 2327, 45,
+ 45, 45, 2327, 45, 45, 45, 2327, 45, 45, 2327,
+
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 2327, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2327,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 2327,
+ 45, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 2327, 45, 2327, 45, 2327,
+
+ 45, 45, 45, 45, 2327, 45, 2327, 45, 45, 2327,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 45, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 2327, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 45, 2327, 45, 45, 45, 45, 2327,
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+
+ 2327, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2327, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
2242, 45, 45, 2242, 45, 45, 45, 2242, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 2242, 45,
45, 45, 2242, 45, 45, 45, 45, 45, 2242, 45,
} ;
static const flex_int16_t yy_chk[2709] =
+=======
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2327, 45, 2327, 2327, 2327,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2327,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+
+ 45, 45, 45, 45, 45, 2327, 45, 2327, 45, 2327,
+ 2327, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2327, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 45, 45, 45, 45, 2327,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 2327, 45, 45, 45, 2327, 45,
+
+ 45, 45, 45, 2327, 45, 45, 45, 45, 45, 45,
+ 2327, 2327, 2327, 45, 2327, 2327, 45, 45, 45, 45,
+ 45, 45, 45, 2327, 45, 45, 2327, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+ 45, 45, 45, 45, 2327, 45, 45, 2327, 45, 2327,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2327, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2327, 45, 45,
+ 2327, 45, 2327, 2327, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2327, 45, 45, 45, 45, 45, 2327, 2327,
+
+ 45, 45, 45, 45, 2327, 45, 45, 2327, 45, 45,
+ 2327, 45, 2327, 45, 45, 2327, 45, 45, 45, 45,
+ 45, 2327, 45, 2327, 2327, 2327, 0, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327
+ } ;
+
+static const flex_int16_t yy_nxt[2854] =
+ { 0,
+ 2327, 13, 14, 13, 2327, 15, 16, 102, 17, 18,
+ 19, 20, 21, 22, 22, 22, 22, 22, 23, 24,
+ 86, 408, 37, 14, 37, 87, 25, 26, 38, 37,
+ 14, 37, 42, 27, 42, 38, 869, 2327, 28, 91,
+ 13, 14, 13, 92, 29, 91, 30, 103, 13, 14,
+ 13, 205, 25, 31, 13, 14, 13, 42, 40, 42,
+ 870, 32, 13, 14, 13, 91, 40, 33, 409, 170,
+ 93, 94, 92, 171, 34, 35, 13, 14, 13, 205,
+ 15, 16, 92, 17, 18, 19, 20, 21, 22, 22,
+ 22, 22, 22, 23, 24, 39, 13, 14, 13, 93,
+
+ 93, 25, 26, 39, 13, 14, 13, 42, 27, 42,
+ 135, 95, 136, 28, 109, 246, 41, 105, 106, 29,
+ 108, 30, 114, 137, 41, 234, 235, 25, 31, 96,
+ 388, 247, 89, 138, 89, 871, 32, 90, 90, 90,
+ 90, 90, 33, 109, 105, 106, 108, 389, 114, 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, 49, 50, 45, 51, 45,
+ 45, 52, 45, 45, 53, 45, 45, 45, 45, 54,
+ 55, 45, 56, 45, 45, 45, 57, 45, 45, 58,
+
+ 59, 60, 61, 62, 63, 64, 65, 66, 52, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 45, 45, 45, 45, 45, 81, 115, 82,
+ 82, 82, 82, 82, 81, 192, 84, 84, 84, 84,
+ 84, 108, 83, 85, 85, 85, 85, 85, 81, 83,
+ 84, 84, 84, 84, 84, 115, 83, 110, 314, 112,
+ 193, 105, 192, 83, 315, 111, 129, 108, 83, 130,
+ 131, 113, 140, 132, 133, 83, 142, 166, 139, 141,
+ 202, 167, 83, 110, 143, 112, 134, 193, 119, 83,
+ 45, 168, 192, 111, 120, 872, 45, 121, 45, 45,
+
+ 113, 45, 300, 301, 45, 102, 202, 45, 144, 117,
+ 264, 145, 45, 45, 265, 45, 45, 873, 146, 195,
+ 147, 115, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 103, 106, 564, 115, 45,
+ 149, 150, 114, 45, 151, 153, 194, 45, 190, 154,
+ 152, 211, 225, 155, 226, 45, 123, 874, 110, 45,
+ 124, 45, 118, 106, 125, 156, 111, 126, 186, 157,
+ 127, 161, 194, 201, 128, 194, 193, 211, 187, 162,
+ 158, 163, 159, 188, 160, 172, 164, 165, 344, 173,
+
+ 204, 208, 174, 206, 111, 275, 179, 180, 565, 175,
+ 176, 197, 201, 196, 177, 178, 112, 85, 85, 85,
+ 85, 85, 90, 90, 90, 90, 90, 204, 113, 208,
+ 83, 81, 206, 82, 82, 82, 82, 82, 241, 875,
+ 242, 209, 181, 89, 182, 89, 83, 183, 90, 90,
+ 90, 90, 90, 210, 276, 345, 83, 184, 85, 85,
+ 85, 85, 85, 81, 185, 84, 84, 84, 84, 84,
+ 209, 83, 83, 90, 90, 90, 90, 90, 83, 101,
+ 201, 210, 221, 228, 206, 876, 101, 250, 243, 259,
+ 251, 222, 229, 230, 252, 223, 285, 83, 216, 286,
+
+ 287, 244, 260, 288, 83, 245, 308, 289, 302, 217,
+ 208, 209, 303, 272, 280, 273, 304, 210, 291, 101,
+ 309, 324, 325, 101, 418, 358, 468, 101, 359, 281,
+ 282, 283, 879, 326, 419, 101, 469, 324, 313, 101,
+ 317, 101, 101, 214, 326, 319, 325, 335, 880, 325,
+ 324, 215, 215, 215, 215, 215, 292, 293, 294, 326,
+ 215, 215, 215, 215, 215, 215, 327, 295, 332, 296,
+ 329, 297, 298, 328, 299, 333, 335, 336, 337, 397,
+ 338, 340, 342, 332, 360, 461, 215, 215, 215, 215,
+ 215, 215, 361, 337, 332, 448, 432, 449, 362, 433,
+
+ 413, 333, 340, 339, 337, 336, 338, 340, 453, 346,
+ 342, 343, 343, 343, 343, 343, 470, 465, 465, 406,
+ 343, 343, 343, 343, 343, 343, 473, 471, 340, 475,
+ 476, 503, 881, 571, 882, 398, 470, 504, 399, 414,
+ 462, 617, 457, 465, 466, 470, 343, 343, 343, 343,
+ 343, 343, 473, 415, 471, 475, 546, 476, 475, 479,
+ 479, 479, 479, 479, 612, 481, 547, 617, 479, 479,
+ 479, 479, 479, 479, 520, 536, 537, 575, 585, 521,
+ 538, 576, 586, 605, 548, 572, 661, 618, 606, 619,
+ 612, 662, 648, 612, 479, 479, 479, 479, 479, 479,
+
+ 729, 683, 757, 616, 758, 649, 638, 650, 694, 754,
+ 639, 684, 759, 883, 761, 618, 755, 619, 640, 621,
+ 641, 642, 643, 644, 645, 842, 764, 884, 757, 885,
+ 522, 756, 758, 765, 886, 523, 45, 45, 45, 45,
+ 45, 759, 755, 816, 817, 45, 45, 45, 45, 45,
+ 45, 785, 877, 887, 786, 730, 888, 889, 890, 891,
+ 756, 892, 893, 878, 894, 895, 896, 843, 897, 898,
+ 899, 45, 45, 45, 45, 45, 45, 900, 901, 902,
+ 903, 904, 905, 906, 907, 910, 911, 908, 915, 893,
+ 892, 894, 896, 909, 895, 912, 913, 916, 914, 917,
+
+ 918, 919, 920, 921, 922, 923, 924, 925, 926, 927,
+ 928, 929, 930, 931, 932, 933, 934, 935, 936, 939,
+ 940, 941, 937, 942, 943, 944, 938, 945, 946, 947,
+ 948, 949, 950, 951, 952, 954, 955, 956, 957, 958,
+ 959, 960, 961, 962, 963, 964, 965, 966, 953, 968,
+ 967, 969, 970, 971, 972, 973, 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, 1010, 1011, 1012, 1015, 1016, 1017, 1009, 1020, 1018,
+
+ 1013, 1021, 1022, 1023, 1014, 1019, 1024, 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, 1037, 1064, 1065, 1038,
+ 1066, 1067, 1041, 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, 1094, 1095,
+ 1096, 1097, 1093, 1098, 1099, 1100, 1101, 1102, 1103, 1104,
+ 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114,
+
+ 1115, 1116, 1117, 1118, 1119, 1120, 1122, 1123, 1124, 1121,
+ 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, 1150, 1151, 1152, 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, 1177, 1180, 1181, 1178, 1182, 1183, 1184,
+ 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194,
+ 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1175, 1174, 1202,
+ 1176, 1177, 1178, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+
+ 1210, 1211, 1212, 1213, 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, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250,
+ 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1261,
+ 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1260,
+ 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280,
+ 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290,
+ 1291, 1292, 1293, 1233, 1294, 1295, 1296, 1297, 1298, 1299,
+ 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1309, 1308,
+
+ 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, 1306, 1308, 1309, 1310, 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, 1362, 1364, 1365, 1366, 1361,
+ 1367, 1368, 1369, 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,
+ 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406,
+
+ 1407, 1408, 1363, 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, 1435, 1434,
+ 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445,
+ 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455,
+ 1456, 1457, 1432, 1458, 1431, 1434, 1433, 1435, 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, 1495, 1496, 1497, 1498, 1499, 1500,
+
+ 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510,
+ 1511, 1512, 1513, 1514, 1515, 1516, 1517, 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, 1546, 1545, 1547, 1548, 1549, 1550, 1551,
+ 1552, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562,
+ 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1543, 1544,
+ 1571, 1572, 1518, 1545, 1573, 1574, 1575, 1576, 1577, 1578,
+ 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588,
+ 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1553, 1596, 1597,
+
+ 1598, 1599, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1600,
+ 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617,
+ 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1626, 1627, 1630,
+ 1628, 1625, 1629, 1631, 1632, 1633, 1634, 1635, 1636, 1637,
+ 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1646, 1647, 1648,
+ 1651, 1645, 1650, 1652, 1653, 1654, 1655, 1656, 1657, 1658,
+ 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668,
+ 1669, 1670, 1671, 1649, 1647, 1672, 1646, 1673, 1650, 1674,
+ 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684,
+ 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694,
+
+ 1695, 1649, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
+ 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713,
+ 1714, 1715, 1716, 1717, 1718, 1722, 1719, 1723, 1724, 1720,
+ 1725, 1726, 1721, 1727, 1728, 1729, 1730, 1731, 1732, 1733,
+ 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1742, 1741, 1743,
+ 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753,
+ 1754, 1757, 1758, 1759, 1755, 1760, 1761, 1762, 1763, 1764,
+ 1765, 1766, 1739, 1740, 1741, 1756, 1742, 1743, 1767, 1768,
+ 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778,
+ 1779, 1780, 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, 1832, 1831, 1833, 1834, 1835, 1836, 1837, 1838, 1839,
+ 1840, 1841, 1781, 1842, 1843, 1844, 1845, 1846, 1847, 1848,
+ 1849, 1850, 1851, 1852, 1853, 1854, 1830, 1855, 1829, 1831,
+ 1832, 1856, 1833, 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, 1906,
+ 1908, 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, 1968, 1969, 1970, 1971, 1967,
+ 1972, 1973, 1974, 1976, 1975, 1977, 1978, 1979, 1980, 1981,
+
+ 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
+ 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 1974,
+ 1975, 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, 2028, 2029, 2054, 2030, 2055, 2056,
+ 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066,
+ 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2076, 2077,
+
+ 2075, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086,
+ 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096,
+ 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2079,
+ 2081, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114,
+ 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124,
+ 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134,
+ 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144,
+ 2145, 2146, 2147, 2148, 2149, 2124, 2150, 2125, 2151, 2152,
+ 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2162, 2161,
+ 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172,
+
+ 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182,
+ 2183, 2184, 2185, 2186, 2160, 2161, 2187, 2188, 2189, 2190,
+ 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200,
+ 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210,
+ 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2193, 2219,
+ 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229,
+ 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239,
+ 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249,
+ 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259,
+ 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269,
+
+ 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2280,
+ 2279, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289,
+ 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299,
+ 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309,
+ 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319,
+ 2320, 2321, 2322, 2323, 2324, 2325, 2326, 12, 12, 12,
+ 36, 36, 36, 80, 99, 80, 101, 101, 101, 116,
+ 116, 116, 191, 868, 191, 212, 212, 212, 867, 866,
+ 865, 864, 863, 862, 861, 860, 859, 858, 857, 856,
+ 855, 854, 853, 852, 851, 850, 849, 848, 847, 846,
+
+ 845, 844, 841, 840, 839, 838, 837, 836, 835, 834,
+ 833, 832, 831, 830, 829, 828, 827, 826, 825, 824,
+ 823, 822, 821, 820, 819, 818, 815, 814, 813, 812,
+ 811, 810, 809, 808, 807, 806, 805, 804, 803, 802,
+ 801, 800, 799, 798, 797, 796, 795, 794, 793, 792,
+ 791, 790, 789, 788, 787, 784, 783, 782, 781, 780,
+ 779, 778, 777, 776, 775, 774, 773, 772, 771, 770,
+ 769, 768, 767, 766, 763, 762, 760, 754, 753, 752,
+ 751, 750, 749, 748, 747, 746, 745, 744, 743, 742,
+ 741, 740, 739, 738, 737, 736, 735, 734, 733, 732,
+
+ 731, 728, 727, 726, 725, 724, 723, 722, 721, 720,
+ 719, 718, 717, 716, 715, 714, 713, 712, 711, 710,
+ 709, 708, 707, 706, 705, 704, 703, 702, 701, 700,
+ 699, 698, 697, 696, 695, 693, 692, 691, 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, 660, 659, 658, 657, 656, 655,
+ 654, 653, 652, 651, 647, 646, 637, 636, 635, 634,
+ 633, 632, 631, 630, 629, 628, 627, 626, 625, 624,
+ 623, 622, 620, 616, 615, 614, 613, 611, 610, 609,
+
+ 608, 607, 604, 603, 602, 601, 600, 599, 598, 597,
+ 596, 595, 594, 593, 592, 591, 590, 589, 588, 587,
+ 584, 583, 582, 581, 580, 579, 578, 577, 574, 573,
+ 570, 569, 568, 567, 566, 563, 562, 561, 560, 559,
+ 558, 557, 556, 555, 554, 553, 552, 551, 550, 549,
+ 545, 544, 543, 542, 541, 540, 539, 535, 534, 533,
+ 532, 531, 530, 529, 528, 527, 526, 525, 524, 519,
+ 518, 517, 516, 515, 514, 513, 512, 511, 510, 509,
+ 508, 507, 506, 505, 502, 501, 500, 499, 498, 497,
+ 496, 495, 494, 493, 492, 491, 490, 489, 488, 487,
+
+ 486, 485, 484, 483, 482, 480, 478, 477, 474, 472,
+ 467, 464, 463, 460, 459, 458, 456, 455, 454, 452,
+ 451, 450, 447, 446, 445, 444, 443, 442, 441, 440,
+ 439, 438, 437, 436, 435, 434, 431, 430, 429, 428,
+ 427, 426, 425, 424, 423, 422, 421, 420, 417, 416,
+ 412, 411, 410, 407, 405, 404, 403, 402, 401, 400,
+ 396, 395, 394, 393, 392, 391, 390, 387, 386, 385,
+ 384, 383, 382, 381, 380, 379, 378, 377, 376, 375,
+ 374, 373, 372, 371, 370, 369, 368, 367, 366, 365,
+ 364, 363, 357, 356, 355, 354, 353, 352, 351, 350,
+
+ 349, 348, 347, 213, 341, 339, 334, 331, 330, 323,
+ 322, 321, 320, 318, 316, 312, 311, 310, 307, 306,
+ 305, 290, 284, 279, 278, 277, 274, 271, 270, 269,
+ 268, 267, 266, 263, 262, 261, 258, 257, 256, 255,
+ 254, 253, 249, 248, 240, 239, 238, 237, 236, 233,
+ 232, 231, 227, 224, 220, 219, 218, 213, 207, 203,
+ 200, 199, 198, 189, 169, 148, 122, 107, 104, 43,
+ 100, 98, 97, 88, 43, 2327, 11, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327
+ } ;
+
+static const flex_int16_t yy_chk[2854] =
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{ 0,
- 0, 1, 1, 1, 0, 1, 1, 0, 1, 1,
+ 0, 1, 1, 1, 0, 1, 1, 44, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+<<<<<<< HEAD
21, 691, 3, 3, 3, 21, 1, 1, 3, 44,
0, 1, 4, 4, 4, 13, 1, 13, 4, 27,
28, 1, 107, 1, 5, 5, 5, 26, 32, 1,
2, 25, 25, 25, 25, 25, 2, 52, 51, 54,
122, 55, 122, 2, 2, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+=======
+ 21, 274, 3, 3, 3, 21, 1, 1, 3, 4,
+ 4, 4, 13, 1, 13, 4, 730, 0, 1, 26,
+ 5, 5, 5, 27, 1, 31, 1, 44, 6, 6,
+ 6, 109, 1, 1, 7, 7, 7, 37, 7, 37,
+ 731, 1, 8, 8, 8, 26, 8, 1, 274, 74,
+ 28, 31, 27, 74, 1, 1, 2, 2, 2, 109,
+ 2, 2, 32, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 5, 9, 9, 9, 28,
+
+ 33, 2, 2, 6, 10, 10, 10, 42, 2, 42,
+ 62, 32, 62, 2, 52, 139, 9, 48, 49, 2,
+ 51, 2, 55, 62, 10, 131, 131, 2, 2, 33,
+ 257, 139, 25, 62, 25, 732, 2, 25, 25, 25,
+ 25, 25, 2, 52, 48, 49, 51, 257, 55, 2,
+ 2, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
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, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+<<<<<<< HEAD
15, 15, 15, 15, 15, 15, 15, 15, 17, 146,
17, 17, 17, 17, 17, 19, 62, 19, 19, 19,
19, 19, 146, 17, 20, 20, 20, 20, 20, 22,
2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242
+=======
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 17, 56, 17,
+ 17, 17, 17, 17, 19, 91, 19, 19, 19, 19,
+ 19, 63, 17, 20, 20, 20, 20, 20, 22, 19,
+ 22, 22, 22, 22, 22, 56, 20, 53, 182, 54,
+ 92, 58, 91, 22, 182, 53, 61, 63, 17, 61,
+ 61, 54, 64, 61, 61, 19, 65, 72, 63, 64,
+ 106, 72, 20, 53, 65, 54, 61, 92, 58, 22,
+ 45, 72, 94, 53, 58, 733, 45, 58, 45, 45,
+
+ 54, 45, 172, 172, 45, 101, 106, 45, 66, 57,
+ 153, 66, 45, 45, 153, 45, 57, 734, 66, 94,
+ 66, 79, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 101, 60, 423, 79, 57,
+ 68, 68, 77, 57, 68, 69, 93, 57, 79, 69,
+ 68, 115, 125, 69, 125, 57, 60, 736, 70, 57,
+ 60, 57, 57, 60, 60, 69, 70, 60, 77, 69,
+ 60, 71, 96, 105, 60, 93, 95, 115, 77, 71,
+ 70, 71, 70, 77, 70, 75, 71, 71, 216, 75,
+
+ 108, 112, 75, 110, 70, 162, 76, 76, 423, 75,
+ 75, 96, 105, 95, 75, 75, 76, 81, 81, 81,
+ 81, 81, 89, 89, 89, 89, 89, 108, 76, 112,
+ 81, 82, 110, 82, 82, 82, 82, 82, 137, 737,
+ 137, 113, 76, 83, 76, 83, 82, 76, 83, 83,
+ 83, 83, 83, 114, 162, 216, 81, 76, 85, 85,
+ 85, 85, 85, 84, 76, 84, 84, 84, 84, 84,
+ 113, 85, 82, 90, 90, 90, 90, 90, 84, 103,
+ 119, 114, 123, 127, 160, 738, 103, 142, 138, 149,
+ 142, 123, 127, 127, 142, 123, 168, 85, 119, 168,
+
+ 168, 138, 149, 169, 84, 138, 177, 169, 173, 119,
+ 181, 184, 173, 160, 166, 160, 173, 186, 171, 103,
+ 177, 192, 193, 103, 281, 229, 331, 103, 229, 166,
+ 166, 166, 740, 194, 281, 103, 331, 195, 181, 103,
+ 184, 103, 103, 118, 197, 186, 196, 204, 741, 193,
+ 192, 118, 118, 118, 118, 118, 171, 171, 171, 194,
+ 118, 118, 118, 118, 118, 118, 195, 171, 201, 171,
+ 197, 171, 171, 196, 171, 202, 204, 205, 206, 265,
+ 207, 209, 211, 217, 230, 321, 118, 118, 118, 118,
+ 118, 118, 230, 272, 201, 309, 294, 309, 230, 294,
+
+ 278, 202, 317, 313, 206, 205, 207, 209, 313, 217,
+ 211, 215, 215, 215, 215, 215, 332, 324, 327, 272,
+ 215, 215, 215, 215, 215, 215, 335, 333, 317, 337,
+ 338, 368, 742, 430, 743, 265, 346, 368, 265, 278,
+ 321, 476, 317, 324, 327, 332, 215, 215, 215, 215,
+ 215, 215, 335, 278, 333, 406, 405, 338, 337, 343,
+ 343, 343, 343, 343, 470, 346, 405, 476, 343, 343,
+ 343, 343, 343, 343, 384, 397, 397, 433, 442, 384,
+ 397, 433, 442, 462, 406, 430, 515, 478, 462, 478,
+ 481, 515, 503, 470, 343, 343, 343, 343, 343, 343,
+
+ 585, 537, 617, 548, 618, 503, 500, 503, 548, 621,
+ 500, 537, 619, 744, 621, 478, 613, 478, 500, 481,
+ 500, 500, 500, 500, 500, 702, 625, 745, 617, 746,
+ 384, 613, 618, 625, 747, 384, 479, 479, 479, 479,
+ 479, 619, 613, 676, 676, 479, 479, 479, 479, 479,
+ 479, 645, 739, 748, 645, 585, 749, 750, 752, 753,
+ 613, 755, 756, 739, 757, 758, 759, 702, 760, 761,
+ 762, 479, 479, 479, 479, 479, 479, 763, 764, 765,
+ 766, 767, 768, 769, 770, 772, 773, 771, 775, 756,
+ 755, 757, 759, 771, 758, 774, 774, 776, 774, 777,
+
+ 778, 779, 780, 781, 782, 783, 784, 785, 786, 787,
+ 788, 789, 790, 791, 792, 793, 794, 795, 796, 797,
+ 798, 799, 796, 800, 801, 802, 796, 803, 805, 806,
+ 807, 808, 809, 810, 811, 812, 813, 814, 815, 816,
+ 817, 818, 819, 820, 821, 822, 823, 824, 811, 825,
+ 824, 826, 827, 829, 830, 831, 832, 833, 834, 835,
+ 836, 837, 838, 839, 840, 841, 843, 844, 845, 846,
+ 847, 848, 849, 850, 851, 852, 853, 854, 855, 856,
+ 857, 858, 859, 860, 861, 862, 863, 864, 865, 866,
+ 867, 868, 869, 869, 870, 871, 872, 867, 874, 873,
+
+ 869, 875, 876, 878, 869, 873, 879, 880, 881, 882,
+ 883, 884, 885, 886, 887, 888, 889, 890, 891, 892,
+ 893, 894, 895, 896, 897, 898, 899, 900, 901, 902,
+ 903, 904, 905, 906, 907, 908, 909, 911, 912, 913,
+ 914, 915, 916, 917, 918, 919, 892, 920, 921, 893,
+ 922, 923, 896, 924, 925, 926, 927, 928, 929, 930,
+ 931, 932, 933, 934, 935, 936, 937, 938, 939, 940,
+ 941, 942, 944, 945, 946, 947, 948, 949, 950, 951,
+ 952, 953, 949, 954, 955, 956, 957, 958, 959, 960,
+ 961, 964, 965, 966, 967, 968, 969, 972, 973, 974,
+
+ 975, 976, 977, 978, 980, 981, 982, 983, 984, 981,
+ 985, 986, 987, 988, 989, 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, 1024, 1025, 1026, 1027,
+ 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037,
+ 1038, 1039, 1042, 1040, 1043, 1044, 1041, 1045, 1046, 1047,
+ 1048, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
+ 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1038, 1037, 1066,
+ 1039, 1040, 1041, 1067, 1068, 1069, 1070, 1071, 1072, 1073,
+
+ 1074, 1075, 1076, 1078, 1079, 1080, 1081, 1082, 1083, 1084,
+ 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1093, 1094, 1095,
+ 1096, 1097, 1098, 1099, 1100, 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, 1130, 1131, 1132, 1133, 1134, 1136, 1137, 1125,
+ 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
+ 1148, 1149, 1150, 1151, 1152, 1153, 1155, 1156, 1157, 1158,
+ 1159, 1160, 1161, 1098, 1162, 1163, 1164, 1165, 1166, 1167,
+ 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1177, 1176,
+
+ 1178, 1180, 1181, 1182, 1183, 1184, 1185, 1187, 1188, 1189,
+ 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200,
+ 1201, 1202, 1203, 1204, 1205, 1174, 1176, 1177, 1178, 1206,
+ 1207, 1208, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217,
+ 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227,
+ 1228, 1229, 1230, 1231, 1233, 1234, 1235, 1236, 1237, 1233,
+ 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, 1268,
+ 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278,
+
+ 1280, 1281, 1234, 1282, 1284, 1285, 1286, 1287, 1288, 1289,
+ 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299,
+ 1300, 1301, 1302, 1303, 1304, 1306, 1307, 1308, 1310, 1309,
+ 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1319, 1320, 1321,
+ 1322, 1323, 1324, 1325, 1327, 1328, 1329, 1330, 1331, 1332,
+ 1333, 1334, 1307, 1335, 1306, 1309, 1308, 1310, 1337, 1338,
+ 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348,
+ 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1358, 1359,
+ 1361, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
+ 1372, 1373, 1374, 1375, 1376, 1378, 1380, 1381, 1382, 1383,
+
+ 1385, 1386, 1387, 1388, 1389, 1390, 1392, 1394, 1396, 1397,
+ 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407,
+ 1408, 1409, 1410, 1412, 1413, 1414, 1415, 1416, 1417, 1418,
+ 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430,
+ 1431, 1432, 1433, 1435, 1434, 1437, 1438, 1439, 1440, 1441,
+ 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452,
+ 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1432, 1433,
+ 1461, 1462, 1404, 1434, 1463, 1464, 1465, 1466, 1467, 1469,
+ 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479,
+ 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1443, 1487, 1488,
+
+ 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1498, 1490,
+ 1499, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510,
+ 1511, 1512, 1513, 1515, 1516, 1517, 1518, 1519, 1520, 1523,
+ 1522, 1518, 1522, 1525, 1526, 1529, 1530, 1531, 1532, 1533,
+ 1534, 1535, 1536, 1538, 1539, 1540, 1541, 1542, 1543, 1544,
+ 1547, 1541, 1545, 1548, 1549, 1550, 1551, 1553, 1554, 1555,
+ 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565,
+ 1566, 1567, 1568, 1544, 1543, 1569, 1542, 1570, 1545, 1571,
+ 1573, 1574, 1575, 1577, 1578, 1579, 1580, 1581, 1582, 1583,
+ 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1592, 1594, 1595,
+
+ 1597, 1544, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605,
+ 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1618,
+ 1619, 1621, 1622, 1623, 1625, 1626, 1625, 1627, 1628, 1625,
+ 1629, 1630, 1625, 1631, 1632, 1633, 1634, 1635, 1636, 1637,
+ 1638, 1640, 1642, 1643, 1645, 1646, 1647, 1649, 1648, 1650,
+ 1652, 1654, 1655, 1656, 1658, 1659, 1660, 1661, 1662, 1663,
+ 1664, 1666, 1667, 1668, 1665, 1669, 1670, 1671, 1672, 1673,
+ 1674, 1675, 1646, 1647, 1648, 1665, 1649, 1650, 1676, 1677,
+ 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687,
+ 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, 1724, 1725, 1726, 1727,
+ 1728, 1729, 1730, 1731, 1732, 1734, 1735, 1736, 1738, 1739,
+ 1740, 1742, 1741, 1743, 1745, 1746, 1749, 1750, 1751, 1753,
+ 1754, 1755, 1688, 1756, 1757, 1758, 1759, 1760, 1761, 1762,
+ 1763, 1764, 1765, 1766, 1768, 1770, 1740, 1771, 1739, 1741,
+ 1742, 1772, 1743, 1773, 1774, 1775, 1776, 1777, 1778, 1779,
+ 1781, 1782, 1783, 1784, 1785, 1787, 1788, 1790, 1791, 1792,
+ 1794, 1795, 1796, 1798, 1799, 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, 1828, 1829, 1830, 1831, 1832, 1833, 1835, 1836, 1837,
+ 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848,
+ 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1829,
+ 1831, 1858, 1859, 1861, 1862, 1863, 1865, 1866, 1867, 1868,
+ 1869, 1871, 1872, 1873, 1874, 1875, 1877, 1878, 1879, 1880,
+ 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890,
+ 1891, 1892, 1894, 1895, 1897, 1899, 1901, 1902, 1903, 1897,
+ 1904, 1906, 1908, 1911, 1909, 1913, 1914, 1915, 1916, 1917,
+
+ 1918, 1919, 1920, 1922, 1923, 1924, 1925, 1927, 1928, 1929,
+ 1930, 1931, 1932, 1934, 1935, 1936, 1937, 1938, 1939, 1908,
+ 1909, 1940, 1941, 1942, 1943, 1945, 1946, 1947, 1949, 1950,
+ 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1960, 1961,
+ 1962, 1963, 1964, 1966, 1967, 1968, 1969, 1972, 1973, 1974,
+ 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1985,
+ 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+ 1996, 1997, 1999, 2000, 1973, 1974, 2002, 1975, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2014, 2015, 2016,
+ 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026,
+
+ 2024, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035,
+ 2036, 2037, 2038, 2039, 2040, 2041, 2043, 2044, 2045, 2046,
+ 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2028,
+ 2030, 2057, 2061, 2063, 2064, 2065, 2066, 2067, 2068, 2069,
+ 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079,
+ 2081, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091,
+ 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2100, 2101, 2102,
+ 2103, 2104, 2105, 2107, 2109, 2079, 2112, 2081, 2114, 2115,
+ 2116, 2117, 2118, 2119, 2120, 2121, 2123, 2124, 2126, 2125,
+ 2127, 2128, 2129, 2130, 2131, 2132, 2134, 2135, 2136, 2137,
+
+ 2138, 2139, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148,
+ 2149, 2150, 2151, 2152, 2124, 2125, 2153, 2155, 2156, 2157,
+ 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168,
+ 2169, 2170, 2171, 2172, 2174, 2175, 2176, 2177, 2178, 2179,
+ 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2160, 2188,
+ 2189, 2190, 2191, 2192, 2193, 2196, 2197, 2198, 2200, 2201,
+ 2202, 2203, 2205, 2206, 2207, 2208, 2209, 2210, 2214, 2217,
+ 2218, 2219, 2220, 2221, 2222, 2223, 2225, 2226, 2228, 2229,
+ 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2239, 2240,
+ 2241, 2242, 2243, 2244, 2246, 2247, 2249, 2251, 2252, 2253,
+
+ 2254, 2255, 2256, 2257, 2258, 2260, 2261, 2262, 2263, 2264,
+ 2263, 2265, 2266, 2267, 2269, 2270, 2272, 2275, 2276, 2277,
+ 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287,
+ 2288, 2289, 2290, 2291, 2292, 2294, 2295, 2296, 2297, 2298,
+ 2301, 2302, 2303, 2304, 2306, 2307, 2309, 2310, 2312, 2314,
+ 2315, 2317, 2318, 2319, 2320, 2321, 2323, 2328, 2328, 2328,
+ 2329, 2329, 2329, 2330, 2331, 2330, 2332, 2332, 2332, 2333,
+ 2333, 2333, 2334, 729, 2334, 2335, 2335, 2335, 728, 727,
+ 726, 725, 724, 723, 722, 720, 719, 718, 717, 716,
+ 715, 714, 713, 712, 711, 709, 708, 707, 706, 705,
+
+ 704, 703, 701, 700, 699, 698, 697, 696, 695, 694,
+ 693, 692, 690, 689, 688, 687, 686, 685, 684, 683,
+ 682, 681, 680, 679, 678, 677, 675, 674, 673, 672,
+ 671, 670, 669, 668, 667, 666, 665, 664, 663, 662,
+ 660, 659, 658, 657, 656, 655, 654, 653, 652, 651,
+ 650, 649, 648, 647, 646, 644, 643, 642, 641, 640,
+ 639, 638, 637, 636, 635, 634, 633, 632, 631, 630,
+ 629, 628, 627, 626, 624, 623, 620, 612, 611, 610,
+ 609, 608, 607, 606, 604, 603, 601, 600, 598, 597,
+ 596, 595, 594, 593, 592, 591, 590, 589, 588, 587,
+
+ 586, 584, 583, 582, 581, 580, 579, 578, 577, 576,
+ 575, 574, 573, 572, 571, 570, 569, 568, 567, 565,
+ 563, 562, 561, 560, 559, 558, 557, 556, 555, 554,
+ 553, 552, 551, 550, 549, 547, 546, 544, 543, 542,
+ 541, 540, 539, 538, 536, 535, 534, 533, 532, 531,
+ 530, 529, 528, 527, 526, 525, 524, 523, 522, 521,
+ 519, 518, 517, 516, 514, 513, 512, 511, 510, 509,
+ 508, 507, 505, 504, 502, 501, 498, 497, 496, 495,
+ 494, 493, 491, 490, 489, 488, 487, 486, 485, 484,
+ 483, 482, 480, 475, 473, 472, 471, 469, 468, 467,
+
+ 464, 463, 461, 460, 458, 457, 456, 455, 454, 453,
+ 452, 451, 450, 449, 448, 447, 446, 445, 444, 443,
+ 441, 440, 439, 438, 437, 436, 435, 434, 432, 431,
+ 429, 427, 426, 425, 424, 422, 421, 420, 419, 418,
+ 417, 416, 415, 414, 413, 412, 411, 410, 409, 407,
+ 404, 403, 402, 401, 400, 399, 398, 396, 395, 394,
+ 393, 392, 391, 390, 389, 388, 387, 386, 385, 383,
+ 382, 381, 380, 379, 378, 377, 376, 375, 374, 373,
+ 372, 371, 370, 369, 367, 366, 365, 364, 363, 362,
+ 361, 360, 359, 358, 357, 356, 355, 354, 353, 352,
+
+ 351, 350, 349, 348, 347, 345, 342, 340, 336, 334,
+ 330, 323, 322, 320, 319, 318, 316, 315, 314, 312,
+ 311, 310, 308, 307, 306, 305, 304, 303, 302, 301,
+ 300, 299, 298, 297, 296, 295, 293, 292, 291, 290,
+ 289, 288, 287, 286, 285, 284, 283, 282, 280, 279,
+ 277, 276, 275, 273, 271, 270, 269, 268, 267, 266,
+ 264, 263, 262, 261, 260, 259, 258, 256, 255, 253,
+ 252, 251, 250, 249, 248, 247, 246, 245, 244, 243,
+ 242, 241, 240, 239, 238, 237, 236, 235, 234, 233,
+ 232, 231, 228, 227, 226, 225, 224, 223, 222, 221,
+
+ 220, 219, 218, 212, 210, 208, 203, 200, 198, 190,
+ 189, 188, 187, 185, 183, 180, 179, 178, 176, 175,
+ 174, 170, 167, 165, 164, 163, 161, 159, 158, 157,
+ 156, 155, 154, 152, 151, 150, 148, 147, 146, 145,
+ 144, 143, 141, 140, 136, 135, 134, 133, 132, 130,
+ 129, 128, 126, 124, 122, 121, 120, 116, 111, 107,
+ 104, 99, 98, 78, 73, 67, 59, 50, 47, 43,
+ 41, 39, 38, 24, 14, 11, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+ 2327, 2327, 2327
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
} ;
static yy_state_type yy_last_accepting_state;
extern int yy_flex_debug;
int yy_flex_debug = 1;
+<<<<<<< HEAD
static const flex_int16_t yy_rule_linenum[227] =
+=======
+static const flex_int16_t yy_rule_linenum[231] =
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{ 0,
146, 148, 150, 155, 156, 161, 162, 163, 175, 178,
183, 190, 199, 208, 217, 226, 235, 244, 253, 263,
569, 578, 587, 596, 607, 616, 627, 638, 649, 660,
672, 684, 696, 707, 718, 727, 736, 745, 756, 765,
774, 785, 796, 807, 818, 829, 840, 851, 862, 873,
+<<<<<<< HEAD
883, 894, 903, 913, 927, 943, 952, 961, 970, 979,
988, 997, 1019, 1041, 1050, 1060, 1069, 1080, 1089, 1098,
2072, 2081, 2090, 2099, 2108, 2117, 2126, 2138, 2239, 2255,
2304, 2312, 2327, 2328, 2329, 2330, 2331, 2332, 2334, 2352,
2365, 2370, 2374, 2376, 2378, 2380
+=======
+ 882, 891, 900, 910, 921, 931, 942, 951, 961, 975,
+ 991, 1000, 1009, 1018, 1027, 1036, 1058, 1080, 1089, 1099,
+
+ 1108, 1119, 1128, 1137, 1146, 1155, 1164, 1175, 1186, 1197,
+ 1207, 1216, 1227, 1238, 1249, 1260, 1272, 1281, 1290, 1299,
+ 1308, 1317, 1326, 1335, 1344, 1353, 1363, 1374, 1386, 1395,
+ 1404, 1413, 1423, 1433, 1443, 1453, 1463, 1473, 1482, 1492,
+ 1501, 1510, 1519, 1528, 1538, 1548, 1557, 1567, 1576, 1585,
+ 1594, 1603, 1612, 1621, 1630, 1639, 1648, 1657, 1666, 1675,
+ 1684, 1693, 1702, 1711, 1720, 1729, 1738, 1747, 1756, 1765,
+ 1774, 1783, 1792, 1801, 1810, 1819, 1828, 1837, 1846, 1855,
+ 1864, 1873, 1882, 1894, 1906, 1916, 1926, 1936, 1946, 1956,
+ 1966, 1976, 1986, 1996, 2005, 2014, 2023, 2032, 2043, 2054,
+
+ 2067, 2080, 2093, 2102, 2111, 2120, 2129, 2138, 2147, 2156,
+ 2165, 2177, 2278, 2294, 2343, 2351, 2366, 2367, 2368, 2369,
+ 2370, 2371, 2373, 2391, 2404, 2409, 2413, 2415, 2417, 2419
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
} ;
/* The intent behind this definition is that it'll catch
/* To avoid the call to exit... oops! */
#define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
+<<<<<<< HEAD
#line 2190 "dhcp4_lexer.cc"
+=======
+#line 2252 "dhcp4_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
/* noyywrap disables automatic rewinding for the next file to parse. Since we
always parse only a single string, there's no need to do any wraps. And
using yywrap requires linking with -lfl, which provides the default yywrap
by moving it ahead by yyleng bytes. yyleng specifies the length of the
currently matched token. */
#define YY_USER_ACTION driver.loc_.columns(yyleng);
+<<<<<<< HEAD
#line 2216 "dhcp4_lexer.cc"
#line 2217 "dhcp4_lexer.cc"
+=======
+#line 2278 "dhcp4_lexer.cc"
+#line 2279 "dhcp4_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
#define INITIAL 0
#define COMMENT 1
}
+<<<<<<< HEAD
#line 2545 "dhcp4_lexer.cc"
+=======
+#line 2607 "dhcp4_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
+<<<<<<< HEAD
if ( yy_current_state >= 2243 )
+=======
+ if ( yy_current_state >= 2328 )
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
+<<<<<<< HEAD
while ( yy_current_state != 2242 );
+=======
+ while ( yy_current_state != 2327 );
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
{
if ( yy_act == 0 )
fprintf( stderr, "--scanner backing up\n" );
+<<<<<<< HEAD
else if ( yy_act < 227 )
fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
(long)yy_rule_linenum[yy_act], yytext );
fprintf( stderr, "--accepting default rule (\"%s\")\n",
yytext );
else if ( yy_act == 228 )
+=======
+ else if ( yy_act < 231 )
+ fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
+ (long)yy_rule_linenum[yy_act], yytext );
+ else if ( yy_act == 231 )
+ fprintf( stderr, "--accepting default rule (\"%s\")\n",
+ yytext );
+ else if ( yy_act == 232 )
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
fprintf( stderr, "--(end of buffer or a NUL)\n" );
else
fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
case isc::dhcp::Parser4Context::DHCP4:
case isc::dhcp::Parser4Context::SUBNET4:
case isc::dhcp::Parser4Context::SHARED_NETWORK:
- return isc::dhcp::Dhcp4Parser::make_DDNS_TTL_PERCENT(driver.loc_);
+ return isc::dhcp::Dhcp4Parser::make_DDNS_CONFLICT_RESOLUTION_MODE(driver.loc_);
default:
- return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl-percent", driver.loc_);
+ return isc::dhcp::Dhcp4Parser::make_STRING("ddns-conflict-resolution-mode", driver.loc_);
}
}
YY_BREAK
case 80:
YY_RULE_SETUP
#line 873 "dhcp4_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 882 "dhcp4_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_NO_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 891 "dhcp4_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_CHECK_EXISTS_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 900 "dhcp4_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_NO_CHECK_WITHOUT_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 910 "dhcp4_lexer.ll"
+{
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::DHCP4:
+ case isc::dhcp::Parser4Context::SUBNET4:
+ case isc::dhcp::Parser4Context::SHARED_NETWORK:
+ return isc::dhcp::Dhcp4Parser::make_DDNS_TTL_PERCENT(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl-percent", driver.loc_);
+ }
+}
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 921 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 81:
+case 86:
YY_RULE_SETUP
-#line 883 "dhcp4_lexer.ll"
+#line 931 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 82:
+case 87:
YY_RULE_SETUP
-#line 894 "dhcp4_lexer.ll"
+#line 942 "dhcp4_lexer.ll"
{
switch (driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 83:
+case 88:
YY_RULE_SETUP
-#line 903 "dhcp4_lexer.ll"
+#line 951 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 84:
+case 89:
YY_RULE_SETUP
-#line 913 "dhcp4_lexer.ll"
+#line 961 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 85:
+case 90:
YY_RULE_SETUP
-#line 927 "dhcp4_lexer.ll"
+#line 975 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::LEASE_DATABASE:
}
}
YY_BREAK
-case 86:
+case 91:
YY_RULE_SETUP
-#line 943 "dhcp4_lexer.ll"
+#line 991 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DATA:
}
}
YY_BREAK
-case 87:
+case 92:
YY_RULE_SETUP
-#line 952 "dhcp4_lexer.ll"
+#line 1000 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DATA:
}
}
YY_BREAK
-case 88:
+case 93:
YY_RULE_SETUP
-#line 961 "dhcp4_lexer.ll"
+#line 1009 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DATA:
}
}
YY_BREAK
-case 89:
+case 94:
YY_RULE_SETUP
-#line 970 "dhcp4_lexer.ll"
+#line 1018 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
-case 90:
+case 95:
YY_RULE_SETUP
-#line 979 "dhcp4_lexer.ll"
+#line 1027 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::POOLS:
}
}
YY_BREAK
-case 91:
+case 96:
YY_RULE_SETUP
-#line 988 "dhcp4_lexer.ll"
+#line 1036 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::POOLS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 93:
YY_RULE_SETUP
#line 1019 "dhcp4_lexer.ll"
+=======
+case 97:
+YY_RULE_SETUP
+#line 1058 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 94:
YY_RULE_SETUP
#line 1041 "dhcp4_lexer.ll"
+=======
+case 98:
+YY_RULE_SETUP
+#line 1080 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 95:
YY_RULE_SETUP
#line 1050 "dhcp4_lexer.ll"
+=======
+case 99:
+YY_RULE_SETUP
+#line 1089 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 96:
YY_RULE_SETUP
#line 1060 "dhcp4_lexer.ll"
+=======
+case 100:
+YY_RULE_SETUP
+#line 1099 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 97:
YY_RULE_SETUP
#line 1069 "dhcp4_lexer.ll"
+=======
+case 101:
+YY_RULE_SETUP
+#line 1108 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 98:
YY_RULE_SETUP
#line 1080 "dhcp4_lexer.ll"
+=======
+case 102:
+YY_RULE_SETUP
+#line 1119 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 99:
YY_RULE_SETUP
#line 1089 "dhcp4_lexer.ll"
+=======
+case 103:
+YY_RULE_SETUP
+#line 1128 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 100:
YY_RULE_SETUP
#line 1098 "dhcp4_lexer.ll"
+=======
+case 104:
+YY_RULE_SETUP
+#line 1137 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 101:
YY_RULE_SETUP
#line 1107 "dhcp4_lexer.ll"
+=======
+case 105:
+YY_RULE_SETUP
+#line 1146 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 102:
YY_RULE_SETUP
#line 1116 "dhcp4_lexer.ll"
+=======
+case 106:
+YY_RULE_SETUP
+#line 1155 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 103:
YY_RULE_SETUP
#line 1125 "dhcp4_lexer.ll"
+=======
+case 107:
+YY_RULE_SETUP
+#line 1164 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 104:
YY_RULE_SETUP
#line 1136 "dhcp4_lexer.ll"
+=======
+case 108:
+YY_RULE_SETUP
+#line 1175 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 105:
YY_RULE_SETUP
#line 1147 "dhcp4_lexer.ll"
+=======
+case 109:
+YY_RULE_SETUP
+#line 1186 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 106:
YY_RULE_SETUP
#line 1158 "dhcp4_lexer.ll"
+=======
+case 110:
+YY_RULE_SETUP
+#line 1197 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 107:
YY_RULE_SETUP
#line 1168 "dhcp4_lexer.ll"
+=======
+case 111:
+YY_RULE_SETUP
+#line 1207 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 108:
YY_RULE_SETUP
#line 1177 "dhcp4_lexer.ll"
+=======
+case 112:
+YY_RULE_SETUP
+#line 1216 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 109:
YY_RULE_SETUP
#line 1188 "dhcp4_lexer.ll"
+=======
+case 113:
+YY_RULE_SETUP
+#line 1227 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 110:
YY_RULE_SETUP
#line 1199 "dhcp4_lexer.ll"
+=======
+case 114:
+YY_RULE_SETUP
+#line 1238 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 111:
YY_RULE_SETUP
#line 1210 "dhcp4_lexer.ll"
+=======
+case 115:
+YY_RULE_SETUP
+#line 1249 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 112:
YY_RULE_SETUP
#line 1221 "dhcp4_lexer.ll"
+=======
+case 116:
+YY_RULE_SETUP
+#line 1260 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 113:
YY_RULE_SETUP
#line 1233 "dhcp4_lexer.ll"
+=======
+case 117:
+YY_RULE_SETUP
+#line 1272 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 114:
YY_RULE_SETUP
#line 1242 "dhcp4_lexer.ll"
+=======
+case 118:
+YY_RULE_SETUP
+#line 1281 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::LOGGERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 115:
YY_RULE_SETUP
#line 1251 "dhcp4_lexer.ll"
+=======
+case 119:
+YY_RULE_SETUP
+#line 1290 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 116:
YY_RULE_SETUP
#line 1260 "dhcp4_lexer.ll"
+=======
+case 120:
+YY_RULE_SETUP
+#line 1299 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::LOGGERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 117:
YY_RULE_SETUP
#line 1269 "dhcp4_lexer.ll"
+=======
+case 121:
+YY_RULE_SETUP
+#line 1308 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 118:
YY_RULE_SETUP
#line 1278 "dhcp4_lexer.ll"
+=======
+case 122:
+YY_RULE_SETUP
+#line 1317 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 119:
YY_RULE_SETUP
#line 1287 "dhcp4_lexer.ll"
+=======
+case 123:
+YY_RULE_SETUP
+#line 1326 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 120:
YY_RULE_SETUP
#line 1296 "dhcp4_lexer.ll"
+=======
+case 124:
+YY_RULE_SETUP
+#line 1335 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 121:
YY_RULE_SETUP
#line 1305 "dhcp4_lexer.ll"
+=======
+case 125:
+YY_RULE_SETUP
+#line 1344 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::LOGGERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 122:
YY_RULE_SETUP
#line 1314 "dhcp4_lexer.ll"
+=======
+case 126:
+YY_RULE_SETUP
+#line 1353 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 123:
YY_RULE_SETUP
#line 1324 "dhcp4_lexer.ll"
+=======
+case 127:
+YY_RULE_SETUP
+#line 1363 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 124:
YY_RULE_SETUP
#line 1335 "dhcp4_lexer.ll"
+=======
+case 128:
+YY_RULE_SETUP
+#line 1374 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 125:
YY_RULE_SETUP
#line 1347 "dhcp4_lexer.ll"
+=======
+case 129:
+YY_RULE_SETUP
+#line 1386 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CLIENT_CLASSES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 126:
YY_RULE_SETUP
#line 1356 "dhcp4_lexer.ll"
+=======
+case 130:
+YY_RULE_SETUP
+#line 1395 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CLIENT_CLASSES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 127:
YY_RULE_SETUP
#line 1365 "dhcp4_lexer.ll"
+=======
+case 131:
+YY_RULE_SETUP
+#line 1404 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CLIENT_CLASSES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 128:
YY_RULE_SETUP
#line 1374 "dhcp4_lexer.ll"
+=======
+case 132:
+YY_RULE_SETUP
+#line 1413 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 129:
YY_RULE_SETUP
#line 1384 "dhcp4_lexer.ll"
+=======
+case 133:
+YY_RULE_SETUP
+#line 1423 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 130:
YY_RULE_SETUP
#line 1394 "dhcp4_lexer.ll"
+=======
+case 134:
+YY_RULE_SETUP
+#line 1433 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 131:
YY_RULE_SETUP
#line 1404 "dhcp4_lexer.ll"
+=======
+case 135:
+YY_RULE_SETUP
+#line 1443 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 132:
YY_RULE_SETUP
#line 1414 "dhcp4_lexer.ll"
+=======
+case 136:
+YY_RULE_SETUP
+#line 1453 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 133:
YY_RULE_SETUP
#line 1424 "dhcp4_lexer.ll"
+=======
+case 137:
+YY_RULE_SETUP
+#line 1463 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 134:
YY_RULE_SETUP
#line 1434 "dhcp4_lexer.ll"
+=======
+case 138:
+YY_RULE_SETUP
+#line 1473 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RESERVATIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 135:
YY_RULE_SETUP
#line 1443 "dhcp4_lexer.ll"
+=======
+case 139:
+YY_RULE_SETUP
+#line 1482 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 136:
YY_RULE_SETUP
#line 1453 "dhcp4_lexer.ll"
+=======
+case 140:
+YY_RULE_SETUP
+#line 1492 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DATA:
}
}
YY_BREAK
+<<<<<<< HEAD
case 137:
YY_RULE_SETUP
#line 1462 "dhcp4_lexer.ll"
+=======
+case 141:
+YY_RULE_SETUP
+#line 1501 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 138:
YY_RULE_SETUP
#line 1471 "dhcp4_lexer.ll"
+=======
+case 142:
+YY_RULE_SETUP
+#line 1510 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 139:
YY_RULE_SETUP
#line 1480 "dhcp4_lexer.ll"
+=======
+case 143:
+YY_RULE_SETUP
+#line 1519 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 140:
YY_RULE_SETUP
#line 1489 "dhcp4_lexer.ll"
+=======
+case 144:
+YY_RULE_SETUP
+#line 1528 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 141:
YY_RULE_SETUP
#line 1499 "dhcp4_lexer.ll"
+=======
+case 145:
+YY_RULE_SETUP
+#line 1538 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RELAY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 142:
YY_RULE_SETUP
#line 1509 "dhcp4_lexer.ll"
+=======
+case 146:
+YY_RULE_SETUP
+#line 1548 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::RELAY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 143:
YY_RULE_SETUP
#line 1518 "dhcp4_lexer.ll"
+=======
+case 147:
+YY_RULE_SETUP
+#line 1557 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 144:
YY_RULE_SETUP
#line 1528 "dhcp4_lexer.ll"
+=======
+case 148:
+YY_RULE_SETUP
+#line 1567 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 145:
YY_RULE_SETUP
#line 1537 "dhcp4_lexer.ll"
+=======
+case 149:
+YY_RULE_SETUP
+#line 1576 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 146:
YY_RULE_SETUP
#line 1546 "dhcp4_lexer.ll"
+=======
+case 150:
+YY_RULE_SETUP
+#line 1585 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 147:
YY_RULE_SETUP
#line 1555 "dhcp4_lexer.ll"
+=======
+case 151:
+YY_RULE_SETUP
+#line 1594 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 148:
YY_RULE_SETUP
#line 1564 "dhcp4_lexer.ll"
+=======
+case 152:
+YY_RULE_SETUP
+#line 1603 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 149:
YY_RULE_SETUP
#line 1573 "dhcp4_lexer.ll"
+=======
+case 153:
+YY_RULE_SETUP
+#line 1612 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 150:
YY_RULE_SETUP
#line 1582 "dhcp4_lexer.ll"
+=======
+case 154:
+YY_RULE_SETUP
+#line 1621 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 151:
YY_RULE_SETUP
#line 1591 "dhcp4_lexer.ll"
+=======
+case 155:
+YY_RULE_SETUP
+#line 1630 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 152:
YY_RULE_SETUP
#line 1600 "dhcp4_lexer.ll"
+=======
+case 156:
+YY_RULE_SETUP
+#line 1639 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 153:
YY_RULE_SETUP
#line 1609 "dhcp4_lexer.ll"
+=======
+case 157:
+YY_RULE_SETUP
+#line 1648 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 154:
YY_RULE_SETUP
#line 1618 "dhcp4_lexer.ll"
+=======
+case 158:
+YY_RULE_SETUP
+#line 1657 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 155:
YY_RULE_SETUP
#line 1627 "dhcp4_lexer.ll"
+=======
+case 159:
+YY_RULE_SETUP
+#line 1666 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 156:
YY_RULE_SETUP
#line 1636 "dhcp4_lexer.ll"
+=======
+case 160:
+YY_RULE_SETUP
+#line 1675 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 157:
YY_RULE_SETUP
#line 1645 "dhcp4_lexer.ll"
+=======
+case 161:
+YY_RULE_SETUP
+#line 1684 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 158:
YY_RULE_SETUP
#line 1654 "dhcp4_lexer.ll"
+=======
+case 162:
+YY_RULE_SETUP
+#line 1693 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 159:
YY_RULE_SETUP
#line 1663 "dhcp4_lexer.ll"
+=======
+case 163:
+YY_RULE_SETUP
+#line 1702 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CONTROL_SOCKET:
}
}
YY_BREAK
+<<<<<<< HEAD
case 160:
YY_RULE_SETUP
#line 1672 "dhcp4_lexer.ll"
+=======
+case 164:
+YY_RULE_SETUP
+#line 1711 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CONTROL_SOCKET:
}
}
YY_BREAK
+<<<<<<< HEAD
case 161:
YY_RULE_SETUP
#line 1681 "dhcp4_lexer.ll"
+=======
+case 165:
+YY_RULE_SETUP
+#line 1720 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 162:
YY_RULE_SETUP
#line 1690 "dhcp4_lexer.ll"
+=======
+case 166:
+YY_RULE_SETUP
+#line 1729 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
}
}
YY_BREAK
+<<<<<<< HEAD
case 163:
YY_RULE_SETUP
#line 1699 "dhcp4_lexer.ll"
+=======
+case 167:
+YY_RULE_SETUP
+#line 1738 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
}
}
YY_BREAK
+<<<<<<< HEAD
case 164:
YY_RULE_SETUP
#line 1708 "dhcp4_lexer.ll"
+=======
+case 168:
+YY_RULE_SETUP
+#line 1747 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
}
}
YY_BREAK
+<<<<<<< HEAD
case 165:
YY_RULE_SETUP
#line 1717 "dhcp4_lexer.ll"
+=======
+case 169:
+YY_RULE_SETUP
+#line 1756 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 166:
YY_RULE_SETUP
#line 1726 "dhcp4_lexer.ll"
+=======
+case 170:
+YY_RULE_SETUP
+#line 1765 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 167:
YY_RULE_SETUP
#line 1735 "dhcp4_lexer.ll"
+=======
+case 171:
+YY_RULE_SETUP
+#line 1774 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 168:
YY_RULE_SETUP
#line 1744 "dhcp4_lexer.ll"
+=======
+case 172:
+YY_RULE_SETUP
+#line 1783 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 169:
YY_RULE_SETUP
#line 1753 "dhcp4_lexer.ll"
+=======
+case 173:
+YY_RULE_SETUP
+#line 1792 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 170:
YY_RULE_SETUP
#line 1762 "dhcp4_lexer.ll"
+=======
+case 174:
+YY_RULE_SETUP
+#line 1801 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 171:
YY_RULE_SETUP
#line 1771 "dhcp4_lexer.ll"
+=======
+case 175:
+YY_RULE_SETUP
+#line 1810 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 172:
YY_RULE_SETUP
#line 1780 "dhcp4_lexer.ll"
+=======
+case 176:
+YY_RULE_SETUP
+#line 1819 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 173:
YY_RULE_SETUP
#line 1789 "dhcp4_lexer.ll"
+=======
+case 177:
+YY_RULE_SETUP
+#line 1828 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 174:
YY_RULE_SETUP
#line 1798 "dhcp4_lexer.ll"
+=======
+case 178:
+YY_RULE_SETUP
+#line 1837 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 175:
YY_RULE_SETUP
#line 1807 "dhcp4_lexer.ll"
+=======
+case 179:
+YY_RULE_SETUP
+#line 1846 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 176:
YY_RULE_SETUP
#line 1816 "dhcp4_lexer.ll"
+=======
+case 180:
+YY_RULE_SETUP
+#line 1855 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 177:
YY_RULE_SETUP
#line 1825 "dhcp4_lexer.ll"
+=======
+case 181:
+YY_RULE_SETUP
+#line 1864 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 178:
YY_RULE_SETUP
#line 1834 "dhcp4_lexer.ll"
+=======
+case 182:
+YY_RULE_SETUP
+#line 1873 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 179:
YY_RULE_SETUP
#line 1843 "dhcp4_lexer.ll"
+=======
+case 183:
+YY_RULE_SETUP
+#line 1882 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 180:
YY_RULE_SETUP
#line 1855 "dhcp4_lexer.ll"
+=======
+case 184:
+YY_RULE_SETUP
+#line 1894 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 181:
YY_RULE_SETUP
#line 1867 "dhcp4_lexer.ll"
+=======
+case 185:
+YY_RULE_SETUP
+#line 1906 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 182:
YY_RULE_SETUP
#line 1877 "dhcp4_lexer.ll"
+=======
+case 186:
+YY_RULE_SETUP
+#line 1916 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 183:
YY_RULE_SETUP
#line 1887 "dhcp4_lexer.ll"
+=======
+case 187:
+YY_RULE_SETUP
+#line 1926 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 184:
YY_RULE_SETUP
#line 1897 "dhcp4_lexer.ll"
+=======
+case 188:
+YY_RULE_SETUP
+#line 1936 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 185:
YY_RULE_SETUP
#line 1907 "dhcp4_lexer.ll"
+=======
+case 189:
+YY_RULE_SETUP
+#line 1946 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 186:
YY_RULE_SETUP
#line 1917 "dhcp4_lexer.ll"
+=======
+case 190:
+YY_RULE_SETUP
+#line 1956 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 187:
YY_RULE_SETUP
#line 1927 "dhcp4_lexer.ll"
+=======
+case 191:
+YY_RULE_SETUP
+#line 1966 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 188:
YY_RULE_SETUP
#line 1937 "dhcp4_lexer.ll"
+=======
+case 192:
+YY_RULE_SETUP
+#line 1976 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 189:
YY_RULE_SETUP
#line 1947 "dhcp4_lexer.ll"
+=======
+case 193:
+YY_RULE_SETUP
+#line 1986 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 190:
YY_RULE_SETUP
#line 1957 "dhcp4_lexer.ll"
+=======
+case 194:
+YY_RULE_SETUP
+#line 1996 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 191:
YY_RULE_SETUP
#line 1966 "dhcp4_lexer.ll"
+=======
+case 195:
+YY_RULE_SETUP
+#line 2005 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 192:
YY_RULE_SETUP
#line 1975 "dhcp4_lexer.ll"
+=======
+case 196:
+YY_RULE_SETUP
+#line 2014 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 193:
YY_RULE_SETUP
#line 1984 "dhcp4_lexer.ll"
+=======
+case 197:
+YY_RULE_SETUP
+#line 2023 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 194:
YY_RULE_SETUP
#line 1993 "dhcp4_lexer.ll"
+=======
+case 198:
+YY_RULE_SETUP
+#line 2032 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 195:
YY_RULE_SETUP
#line 2004 "dhcp4_lexer.ll"
+=======
+case 199:
+YY_RULE_SETUP
+#line 2043 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 196:
YY_RULE_SETUP
#line 2015 "dhcp4_lexer.ll"
+=======
+case 200:
+YY_RULE_SETUP
+#line 2054 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 197:
YY_RULE_SETUP
#line 2028 "dhcp4_lexer.ll"
+=======
+case 201:
+YY_RULE_SETUP
+#line 2067 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 198:
YY_RULE_SETUP
#line 2041 "dhcp4_lexer.ll"
+=======
+case 202:
+YY_RULE_SETUP
+#line 2080 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 199:
YY_RULE_SETUP
#line 2054 "dhcp4_lexer.ll"
+=======
+case 203:
+YY_RULE_SETUP
+#line 2093 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 200:
YY_RULE_SETUP
#line 2063 "dhcp4_lexer.ll"
+=======
+case 204:
+YY_RULE_SETUP
+#line 2102 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 201:
YY_RULE_SETUP
#line 2072 "dhcp4_lexer.ll"
+=======
+case 205:
+YY_RULE_SETUP
+#line 2111 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 202:
YY_RULE_SETUP
#line 2081 "dhcp4_lexer.ll"
+=======
+case 206:
+YY_RULE_SETUP
+#line 2120 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 203:
YY_RULE_SETUP
#line 2090 "dhcp4_lexer.ll"
+=======
+case 207:
+YY_RULE_SETUP
+#line 2129 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::COMPATIBILITY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 204:
YY_RULE_SETUP
#line 2099 "dhcp4_lexer.ll"
+=======
+case 208:
+YY_RULE_SETUP
+#line 2138 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::COMPATIBILITY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 205:
YY_RULE_SETUP
#line 2108 "dhcp4_lexer.ll"
+=======
+case 209:
+YY_RULE_SETUP
+#line 2147 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::COMPATIBILITY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 206:
YY_RULE_SETUP
#line 2117 "dhcp4_lexer.ll"
+=======
+case 210:
+YY_RULE_SETUP
+#line 2156 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::COMPATIBILITY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 207:
YY_RULE_SETUP
#line 2126 "dhcp4_lexer.ll"
+=======
+case 211:
+YY_RULE_SETUP
+#line 2165 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
+<<<<<<< HEAD
case 208:
YY_RULE_SETUP
#line 2138 "dhcp4_lexer.ll"
+=======
+case 212:
+YY_RULE_SETUP
+#line 2177 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* A string has been matched. It contains the actual string and single quotes.
We need to get those quotes out of the way and just use its content, e.g.
return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 209:
/* rule 209 can match eol */
YY_RULE_SETUP
#line 2239 "dhcp4_lexer.ll"
+=======
+case 213:
+/* rule 213 can match eol */
+YY_RULE_SETUP
+#line 2278 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with a forbidden control character inside */
std::string raw(yytext+1);
pos + 1);
}
YY_BREAK
+<<<<<<< HEAD
case 210:
/* rule 210 can match eol */
YY_RULE_SETUP
#line 2255 "dhcp4_lexer.ll"
+=======
+case 214:
+/* rule 214 can match eol */
+YY_RULE_SETUP
+#line 2294 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with a bad escape inside */
std::string raw(yytext+1);
pos);
}
YY_BREAK
+<<<<<<< HEAD
case 211:
YY_RULE_SETUP
#line 2304 "dhcp4_lexer.ll"
+=======
+case 215:
+YY_RULE_SETUP
+#line 2343 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with an open escape at the end */
std::string raw(yytext+1);
raw.size() + 1);
}
YY_BREAK
+<<<<<<< HEAD
case 212:
YY_RULE_SETUP
#line 2312 "dhcp4_lexer.ll"
+=======
+case 216:
+YY_RULE_SETUP
+#line 2351 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with an open unicode escape at the end */
std::string raw(yytext+1);
pos + 1);
}
YY_BREAK
+<<<<<<< HEAD
case 213:
YY_RULE_SETUP
#line 2327 "dhcp4_lexer.ll"
case 219:
YY_RULE_SETUP
#line 2334 "dhcp4_lexer.ll"
+=======
+case 217:
+YY_RULE_SETUP
+#line 2366 "dhcp4_lexer.ll"
+{ return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
+ YY_BREAK
+case 218:
+YY_RULE_SETUP
+#line 2367 "dhcp4_lexer.ll"
+{ return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
+ YY_BREAK
+case 219:
+YY_RULE_SETUP
+#line 2368 "dhcp4_lexer.ll"
+{ return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
+ YY_BREAK
+case 220:
+YY_RULE_SETUP
+#line 2369 "dhcp4_lexer.ll"
+{ return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
+ YY_BREAK
+case 221:
+YY_RULE_SETUP
+#line 2370 "dhcp4_lexer.ll"
+{ return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
+ YY_BREAK
+case 222:
+YY_RULE_SETUP
+#line 2371 "dhcp4_lexer.ll"
+{ return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
+ YY_BREAK
+case 223:
+YY_RULE_SETUP
+#line 2373 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* An integer was found. */
std::string tmp(yytext);
return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 220:
YY_RULE_SETUP
#line 2352 "dhcp4_lexer.ll"
+=======
+case 224:
+YY_RULE_SETUP
+#line 2391 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* A floating point was found. */
std::string tmp(yytext);
return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 221:
YY_RULE_SETUP
#line 2365 "dhcp4_lexer.ll"
+=======
+case 225:
+YY_RULE_SETUP
+#line 2404 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
string tmp(yytext);
return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 222:
YY_RULE_SETUP
#line 2370 "dhcp4_lexer.ll"
+=======
+case 226:
+YY_RULE_SETUP
+#line 2409 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 223:
YY_RULE_SETUP
#line 2374 "dhcp4_lexer.ll"
YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 2382 "dhcp4_lexer.ll"
+=======
+case 227:
+YY_RULE_SETUP
+#line 2413 "dhcp4_lexer.ll"
+driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
+ YY_BREAK
+case 228:
+YY_RULE_SETUP
+#line 2415 "dhcp4_lexer.ll"
+driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
+ YY_BREAK
+case 229:
+YY_RULE_SETUP
+#line 2417 "dhcp4_lexer.ll"
+driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
+ YY_BREAK
+case 230:
+YY_RULE_SETUP
+#line 2419 "dhcp4_lexer.ll"
+driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+#line 2421 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
if (driver.states_.empty()) {
return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
BEGIN(DIR_EXIT);
}
YY_BREAK
+<<<<<<< HEAD
case 227:
YY_RULE_SETUP
#line 2405 "dhcp4_lexer.ll"
ECHO;
YY_BREAK
#line 5581 "dhcp4_lexer.cc"
+=======
+case 231:
+YY_RULE_SETUP
+#line 2444 "dhcp4_lexer.ll"
+ECHO;
+ YY_BREAK
+#line 5693 "dhcp4_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
case YY_END_OF_BUFFER:
{
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
+<<<<<<< HEAD
if ( yy_current_state >= 2243 )
+=======
+ if ( yy_current_state >= 2328 )
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
+<<<<<<< HEAD
if ( yy_current_state >= 2243 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
yy_is_jam = (yy_current_state == 2242);
+=======
+ if ( yy_current_state >= 2328 )
+ yy_c = yy_meta[yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ yy_is_jam = (yy_current_state == 2327);
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
return yy_is_jam ? 0 : yy_current_state;
}
/* %ok-for-header */
+<<<<<<< HEAD
#line 2405 "dhcp4_lexer.ll"
+=======
+#line 2444 "dhcp4_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
using namespace isc::dhcp;
}
}
+\"ddns-conflict-resolution-mode\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::DHCP4:
+ case isc::dhcp::Parser4Context::SUBNET4:
+ case isc::dhcp::Parser4Context::SHARED_NETWORK:
+ return isc::dhcp::Dhcp4Parser::make_DDNS_CONFLICT_RESOLUTION_MODE(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("ddns-conflict-resolution-mode", driver.loc_);
+ }
+}
+
+(?i:\"check-with-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+
+(?i:\"no-check-with-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_NO_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+
+(?i:\"check-exists-with-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_CHECK_EXISTS_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+
+(?i:\"no-check-without-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser4Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp4Parser::make_NO_CHECK_WITHOUT_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
+}
+
+
\"ddns-ttl-percent\" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
// 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
// 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
#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)
Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{}
- /*---------.
- | symbol. |
- `---------*/
+ /*---------------.
+ | symbol kinds. |
+ `---------------*/
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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_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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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_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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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_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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
Dhcp4Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
- YY_USE (yyoutput);
+ YYUSE (yyoutput);
if (yysym.empty ())
yyo << "empty symbol";
else
switch (yykind)
{
case symbol_kind::S_STRING: // "constant string"
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 413 "dhcp4_parser.cc"
+#line 417 "dhcp4_parser.cc"
break;
case symbol_kind::S_INTEGER: // "integer"
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < int64_t > (); }
-#line 419 "dhcp4_parser.cc"
+#line 423 "dhcp4_parser.cc"
break;
case symbol_kind::S_FLOAT: // "floating point"
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < double > (); }
-#line 425 "dhcp4_parser.cc"
+#line 429 "dhcp4_parser.cc"
break;
case symbol_kind::S_BOOLEAN: // "boolean"
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < bool > (); }
-#line 431 "dhcp4_parser.cc"
+#line 435 "dhcp4_parser.cc"
break;
case symbol_kind::S_value: // value
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 437 "dhcp4_parser.cc"
+#line 441 "dhcp4_parser.cc"
break;
case symbol_kind::S_map_value: // map_value
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 443 "dhcp4_parser.cc"
+#line 447 "dhcp4_parser.cc"
break;
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 449 "dhcp4_parser.cc"
+#line 453 "dhcp4_parser.cc"
+ break;
+
+ case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
+#line 310 "dhcp4_parser.yy"
+ { yyoutput << yysym.value.template as < ElementPtr > (); }
+#line 459 "dhcp4_parser.cc"
break;
case symbol_kind::S_socket_type: // socket_type
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 455 "dhcp4_parser.cc"
+#line 465 "dhcp4_parser.cc"
break;
case symbol_kind::S_outbound_interface_value: // outbound_interface_value
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 461 "dhcp4_parser.cc"
+#line 471 "dhcp4_parser.cc"
break;
case symbol_kind::S_db_type: // db_type
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 467 "dhcp4_parser.cc"
+#line 477 "dhcp4_parser.cc"
break;
case symbol_kind::S_on_fail_mode: // on_fail_mode
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 473 "dhcp4_parser.cc"
+#line 483 "dhcp4_parser.cc"
break;
case symbol_kind::S_hr_mode: // hr_mode
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 479 "dhcp4_parser.cc"
+#line 489 "dhcp4_parser.cc"
break;
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 304 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 485 "dhcp4_parser.cc"
+#line 495 "dhcp4_parser.cc"
break;
default:
}
void
- Dhcp4Parser::yypop_ (int n) YY_NOEXCEPT
+ Dhcp4Parser::yypop_ (int n)
{
yystack_.pop (n);
}
}
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_;
}
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
switch (yyn)
{
case 2: // $@1: %empty
-#line 313 "dhcp4_parser.yy"
+#line 319 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 766 "dhcp4_parser.cc"
+#line 777 "dhcp4_parser.cc"
break;
case 4: // $@2: %empty
-#line 314 "dhcp4_parser.yy"
+#line 320 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.CONFIG; }
-#line 772 "dhcp4_parser.cc"
+#line 783 "dhcp4_parser.cc"
break;
case 6: // $@3: %empty
-#line 315 "dhcp4_parser.yy"
+#line 321 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.DHCP4; }
-#line 778 "dhcp4_parser.cc"
+#line 789 "dhcp4_parser.cc"
break;
case 8: // $@4: %empty
-#line 316 "dhcp4_parser.yy"
+#line 322 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 784 "dhcp4_parser.cc"
+#line 795 "dhcp4_parser.cc"
break;
case 10: // $@5: %empty
-#line 317 "dhcp4_parser.yy"
+#line 323 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.SUBNET4; }
-#line 790 "dhcp4_parser.cc"
+#line 801 "dhcp4_parser.cc"
break;
case 12: // $@6: %empty
-#line 318 "dhcp4_parser.yy"
+#line 324 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.POOLS; }
-#line 796 "dhcp4_parser.cc"
+#line 807 "dhcp4_parser.cc"
break;
case 14: // $@7: %empty
-#line 319 "dhcp4_parser.yy"
+#line 325 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.RESERVATIONS; }
-#line 802 "dhcp4_parser.cc"
+#line 813 "dhcp4_parser.cc"
break;
case 16: // $@8: %empty
-#line 320 "dhcp4_parser.yy"
+#line 326 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.DHCP4; }
-#line 808 "dhcp4_parser.cc"
+#line 819 "dhcp4_parser.cc"
break;
case 18: // $@9: %empty
-#line 321 "dhcp4_parser.yy"
+#line 327 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DEF; }
-#line 814 "dhcp4_parser.cc"
+#line 825 "dhcp4_parser.cc"
break;
case 20: // $@10: %empty
-#line 322 "dhcp4_parser.yy"
+#line 328 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DATA; }
-#line 820 "dhcp4_parser.cc"
+#line 831 "dhcp4_parser.cc"
break;
case 22: // $@11: %empty
-#line 323 "dhcp4_parser.yy"
+#line 329 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 826 "dhcp4_parser.cc"
+#line 837 "dhcp4_parser.cc"
break;
case 24: // $@12: %empty
-#line 324 "dhcp4_parser.yy"
+#line 330 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 832 "dhcp4_parser.cc"
+#line 843 "dhcp4_parser.cc"
break;
case 26: // $@13: %empty
-#line 325 "dhcp4_parser.yy"
+#line 331 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 838 "dhcp4_parser.cc"
+#line 849 "dhcp4_parser.cc"
break;
case 28: // value: "integer"
-#line 333 "dhcp4_parser.yy"
+#line 339 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 844 "dhcp4_parser.cc"
+#line 855 "dhcp4_parser.cc"
break;
case 29: // value: "floating point"
-#line 334 "dhcp4_parser.yy"
+#line 340 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 850 "dhcp4_parser.cc"
+#line 861 "dhcp4_parser.cc"
break;
case 30: // value: "boolean"
-#line 335 "dhcp4_parser.yy"
+#line 341 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 856 "dhcp4_parser.cc"
+#line 867 "dhcp4_parser.cc"
break;
case 31: // value: "constant string"
-#line 336 "dhcp4_parser.yy"
+#line 342 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 862 "dhcp4_parser.cc"
+#line 873 "dhcp4_parser.cc"
break;
case 32: // value: "null"
-#line 337 "dhcp4_parser.yy"
+#line 343 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 868 "dhcp4_parser.cc"
+#line 879 "dhcp4_parser.cc"
break;
case 33: // value: map2
-#line 338 "dhcp4_parser.yy"
+#line 344 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 874 "dhcp4_parser.cc"
+#line 885 "dhcp4_parser.cc"
break;
case 34: // value: list_generic
-#line 339 "dhcp4_parser.yy"
+#line 345 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 880 "dhcp4_parser.cc"
+#line 891 "dhcp4_parser.cc"
break;
case 35: // sub_json: value
-#line 342 "dhcp4_parser.yy"
+#line 348 "dhcp4_parser.yy"
{
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
}
-#line 889 "dhcp4_parser.cc"
+#line 900 "dhcp4_parser.cc"
break;
case 36: // $@14: %empty
-#line 347 "dhcp4_parser.yy"
+#line 353 "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 900 "dhcp4_parser.cc"
+#line 911 "dhcp4_parser.cc"
break;
case 37: // map2: "{" $@14 map_content "}"
-#line 352 "dhcp4_parser.yy"
+#line 358 "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 910 "dhcp4_parser.cc"
+#line 921 "dhcp4_parser.cc"
break;
case 38: // map_value: map2
-#line 358 "dhcp4_parser.yy"
+#line 364 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 916 "dhcp4_parser.cc"
+#line 927 "dhcp4_parser.cc"
break;
case 41: // not_empty_map: "constant string" ":" value
-#line 365 "dhcp4_parser.yy"
+#line 371 "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 926 "dhcp4_parser.cc"
+#line 937 "dhcp4_parser.cc"
break;
case 42: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 370 "dhcp4_parser.yy"
+#line 376 "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 937 "dhcp4_parser.cc"
+#line 948 "dhcp4_parser.cc"
break;
case 43: // not_empty_map: not_empty_map ","
-#line 376 "dhcp4_parser.yy"
+#line 382 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 945 "dhcp4_parser.cc"
+#line 956 "dhcp4_parser.cc"
break;
case 44: // $@15: %empty
-#line 381 "dhcp4_parser.yy"
+#line 387 "dhcp4_parser.yy"
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 954 "dhcp4_parser.cc"
+#line 965 "dhcp4_parser.cc"
break;
case 45: // list_generic: "[" $@15 list_content "]"
-#line 384 "dhcp4_parser.yy"
+#line 390 "dhcp4_parser.yy"
{
// list parsing complete. Put any sanity checking here
}
-#line 962 "dhcp4_parser.cc"
+#line 973 "dhcp4_parser.cc"
break;
case 48: // not_empty_list: value
-#line 392 "dhcp4_parser.yy"
+#line 398 "dhcp4_parser.yy"
{
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 971 "dhcp4_parser.cc"
+#line 982 "dhcp4_parser.cc"
break;
case 49: // not_empty_list: not_empty_list "," value
-#line 396 "dhcp4_parser.yy"
+#line 402 "dhcp4_parser.yy"
{
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 980 "dhcp4_parser.cc"
+#line 991 "dhcp4_parser.cc"
break;
case 50: // not_empty_list: not_empty_list ","
-#line 400 "dhcp4_parser.yy"
+#line 406 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 988 "dhcp4_parser.cc"
+#line 999 "dhcp4_parser.cc"
break;
case 51: // $@16: %empty
-#line 406 "dhcp4_parser.yy"
+#line 412 "dhcp4_parser.yy"
{
// List parsing about to start
}
-#line 996 "dhcp4_parser.cc"
+#line 1007 "dhcp4_parser.cc"
break;
case 52: // list_strings: "[" $@16 list_strings_content "]"
-#line 408 "dhcp4_parser.yy"
+#line 414 "dhcp4_parser.yy"
{
// list parsing complete. Put any sanity checking here
//ctx.stack_.pop_back();
}
-#line 1005 "dhcp4_parser.cc"
+#line 1016 "dhcp4_parser.cc"
break;
case 55: // not_empty_list_strings: "constant string"
-#line 417 "dhcp4_parser.yy"
+#line 423 "dhcp4_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1014 "dhcp4_parser.cc"
+#line 1025 "dhcp4_parser.cc"
break;
case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string"
-#line 421 "dhcp4_parser.yy"
+#line 427 "dhcp4_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1023 "dhcp4_parser.cc"
+#line 1034 "dhcp4_parser.cc"
break;
case 57: // not_empty_list_strings: not_empty_list_strings ","
-#line 425 "dhcp4_parser.yy"
+#line 431 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1031 "dhcp4_parser.cc"
+#line 1042 "dhcp4_parser.cc"
break;
case 58: // unknown_map_entry: "constant string" ":"
-#line 435 "dhcp4_parser.yy"
+#line 441 "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 1042 "dhcp4_parser.cc"
+#line 1053 "dhcp4_parser.cc"
break;
case 59: // $@17: %empty
-#line 444 "dhcp4_parser.yy"
+#line 450 "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 1053 "dhcp4_parser.cc"
+#line 1064 "dhcp4_parser.cc"
break;
case 60: // syntax_map: "{" $@17 global_object "}"
-#line 449 "dhcp4_parser.yy"
+#line 455 "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
// Dhcp4 is required
ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
}
-#line 1066 "dhcp4_parser.cc"
+#line 1077 "dhcp4_parser.cc"
break;
case 61: // $@18: %empty
-#line 459 "dhcp4_parser.yy"
+#line 465 "dhcp4_parser.yy"
{
// This code is executed when we're about to start parsing
// the content of the map
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP4);
}
-#line 1081 "dhcp4_parser.cc"
+#line 1092 "dhcp4_parser.cc"
break;
case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}"
-#line 468 "dhcp4_parser.yy"
+#line 474 "dhcp4_parser.yy"
{
// No global parameter is required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1091 "dhcp4_parser.cc"
+#line 1102 "dhcp4_parser.cc"
break;
case 64: // global_object_comma: global_object ","
-#line 476 "dhcp4_parser.yy"
+#line 482 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1099 "dhcp4_parser.cc"
+#line 1110 "dhcp4_parser.cc"
break;
case 65: // $@19: %empty
-#line 482 "dhcp4_parser.yy"
+#line 488 "dhcp4_parser.yy"
{
// Parse the Dhcp4 map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1109 "dhcp4_parser.cc"
+#line 1120 "dhcp4_parser.cc"
break;
case 66: // sub_dhcp4: "{" $@19 global_params "}"
-#line 486 "dhcp4_parser.yy"
+#line 492 "dhcp4_parser.yy"
{
// No global parameter is required
// parsing completed
}
-#line 1118 "dhcp4_parser.cc"
+#line 1129 "dhcp4_parser.cc"
break;
case 69: // global_params: global_params ","
-#line 493 "dhcp4_parser.yy"
+#line 499 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1126 "dhcp4_parser.cc"
+#line 1137 "dhcp4_parser.cc"
break;
- case 137: // valid_lifetime: "valid-lifetime" ":" "integer"
-#line 569 "dhcp4_parser.yy"
+ case 138: // valid_lifetime: "valid-lifetime" ":" "integer"
+#line 576 "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 1136 "dhcp4_parser.cc"
+#line 1147 "dhcp4_parser.cc"
break;
- case 138: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
-#line 575 "dhcp4_parser.yy"
+ case 139: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
+#line 582 "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 1146 "dhcp4_parser.cc"
+#line 1157 "dhcp4_parser.cc"
break;
- case 139: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
-#line 581 "dhcp4_parser.yy"
+ case 140: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
+#line 588 "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 1156 "dhcp4_parser.cc"
+#line 1167 "dhcp4_parser.cc"
break;
- case 140: // renew_timer: "renew-timer" ":" "integer"
-#line 587 "dhcp4_parser.yy"
+ case 141: // renew_timer: "renew-timer" ":" "integer"
+#line 594 "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 1166 "dhcp4_parser.cc"
+#line 1177 "dhcp4_parser.cc"
break;
- case 141: // rebind_timer: "rebind-timer" ":" "integer"
-#line 593 "dhcp4_parser.yy"
+ case 142: // rebind_timer: "rebind-timer" ":" "integer"
+#line 600 "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 1176 "dhcp4_parser.cc"
+#line 1187 "dhcp4_parser.cc"
break;
- case 142: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
-#line 599 "dhcp4_parser.yy"
+ case 143: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
+#line 606 "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 1186 "dhcp4_parser.cc"
+#line 1197 "dhcp4_parser.cc"
break;
- case 143: // t1_percent: "t1-percent" ":" "floating point"
-#line 605 "dhcp4_parser.yy"
+ case 144: // t1_percent: "t1-percent" ":" "floating point"
+#line 612 "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 1196 "dhcp4_parser.cc"
+#line 1207 "dhcp4_parser.cc"
break;
- case 144: // t2_percent: "t2-percent" ":" "floating point"
-#line 611 "dhcp4_parser.yy"
+ case 145: // t2_percent: "t2-percent" ":" "floating point"
+#line 618 "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 1206 "dhcp4_parser.cc"
+#line 1217 "dhcp4_parser.cc"
break;
- case 145: // cache_threshold: "cache-threshold" ":" "floating point"
-#line 617 "dhcp4_parser.yy"
+ case 146: // cache_threshold: "cache-threshold" ":" "floating point"
+#line 624 "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 1216 "dhcp4_parser.cc"
+#line 1227 "dhcp4_parser.cc"
break;
- case 146: // cache_max_age: "cache-max-age" ":" "integer"
-#line 623 "dhcp4_parser.yy"
+ case 147: // cache_max_age: "cache-max-age" ":" "integer"
+#line 630 "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 1226 "dhcp4_parser.cc"
+#line 1237 "dhcp4_parser.cc"
break;
- case 147: // decline_probation_period: "decline-probation-period" ":" "integer"
-#line 629 "dhcp4_parser.yy"
+ case 148: // decline_probation_period: "decline-probation-period" ":" "integer"
+#line 636 "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 1236 "dhcp4_parser.cc"
+#line 1247 "dhcp4_parser.cc"
break;
- case 148: // $@20: %empty
-#line 635 "dhcp4_parser.yy"
+ case 149: // $@20: %empty
+#line 642 "dhcp4_parser.yy"
{
ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1245 "dhcp4_parser.cc"
+#line 1256 "dhcp4_parser.cc"
break;
- case 149: // server_tag: "server-tag" $@20 ":" "constant string"
-#line 638 "dhcp4_parser.yy"
+ case 150: // server_tag: "server-tag" $@20 ":" "constant string"
+#line 645 "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 1255 "dhcp4_parser.cc"
+#line 1266 "dhcp4_parser.cc"
break;
- case 150: // parked_packet_limit: "parked-packet-limit" ":" "integer"
-#line 644 "dhcp4_parser.yy"
+ case 151: // parked_packet_limit: "parked-packet-limit" ":" "integer"
+#line 651 "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 1265 "dhcp4_parser.cc"
+#line 1276 "dhcp4_parser.cc"
break;
- case 151: // $@21: %empty
-#line 650 "dhcp4_parser.yy"
+ case 152: // $@21: %empty
+#line 657 "dhcp4_parser.yy"
{
ctx.unique("allocator", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1274 "dhcp4_parser.cc"
+#line 1285 "dhcp4_parser.cc"
break;
- case 152: // allocator: "allocator" $@21 ":" "constant string"
-#line 653 "dhcp4_parser.yy"
+ case 153: // allocator: "allocator" $@21 ":" "constant string"
+#line 660 "dhcp4_parser.yy"
{
ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("allocator", al);
ctx.leave();
}
-#line 1284 "dhcp4_parser.cc"
+#line 1295 "dhcp4_parser.cc"
break;
- case 153: // echo_client_id: "echo-client-id" ":" "boolean"
-#line 659 "dhcp4_parser.yy"
+ case 154: // echo_client_id: "echo-client-id" ":" "boolean"
+#line 666 "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 1294 "dhcp4_parser.cc"
+#line 1305 "dhcp4_parser.cc"
break;
- case 154: // match_client_id: "match-client-id" ":" "boolean"
-#line 665 "dhcp4_parser.yy"
+ case 155: // match_client_id: "match-client-id" ":" "boolean"
+#line 672 "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 1304 "dhcp4_parser.cc"
+#line 1315 "dhcp4_parser.cc"
break;
- case 155: // authoritative: "authoritative" ":" "boolean"
-#line 671 "dhcp4_parser.yy"
+ case 156: // authoritative: "authoritative" ":" "boolean"
+#line 678 "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 1314 "dhcp4_parser.cc"
+#line 1325 "dhcp4_parser.cc"
break;
- case 156: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
-#line 677 "dhcp4_parser.yy"
+ case 157: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
+#line 684 "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 1324 "dhcp4_parser.cc"
+#line 1335 "dhcp4_parser.cc"
break;
- case 157: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
-#line 683 "dhcp4_parser.yy"
+ case 158: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
+#line 690 "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 1334 "dhcp4_parser.cc"
+#line 1345 "dhcp4_parser.cc"
break;
- case 158: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
-#line 689 "dhcp4_parser.yy"
+ case 159: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
+#line 696 "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 1344 "dhcp4_parser.cc"
+#line 1355 "dhcp4_parser.cc"
break;
- case 159: // $@22: %empty
-#line 695 "dhcp4_parser.yy"
+ case 160: // $@22: %empty
+#line 702 "dhcp4_parser.yy"
{
ctx.enter(ctx.REPLACE_CLIENT_NAME);
ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
}
-#line 1353 "dhcp4_parser.cc"
+#line 1364 "dhcp4_parser.cc"
break;
- case 160: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
-#line 698 "dhcp4_parser.yy"
+ case 161: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
+#line 705 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1362 "dhcp4_parser.cc"
+#line 1373 "dhcp4_parser.cc"
break;
- case 161: // ddns_replace_client_name_value: "when-present"
-#line 704 "dhcp4_parser.yy"
+ case 162: // ddns_replace_client_name_value: "when-present"
+#line 711 "dhcp4_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1370 "dhcp4_parser.cc"
+#line 1381 "dhcp4_parser.cc"
break;
- case 162: // ddns_replace_client_name_value: "never"
-#line 707 "dhcp4_parser.yy"
+ case 163: // ddns_replace_client_name_value: "never"
+#line 714 "dhcp4_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
}
-#line 1378 "dhcp4_parser.cc"
+#line 1389 "dhcp4_parser.cc"
break;
- case 163: // ddns_replace_client_name_value: "always"
-#line 710 "dhcp4_parser.yy"
+ case 164: // ddns_replace_client_name_value: "always"
+#line 717 "dhcp4_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
}
-#line 1386 "dhcp4_parser.cc"
+#line 1397 "dhcp4_parser.cc"
break;
- case 164: // ddns_replace_client_name_value: "when-not-present"
-#line 713 "dhcp4_parser.yy"
+ case 165: // ddns_replace_client_name_value: "when-not-present"
+#line 720 "dhcp4_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1394 "dhcp4_parser.cc"
+#line 1405 "dhcp4_parser.cc"
break;
- case 165: // ddns_replace_client_name_value: "boolean"
-#line 716 "dhcp4_parser.yy"
+ case 166: // ddns_replace_client_name_value: "boolean"
+#line 723 "dhcp4_parser.yy"
{
error(yystack_[0].location, "boolean values for the replace-client-name are "
"no longer supported");
}
-#line 1403 "dhcp4_parser.cc"
+#line 1414 "dhcp4_parser.cc"
break;
- case 166: // $@23: %empty
-#line 722 "dhcp4_parser.yy"
+ case 167: // $@23: %empty
+#line 729 "dhcp4_parser.yy"
{
ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1412 "dhcp4_parser.cc"
+#line 1423 "dhcp4_parser.cc"
break;
- case 167: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
-#line 725 "dhcp4_parser.yy"
+ case 168: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
+#line 732 "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 1422 "dhcp4_parser.cc"
+#line 1433 "dhcp4_parser.cc"
break;
- case 168: // $@24: %empty
-#line 731 "dhcp4_parser.yy"
+ case 169: // $@24: %empty
+#line 738 "dhcp4_parser.yy"
{
ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1431 "dhcp4_parser.cc"
+#line 1442 "dhcp4_parser.cc"
break;
- case 169: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
-#line 734 "dhcp4_parser.yy"
+ case 170: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
+#line 741 "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 1441 "dhcp4_parser.cc"
+#line 1452 "dhcp4_parser.cc"
break;
- case 170: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
-#line 740 "dhcp4_parser.yy"
+ case 171: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
+#line 747 "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 1451 "dhcp4_parser.cc"
+#line 1462 "dhcp4_parser.cc"
break;
- case 171: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
-#line 746 "dhcp4_parser.yy"
+ case 172: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
+#line 753 "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 1461 "dhcp4_parser.cc"
+#line 1472 "dhcp4_parser.cc"
+ break;
+
+ case 173: // $@25: %empty
+#line 759 "dhcp4_parser.yy"
+ {
+ ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(yystack_[0].location));
+ ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE);
+}
+#line 1481 "dhcp4_parser.cc"
+ break;
+
+ case 174: // ddns_conflict_resolution_mode: "ddns-conflict-resolution-mode" $@25 ":" ddns_conflict_resolution_mode_value
+#line 762 "dhcp4_parser.yy"
+ {
+ ctx.stack_.back()->set("ddns-conflict-resolution-mode", yystack_[0].value.as < ElementPtr > ());
+ ctx.leave();
+}
+#line 1490 "dhcp4_parser.cc"
+ break;
+
+ case 175: // ddns_conflict_resolution_mode_value: "check-with-dhcid"
+#line 768 "dhcp4_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1498 "dhcp4_parser.cc"
+ break;
+
+ case 176: // ddns_conflict_resolution_mode_value: "no-check-with-dhcid"
+#line 771 "dhcp4_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1506 "dhcp4_parser.cc"
+ break;
+
+ case 177: // ddns_conflict_resolution_mode_value: "check-exists-with-dhcid"
+#line 774 "dhcp4_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1514 "dhcp4_parser.cc"
+ break;
+
+ case 178: // ddns_conflict_resolution_mode_value: "no-check-without-dhcid"
+#line 777 "dhcp4_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1522 "dhcp4_parser.cc"
break;
- case 172: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point"
-#line 752 "dhcp4_parser.yy"
+ case 179: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point"
+#line 782 "dhcp4_parser.yy"
{
ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location));
ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-ttl-percent", ttl);
}
-#line 1471 "dhcp4_parser.cc"
+#line 1532 "dhcp4_parser.cc"
break;
- case 173: // $@25: %empty
-#line 758 "dhcp4_parser.yy"
+ case 180: // $@26: %empty
+#line 788 "dhcp4_parser.yy"
{
ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1480 "dhcp4_parser.cc"
+#line 1541 "dhcp4_parser.cc"
break;
- case 174: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string"
-#line 761 "dhcp4_parser.yy"
+ case 181: // hostname_char_set: "hostname-char-set" $@26 ":" "constant string"
+#line 791 "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 1490 "dhcp4_parser.cc"
+#line 1551 "dhcp4_parser.cc"
break;
- case 175: // $@26: %empty
-#line 767 "dhcp4_parser.yy"
+ case 182: // $@27: %empty
+#line 797 "dhcp4_parser.yy"
{
ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1499 "dhcp4_parser.cc"
+#line 1560 "dhcp4_parser.cc"
break;
- case 176: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string"
-#line 770 "dhcp4_parser.yy"
+ case 183: // hostname_char_replacement: "hostname-char-replacement" $@27 ":" "constant string"
+#line 800 "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 1509 "dhcp4_parser.cc"
+#line 1570 "dhcp4_parser.cc"
break;
- case 177: // store_extended_info: "store-extended-info" ":" "boolean"
-#line 776 "dhcp4_parser.yy"
+ case 184: // store_extended_info: "store-extended-info" ":" "boolean"
+#line 806 "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 1519 "dhcp4_parser.cc"
+#line 1580 "dhcp4_parser.cc"
break;
- case 178: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
-#line 782 "dhcp4_parser.yy"
+ case 185: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
+#line 812 "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 1529 "dhcp4_parser.cc"
+#line 1590 "dhcp4_parser.cc"
break;
- case 179: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
-#line 788 "dhcp4_parser.yy"
+ case 186: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
+#line 818 "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 1539 "dhcp4_parser.cc"
+#line 1600 "dhcp4_parser.cc"
break;
- case 180: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
-#line 794 "dhcp4_parser.yy"
+ case 187: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
+#line 824 "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 1549 "dhcp4_parser.cc"
+#line 1610 "dhcp4_parser.cc"
break;
- case 181: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
-#line 800 "dhcp4_parser.yy"
+ case 188: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
+#line 830 "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 1559 "dhcp4_parser.cc"
+#line 1620 "dhcp4_parser.cc"
break;
- case 182: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
-#line 806 "dhcp4_parser.yy"
+ case 189: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
+#line 836 "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 1569 "dhcp4_parser.cc"
+#line 1630 "dhcp4_parser.cc"
break;
- case 183: // offer_lifetime: "offer-lifetime" ":" "integer"
-#line 812 "dhcp4_parser.yy"
+ case 190: // offer_lifetime: "offer-lifetime" ":" "integer"
+#line 842 "dhcp4_parser.yy"
{
ctx.unique("offer-lifetime", ctx.loc2pos(yystack_[2].location));
ElementPtr offer_lifetime(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("offer-lifetime", offer_lifetime);
}
-#line 1579 "dhcp4_parser.cc"
+#line 1640 "dhcp4_parser.cc"
break;
- case 184: // $@27: %empty
-#line 818 "dhcp4_parser.yy"
+ case 191: // $@28: %empty
+#line 848 "dhcp4_parser.yy"
{
ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.INTERFACES_CONFIG);
}
-#line 1591 "dhcp4_parser.cc"
+#line 1652 "dhcp4_parser.cc"
break;
- case 185: // interfaces_config: "interfaces-config" $@27 ":" "{" interfaces_config_params "}"
-#line 824 "dhcp4_parser.yy"
+ case 192: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}"
+#line 854 "dhcp4_parser.yy"
{
// No interfaces config param is required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1601 "dhcp4_parser.cc"
+#line 1662 "dhcp4_parser.cc"
break;
- case 188: // interfaces_config_params: interfaces_config_params ","
-#line 832 "dhcp4_parser.yy"
+ case 195: // interfaces_config_params: interfaces_config_params ","
+#line 862 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1609 "dhcp4_parser.cc"
+#line 1670 "dhcp4_parser.cc"
break;
- case 199: // $@28: %empty
-#line 849 "dhcp4_parser.yy"
+ case 206: // $@29: %empty
+#line 879 "dhcp4_parser.yy"
{
// Parse the interfaces-config map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1619 "dhcp4_parser.cc"
+#line 1680 "dhcp4_parser.cc"
break;
- case 200: // sub_interfaces4: "{" $@28 interfaces_config_params "}"
-#line 853 "dhcp4_parser.yy"
+ case 207: // sub_interfaces4: "{" $@29 interfaces_config_params "}"
+#line 883 "dhcp4_parser.yy"
{
// No interfaces config param is required
// parsing completed
}
-#line 1628 "dhcp4_parser.cc"
+#line 1689 "dhcp4_parser.cc"
break;
- case 201: // $@29: %empty
-#line 858 "dhcp4_parser.yy"
+ case 208: // $@30: %empty
+#line 888 "dhcp4_parser.yy"
{
ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1640 "dhcp4_parser.cc"
+#line 1701 "dhcp4_parser.cc"
break;
- case 202: // interfaces_list: "interfaces" $@29 ":" list_strings
-#line 864 "dhcp4_parser.yy"
+ case 209: // interfaces_list: "interfaces" $@30 ":" list_strings
+#line 894 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1649 "dhcp4_parser.cc"
+#line 1710 "dhcp4_parser.cc"
break;
- case 203: // $@30: %empty
-#line 869 "dhcp4_parser.yy"
+ case 210: // $@31: %empty
+#line 899 "dhcp4_parser.yy"
{
ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.DHCP_SOCKET_TYPE);
}
-#line 1658 "dhcp4_parser.cc"
+#line 1719 "dhcp4_parser.cc"
break;
- case 204: // dhcp_socket_type: "dhcp-socket-type" $@30 ":" socket_type
-#line 872 "dhcp4_parser.yy"
+ case 211: // dhcp_socket_type: "dhcp-socket-type" $@31 ":" socket_type
+#line 902 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1667 "dhcp4_parser.cc"
+#line 1728 "dhcp4_parser.cc"
break;
- case 205: // socket_type: "raw"
-#line 877 "dhcp4_parser.yy"
+ case 212: // socket_type: "raw"
+#line 907 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1673 "dhcp4_parser.cc"
+#line 1734 "dhcp4_parser.cc"
break;
- case 206: // socket_type: "udp"
-#line 878 "dhcp4_parser.yy"
+ case 213: // socket_type: "udp"
+#line 908 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1679 "dhcp4_parser.cc"
+#line 1740 "dhcp4_parser.cc"
break;
- case 207: // $@31: %empty
-#line 881 "dhcp4_parser.yy"
+ case 214: // $@32: %empty
+#line 911 "dhcp4_parser.yy"
{
ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.OUTBOUND_INTERFACE);
}
-#line 1688 "dhcp4_parser.cc"
+#line 1749 "dhcp4_parser.cc"
break;
- case 208: // outbound_interface: "outbound-interface" $@31 ":" outbound_interface_value
-#line 884 "dhcp4_parser.yy"
+ case 215: // outbound_interface: "outbound-interface" $@32 ":" outbound_interface_value
+#line 914 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1697 "dhcp4_parser.cc"
+#line 1758 "dhcp4_parser.cc"
break;
- case 209: // outbound_interface_value: "same-as-inbound"
-#line 889 "dhcp4_parser.yy"
+ case 216: // outbound_interface_value: "same-as-inbound"
+#line 919 "dhcp4_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
}
-#line 1705 "dhcp4_parser.cc"
+#line 1766 "dhcp4_parser.cc"
break;
- case 210: // outbound_interface_value: "use-routing"
-#line 891 "dhcp4_parser.yy"
+ case 217: // outbound_interface_value: "use-routing"
+#line 921 "dhcp4_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
}
-#line 1713 "dhcp4_parser.cc"
+#line 1774 "dhcp4_parser.cc"
break;
- case 211: // re_detect: "re-detect" ":" "boolean"
-#line 895 "dhcp4_parser.yy"
+ case 218: // re_detect: "re-detect" ":" "boolean"
+#line 925 "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 1723 "dhcp4_parser.cc"
+#line 1784 "dhcp4_parser.cc"
break;
- case 212: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
-#line 901 "dhcp4_parser.yy"
+ case 219: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
+#line 931 "dhcp4_parser.yy"
{
ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("service-sockets-require-all", b);
}
-#line 1733 "dhcp4_parser.cc"
+#line 1794 "dhcp4_parser.cc"
break;
- case 213: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
-#line 907 "dhcp4_parser.yy"
+ case 220: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
+#line 937 "dhcp4_parser.yy"
{
ctx.unique("service-sockets-retry-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("service-sockets-retry-wait-time", n);
}
-#line 1743 "dhcp4_parser.cc"
+#line 1804 "dhcp4_parser.cc"
break;
- case 214: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
-#line 913 "dhcp4_parser.yy"
+ case 221: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
+#line 943 "dhcp4_parser.yy"
{
ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("service-sockets-max-retries", n);
}
-#line 1753 "dhcp4_parser.cc"
+#line 1814 "dhcp4_parser.cc"
break;
- case 215: // $@32: %empty
-#line 919 "dhcp4_parser.yy"
+ case 222: // $@33: %empty
+#line 949 "dhcp4_parser.yy"
{
ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.LEASE_DATABASE);
}
-#line 1765 "dhcp4_parser.cc"
+#line 1826 "dhcp4_parser.cc"
break;
- case 216: // lease_database: "lease-database" $@32 ":" "{" database_map_params "}"
-#line 925 "dhcp4_parser.yy"
+ case 223: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}"
+#line 955 "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 1776 "dhcp4_parser.cc"
+#line 1837 "dhcp4_parser.cc"
break;
- case 217: // $@33: %empty
-#line 932 "dhcp4_parser.yy"
+ case 224: // $@34: %empty
+#line 962 "dhcp4_parser.yy"
{
ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.SANITY_CHECKS);
}
-#line 1788 "dhcp4_parser.cc"
+#line 1849 "dhcp4_parser.cc"
break;
- case 218: // sanity_checks: "sanity-checks" $@33 ":" "{" sanity_checks_params "}"
-#line 938 "dhcp4_parser.yy"
+ case 225: // sanity_checks: "sanity-checks" $@34 ":" "{" sanity_checks_params "}"
+#line 968 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1797 "dhcp4_parser.cc"
+#line 1858 "dhcp4_parser.cc"
break;
- case 221: // sanity_checks_params: sanity_checks_params ","
-#line 945 "dhcp4_parser.yy"
+ case 228: // sanity_checks_params: sanity_checks_params ","
+#line 975 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1805 "dhcp4_parser.cc"
+#line 1866 "dhcp4_parser.cc"
break;
- case 224: // $@34: %empty
-#line 954 "dhcp4_parser.yy"
+ case 231: // $@35: %empty
+#line 984 "dhcp4_parser.yy"
{
ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1814 "dhcp4_parser.cc"
+#line 1875 "dhcp4_parser.cc"
break;
- case 225: // lease_checks: "lease-checks" $@34 ":" "constant string"
-#line 957 "dhcp4_parser.yy"
+ case 232: // lease_checks: "lease-checks" $@35 ":" "constant string"
+#line 987 "dhcp4_parser.yy"
{
if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
", supported values are: none, warn, fix, fix-del, del");
}
}
-#line 1834 "dhcp4_parser.cc"
+#line 1895 "dhcp4_parser.cc"
break;
- case 226: // $@35: %empty
-#line 973 "dhcp4_parser.yy"
+ case 233: // $@36: %empty
+#line 1003 "dhcp4_parser.yy"
{
ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1843 "dhcp4_parser.cc"
+#line 1904 "dhcp4_parser.cc"
break;
- case 227: // extended_info_checks: "extended-info-checks" $@35 ":" "constant string"
-#line 976 "dhcp4_parser.yy"
+ case 234: // extended_info_checks: "extended-info-checks" $@36 ":" "constant string"
+#line 1006 "dhcp4_parser.yy"
{
if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
", supported values are: none, fix, strict, pedantic");
}
}
-#line 1862 "dhcp4_parser.cc"
+#line 1923 "dhcp4_parser.cc"
break;
- case 228: // $@36: %empty
-#line 991 "dhcp4_parser.yy"
+ case 235: // $@37: %empty
+#line 1021 "dhcp4_parser.yy"
{
ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1874 "dhcp4_parser.cc"
+#line 1935 "dhcp4_parser.cc"
break;
- case 229: // hosts_database: "hosts-database" $@36 ":" "{" database_map_params "}"
-#line 997 "dhcp4_parser.yy"
+ case 236: // hosts_database: "hosts-database" $@37 ":" "{" database_map_params "}"
+#line 1027 "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 1885 "dhcp4_parser.cc"
+#line 1946 "dhcp4_parser.cc"
break;
- case 230: // $@37: %empty
-#line 1004 "dhcp4_parser.yy"
+ case 237: // $@38: %empty
+#line 1034 "dhcp4_parser.yy"
{
ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1897 "dhcp4_parser.cc"
+#line 1958 "dhcp4_parser.cc"
break;
- case 231: // hosts_databases: "hosts-databases" $@37 ":" "[" database_list "]"
-#line 1010 "dhcp4_parser.yy"
+ case 238: // hosts_databases: "hosts-databases" $@38 ":" "[" database_list "]"
+#line 1040 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1906 "dhcp4_parser.cc"
+#line 1967 "dhcp4_parser.cc"
break;
- case 236: // not_empty_database_list: not_empty_database_list ","
-#line 1021 "dhcp4_parser.yy"
+ case 243: // not_empty_database_list: not_empty_database_list ","
+#line 1051 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1914 "dhcp4_parser.cc"
+#line 1975 "dhcp4_parser.cc"
break;
- case 237: // $@38: %empty
-#line 1026 "dhcp4_parser.yy"
+ case 244: // $@39: %empty
+#line 1056 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1924 "dhcp4_parser.cc"
+#line 1985 "dhcp4_parser.cc"
break;
- case 238: // database: "{" $@38 database_map_params "}"
-#line 1030 "dhcp4_parser.yy"
+ case 245: // database: "{" $@39 database_map_params "}"
+#line 1060 "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 1934 "dhcp4_parser.cc"
+#line 1995 "dhcp4_parser.cc"
break;
- case 241: // database_map_params: database_map_params ","
-#line 1038 "dhcp4_parser.yy"
+ case 248: // database_map_params: database_map_params ","
+#line 1068 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1942 "dhcp4_parser.cc"
+#line 2003 "dhcp4_parser.cc"
break;
- case 264: // $@39: %empty
-#line 1067 "dhcp4_parser.yy"
+ case 271: // $@40: %empty
+#line 1097 "dhcp4_parser.yy"
{
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.DATABASE_TYPE);
}
-#line 1951 "dhcp4_parser.cc"
+#line 2012 "dhcp4_parser.cc"
break;
- case 265: // database_type: "type" $@39 ":" db_type
-#line 1070 "dhcp4_parser.yy"
+ case 272: // database_type: "type" $@40 ":" db_type
+#line 1100 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1960 "dhcp4_parser.cc"
+#line 2021 "dhcp4_parser.cc"
break;
- case 266: // db_type: "memfile"
-#line 1075 "dhcp4_parser.yy"
+ case 273: // db_type: "memfile"
+#line 1105 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1966 "dhcp4_parser.cc"
+#line 2027 "dhcp4_parser.cc"
break;
- case 267: // db_type: "mysql"
-#line 1076 "dhcp4_parser.yy"
+ case 274: // db_type: "mysql"
+#line 1106 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1972 "dhcp4_parser.cc"
+#line 2033 "dhcp4_parser.cc"
break;
- case 268: // db_type: "postgresql"
-#line 1077 "dhcp4_parser.yy"
+ case 275: // db_type: "postgresql"
+#line 1107 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1978 "dhcp4_parser.cc"
+#line 2039 "dhcp4_parser.cc"
break;
- case 269: // $@40: %empty
-#line 1080 "dhcp4_parser.yy"
+ case 276: // $@41: %empty
+#line 1110 "dhcp4_parser.yy"
{
ctx.unique("user", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1987 "dhcp4_parser.cc"
+#line 2048 "dhcp4_parser.cc"
break;
- case 270: // user: "user" $@40 ":" "constant string"
-#line 1083 "dhcp4_parser.yy"
+ case 277: // user: "user" $@41 ":" "constant string"
+#line 1113 "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 1997 "dhcp4_parser.cc"
+#line 2058 "dhcp4_parser.cc"
break;
- case 271: // $@41: %empty
-#line 1089 "dhcp4_parser.yy"
+ case 278: // $@42: %empty
+#line 1119 "dhcp4_parser.yy"
{
ctx.unique("password", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2006 "dhcp4_parser.cc"
+#line 2067 "dhcp4_parser.cc"
break;
- case 272: // password: "password" $@41 ":" "constant string"
-#line 1092 "dhcp4_parser.yy"
+ case 279: // password: "password" $@42 ":" "constant string"
+#line 1122 "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 2016 "dhcp4_parser.cc"
+#line 2077 "dhcp4_parser.cc"
break;
- case 273: // $@42: %empty
-#line 1098 "dhcp4_parser.yy"
+ case 280: // $@43: %empty
+#line 1128 "dhcp4_parser.yy"
{
ctx.unique("host", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2025 "dhcp4_parser.cc"
+#line 2086 "dhcp4_parser.cc"
break;
- case 274: // host: "host" $@42 ":" "constant string"
-#line 1101 "dhcp4_parser.yy"
+ case 281: // host: "host" $@43 ":" "constant string"
+#line 1131 "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 2035 "dhcp4_parser.cc"
+#line 2096 "dhcp4_parser.cc"
break;
- case 275: // port: "port" ":" "integer"
-#line 1107 "dhcp4_parser.yy"
+ case 282: // port: "port" ":" "integer"
+#line 1137 "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 2045 "dhcp4_parser.cc"
+#line 2106 "dhcp4_parser.cc"
break;
- case 276: // $@43: %empty
-#line 1113 "dhcp4_parser.yy"
+ case 283: // $@44: %empty
+#line 1143 "dhcp4_parser.yy"
{
ctx.unique("name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2054 "dhcp4_parser.cc"
+#line 2115 "dhcp4_parser.cc"
break;
- case 277: // name: "name" $@43 ":" "constant string"
-#line 1116 "dhcp4_parser.yy"
+ case 284: // name: "name" $@44 ":" "constant string"
+#line 1146 "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 2064 "dhcp4_parser.cc"
+#line 2125 "dhcp4_parser.cc"
break;
- case 278: // persist: "persist" ":" "boolean"
-#line 1122 "dhcp4_parser.yy"
+ case 285: // persist: "persist" ":" "boolean"
+#line 1152 "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 2074 "dhcp4_parser.cc"
+#line 2135 "dhcp4_parser.cc"
break;
- case 279: // lfc_interval: "lfc-interval" ":" "integer"
-#line 1128 "dhcp4_parser.yy"
+ case 286: // lfc_interval: "lfc-interval" ":" "integer"
+#line 1158 "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 2084 "dhcp4_parser.cc"
+#line 2145 "dhcp4_parser.cc"
break;
- case 280: // readonly: "readonly" ":" "boolean"
-#line 1134 "dhcp4_parser.yy"
+ case 287: // readonly: "readonly" ":" "boolean"
+#line 1164 "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 2094 "dhcp4_parser.cc"
+#line 2155 "dhcp4_parser.cc"
break;
- case 281: // connect_timeout: "connect-timeout" ":" "integer"
-#line 1140 "dhcp4_parser.yy"
+ case 288: // connect_timeout: "connect-timeout" ":" "integer"
+#line 1170 "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 2104 "dhcp4_parser.cc"
+#line 2165 "dhcp4_parser.cc"
break;
- case 282: // read_timeout: "read-timeout" ":" "integer"
-#line 1146 "dhcp4_parser.yy"
+ case 289: // read_timeout: "read-timeout" ":" "integer"
+#line 1176 "dhcp4_parser.yy"
{
ctx.unique("read-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("read-timeout", n);
}
-#line 2114 "dhcp4_parser.cc"
+#line 2175 "dhcp4_parser.cc"
break;
- case 283: // write_timeout: "write-timeout" ":" "integer"
-#line 1152 "dhcp4_parser.yy"
+ case 290: // write_timeout: "write-timeout" ":" "integer"
+#line 1182 "dhcp4_parser.yy"
{
ctx.unique("write-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("write-timeout", n);
}
-#line 2124 "dhcp4_parser.cc"
+#line 2185 "dhcp4_parser.cc"
break;
- case 284: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
-#line 1158 "dhcp4_parser.yy"
+ case 291: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
+#line 1188 "dhcp4_parser.yy"
{
ctx.unique("tcp-user-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("tcp-user-timeout", n);
}
-#line 2134 "dhcp4_parser.cc"
+#line 2195 "dhcp4_parser.cc"
break;
- case 285: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
-#line 1164 "dhcp4_parser.yy"
+ case 292: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
+#line 1194 "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 2144 "dhcp4_parser.cc"
+#line 2205 "dhcp4_parser.cc"
break;
- case 286: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
-#line 1170 "dhcp4_parser.yy"
+ case 293: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
+#line 1200 "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 2154 "dhcp4_parser.cc"
+#line 2215 "dhcp4_parser.cc"
break;
- case 287: // $@44: %empty
-#line 1176 "dhcp4_parser.yy"
+ case 294: // $@45: %empty
+#line 1206 "dhcp4_parser.yy"
{
ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.DATABASE_ON_FAIL);
}
-#line 2163 "dhcp4_parser.cc"
+#line 2224 "dhcp4_parser.cc"
break;
- case 288: // on_fail: "on-fail" $@44 ":" on_fail_mode
-#line 1179 "dhcp4_parser.yy"
+ case 295: // on_fail: "on-fail" $@45 ":" on_fail_mode
+#line 1209 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2172 "dhcp4_parser.cc"
+#line 2233 "dhcp4_parser.cc"
break;
- case 289: // on_fail_mode: "stop-retry-exit"
-#line 1184 "dhcp4_parser.yy"
+ case 296: // on_fail_mode: "stop-retry-exit"
+#line 1214 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2178 "dhcp4_parser.cc"
+#line 2239 "dhcp4_parser.cc"
break;
- case 290: // on_fail_mode: "serve-retry-exit"
-#line 1185 "dhcp4_parser.yy"
+ case 297: // on_fail_mode: "serve-retry-exit"
+#line 1215 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2184 "dhcp4_parser.cc"
+#line 2245 "dhcp4_parser.cc"
break;
- case 291: // on_fail_mode: "serve-retry-continue"
-#line 1186 "dhcp4_parser.yy"
+ case 298: // on_fail_mode: "serve-retry-continue"
+#line 1216 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
-#line 2190 "dhcp4_parser.cc"
+#line 2251 "dhcp4_parser.cc"
break;
- case 292: // max_row_errors: "max-row-errors" ":" "integer"
-#line 1189 "dhcp4_parser.yy"
+ case 299: // max_row_errors: "max-row-errors" ":" "integer"
+#line 1219 "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 2200 "dhcp4_parser.cc"
+#line 2261 "dhcp4_parser.cc"
break;
- case 293: // $@45: %empty
-#line 1195 "dhcp4_parser.yy"
+ case 300: // $@46: %empty
+#line 1225 "dhcp4_parser.yy"
{
ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2209 "dhcp4_parser.cc"
+#line 2270 "dhcp4_parser.cc"
break;
- case 294: // trust_anchor: "trust-anchor" $@45 ":" "constant string"
-#line 1198 "dhcp4_parser.yy"
+ case 301: // trust_anchor: "trust-anchor" $@46 ":" "constant string"
+#line 1228 "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 2219 "dhcp4_parser.cc"
+#line 2280 "dhcp4_parser.cc"
break;
- case 295: // $@46: %empty
-#line 1204 "dhcp4_parser.yy"
+ case 302: // $@47: %empty
+#line 1234 "dhcp4_parser.yy"
{
ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2228 "dhcp4_parser.cc"
+#line 2289 "dhcp4_parser.cc"
break;
- case 296: // cert_file: "cert-file" $@46 ":" "constant string"
-#line 1207 "dhcp4_parser.yy"
+ case 303: // cert_file: "cert-file" $@47 ":" "constant string"
+#line 1237 "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 2238 "dhcp4_parser.cc"
+#line 2299 "dhcp4_parser.cc"
break;
- case 297: // $@47: %empty
-#line 1213 "dhcp4_parser.yy"
+ case 304: // $@48: %empty
+#line 1243 "dhcp4_parser.yy"
{
ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2247 "dhcp4_parser.cc"
+#line 2308 "dhcp4_parser.cc"
break;
- case 298: // key_file: "key-file" $@47 ":" "constant string"
-#line 1216 "dhcp4_parser.yy"
+ case 305: // key_file: "key-file" $@48 ":" "constant string"
+#line 1246 "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 2257 "dhcp4_parser.cc"
+#line 2318 "dhcp4_parser.cc"
break;
- case 299: // $@48: %empty
-#line 1222 "dhcp4_parser.yy"
+ case 306: // $@49: %empty
+#line 1252 "dhcp4_parser.yy"
{
ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2266 "dhcp4_parser.cc"
+#line 2327 "dhcp4_parser.cc"
break;
- case 300: // cipher_list: "cipher-list" $@48 ":" "constant string"
-#line 1225 "dhcp4_parser.yy"
+ case 307: // cipher_list: "cipher-list" $@49 ":" "constant string"
+#line 1255 "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 2276 "dhcp4_parser.cc"
+#line 2337 "dhcp4_parser.cc"
break;
- case 301: // $@49: %empty
-#line 1231 "dhcp4_parser.yy"
+ case 308: // $@50: %empty
+#line 1261 "dhcp4_parser.yy"
{
ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
}
-#line 2288 "dhcp4_parser.cc"
+#line 2349 "dhcp4_parser.cc"
break;
- case 302: // host_reservation_identifiers: "host-reservation-identifiers" $@49 ":" "[" host_reservation_identifiers_list "]"
-#line 1237 "dhcp4_parser.yy"
+ case 309: // host_reservation_identifiers: "host-reservation-identifiers" $@50 ":" "[" host_reservation_identifiers_list "]"
+#line 1267 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2297 "dhcp4_parser.cc"
+#line 2358 "dhcp4_parser.cc"
break;
- case 305: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1244 "dhcp4_parser.yy"
+ case 312: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
+#line 1274 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2305 "dhcp4_parser.cc"
+#line 2366 "dhcp4_parser.cc"
break;
- case 311: // duid_id: "duid"
-#line 1256 "dhcp4_parser.yy"
+ case 318: // duid_id: "duid"
+#line 1286 "dhcp4_parser.yy"
{
ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
-#line 2314 "dhcp4_parser.cc"
+#line 2375 "dhcp4_parser.cc"
break;
- case 312: // hw_address_id: "hw-address"
-#line 1261 "dhcp4_parser.yy"
+ case 319: // hw_address_id: "hw-address"
+#line 1291 "dhcp4_parser.yy"
{
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(hwaddr);
}
-#line 2323 "dhcp4_parser.cc"
+#line 2384 "dhcp4_parser.cc"
break;
- case 313: // circuit_id: "circuit-id"
-#line 1266 "dhcp4_parser.yy"
+ case 320: // circuit_id: "circuit-id"
+#line 1296 "dhcp4_parser.yy"
{
ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(circuit);
}
-#line 2332 "dhcp4_parser.cc"
+#line 2393 "dhcp4_parser.cc"
break;
- case 314: // client_id: "client-id"
-#line 1271 "dhcp4_parser.yy"
+ case 321: // client_id: "client-id"
+#line 1301 "dhcp4_parser.yy"
{
ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(client);
}
-#line 2341 "dhcp4_parser.cc"
+#line 2402 "dhcp4_parser.cc"
break;
- case 315: // flex_id: "flex-id"
-#line 1276 "dhcp4_parser.yy"
+ case 322: // flex_id: "flex-id"
+#line 1306 "dhcp4_parser.yy"
{
ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(flex_id);
}
-#line 2350 "dhcp4_parser.cc"
+#line 2411 "dhcp4_parser.cc"
break;
- case 316: // $@50: %empty
-#line 1283 "dhcp4_parser.yy"
+ case 323: // $@51: %empty
+#line 1313 "dhcp4_parser.yy"
{
ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(mt);
ctx.enter(ctx.DHCP_MULTI_THREADING);
}
-#line 2362 "dhcp4_parser.cc"
+#line 2423 "dhcp4_parser.cc"
break;
- case 317: // dhcp_multi_threading: "multi-threading" $@50 ":" "{" multi_threading_params "}"
-#line 1289 "dhcp4_parser.yy"
+ case 324: // dhcp_multi_threading: "multi-threading" $@51 ":" "{" multi_threading_params "}"
+#line 1319 "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 2373 "dhcp4_parser.cc"
+#line 2434 "dhcp4_parser.cc"
break;
- case 320: // multi_threading_params: multi_threading_params ","
-#line 1298 "dhcp4_parser.yy"
+ case 327: // multi_threading_params: multi_threading_params ","
+#line 1328 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2381 "dhcp4_parser.cc"
+#line 2442 "dhcp4_parser.cc"
break;
- case 327: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1311 "dhcp4_parser.yy"
+ case 334: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
+#line 1341 "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 2391 "dhcp4_parser.cc"
+#line 2452 "dhcp4_parser.cc"
break;
- case 328: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1317 "dhcp4_parser.yy"
+ case 335: // thread_pool_size: "thread-pool-size" ":" "integer"
+#line 1347 "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 2401 "dhcp4_parser.cc"
+#line 2462 "dhcp4_parser.cc"
break;
- case 329: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1323 "dhcp4_parser.yy"
+ case 336: // packet_queue_size: "packet-queue-size" ":" "integer"
+#line 1353 "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 2411 "dhcp4_parser.cc"
+#line 2472 "dhcp4_parser.cc"
break;
- case 330: // $@51: %empty
-#line 1329 "dhcp4_parser.yy"
+ case 337: // $@52: %empty
+#line 1359 "dhcp4_parser.yy"
{
ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.HOOKS_LIBRARIES);
}
-#line 2423 "dhcp4_parser.cc"
+#line 2484 "dhcp4_parser.cc"
break;
- case 331: // hooks_libraries: "hooks-libraries" $@51 ":" "[" hooks_libraries_list "]"
-#line 1335 "dhcp4_parser.yy"
+ case 338: // hooks_libraries: "hooks-libraries" $@52 ":" "[" hooks_libraries_list "]"
+#line 1365 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2432 "dhcp4_parser.cc"
+#line 2493 "dhcp4_parser.cc"
break;
- case 336: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1346 "dhcp4_parser.yy"
+ case 343: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
+#line 1376 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2440 "dhcp4_parser.cc"
+#line 2501 "dhcp4_parser.cc"
break;
- case 337: // $@52: %empty
-#line 1351 "dhcp4_parser.yy"
+ case 344: // $@53: %empty
+#line 1381 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2450 "dhcp4_parser.cc"
+#line 2511 "dhcp4_parser.cc"
break;
- case 338: // hooks_library: "{" $@52 hooks_params "}"
-#line 1355 "dhcp4_parser.yy"
+ case 345: // hooks_library: "{" $@53 hooks_params "}"
+#line 1385 "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 2460 "dhcp4_parser.cc"
+#line 2521 "dhcp4_parser.cc"
break;
- case 339: // $@53: %empty
-#line 1361 "dhcp4_parser.yy"
+ case 346: // $@54: %empty
+#line 1391 "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 2470 "dhcp4_parser.cc"
+#line 2531 "dhcp4_parser.cc"
break;
- case 340: // sub_hooks_library: "{" $@53 hooks_params "}"
-#line 1365 "dhcp4_parser.yy"
+ case 347: // sub_hooks_library: "{" $@54 hooks_params "}"
+#line 1395 "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 2480 "dhcp4_parser.cc"
+#line 2541 "dhcp4_parser.cc"
break;
- case 343: // hooks_params: hooks_params ","
-#line 1373 "dhcp4_parser.yy"
+ case 350: // hooks_params: hooks_params ","
+#line 1403 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2488 "dhcp4_parser.cc"
+#line 2549 "dhcp4_parser.cc"
break;
- case 347: // $@54: %empty
-#line 1383 "dhcp4_parser.yy"
+ case 354: // $@55: %empty
+#line 1413 "dhcp4_parser.yy"
{
ctx.unique("library", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2497 "dhcp4_parser.cc"
+#line 2558 "dhcp4_parser.cc"
break;
- case 348: // library: "library" $@54 ":" "constant string"
-#line 1386 "dhcp4_parser.yy"
+ case 355: // library: "library" $@55 ":" "constant string"
+#line 1416 "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 2507 "dhcp4_parser.cc"
+#line 2568 "dhcp4_parser.cc"
break;
- case 349: // $@55: %empty
-#line 1392 "dhcp4_parser.yy"
+ case 356: // $@56: %empty
+#line 1422 "dhcp4_parser.yy"
{
ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2516 "dhcp4_parser.cc"
+#line 2577 "dhcp4_parser.cc"
break;
- case 350: // parameters: "parameters" $@55 ":" map_value
-#line 1395 "dhcp4_parser.yy"
+ case 357: // parameters: "parameters" $@56 ":" map_value
+#line 1425 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2525 "dhcp4_parser.cc"
+#line 2586 "dhcp4_parser.cc"
break;
- case 351: // $@56: %empty
-#line 1401 "dhcp4_parser.yy"
+ case 358: // $@57: %empty
+#line 1431 "dhcp4_parser.yy"
{
ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
}
-#line 2537 "dhcp4_parser.cc"
+#line 2598 "dhcp4_parser.cc"
break;
- case 352: // expired_leases_processing: "expired-leases-processing" $@56 ":" "{" expired_leases_params "}"
-#line 1407 "dhcp4_parser.yy"
+ case 359: // expired_leases_processing: "expired-leases-processing" $@57 ":" "{" expired_leases_params "}"
+#line 1437 "dhcp4_parser.yy"
{
// No expired lease parameter is required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2547 "dhcp4_parser.cc"
+#line 2608 "dhcp4_parser.cc"
break;
- case 355: // expired_leases_params: expired_leases_params ","
-#line 1415 "dhcp4_parser.yy"
+ case 362: // expired_leases_params: expired_leases_params ","
+#line 1445 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2555 "dhcp4_parser.cc"
+#line 2616 "dhcp4_parser.cc"
break;
- case 362: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1428 "dhcp4_parser.yy"
+ case 369: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
+#line 1458 "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 2565 "dhcp4_parser.cc"
+#line 2626 "dhcp4_parser.cc"
break;
- case 363: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1434 "dhcp4_parser.yy"
+ case 370: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
+#line 1464 "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 2575 "dhcp4_parser.cc"
+#line 2636 "dhcp4_parser.cc"
break;
- case 364: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1440 "dhcp4_parser.yy"
+ case 371: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
+#line 1470 "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 2585 "dhcp4_parser.cc"
+#line 2646 "dhcp4_parser.cc"
break;
- case 365: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1446 "dhcp4_parser.yy"
+ case 372: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
+#line 1476 "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 2595 "dhcp4_parser.cc"
+#line 2656 "dhcp4_parser.cc"
break;
- case 366: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1452 "dhcp4_parser.yy"
+ case 373: // max_reclaim_time: "max-reclaim-time" ":" "integer"
+#line 1482 "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 2605 "dhcp4_parser.cc"
+#line 2666 "dhcp4_parser.cc"
break;
- case 367: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1458 "dhcp4_parser.yy"
+ case 374: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
+#line 1488 "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 2615 "dhcp4_parser.cc"
+#line 2676 "dhcp4_parser.cc"
break;
- case 368: // $@57: %empty
-#line 1467 "dhcp4_parser.yy"
+ case 375: // $@58: %empty
+#line 1497 "dhcp4_parser.yy"
{
ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.SUBNET4);
}
-#line 2627 "dhcp4_parser.cc"
+#line 2688 "dhcp4_parser.cc"
break;
- case 369: // subnet4_list: "subnet4" $@57 ":" "[" subnet4_list_content "]"
-#line 1473 "dhcp4_parser.yy"
+ case 376: // subnet4_list: "subnet4" $@58 ":" "[" subnet4_list_content "]"
+#line 1503 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2636 "dhcp4_parser.cc"
+#line 2697 "dhcp4_parser.cc"
break;
- case 374: // not_empty_subnet4_list: not_empty_subnet4_list ","
-#line 1487 "dhcp4_parser.yy"
+ case 381: // not_empty_subnet4_list: not_empty_subnet4_list ","
+#line 1517 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2644 "dhcp4_parser.cc"
+#line 2705 "dhcp4_parser.cc"
break;
- case 375: // $@58: %empty
-#line 1496 "dhcp4_parser.yy"
+ case 382: // $@59: %empty
+#line 1526 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2654 "dhcp4_parser.cc"
+#line 2715 "dhcp4_parser.cc"
break;
- case 376: // subnet4: "{" $@58 subnet4_params "}"
-#line 1500 "dhcp4_parser.yy"
+ case 383: // subnet4: "{" $@59 subnet4_params "}"
+#line 1530 "dhcp4_parser.yy"
{
// Once we reached this place, the subnet parsing is now complete.
// If we want to, we can implement default values here.
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2680 "dhcp4_parser.cc"
+#line 2741 "dhcp4_parser.cc"
break;
- case 377: // $@59: %empty
-#line 1522 "dhcp4_parser.yy"
+ case 384: // $@60: %empty
+#line 1552 "dhcp4_parser.yy"
{
// Parse the subnet4 list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2690 "dhcp4_parser.cc"
+#line 2751 "dhcp4_parser.cc"
break;
- case 378: // sub_subnet4: "{" $@59 subnet4_params "}"
-#line 1526 "dhcp4_parser.yy"
+ case 385: // sub_subnet4: "{" $@60 subnet4_params "}"
+#line 1556 "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 2700 "dhcp4_parser.cc"
+#line 2761 "dhcp4_parser.cc"
break;
- case 381: // subnet4_params: subnet4_params ","
-#line 1535 "dhcp4_parser.yy"
+ case 388: // subnet4_params: subnet4_params ","
+#line 1565 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2708 "dhcp4_parser.cc"
+#line 2769 "dhcp4_parser.cc"
break;
- case 430: // $@60: %empty
-#line 1591 "dhcp4_parser.yy"
+ case 438: // $@61: %empty
+#line 1622 "dhcp4_parser.yy"
{
ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2717 "dhcp4_parser.cc"
+#line 2778 "dhcp4_parser.cc"
break;
- case 431: // subnet: "subnet" $@60 ":" "constant string"
-#line 1594 "dhcp4_parser.yy"
+ case 439: // subnet: "subnet" $@61 ":" "constant string"
+#line 1625 "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 2727 "dhcp4_parser.cc"
+#line 2788 "dhcp4_parser.cc"
break;
- case 432: // $@61: %empty
-#line 1600 "dhcp4_parser.yy"
+ case 440: // $@62: %empty
+#line 1631 "dhcp4_parser.yy"
{
ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2736 "dhcp4_parser.cc"
+#line 2797 "dhcp4_parser.cc"
break;
- case 433: // subnet_4o6_interface: "4o6-interface" $@61 ":" "constant string"
-#line 1603 "dhcp4_parser.yy"
+ case 441: // subnet_4o6_interface: "4o6-interface" $@62 ":" "constant string"
+#line 1634 "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 2746 "dhcp4_parser.cc"
+#line 2807 "dhcp4_parser.cc"
break;
- case 434: // $@62: %empty
-#line 1609 "dhcp4_parser.yy"
+ case 442: // $@63: %empty
+#line 1640 "dhcp4_parser.yy"
{
ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2755 "dhcp4_parser.cc"
+#line 2816 "dhcp4_parser.cc"
break;
- case 435: // subnet_4o6_interface_id: "4o6-interface-id" $@62 ":" "constant string"
-#line 1612 "dhcp4_parser.yy"
+ case 443: // subnet_4o6_interface_id: "4o6-interface-id" $@63 ":" "constant string"
+#line 1643 "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 2765 "dhcp4_parser.cc"
+#line 2826 "dhcp4_parser.cc"
break;
- case 436: // $@63: %empty
-#line 1618 "dhcp4_parser.yy"
+ case 444: // $@64: %empty
+#line 1649 "dhcp4_parser.yy"
{
ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2774 "dhcp4_parser.cc"
+#line 2835 "dhcp4_parser.cc"
break;
- case 437: // subnet_4o6_subnet: "4o6-subnet" $@63 ":" "constant string"
-#line 1621 "dhcp4_parser.yy"
+ case 445: // subnet_4o6_subnet: "4o6-subnet" $@64 ":" "constant string"
+#line 1652 "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 2784 "dhcp4_parser.cc"
+#line 2845 "dhcp4_parser.cc"
break;
- case 438: // $@64: %empty
-#line 1627 "dhcp4_parser.yy"
+ case 446: // $@65: %empty
+#line 1658 "dhcp4_parser.yy"
{
ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2793 "dhcp4_parser.cc"
+#line 2854 "dhcp4_parser.cc"
break;
- case 439: // interface: "interface" $@64 ":" "constant string"
-#line 1630 "dhcp4_parser.yy"
+ case 447: // interface: "interface" $@65 ":" "constant string"
+#line 1661 "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 2803 "dhcp4_parser.cc"
+#line 2864 "dhcp4_parser.cc"
break;
- case 440: // $@65: %empty
-#line 1636 "dhcp4_parser.yy"
+ case 448: // $@66: %empty
+#line 1667 "dhcp4_parser.yy"
{
ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2812 "dhcp4_parser.cc"
+#line 2873 "dhcp4_parser.cc"
break;
- case 441: // client_class: "client-class" $@65 ":" "constant string"
-#line 1639 "dhcp4_parser.yy"
+ case 449: // client_class: "client-class" $@66 ":" "constant string"
+#line 1670 "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 2822 "dhcp4_parser.cc"
+#line 2883 "dhcp4_parser.cc"
break;
- case 442: // $@66: %empty
-#line 1645 "dhcp4_parser.yy"
+ case 450: // $@67: %empty
+#line 1676 "dhcp4_parser.yy"
{
ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2834 "dhcp4_parser.cc"
+#line 2895 "dhcp4_parser.cc"
break;
- case 443: // require_client_classes: "require-client-classes" $@66 ":" list_strings
-#line 1651 "dhcp4_parser.yy"
+ case 451: // require_client_classes: "require-client-classes" $@67 ":" list_strings
+#line 1682 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2843 "dhcp4_parser.cc"
+#line 2904 "dhcp4_parser.cc"
break;
- case 444: // reservations_global: "reservations-global" ":" "boolean"
-#line 1656 "dhcp4_parser.yy"
+ case 452: // reservations_global: "reservations-global" ":" "boolean"
+#line 1687 "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 2853 "dhcp4_parser.cc"
+#line 2914 "dhcp4_parser.cc"
break;
- case 445: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1662 "dhcp4_parser.yy"
+ case 453: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
+#line 1693 "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 2863 "dhcp4_parser.cc"
+#line 2924 "dhcp4_parser.cc"
break;
- case 446: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1668 "dhcp4_parser.yy"
+ case 454: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
+#line 1699 "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 2873 "dhcp4_parser.cc"
+#line 2934 "dhcp4_parser.cc"
break;
- case 447: // $@67: %empty
-#line 1674 "dhcp4_parser.yy"
+ case 455: // $@68: %empty
+#line 1705 "dhcp4_parser.yy"
{
ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.RESERVATION_MODE);
}
-#line 2882 "dhcp4_parser.cc"
+#line 2943 "dhcp4_parser.cc"
break;
- case 448: // reservation_mode: "reservation-mode" $@67 ":" hr_mode
-#line 1677 "dhcp4_parser.yy"
+ case 456: // reservation_mode: "reservation-mode" $@68 ":" hr_mode
+#line 1708 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2891 "dhcp4_parser.cc"
+#line 2952 "dhcp4_parser.cc"
break;
- case 449: // hr_mode: "disabled"
-#line 1682 "dhcp4_parser.yy"
+ case 457: // hr_mode: "disabled"
+#line 1713 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2897 "dhcp4_parser.cc"
+#line 2958 "dhcp4_parser.cc"
break;
- case 450: // hr_mode: "out-of-pool"
-#line 1683 "dhcp4_parser.yy"
+ case 458: // hr_mode: "out-of-pool"
+#line 1714 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2903 "dhcp4_parser.cc"
+#line 2964 "dhcp4_parser.cc"
break;
- case 451: // hr_mode: "global"
-#line 1684 "dhcp4_parser.yy"
+ case 459: // hr_mode: "global"
+#line 1715 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2909 "dhcp4_parser.cc"
+#line 2970 "dhcp4_parser.cc"
break;
- case 452: // hr_mode: "all"
-#line 1685 "dhcp4_parser.yy"
+ case 460: // hr_mode: "all"
+#line 1716 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2915 "dhcp4_parser.cc"
+#line 2976 "dhcp4_parser.cc"
break;
- case 453: // id: "id" ":" "integer"
-#line 1688 "dhcp4_parser.yy"
+ case 461: // id: "id" ":" "integer"
+#line 1719 "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 2925 "dhcp4_parser.cc"
+#line 2986 "dhcp4_parser.cc"
break;
- case 454: // $@68: %empty
-#line 1696 "dhcp4_parser.yy"
+ case 462: // $@69: %empty
+#line 1727 "dhcp4_parser.yy"
{
ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.SHARED_NETWORK);
}
-#line 2937 "dhcp4_parser.cc"
+#line 2998 "dhcp4_parser.cc"
break;
- case 455: // shared_networks: "shared-networks" $@68 ":" "[" shared_networks_content "]"
-#line 1702 "dhcp4_parser.yy"
+ case 463: // shared_networks: "shared-networks" $@69 ":" "[" shared_networks_content "]"
+#line 1733 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2946 "dhcp4_parser.cc"
+#line 3007 "dhcp4_parser.cc"
break;
- case 460: // shared_networks_list: shared_networks_list ","
-#line 1715 "dhcp4_parser.yy"
+ case 468: // shared_networks_list: shared_networks_list ","
+#line 1746 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2954 "dhcp4_parser.cc"
+#line 3015 "dhcp4_parser.cc"
break;
- case 461: // $@69: %empty
-#line 1720 "dhcp4_parser.yy"
+ case 469: // $@70: %empty
+#line 1751 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2964 "dhcp4_parser.cc"
+#line 3025 "dhcp4_parser.cc"
break;
- case 462: // shared_network: "{" $@69 shared_network_params "}"
-#line 1724 "dhcp4_parser.yy"
+ case 470: // shared_network: "{" $@70 shared_network_params "}"
+#line 1755 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
}
-#line 2972 "dhcp4_parser.cc"
+#line 3033 "dhcp4_parser.cc"
break;
- case 465: // shared_network_params: shared_network_params ","
-#line 1730 "dhcp4_parser.yy"
+ case 473: // shared_network_params: shared_network_params ","
+#line 1761 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2980 "dhcp4_parser.cc"
+#line 3041 "dhcp4_parser.cc"
break;
- case 509: // $@70: %empty
-#line 1784 "dhcp4_parser.yy"
+ case 518: // $@71: %empty
+#line 1816 "dhcp4_parser.yy"
{
ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DEF);
}
-#line 2992 "dhcp4_parser.cc"
+#line 3053 "dhcp4_parser.cc"
break;
- case 510: // option_def_list: "option-def" $@70 ":" "[" option_def_list_content "]"
-#line 1790 "dhcp4_parser.yy"
+ case 519: // option_def_list: "option-def" $@71 ":" "[" option_def_list_content "]"
+#line 1822 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3001 "dhcp4_parser.cc"
+#line 3062 "dhcp4_parser.cc"
break;
- case 511: // $@71: %empty
-#line 1798 "dhcp4_parser.yy"
+ case 520: // $@72: %empty
+#line 1830 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3010 "dhcp4_parser.cc"
+#line 3071 "dhcp4_parser.cc"
break;
- case 512: // sub_option_def_list: "{" $@71 option_def_list "}"
-#line 1801 "dhcp4_parser.yy"
+ case 521: // sub_option_def_list: "{" $@72 option_def_list "}"
+#line 1833 "dhcp4_parser.yy"
{
// parsing completed
}
-#line 3018 "dhcp4_parser.cc"
+#line 3079 "dhcp4_parser.cc"
break;
- case 517: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1813 "dhcp4_parser.yy"
+ case 526: // not_empty_option_def_list: not_empty_option_def_list ","
+#line 1845 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3026 "dhcp4_parser.cc"
+#line 3087 "dhcp4_parser.cc"
break;
- case 518: // $@72: %empty
-#line 1820 "dhcp4_parser.yy"
+ case 527: // $@73: %empty
+#line 1852 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3036 "dhcp4_parser.cc"
+#line 3097 "dhcp4_parser.cc"
break;
- case 519: // option_def_entry: "{" $@72 option_def_params "}"
-#line 1824 "dhcp4_parser.yy"
+ case 528: // option_def_entry: "{" $@73 option_def_params "}"
+#line 1856 "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));
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 3048 "dhcp4_parser.cc"
+#line 3109 "dhcp4_parser.cc"
break;
- case 520: // $@73: %empty
-#line 1835 "dhcp4_parser.yy"
+ case 529: // $@74: %empty
+#line 1867 "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 3058 "dhcp4_parser.cc"
+#line 3119 "dhcp4_parser.cc"
break;
- case 521: // sub_option_def: "{" $@73 option_def_params "}"
-#line 1839 "dhcp4_parser.yy"
+ case 530: // sub_option_def: "{" $@74 option_def_params "}"
+#line 1871 "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));
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 3070 "dhcp4_parser.cc"
+#line 3131 "dhcp4_parser.cc"
break;
- case 526: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1855 "dhcp4_parser.yy"
+ case 535: // not_empty_option_def_params: not_empty_option_def_params ","
+#line 1887 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3078 "dhcp4_parser.cc"
+#line 3139 "dhcp4_parser.cc"
break;
- case 538: // code: "code" ":" "integer"
-#line 1874 "dhcp4_parser.yy"
+ case 547: // code: "code" ":" "integer"
+#line 1906 "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 3088 "dhcp4_parser.cc"
+#line 3149 "dhcp4_parser.cc"
break;
- case 540: // $@74: %empty
-#line 1882 "dhcp4_parser.yy"
+ case 549: // $@75: %empty
+#line 1914 "dhcp4_parser.yy"
{
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3097 "dhcp4_parser.cc"
+#line 3158 "dhcp4_parser.cc"
break;
- case 541: // option_def_type: "type" $@74 ":" "constant string"
-#line 1885 "dhcp4_parser.yy"
+ case 550: // option_def_type: "type" $@75 ":" "constant string"
+#line 1917 "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 3107 "dhcp4_parser.cc"
+#line 3168 "dhcp4_parser.cc"
break;
- case 542: // $@75: %empty
-#line 1891 "dhcp4_parser.yy"
+ case 551: // $@76: %empty
+#line 1923 "dhcp4_parser.yy"
{
ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3116 "dhcp4_parser.cc"
+#line 3177 "dhcp4_parser.cc"
break;
- case 543: // option_def_record_types: "record-types" $@75 ":" "constant string"
-#line 1894 "dhcp4_parser.yy"
+ case 552: // option_def_record_types: "record-types" $@76 ":" "constant string"
+#line 1926 "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 3126 "dhcp4_parser.cc"
+#line 3187 "dhcp4_parser.cc"
break;
- case 544: // $@76: %empty
-#line 1900 "dhcp4_parser.yy"
+ case 553: // $@77: %empty
+#line 1932 "dhcp4_parser.yy"
{
ctx.unique("space", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3135 "dhcp4_parser.cc"
+#line 3196 "dhcp4_parser.cc"
break;
- case 545: // space: "space" $@76 ":" "constant string"
-#line 1903 "dhcp4_parser.yy"
+ case 554: // space: "space" $@77 ":" "constant string"
+#line 1935 "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 3145 "dhcp4_parser.cc"
+#line 3206 "dhcp4_parser.cc"
break;
- case 547: // $@77: %empty
-#line 1911 "dhcp4_parser.yy"
+ case 556: // $@78: %empty
+#line 1943 "dhcp4_parser.yy"
{
ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3154 "dhcp4_parser.cc"
+#line 3215 "dhcp4_parser.cc"
break;
- case 548: // option_def_encapsulate: "encapsulate" $@77 ":" "constant string"
-#line 1914 "dhcp4_parser.yy"
+ case 557: // option_def_encapsulate: "encapsulate" $@78 ":" "constant string"
+#line 1946 "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 3164 "dhcp4_parser.cc"
+#line 3225 "dhcp4_parser.cc"
break;
- case 549: // option_def_array: "array" ":" "boolean"
-#line 1920 "dhcp4_parser.yy"
+ case 558: // option_def_array: "array" ":" "boolean"
+#line 1952 "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 3174 "dhcp4_parser.cc"
+#line 3235 "dhcp4_parser.cc"
break;
- case 550: // $@78: %empty
-#line 1930 "dhcp4_parser.yy"
+ case 559: // $@79: %empty
+#line 1962 "dhcp4_parser.yy"
{
ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DATA);
}
-#line 3186 "dhcp4_parser.cc"
+#line 3247 "dhcp4_parser.cc"
break;
- case 551: // option_data_list: "option-data" $@78 ":" "[" option_data_list_content "]"
-#line 1936 "dhcp4_parser.yy"
+ case 560: // option_data_list: "option-data" $@79 ":" "[" option_data_list_content "]"
+#line 1968 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3195 "dhcp4_parser.cc"
+#line 3256 "dhcp4_parser.cc"
break;
- case 556: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 1951 "dhcp4_parser.yy"
+ case 565: // not_empty_option_data_list: not_empty_option_data_list ","
+#line 1983 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3203 "dhcp4_parser.cc"
+#line 3264 "dhcp4_parser.cc"
break;
- case 557: // $@79: %empty
-#line 1958 "dhcp4_parser.yy"
+ case 566: // $@80: %empty
+#line 1990 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3213 "dhcp4_parser.cc"
+#line 3274 "dhcp4_parser.cc"
break;
- case 558: // option_data_entry: "{" $@79 option_data_params "}"
-#line 1962 "dhcp4_parser.yy"
+ case 567: // option_data_entry: "{" $@80 option_data_params "}"
+#line 1994 "dhcp4_parser.yy"
{
/// @todo: the code or name parameters are required.
ctx.stack_.pop_back();
}
-#line 3222 "dhcp4_parser.cc"
+#line 3283 "dhcp4_parser.cc"
break;
- case 559: // $@80: %empty
-#line 1970 "dhcp4_parser.yy"
+ case 568: // $@81: %empty
+#line 2002 "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 3232 "dhcp4_parser.cc"
+#line 3293 "dhcp4_parser.cc"
break;
- case 560: // sub_option_data: "{" $@80 option_data_params "}"
-#line 1974 "dhcp4_parser.yy"
+ case 569: // sub_option_data: "{" $@81 option_data_params "}"
+#line 2006 "dhcp4_parser.yy"
{
/// @todo: the code or name parameters are required.
// parsing completed
}
-#line 3241 "dhcp4_parser.cc"
+#line 3302 "dhcp4_parser.cc"
break;
- case 565: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 1990 "dhcp4_parser.yy"
+ case 574: // not_empty_option_data_params: not_empty_option_data_params ","
+#line 2022 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3249 "dhcp4_parser.cc"
+#line 3310 "dhcp4_parser.cc"
break;
- case 577: // $@81: %empty
-#line 2011 "dhcp4_parser.yy"
+ case 586: // $@82: %empty
+#line 2043 "dhcp4_parser.yy"
{
ctx.unique("data", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3258 "dhcp4_parser.cc"
+#line 3319 "dhcp4_parser.cc"
break;
- case 578: // option_data_data: "data" $@81 ":" "constant string"
-#line 2014 "dhcp4_parser.yy"
+ case 587: // option_data_data: "data" $@82 ":" "constant string"
+#line 2046 "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 3268 "dhcp4_parser.cc"
+#line 3329 "dhcp4_parser.cc"
break;
- case 581: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 2024 "dhcp4_parser.yy"
+ case 590: // option_data_csv_format: "csv-format" ":" "boolean"
+#line 2056 "dhcp4_parser.yy"
{
ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("csv-format", csv);
}
-#line 3278 "dhcp4_parser.cc"
+#line 3339 "dhcp4_parser.cc"
break;
- case 582: // option_data_always_send: "always-send" ":" "boolean"
-#line 2030 "dhcp4_parser.yy"
+ case 591: // option_data_always_send: "always-send" ":" "boolean"
+#line 2062 "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 3288 "dhcp4_parser.cc"
+#line 3349 "dhcp4_parser.cc"
break;
- case 583: // option_data_never_send: "never-send" ":" "boolean"
-#line 2036 "dhcp4_parser.yy"
+ case 592: // option_data_never_send: "never-send" ":" "boolean"
+#line 2068 "dhcp4_parser.yy"
{
ctx.unique("never-send", ctx.loc2pos(yystack_[2].location));
ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("never-send", cancel);
}
-#line 3298 "dhcp4_parser.cc"
+#line 3359 "dhcp4_parser.cc"
break;
- case 584: // $@82: %empty
-#line 2045 "dhcp4_parser.yy"
+ case 593: // $@83: %empty
+#line 2077 "dhcp4_parser.yy"
{
ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.POOLS);
}
-#line 3310 "dhcp4_parser.cc"
+#line 3371 "dhcp4_parser.cc"
break;
- case 585: // pools_list: "pools" $@82 ":" "[" pools_list_content "]"
-#line 2051 "dhcp4_parser.yy"
+ case 594: // pools_list: "pools" $@83 ":" "[" pools_list_content "]"
+#line 2083 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3319 "dhcp4_parser.cc"
+#line 3380 "dhcp4_parser.cc"
break;
- case 590: // not_empty_pools_list: not_empty_pools_list ","
-#line 2064 "dhcp4_parser.yy"
+ case 599: // not_empty_pools_list: not_empty_pools_list ","
+#line 2096 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3327 "dhcp4_parser.cc"
+#line 3388 "dhcp4_parser.cc"
break;
- case 591: // $@83: %empty
-#line 2069 "dhcp4_parser.yy"
+ case 600: // $@84: %empty
+#line 2101 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3337 "dhcp4_parser.cc"
+#line 3398 "dhcp4_parser.cc"
break;
- case 592: // pool_list_entry: "{" $@83 pool_params "}"
-#line 2073 "dhcp4_parser.yy"
+ case 601: // pool_list_entry: "{" $@84 pool_params "}"
+#line 2105 "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 3347 "dhcp4_parser.cc"
+#line 3408 "dhcp4_parser.cc"
break;
- case 593: // $@84: %empty
-#line 2079 "dhcp4_parser.yy"
+ case 602: // $@85: %empty
+#line 2111 "dhcp4_parser.yy"
{
// Parse the pool list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3357 "dhcp4_parser.cc"
+#line 3418 "dhcp4_parser.cc"
break;
- case 594: // sub_pool4: "{" $@84 pool_params "}"
-#line 2083 "dhcp4_parser.yy"
+ case 603: // sub_pool4: "{" $@85 pool_params "}"
+#line 2115 "dhcp4_parser.yy"
{
// The pool parameter is required.
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 3367 "dhcp4_parser.cc"
+#line 3428 "dhcp4_parser.cc"
break;
- case 597: // pool_params: pool_params ","
-#line 2091 "dhcp4_parser.yy"
+ case 606: // pool_params: pool_params ","
+#line 2123 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3375 "dhcp4_parser.cc"
+#line 3436 "dhcp4_parser.cc"
break;
- case 606: // $@85: %empty
-#line 2106 "dhcp4_parser.yy"
+ case 615: // $@86: %empty
+#line 2138 "dhcp4_parser.yy"
{
ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3384 "dhcp4_parser.cc"
+#line 3445 "dhcp4_parser.cc"
break;
- case 607: // pool_entry: "pool" $@85 ":" "constant string"
-#line 2109 "dhcp4_parser.yy"
+ case 616: // pool_entry: "pool" $@86 ":" "constant string"
+#line 2141 "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 3394 "dhcp4_parser.cc"
+#line 3455 "dhcp4_parser.cc"
break;
- case 608: // pool_id: "pool-id" ":" "integer"
-#line 2115 "dhcp4_parser.yy"
+ case 617: // pool_id: "pool-id" ":" "integer"
+#line 2147 "dhcp4_parser.yy"
{
ctx.unique("pool-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("pool-id", id);
}
-#line 3404 "dhcp4_parser.cc"
+#line 3465 "dhcp4_parser.cc"
break;
- case 609: // $@86: %empty
-#line 2121 "dhcp4_parser.yy"
+ case 618: // $@87: %empty
+#line 2153 "dhcp4_parser.yy"
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3412 "dhcp4_parser.cc"
+#line 3473 "dhcp4_parser.cc"
break;
- case 610: // user_context: "user-context" $@86 ":" map_value
-#line 2123 "dhcp4_parser.yy"
+ case 619: // user_context: "user-context" $@87 ":" map_value
+#line 2155 "dhcp4_parser.yy"
{
ElementPtr parent = ctx.stack_.back();
ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
parent->set("user-context", user_context);
ctx.leave();
}
-#line 3439 "dhcp4_parser.cc"
+#line 3500 "dhcp4_parser.cc"
break;
- case 611: // $@87: %empty
-#line 2146 "dhcp4_parser.yy"
+ case 620: // $@88: %empty
+#line 2178 "dhcp4_parser.yy"
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3447 "dhcp4_parser.cc"
+#line 3508 "dhcp4_parser.cc"
break;
- case 612: // comment: "comment" $@87 ":" "constant string"
-#line 2148 "dhcp4_parser.yy"
+ case 621: // comment: "comment" $@88 ":" "constant string"
+#line 2180 "dhcp4_parser.yy"
{
ElementPtr parent = ctx.stack_.back();
ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
parent->set("user-context", user_context);
ctx.leave();
}
-#line 3476 "dhcp4_parser.cc"
+#line 3537 "dhcp4_parser.cc"
break;
- case 613: // $@88: %empty
-#line 2176 "dhcp4_parser.yy"
+ case 622: // $@89: %empty
+#line 2208 "dhcp4_parser.yy"
{
ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.RESERVATIONS);
}
-#line 3488 "dhcp4_parser.cc"
+#line 3549 "dhcp4_parser.cc"
break;
- case 614: // reservations: "reservations" $@88 ":" "[" reservations_list "]"
-#line 2182 "dhcp4_parser.yy"
+ case 623: // reservations: "reservations" $@89 ":" "[" reservations_list "]"
+#line 2214 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3497 "dhcp4_parser.cc"
+#line 3558 "dhcp4_parser.cc"
break;
- case 619: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2193 "dhcp4_parser.yy"
+ case 628: // not_empty_reservations_list: not_empty_reservations_list ","
+#line 2225 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3505 "dhcp4_parser.cc"
+#line 3566 "dhcp4_parser.cc"
break;
- case 620: // $@89: %empty
-#line 2198 "dhcp4_parser.yy"
+ case 629: // $@90: %empty
+#line 2230 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3515 "dhcp4_parser.cc"
+#line 3576 "dhcp4_parser.cc"
break;
- case 621: // reservation: "{" $@89 reservation_params "}"
-#line 2202 "dhcp4_parser.yy"
+ case 630: // reservation: "{" $@90 reservation_params "}"
+#line 2234 "dhcp4_parser.yy"
{
/// @todo: an identifier parameter is required.
ctx.stack_.pop_back();
}
-#line 3524 "dhcp4_parser.cc"
+#line 3585 "dhcp4_parser.cc"
break;
- case 622: // $@90: %empty
-#line 2207 "dhcp4_parser.yy"
+ case 631: // $@91: %empty
+#line 2239 "dhcp4_parser.yy"
{
// Parse the reservations list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3534 "dhcp4_parser.cc"
+#line 3595 "dhcp4_parser.cc"
break;
- case 623: // sub_reservation: "{" $@90 reservation_params "}"
-#line 2211 "dhcp4_parser.yy"
+ case 632: // sub_reservation: "{" $@91 reservation_params "}"
+#line 2243 "dhcp4_parser.yy"
{
/// @todo: an identifier parameter is required.
// parsing completed
}
-#line 3543 "dhcp4_parser.cc"
+#line 3604 "dhcp4_parser.cc"
break;
- case 628: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2222 "dhcp4_parser.yy"
+ case 637: // not_empty_reservation_params: not_empty_reservation_params ","
+#line 2254 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3551 "dhcp4_parser.cc"
+#line 3612 "dhcp4_parser.cc"
break;
- case 644: // $@91: %empty
-#line 2245 "dhcp4_parser.yy"
+ case 653: // $@92: %empty
+#line 2277 "dhcp4_parser.yy"
{
ctx.unique("next-server", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3560 "dhcp4_parser.cc"
+#line 3621 "dhcp4_parser.cc"
break;
- case 645: // next_server: "next-server" $@91 ":" "constant string"
-#line 2248 "dhcp4_parser.yy"
+ case 654: // next_server: "next-server" $@92 ":" "constant string"
+#line 2280 "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 3570 "dhcp4_parser.cc"
+#line 3631 "dhcp4_parser.cc"
break;
- case 646: // $@92: %empty
-#line 2254 "dhcp4_parser.yy"
+ case 655: // $@93: %empty
+#line 2286 "dhcp4_parser.yy"
{
ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3579 "dhcp4_parser.cc"
+#line 3640 "dhcp4_parser.cc"
break;
- case 647: // server_hostname: "server-hostname" $@92 ":" "constant string"
-#line 2257 "dhcp4_parser.yy"
+ case 656: // server_hostname: "server-hostname" $@93 ":" "constant string"
+#line 2289 "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 3589 "dhcp4_parser.cc"
+#line 3650 "dhcp4_parser.cc"
break;
- case 648: // $@93: %empty
-#line 2263 "dhcp4_parser.yy"
+ case 657: // $@94: %empty
+#line 2295 "dhcp4_parser.yy"
{
ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3598 "dhcp4_parser.cc"
+#line 3659 "dhcp4_parser.cc"
break;
- case 649: // boot_file_name: "boot-file-name" $@93 ":" "constant string"
-#line 2266 "dhcp4_parser.yy"
+ case 658: // boot_file_name: "boot-file-name" $@94 ":" "constant string"
+#line 2298 "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 3608 "dhcp4_parser.cc"
+#line 3669 "dhcp4_parser.cc"
break;
- case 650: // $@94: %empty
-#line 2272 "dhcp4_parser.yy"
+ case 659: // $@95: %empty
+#line 2304 "dhcp4_parser.yy"
{
ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3617 "dhcp4_parser.cc"
+#line 3678 "dhcp4_parser.cc"
break;
- case 651: // ip_address: "ip-address" $@94 ":" "constant string"
-#line 2275 "dhcp4_parser.yy"
+ case 660: // ip_address: "ip-address" $@95 ":" "constant string"
+#line 2307 "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 3627 "dhcp4_parser.cc"
+#line 3688 "dhcp4_parser.cc"
break;
- case 652: // $@95: %empty
-#line 2281 "dhcp4_parser.yy"
+ case 661: // $@96: %empty
+#line 2313 "dhcp4_parser.yy"
{
ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3639 "dhcp4_parser.cc"
+#line 3700 "dhcp4_parser.cc"
break;
- case 653: // ip_addresses: "ip-addresses" $@95 ":" list_strings
-#line 2287 "dhcp4_parser.yy"
+ case 662: // ip_addresses: "ip-addresses" $@96 ":" list_strings
+#line 2319 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3648 "dhcp4_parser.cc"
+#line 3709 "dhcp4_parser.cc"
break;
- case 654: // $@96: %empty
-#line 2292 "dhcp4_parser.yy"
+ case 663: // $@97: %empty
+#line 2324 "dhcp4_parser.yy"
{
ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3657 "dhcp4_parser.cc"
+#line 3718 "dhcp4_parser.cc"
break;
- case 655: // duid: "duid" $@96 ":" "constant string"
-#line 2295 "dhcp4_parser.yy"
+ case 664: // duid: "duid" $@97 ":" "constant string"
+#line 2327 "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 3667 "dhcp4_parser.cc"
+#line 3728 "dhcp4_parser.cc"
break;
- case 656: // $@97: %empty
-#line 2301 "dhcp4_parser.yy"
+ case 665: // $@98: %empty
+#line 2333 "dhcp4_parser.yy"
{
ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3676 "dhcp4_parser.cc"
+#line 3737 "dhcp4_parser.cc"
break;
- case 657: // hw_address: "hw-address" $@97 ":" "constant string"
-#line 2304 "dhcp4_parser.yy"
+ case 666: // hw_address: "hw-address" $@98 ":" "constant string"
+#line 2336 "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 3686 "dhcp4_parser.cc"
+#line 3747 "dhcp4_parser.cc"
break;
- case 658: // $@98: %empty
-#line 2310 "dhcp4_parser.yy"
+ case 667: // $@99: %empty
+#line 2342 "dhcp4_parser.yy"
{
ctx.unique("client-id", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3695 "dhcp4_parser.cc"
+#line 3756 "dhcp4_parser.cc"
break;
- case 659: // client_id_value: "client-id" $@98 ":" "constant string"
-#line 2313 "dhcp4_parser.yy"
+ case 668: // client_id_value: "client-id" $@99 ":" "constant string"
+#line 2345 "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 3705 "dhcp4_parser.cc"
+#line 3766 "dhcp4_parser.cc"
break;
- case 660: // $@99: %empty
-#line 2319 "dhcp4_parser.yy"
+ case 669: // $@100: %empty
+#line 2351 "dhcp4_parser.yy"
{
ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3714 "dhcp4_parser.cc"
+#line 3775 "dhcp4_parser.cc"
break;
- case 661: // circuit_id_value: "circuit-id" $@99 ":" "constant string"
-#line 2322 "dhcp4_parser.yy"
+ case 670: // circuit_id_value: "circuit-id" $@100 ":" "constant string"
+#line 2354 "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 3724 "dhcp4_parser.cc"
+#line 3785 "dhcp4_parser.cc"
break;
- case 662: // $@100: %empty
-#line 2328 "dhcp4_parser.yy"
+ case 671: // $@101: %empty
+#line 2360 "dhcp4_parser.yy"
{
ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3733 "dhcp4_parser.cc"
+#line 3794 "dhcp4_parser.cc"
break;
- case 663: // flex_id_value: "flex-id" $@100 ":" "constant string"
-#line 2331 "dhcp4_parser.yy"
+ case 672: // flex_id_value: "flex-id" $@101 ":" "constant string"
+#line 2363 "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 3743 "dhcp4_parser.cc"
+#line 3804 "dhcp4_parser.cc"
break;
- case 664: // $@101: %empty
-#line 2337 "dhcp4_parser.yy"
+ case 673: // $@102: %empty
+#line 2369 "dhcp4_parser.yy"
{
ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3752 "dhcp4_parser.cc"
+#line 3813 "dhcp4_parser.cc"
break;
- case 665: // hostname: "hostname" $@101 ":" "constant string"
-#line 2340 "dhcp4_parser.yy"
+ case 674: // hostname: "hostname" $@102 ":" "constant string"
+#line 2372 "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 3762 "dhcp4_parser.cc"
+#line 3823 "dhcp4_parser.cc"
break;
- case 666: // $@102: %empty
-#line 2346 "dhcp4_parser.yy"
+ case 675: // $@103: %empty
+#line 2378 "dhcp4_parser.yy"
{
ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3774 "dhcp4_parser.cc"
+#line 3835 "dhcp4_parser.cc"
break;
- case 667: // reservation_client_classes: "client-classes" $@102 ":" list_strings
-#line 2352 "dhcp4_parser.yy"
+ case 676: // reservation_client_classes: "client-classes" $@103 ":" list_strings
+#line 2384 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3783 "dhcp4_parser.cc"
+#line 3844 "dhcp4_parser.cc"
break;
- case 668: // $@103: %empty
-#line 2360 "dhcp4_parser.yy"
+ case 677: // $@104: %empty
+#line 2392 "dhcp4_parser.yy"
{
ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.RELAY);
}
-#line 3795 "dhcp4_parser.cc"
+#line 3856 "dhcp4_parser.cc"
break;
- case 669: // relay: "relay" $@103 ":" "{" relay_map "}"
-#line 2366 "dhcp4_parser.yy"
+ case 678: // relay: "relay" $@104 ":" "{" relay_map "}"
+#line 2398 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3804 "dhcp4_parser.cc"
+#line 3865 "dhcp4_parser.cc"
break;
- case 672: // $@104: %empty
-#line 2378 "dhcp4_parser.yy"
+ case 681: // $@105: %empty
+#line 2410 "dhcp4_parser.yy"
{
ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.CLIENT_CLASSES);
}
-#line 3816 "dhcp4_parser.cc"
+#line 3877 "dhcp4_parser.cc"
break;
- case 673: // client_classes: "client-classes" $@104 ":" "[" client_classes_list "]"
-#line 2384 "dhcp4_parser.yy"
+ case 682: // client_classes: "client-classes" $@105 ":" "[" client_classes_list "]"
+#line 2416 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3825 "dhcp4_parser.cc"
+#line 3886 "dhcp4_parser.cc"
break;
- case 676: // client_classes_list: client_classes_list ","
-#line 2391 "dhcp4_parser.yy"
+ case 685: // client_classes_list: client_classes_list ","
+#line 2423 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3833 "dhcp4_parser.cc"
+#line 3894 "dhcp4_parser.cc"
break;
- case 677: // $@105: %empty
-#line 2396 "dhcp4_parser.yy"
+ case 686: // $@106: %empty
+#line 2428 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3843 "dhcp4_parser.cc"
+#line 3904 "dhcp4_parser.cc"
break;
- case 678: // client_class_entry: "{" $@105 client_class_params "}"
-#line 2400 "dhcp4_parser.yy"
+ case 687: // client_class_entry: "{" $@106 client_class_params "}"
+#line 2432 "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 3853 "dhcp4_parser.cc"
+#line 3914 "dhcp4_parser.cc"
break;
- case 683: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2412 "dhcp4_parser.yy"
+ case 692: // not_empty_client_class_params: not_empty_client_class_params ","
+#line 2444 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3861 "dhcp4_parser.cc"
+#line 3922 "dhcp4_parser.cc"
break;
- case 701: // $@106: %empty
-#line 2437 "dhcp4_parser.yy"
+ case 710: // $@107: %empty
+#line 2469 "dhcp4_parser.yy"
{
ctx.unique("test", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3870 "dhcp4_parser.cc"
+#line 3931 "dhcp4_parser.cc"
break;
- case 702: // client_class_test: "test" $@106 ":" "constant string"
-#line 2440 "dhcp4_parser.yy"
+ case 711: // client_class_test: "test" $@107 ":" "constant string"
+#line 2472 "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 3880 "dhcp4_parser.cc"
+#line 3941 "dhcp4_parser.cc"
break;
- case 703: // $@107: %empty
-#line 2446 "dhcp4_parser.yy"
+ case 712: // $@108: %empty
+#line 2478 "dhcp4_parser.yy"
{
ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3889 "dhcp4_parser.cc"
+#line 3950 "dhcp4_parser.cc"
break;
- case 704: // client_class_template_test: "template-test" $@107 ":" "constant string"
-#line 2449 "dhcp4_parser.yy"
+ case 713: // client_class_template_test: "template-test" $@108 ":" "constant string"
+#line 2481 "dhcp4_parser.yy"
{
ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("template-test", template_test);
ctx.leave();
}
-#line 3899 "dhcp4_parser.cc"
+#line 3960 "dhcp4_parser.cc"
break;
- case 705: // only_if_required: "only-if-required" ":" "boolean"
-#line 2455 "dhcp4_parser.yy"
+ case 714: // only_if_required: "only-if-required" ":" "boolean"
+#line 2487 "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 3909 "dhcp4_parser.cc"
+#line 3970 "dhcp4_parser.cc"
break;
- case 706: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2463 "dhcp4_parser.yy"
+ case 715: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
+#line 2495 "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 3919 "dhcp4_parser.cc"
+#line 3980 "dhcp4_parser.cc"
break;
- case 707: // $@108: %empty
-#line 2471 "dhcp4_parser.yy"
+ case 716: // $@109: %empty
+#line 2503 "dhcp4_parser.yy"
{
ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.CONTROL_SOCKET);
}
-#line 3931 "dhcp4_parser.cc"
+#line 3992 "dhcp4_parser.cc"
break;
- case 708: // control_socket: "control-socket" $@108 ":" "{" control_socket_params "}"
-#line 2477 "dhcp4_parser.yy"
+ case 717: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}"
+#line 2509 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3940 "dhcp4_parser.cc"
+#line 4001 "dhcp4_parser.cc"
break;
- case 711: // control_socket_params: control_socket_params ","
-#line 2484 "dhcp4_parser.yy"
+ case 720: // control_socket_params: control_socket_params ","
+#line 2516 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3948 "dhcp4_parser.cc"
+#line 4009 "dhcp4_parser.cc"
break;
- case 717: // $@109: %empty
-#line 2496 "dhcp4_parser.yy"
+ case 726: // $@110: %empty
+#line 2528 "dhcp4_parser.yy"
{
ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3957 "dhcp4_parser.cc"
+#line 4018 "dhcp4_parser.cc"
break;
- case 718: // control_socket_type: "socket-type" $@109 ":" "constant string"
-#line 2499 "dhcp4_parser.yy"
+ case 727: // control_socket_type: "socket-type" $@110 ":" "constant string"
+#line 2531 "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 3967 "dhcp4_parser.cc"
+#line 4028 "dhcp4_parser.cc"
break;
- case 719: // $@110: %empty
-#line 2505 "dhcp4_parser.yy"
+ case 728: // $@111: %empty
+#line 2537 "dhcp4_parser.yy"
{
ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3976 "dhcp4_parser.cc"
+#line 4037 "dhcp4_parser.cc"
break;
- case 720: // control_socket_name: "socket-name" $@110 ":" "constant string"
-#line 2508 "dhcp4_parser.yy"
+ case 729: // control_socket_name: "socket-name" $@111 ":" "constant string"
+#line 2540 "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 3986 "dhcp4_parser.cc"
+#line 4047 "dhcp4_parser.cc"
break;
- case 721: // $@111: %empty
-#line 2517 "dhcp4_parser.yy"
+ case 730: // $@112: %empty
+#line 2549 "dhcp4_parser.yy"
{
ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(qc);
ctx.enter(ctx.DHCP_QUEUE_CONTROL);
}
-#line 3998 "dhcp4_parser.cc"
+#line 4059 "dhcp4_parser.cc"
break;
- case 722: // dhcp_queue_control: "dhcp-queue-control" $@111 ":" "{" queue_control_params "}"
-#line 2523 "dhcp4_parser.yy"
+ case 731: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}"
+#line 2555 "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 4009 "dhcp4_parser.cc"
+#line 4070 "dhcp4_parser.cc"
break;
- case 725: // queue_control_params: queue_control_params ","
-#line 2532 "dhcp4_parser.yy"
+ case 734: // queue_control_params: queue_control_params ","
+#line 2564 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4017 "dhcp4_parser.cc"
+#line 4078 "dhcp4_parser.cc"
break;
- case 732: // enable_queue: "enable-queue" ":" "boolean"
-#line 2545 "dhcp4_parser.yy"
+ case 741: // enable_queue: "enable-queue" ":" "boolean"
+#line 2577 "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 4027 "dhcp4_parser.cc"
+#line 4088 "dhcp4_parser.cc"
break;
- case 733: // $@112: %empty
-#line 2551 "dhcp4_parser.yy"
+ case 742: // $@113: %empty
+#line 2583 "dhcp4_parser.yy"
{
ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4036 "dhcp4_parser.cc"
+#line 4097 "dhcp4_parser.cc"
break;
- case 734: // queue_type: "queue-type" $@112 ":" "constant string"
-#line 2554 "dhcp4_parser.yy"
+ case 743: // queue_type: "queue-type" $@113 ":" "constant string"
+#line 2586 "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 4046 "dhcp4_parser.cc"
+#line 4107 "dhcp4_parser.cc"
break;
- case 735: // capacity: "capacity" ":" "integer"
-#line 2560 "dhcp4_parser.yy"
+ case 744: // capacity: "capacity" ":" "integer"
+#line 2592 "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 4056 "dhcp4_parser.cc"
+#line 4117 "dhcp4_parser.cc"
break;
- case 736: // $@113: %empty
-#line 2566 "dhcp4_parser.yy"
+ case 745: // $@114: %empty
+#line 2598 "dhcp4_parser.yy"
{
ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4065 "dhcp4_parser.cc"
+#line 4126 "dhcp4_parser.cc"
break;
- case 737: // arbitrary_map_entry: "constant string" $@113 ":" value
-#line 2569 "dhcp4_parser.yy"
+ case 746: // arbitrary_map_entry: "constant string" $@114 ":" value
+#line 2601 "dhcp4_parser.yy"
{
ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 4074 "dhcp4_parser.cc"
+#line 4135 "dhcp4_parser.cc"
break;
- case 738: // $@114: %empty
-#line 2576 "dhcp4_parser.yy"
+ case 747: // $@115: %empty
+#line 2608 "dhcp4_parser.yy"
{
ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP_DDNS);
}
-#line 4086 "dhcp4_parser.cc"
+#line 4147 "dhcp4_parser.cc"
break;
- case 739: // dhcp_ddns: "dhcp-ddns" $@114 ":" "{" dhcp_ddns_params "}"
-#line 2582 "dhcp4_parser.yy"
+ case 748: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}"
+#line 2614 "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 4097 "dhcp4_parser.cc"
+#line 4158 "dhcp4_parser.cc"
break;
- case 740: // $@115: %empty
-#line 2589 "dhcp4_parser.yy"
+ case 749: // $@116: %empty
+#line 2621 "dhcp4_parser.yy"
{
// Parse the dhcp-ddns map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 4107 "dhcp4_parser.cc"
+#line 4168 "dhcp4_parser.cc"
break;
- case 741: // sub_dhcp_ddns: "{" $@115 dhcp_ddns_params "}"
-#line 2593 "dhcp4_parser.yy"
+ case 750: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}"
+#line 2625 "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 4117 "dhcp4_parser.cc"
+#line 4178 "dhcp4_parser.cc"
break;
- case 744: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 2601 "dhcp4_parser.yy"
+ case 753: // dhcp_ddns_params: dhcp_ddns_params ","
+#line 2633 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4125 "dhcp4_parser.cc"
+#line 4186 "dhcp4_parser.cc"
break;
- case 763: // enable_updates: "enable-updates" ":" "boolean"
-#line 2626 "dhcp4_parser.yy"
+ case 772: // enable_updates: "enable-updates" ":" "boolean"
+#line 2658 "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 4135 "dhcp4_parser.cc"
+#line 4196 "dhcp4_parser.cc"
break;
- case 764: // $@116: %empty
-#line 2632 "dhcp4_parser.yy"
+ case 773: // $@117: %empty
+#line 2664 "dhcp4_parser.yy"
{
ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4144 "dhcp4_parser.cc"
+#line 4205 "dhcp4_parser.cc"
break;
- case 765: // server_ip: "server-ip" $@116 ":" "constant string"
-#line 2635 "dhcp4_parser.yy"
+ case 774: // server_ip: "server-ip" $@117 ":" "constant string"
+#line 2667 "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 4154 "dhcp4_parser.cc"
+#line 4215 "dhcp4_parser.cc"
break;
- case 766: // server_port: "server-port" ":" "integer"
-#line 2641 "dhcp4_parser.yy"
+ case 775: // server_port: "server-port" ":" "integer"
+#line 2673 "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 4164 "dhcp4_parser.cc"
+#line 4225 "dhcp4_parser.cc"
break;
- case 767: // $@117: %empty
-#line 2647 "dhcp4_parser.yy"
+ case 776: // $@118: %empty
+#line 2679 "dhcp4_parser.yy"
{
ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4173 "dhcp4_parser.cc"
+#line 4234 "dhcp4_parser.cc"
break;
- case 768: // sender_ip: "sender-ip" $@117 ":" "constant string"
-#line 2650 "dhcp4_parser.yy"
+ case 777: // sender_ip: "sender-ip" $@118 ":" "constant string"
+#line 2682 "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 4183 "dhcp4_parser.cc"
+#line 4244 "dhcp4_parser.cc"
break;
- case 769: // sender_port: "sender-port" ":" "integer"
-#line 2656 "dhcp4_parser.yy"
+ case 778: // sender_port: "sender-port" ":" "integer"
+#line 2688 "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 4193 "dhcp4_parser.cc"
+#line 4254 "dhcp4_parser.cc"
break;
- case 770: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2662 "dhcp4_parser.yy"
+ case 779: // max_queue_size: "max-queue-size" ":" "integer"
+#line 2694 "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 4203 "dhcp4_parser.cc"
+#line 4264 "dhcp4_parser.cc"
break;
- case 771: // $@118: %empty
-#line 2668 "dhcp4_parser.yy"
+ case 780: // $@119: %empty
+#line 2700 "dhcp4_parser.yy"
{
ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NCR_PROTOCOL);
}
-#line 4212 "dhcp4_parser.cc"
+#line 4273 "dhcp4_parser.cc"
break;
- case 772: // ncr_protocol: "ncr-protocol" $@118 ":" ncr_protocol_value
-#line 2671 "dhcp4_parser.yy"
+ case 781: // ncr_protocol: "ncr-protocol" $@119 ":" ncr_protocol_value
+#line 2703 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 4221 "dhcp4_parser.cc"
+#line 4282 "dhcp4_parser.cc"
break;
- case 773: // ncr_protocol_value: "udp"
-#line 2677 "dhcp4_parser.yy"
+ case 782: // ncr_protocol_value: "udp"
+#line 2709 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4227 "dhcp4_parser.cc"
+#line 4288 "dhcp4_parser.cc"
break;
- case 774: // ncr_protocol_value: "tcp"
-#line 2678 "dhcp4_parser.yy"
+ case 783: // ncr_protocol_value: "tcp"
+#line 2710 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4233 "dhcp4_parser.cc"
+#line 4294 "dhcp4_parser.cc"
break;
- case 775: // $@119: %empty
-#line 2681 "dhcp4_parser.yy"
+ case 784: // $@120: %empty
+#line 2713 "dhcp4_parser.yy"
{
ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NCR_FORMAT);
}
-#line 4242 "dhcp4_parser.cc"
+#line 4303 "dhcp4_parser.cc"
break;
- case 776: // ncr_format: "ncr-format" $@119 ":" "JSON"
-#line 2684 "dhcp4_parser.yy"
+ case 785: // ncr_format: "ncr-format" $@120 ":" "JSON"
+#line 2716 "dhcp4_parser.yy"
{
ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ncr-format", json);
ctx.leave();
}
-#line 4252 "dhcp4_parser.cc"
+#line 4313 "dhcp4_parser.cc"
break;
- case 777: // $@120: %empty
-#line 2691 "dhcp4_parser.yy"
+ case 786: // $@121: %empty
+#line 2723 "dhcp4_parser.yy"
{
ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4261 "dhcp4_parser.cc"
+#line 4322 "dhcp4_parser.cc"
break;
- case 778: // dep_qualifying_suffix: "qualifying-suffix" $@120 ":" "constant string"
-#line 2694 "dhcp4_parser.yy"
+ case 787: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string"
+#line 2726 "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 4271 "dhcp4_parser.cc"
+#line 4332 "dhcp4_parser.cc"
break;
- case 779: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2701 "dhcp4_parser.yy"
+ case 788: // dep_override_no_update: "override-no-update" ":" "boolean"
+#line 2733 "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 4281 "dhcp4_parser.cc"
+#line 4342 "dhcp4_parser.cc"
break;
- case 780: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2708 "dhcp4_parser.yy"
+ case 789: // dep_override_client_update: "override-client-update" ":" "boolean"
+#line 2740 "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 4291 "dhcp4_parser.cc"
+#line 4352 "dhcp4_parser.cc"
break;
- case 781: // $@121: %empty
-#line 2715 "dhcp4_parser.yy"
+ case 790: // $@122: %empty
+#line 2747 "dhcp4_parser.yy"
{
ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 4300 "dhcp4_parser.cc"
+#line 4361 "dhcp4_parser.cc"
break;
- case 782: // dep_replace_client_name: "replace-client-name" $@121 ":" ddns_replace_client_name_value
-#line 2718 "dhcp4_parser.yy"
+ case 791: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value
+#line 2750 "dhcp4_parser.yy"
{
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 4309 "dhcp4_parser.cc"
+#line 4370 "dhcp4_parser.cc"
break;
- case 783: // $@122: %empty
-#line 2724 "dhcp4_parser.yy"
+ case 792: // $@123: %empty
+#line 2756 "dhcp4_parser.yy"
{
ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4318 "dhcp4_parser.cc"
+#line 4379 "dhcp4_parser.cc"
break;
- case 784: // dep_generated_prefix: "generated-prefix" $@122 ":" "constant string"
-#line 2727 "dhcp4_parser.yy"
+ case 793: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string"
+#line 2759 "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 4328 "dhcp4_parser.cc"
+#line 4389 "dhcp4_parser.cc"
break;
- case 785: // $@123: %empty
-#line 2734 "dhcp4_parser.yy"
+ case 794: // $@124: %empty
+#line 2766 "dhcp4_parser.yy"
{
ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4337 "dhcp4_parser.cc"
+#line 4398 "dhcp4_parser.cc"
break;
- case 786: // dep_hostname_char_set: "hostname-char-set" $@123 ":" "constant string"
-#line 2737 "dhcp4_parser.yy"
+ case 795: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string"
+#line 2769 "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 4347 "dhcp4_parser.cc"
+#line 4408 "dhcp4_parser.cc"
break;
- case 787: // $@124: %empty
-#line 2744 "dhcp4_parser.yy"
+ case 796: // $@125: %empty
+#line 2776 "dhcp4_parser.yy"
{
ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4356 "dhcp4_parser.cc"
+#line 4417 "dhcp4_parser.cc"
break;
- case 788: // dep_hostname_char_replacement: "hostname-char-replacement" $@124 ":" "constant string"
-#line 2747 "dhcp4_parser.yy"
+ case 797: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string"
+#line 2779 "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 4366 "dhcp4_parser.cc"
+#line 4427 "dhcp4_parser.cc"
break;
- case 789: // $@125: %empty
-#line 2756 "dhcp4_parser.yy"
+ case 798: // $@126: %empty
+#line 2788 "dhcp4_parser.yy"
{
ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.CONFIG_CONTROL);
}
-#line 4378 "dhcp4_parser.cc"
+#line 4439 "dhcp4_parser.cc"
break;
- case 790: // config_control: "config-control" $@125 ":" "{" config_control_params "}"
-#line 2762 "dhcp4_parser.yy"
+ case 799: // config_control: "config-control" $@126 ":" "{" config_control_params "}"
+#line 2794 "dhcp4_parser.yy"
{
// No config control params are required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4388 "dhcp4_parser.cc"
+#line 4449 "dhcp4_parser.cc"
break;
- case 791: // $@126: %empty
-#line 2768 "dhcp4_parser.yy"
+ case 800: // $@127: %empty
+#line 2800 "dhcp4_parser.yy"
{
// Parse the config-control map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 4398 "dhcp4_parser.cc"
+#line 4459 "dhcp4_parser.cc"
break;
- case 792: // sub_config_control: "{" $@126 config_control_params "}"
-#line 2772 "dhcp4_parser.yy"
+ case 801: // sub_config_control: "{" $@127 config_control_params "}"
+#line 2804 "dhcp4_parser.yy"
{
// No config_control params are required
// parsing completed
}
-#line 4407 "dhcp4_parser.cc"
+#line 4468 "dhcp4_parser.cc"
break;
- case 795: // config_control_params: config_control_params ","
-#line 2780 "dhcp4_parser.yy"
+ case 804: // config_control_params: config_control_params ","
+#line 2812 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4415 "dhcp4_parser.cc"
+#line 4476 "dhcp4_parser.cc"
break;
- case 798: // $@127: %empty
-#line 2790 "dhcp4_parser.yy"
+ case 807: // $@128: %empty
+#line 2822 "dhcp4_parser.yy"
{
ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.CONFIG_DATABASE);
}
-#line 4427 "dhcp4_parser.cc"
+#line 4488 "dhcp4_parser.cc"
break;
- case 799: // config_databases: "config-databases" $@127 ":" "[" database_list "]"
-#line 2796 "dhcp4_parser.yy"
+ case 808: // config_databases: "config-databases" $@128 ":" "[" database_list "]"
+#line 2828 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4436 "dhcp4_parser.cc"
+#line 4497 "dhcp4_parser.cc"
break;
- case 800: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2801 "dhcp4_parser.yy"
+ case 809: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
+#line 2833 "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 4446 "dhcp4_parser.cc"
+#line 4507 "dhcp4_parser.cc"
break;
- case 801: // $@128: %empty
-#line 2809 "dhcp4_parser.yy"
+ case 810: // $@129: %empty
+#line 2841 "dhcp4_parser.yy"
{
ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.LOGGERS);
}
-#line 4458 "dhcp4_parser.cc"
+#line 4519 "dhcp4_parser.cc"
break;
- case 802: // loggers: "loggers" $@128 ":" "[" loggers_entries "]"
-#line 2815 "dhcp4_parser.yy"
+ case 811: // loggers: "loggers" $@129 ":" "[" loggers_entries "]"
+#line 2847 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4467 "dhcp4_parser.cc"
+#line 4528 "dhcp4_parser.cc"
break;
- case 805: // loggers_entries: loggers_entries ","
-#line 2824 "dhcp4_parser.yy"
+ case 814: // loggers_entries: loggers_entries ","
+#line 2856 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4475 "dhcp4_parser.cc"
+#line 4536 "dhcp4_parser.cc"
break;
- case 806: // $@129: %empty
-#line 2830 "dhcp4_parser.yy"
+ case 815: // $@130: %empty
+#line 2862 "dhcp4_parser.yy"
{
ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
-#line 4485 "dhcp4_parser.cc"
+#line 4546 "dhcp4_parser.cc"
break;
- case 807: // logger_entry: "{" $@129 logger_params "}"
-#line 2834 "dhcp4_parser.yy"
+ case 816: // logger_entry: "{" $@130 logger_params "}"
+#line 2866 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
}
-#line 4493 "dhcp4_parser.cc"
+#line 4554 "dhcp4_parser.cc"
break;
- case 810: // logger_params: logger_params ","
-#line 2840 "dhcp4_parser.yy"
+ case 819: // logger_params: logger_params ","
+#line 2872 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4501 "dhcp4_parser.cc"
+#line 4562 "dhcp4_parser.cc"
break;
- case 818: // debuglevel: "debuglevel" ":" "integer"
-#line 2854 "dhcp4_parser.yy"
+ case 827: // debuglevel: "debuglevel" ":" "integer"
+#line 2886 "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 4511 "dhcp4_parser.cc"
+#line 4572 "dhcp4_parser.cc"
break;
- case 819: // $@130: %empty
-#line 2860 "dhcp4_parser.yy"
+ case 828: // $@131: %empty
+#line 2892 "dhcp4_parser.yy"
{
ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4520 "dhcp4_parser.cc"
+#line 4581 "dhcp4_parser.cc"
break;
- case 820: // severity: "severity" $@130 ":" "constant string"
-#line 2863 "dhcp4_parser.yy"
+ case 829: // severity: "severity" $@131 ":" "constant string"
+#line 2895 "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 4530 "dhcp4_parser.cc"
+#line 4591 "dhcp4_parser.cc"
break;
- case 821: // $@131: %empty
-#line 2869 "dhcp4_parser.yy"
+ case 830: // $@132: %empty
+#line 2901 "dhcp4_parser.yy"
{
ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.OUTPUT_OPTIONS);
}
-#line 4542 "dhcp4_parser.cc"
+#line 4603 "dhcp4_parser.cc"
break;
- case 822: // output_options_list: "output_options" $@131 ":" "[" output_options_list_content "]"
-#line 2875 "dhcp4_parser.yy"
+ case 831: // output_options_list: "output_options" $@132 ":" "[" output_options_list_content "]"
+#line 2907 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4551 "dhcp4_parser.cc"
+#line 4612 "dhcp4_parser.cc"
break;
- case 825: // output_options_list_content: output_options_list_content ","
-#line 2882 "dhcp4_parser.yy"
+ case 834: // output_options_list_content: output_options_list_content ","
+#line 2914 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4559 "dhcp4_parser.cc"
+#line 4620 "dhcp4_parser.cc"
break;
- case 826: // $@132: %empty
-#line 2887 "dhcp4_parser.yy"
+ case 835: // $@133: %empty
+#line 2919 "dhcp4_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 4569 "dhcp4_parser.cc"
+#line 4630 "dhcp4_parser.cc"
break;
- case 827: // output_entry: "{" $@132 output_params_list "}"
-#line 2891 "dhcp4_parser.yy"
+ case 836: // output_entry: "{" $@133 output_params_list "}"
+#line 2923 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
}
-#line 4577 "dhcp4_parser.cc"
+#line 4638 "dhcp4_parser.cc"
break;
- case 830: // output_params_list: output_params_list ","
-#line 2897 "dhcp4_parser.yy"
+ case 839: // output_params_list: output_params_list ","
+#line 2929 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4585 "dhcp4_parser.cc"
+#line 4646 "dhcp4_parser.cc"
break;
- case 836: // $@133: %empty
-#line 2909 "dhcp4_parser.yy"
+ case 845: // $@134: %empty
+#line 2941 "dhcp4_parser.yy"
{
ctx.unique("output", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4594 "dhcp4_parser.cc"
+#line 4655 "dhcp4_parser.cc"
break;
- case 837: // output: "output" $@133 ":" "constant string"
-#line 2912 "dhcp4_parser.yy"
+ case 846: // output: "output" $@134 ":" "constant string"
+#line 2944 "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 4604 "dhcp4_parser.cc"
+#line 4665 "dhcp4_parser.cc"
break;
- case 838: // flush: "flush" ":" "boolean"
-#line 2918 "dhcp4_parser.yy"
+ case 847: // flush: "flush" ":" "boolean"
+#line 2950 "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 4614 "dhcp4_parser.cc"
+#line 4675 "dhcp4_parser.cc"
break;
- case 839: // maxsize: "maxsize" ":" "integer"
-#line 2924 "dhcp4_parser.yy"
+ case 848: // maxsize: "maxsize" ":" "integer"
+#line 2956 "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 4624 "dhcp4_parser.cc"
+#line 4685 "dhcp4_parser.cc"
break;
- case 840: // maxver: "maxver" ":" "integer"
-#line 2930 "dhcp4_parser.yy"
+ case 849: // maxver: "maxver" ":" "integer"
+#line 2962 "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 4634 "dhcp4_parser.cc"
+#line 4695 "dhcp4_parser.cc"
break;
- case 841: // $@134: %empty
-#line 2936 "dhcp4_parser.yy"
+ case 850: // $@135: %empty
+#line 2968 "dhcp4_parser.yy"
{
ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4643 "dhcp4_parser.cc"
+#line 4704 "dhcp4_parser.cc"
break;
- case 842: // pattern: "pattern" $@134 ":" "constant string"
-#line 2939 "dhcp4_parser.yy"
+ case 851: // pattern: "pattern" $@135 ":" "constant string"
+#line 2971 "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 4653 "dhcp4_parser.cc"
+#line 4714 "dhcp4_parser.cc"
break;
- case 843: // $@135: %empty
-#line 2945 "dhcp4_parser.yy"
+ case 852: // $@136: %empty
+#line 2977 "dhcp4_parser.yy"
{
ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.COMPATIBILITY);
}
-#line 4665 "dhcp4_parser.cc"
+#line 4726 "dhcp4_parser.cc"
break;
- case 844: // compatibility: "compatibility" $@135 ":" "{" compatibility_params "}"
-#line 2951 "dhcp4_parser.yy"
+ case 853: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}"
+#line 2983 "dhcp4_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4674 "dhcp4_parser.cc"
+#line 4735 "dhcp4_parser.cc"
break;
- case 847: // compatibility_params: compatibility_params ","
-#line 2958 "dhcp4_parser.yy"
+ case 856: // compatibility_params: compatibility_params ","
+#line 2990 "dhcp4_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4682 "dhcp4_parser.cc"
+#line 4743 "dhcp4_parser.cc"
break;
- case 853: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 2970 "dhcp4_parser.yy"
+ case 862: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
+#line 3002 "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 4692 "dhcp4_parser.cc"
+#line 4753 "dhcp4_parser.cc"
break;
- case 854: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean"
-#line 2976 "dhcp4_parser.yy"
+ case 863: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean"
+#line 3008 "dhcp4_parser.yy"
{
ctx.unique("ignore-dhcp-server-identifier", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ignore-dhcp-server-identifier", b);
}
-#line 4702 "dhcp4_parser.cc"
+#line 4763 "dhcp4_parser.cc"
break;
- case 855: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean"
-#line 2982 "dhcp4_parser.yy"
+ case 864: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean"
+#line 3014 "dhcp4_parser.yy"
{
ctx.unique("ignore-rai-link-selection", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ignore-rai-link-selection", b);
}
-#line 4712 "dhcp4_parser.cc"
+#line 4773 "dhcp4_parser.cc"
break;
- case 856: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean"
-#line 2988 "dhcp4_parser.yy"
+ case 865: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean"
+#line 3020 "dhcp4_parser.yy"
{
ctx.unique("exclude-first-last-24", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("exclude-first-last-24", b);
}
-#line 4722 "dhcp4_parser.cc"
+#line 4783 "dhcp4_parser.cc"
break;
-#line 4726 "dhcp4_parser.cc"
+#line 4787 "dhcp4_parser.cc"
default:
break;
// Actual number of expected tokens
int yycount = 0;
- const int yyn = yypact_[+yyparser_.yystack_[0].state];
+ 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;
+ 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;
+ int yychecklim = yylast_ - yyn + 1;
+ 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]))
-
-
-
int
Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const
}
- const short Dhcp4Parser::yypact_ninf_ = -1012;
+ const short Dhcp4Parser::yypact_ninf_ = -1022;
const signed char Dhcp4Parser::yytable_ninf_ = -1;
const short
Dhcp4Parser::yypact_[] =
{
- 634, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, 35, 31, 44, 64, 92, 137,
- 190, 228, 238, 254, 264, 276, 277, 280, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, 31, -182, 180, 145, 88, 333,
- 163, 533, -48, 90, -20, -89, 644, 43, -1012, 285,
- 59, 147, 298, 318, -1012, 23, -1012, -1012, -1012, -1012,
- 337, 355, 357, -1012, -1012, -1012, 365, -1012, -1012, -1012,
- 366, 375, 376, 383, 384, 385, 386, 387, 388, 389,
- 390, -1012, 391, 392, 393, 404, 405, -1012, -1012, -1012,
- 406, 407, 418, 422, -1012, -1012, -1012, 424, -1012, -1012,
- -1012, -1012, -1012, 425, 426, 427, -1012, -1012, -1012, -1012,
- -1012, 428, -1012, -1012, -1012, -1012, -1012, -1012, 429, 430,
- 431, -1012, -1012, 432, -1012, 49, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, 433, 434, 438, 446,
- -1012, 62, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 447, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 65,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, 448, -1012, -1012, -1012, -1012, 85, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, 315, 334, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- 449, -1012, -1012, 452, -1012, -1012, -1012, 455, -1012, -1012,
- 458, 460, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, 464, 465, 466, -1012, -1012,
- -1012, -1012, 467, 470, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, 86, -1012, -1012,
- -1012, 473, -1012, -1012, 474, -1012, 476, 477, -1012, -1012,
- 478, 480, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 89,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, 481, 93, -1012,
- -1012, -1012, -1012, 31, 31, -1012, 272, 484, -1012, -1012,
- 485, 486, 489, 279, 281, 289, 491, 496, 499, 295,
- 509, 515, 517, 307, 308, 309, 310, 311, 314, 317,
- 320, 321, 313, 323, 531, 324, 329, 332, 335, 340,
- 532, 543, 547, 341, 342, 338, 344, 548, 559, 560,
- 352, 566, 567, 571, 573, 578, 367, 369, 370, 586,
- 588, 589, 591, 596, 397, 599, 601, 602, 603, 604,
- 610, 371, 398, 399, 611, 614, -1012, 145, -1012, 615,
- 616, 617, 408, 435, 409, 436, 88, -1012, 618, 619,
- 638, 646, 647, 650, 439, 655, 656, 657, 333, -1012,
- 658, 457, 163, -1012, 660, 667, 670, 671, 673, 674,
- 675, 683, -1012, 533, -1012, 684, 685, 475, 686, 688,
- 691, 479, -1012, 90, 694, 483, 487, 488, -1012, -20,
- 695, 698, 30, -1012, 490, 699, 700, 493, 703, 494,
- 510, 723, 724, 511, 523, 738, 739, 740, 743, 644,
- -1012, 745, 540, 43, -1012, -1012, -1012, 754, 752, 753,
- 756, 758, -1012, -1012, -1012, 552, 553, 554, -1012, 763,
- 767, 770, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, 562, -1012, -1012, -1012, -1012, -1012, -16,
- 563, 564, -1012, -1012, -1012, -1012, 776, 777, 778, -1012,
- 569, 780, 779, 572, 87, -1012, -1012, -1012, 783, 785,
- 786, 787, 788, -1012, 789, 790, 791, 792, 579, 587,
- -1012, -1012, -1012, 796, 797, -1012, 798, 98, 141, -1012,
- -1012, -1012, -1012, -1012, 590, 592, 606, 801, 607, 608,
- -1012, 798, 609, 818, -1012, 635, -1012, -1012, 798, 636,
- 637, 639, 640, 641, 642, 643, -1012, 645, 648, -1012,
- 649, 652, 653, -1012, -1012, 654, -1012, -1012, -1012, -1012,
- 659, 779, -1012, -1012, 661, 662, -1012, 663, -1012, -1012,
- 19, 687, -1012, -1012, -16, 664, 665, 666, -1012, 821,
- -1012, -1012, 31, 145, 43, 88, 236, -1012, -1012, -1012,
- 585, 585, 822, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, 823, 824, 825, -1012, 826, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, 217, 842, 846, 854, 198,
- 171, -24, 47, 644, -1012, -1012, 855, -31, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 863,
- -1012, -1012, -1012, -1012, 159, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, 822, -1012, 115, 138, 144, -1012, -1012,
- 152, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 867, 868,
- 869, 871, 878, 879, 880, 881, 882, 883, -1012, 884,
- -1012, -1012, -1012, -1012, -1012, 233, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 234, -1012,
- 885, 886, -1012, -1012, 887, 889, -1012, -1012, 888, 892,
- -1012, -1012, 890, 894, -1012, -1012, 893, 895, -1012, -1012,
- -1012, -1012, -1012, -1012, 38, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, 102, -1012, -1012, 896, 897, -1012, -1012, 898,
- 900, -1012, 901, 902, 903, 904, 905, 906, 250, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, 907, 908, 909, -1012,
- 251, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, 267, -1012, -1012, -1012, 910, -1012, 911, -1012,
- -1012, -1012, 282, -1012, -1012, -1012, -1012, -1012, 292, -1012,
- 103, -1012, 912, 913, 914, 915, -1012, 299, -1012, -1012,
- -1012, -1012, -1012, 705, -1012, 916, 918, -1012, -1012, -1012,
- -1012, 917, 920, -1012, -1012, -1012, 919, 923, 236, -1012,
- 924, 925, 926, 927, 577, 672, 708, 714, 717, 718,
- 719, 720, 721, 722, 935, 725, 936, 938, 939, 940,
- 585, -1012, -1012, 585, -1012, 822, 333, -1012, 823, 90,
- -1012, 824, -20, -1012, 825, 651, -1012, 826, 217, -1012,
- 245, 842, -1012, 533, -1012, 846, -89, -1012, 854, 729,
- 730, 731, 732, 734, 735, 198, -1012, 736, 737, 741,
- 171, -1012, 952, 957, -24, -1012, 746, 961, 759, 968,
- 47, -1012, -1012, -61, 855, -1012, 764, 773, 774, 795,
- -31, -1012, -1012, 988, 994, 163, -1012, 863, 1013, -1012,
- -1012, 806, 807, -1012, 294, 809, 812, 816, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 326, -1012,
- 819, 820, 832, 833, -1012, 306, -1012, 312, -1012, 1029,
- -1012, 1047, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 319,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, 1053, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, 1052, 1099, -1012, -1012,
- -1012, -1012, -1012, -1012, 1097, -1012, 350, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 899,
- 921, -1012, -1012, 922, -1012, 31, -1012, -1012, 1103, -1012,
- -1012, -1012, -1012, -1012, 354, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, 928, 373, -1012, 798,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, 651, -1012, 1104, 1106, 929, -1012, 245, -1012, -1012,
- -1012, -1012, -1012, -1012, 1107, 932, 1108, -61, -1012, -1012,
- -1012, -1012, -1012, 930, 934, -1012, -1012, 1110, -1012, 937,
- -1012, -1012, -1012, 1109, -1012, -1012, 183, -1012, 123, 1109,
- -1012, -1012, 1113, 1114, 1115, -1012, 374, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, 1116, 933, 941, 942, 1117, 123,
- -1012, 944, -1012, -1012, -1012, 945, -1012, -1012, -1012
+ 597, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, 18, 44, 47, 64, 82, 90,
+ 98, 129, 145, 153, 172, 179, 190, 295, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, 44, -164, 106, 133, 159, 332,
+ -24, 201, -28, 257, 212, -113, 476, 176, -1022, 230,
+ 251, 252, 262, 326, -1022, 23, -1022, -1022, -1022, -1022,
+ 333, 340, 345, -1022, -1022, -1022, 346, -1022, -1022, -1022,
+ 347, 352, 353, 354, 366, 367, 370, 371, 372, 376,
+ 384, -1022, 385, 390, 391, 392, 404, -1022, -1022, -1022,
+ 405, 406, 421, 423, -1022, -1022, -1022, 430, -1022, -1022,
+ -1022, -1022, -1022, -1022, 431, 433, 442, -1022, -1022, -1022,
+ -1022, -1022, 450, -1022, -1022, -1022, -1022, -1022, -1022, 451,
+ 452, 456, -1022, -1022, 457, -1022, 42, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 459, 460,
+ 463, 466, -1022, 49, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ 468, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, 59, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, 470, -1022, -1022, -1022,
+ -1022, 65, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 290,
+ 478, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, 328, -1022, -1022, 475, -1022, -1022, -1022,
+ 480, -1022, -1022, 379, 479, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 481, 482,
+ 484, -1022, -1022, -1022, -1022, 489, 486, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ 85, -1022, -1022, -1022, 495, -1022, -1022, 497, -1022, 499,
+ 500, -1022, -1022, 503, 507, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, 91, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ 511, 93, -1022, -1022, -1022, -1022, 44, 44, -1022, 297,
+ 519, -1022, -1022, 521, 523, 524, 306, 307, 308, 529,
+ 532, 540, 330, 545, 550, 551, 335, 336, 338, 341,
+ 342, 343, 348, 349, 350, 357, 358, 560, 360, 365,
+ 344, 351, 373, 564, 565, 571, 381, 386, 377, 387,
+ 585, 589, 590, 398, 603, 607, 608, 616, 631, 632,
+ 414, 420, 435, 640, 655, 656, 658, 662, 446, 665,
+ 666, 667, 668, 670, 671, 453, 454, 455, 675, 676,
+ -1022, 133, -1022, 678, 679, 680, 462, 464, 465, 467,
+ 159, -1022, 685, 693, 694, 695, 696, 697, 487, 698,
+ 701, 703, 332, -1022, 705, 490, -24, -1022, 708, 709,
+ 710, 711, 712, 713, 714, 715, -1022, 201, -1022, 731,
+ 732, 516, 734, 746, 747, 530, -1022, 257, 748, 533,
+ 534, 535, -1022, 212, 755, 760, -70, -1022, 542, 764,
+ 765, 549, 767, 552, 553, 768, 773, 556, 558, 778,
+ 779, 780, 784, 476, -1022, 785, 570, 176, -1022, -1022,
+ -1022, 788, 786, 789, 790, 792, -1022, -1022, -1022, 575,
+ 580, 581, -1022, 795, 810, 813, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, 599, -1022, -1022,
+ -1022, -1022, -1022, 8, 600, 601, -1022, -1022, -1022, -1022,
+ 817, 818, 819, -1022, 605, 383, 821, 820, 609, 319,
+ -1022, -1022, -1022, 823, 825, 826, 827, 828, -1022, 829,
+ 830, 831, 832, 613, 614, -1022, -1022, -1022, 835, 834,
+ -1022, 837, 263, 294, -1022, -1022, -1022, -1022, -1022, 623,
+ 624, 625, 841, 627, 630, -1022, 837, 633, 844, -1022,
+ 634, -1022, -1022, 837, 635, 636, 637, 638, 639, 641,
+ 642, -1022, 643, 644, -1022, 645, 646, 647, -1022, -1022,
+ 648, -1022, -1022, -1022, -1022, 649, 820, -1022, -1022, 650,
+ 651, -1022, 652, -1022, -1022, 5, 669, -1022, -1022, 8,
+ 653, 654, 657, -1022, 855, -1022, -1022, 44, 133, 176,
+ 159, 256, -1022, -1022, -1022, 578, 578, 868, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, 869, 871, 872,
+ -1022, -1022, -1022, -1022, -1022, -1022, 874, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, 291, 875, 876, 877, 388,
+ -79, -29, 216, 476, -1022, -1022, 878, 187, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 879,
+ -1022, -1022, -1022, -1022, 189, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, 868, -1022, 100, 101, 115, -1022, -1022,
+ 123, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 883, 884,
+ 885, 886, 887, 888, 889, 890, 891, 892, -1022, 893,
+ -1022, -1022, -1022, -1022, -1022, 143, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 169, -1022,
+ 894, 895, -1022, -1022, 896, 898, -1022, -1022, 897, 901,
+ -1022, -1022, 899, 903, -1022, -1022, 902, 904, -1022, -1022,
+ -1022, -1022, -1022, -1022, 35, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, 109, -1022, -1022, 905, 906, -1022, -1022, 907,
+ 909, -1022, 910, 911, 912, 913, 914, 915, 182, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, 916, 917, 918, -1022,
+ 220, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, 221, -1022, -1022, -1022, 919, -1022, 920, -1022,
+ -1022, -1022, 222, -1022, -1022, -1022, -1022, -1022, 229, -1022,
+ 155, -1022, 921, 922, 923, 924, -1022, 239, -1022, -1022,
+ -1022, -1022, -1022, 690, -1022, 925, 926, -1022, -1022, -1022,
+ -1022, 927, 928, -1022, -1022, -1022, 929, 932, 256, -1022,
+ 933, 934, 935, 936, 720, 707, 721, 722, 723, 725,
+ 726, 727, 728, 729, 939, 730, 948, 949, 950, 951,
+ 578, -1022, -1022, 578, -1022, 868, 332, -1022, 869, 257,
+ -1022, 871, 212, -1022, 872, 660, -1022, 874, 291, -1022,
+ 253, 875, -1022, 201, -1022, 876, -113, -1022, 877, 735,
+ 736, 737, 739, 740, 742, 388, -1022, 741, 745, 750,
+ -79, -1022, 963, 970, -29, -1022, 752, 978, 771, 981,
+ 216, -1022, -1022, -40, 878, -1022, 781, 800, 804, 808,
+ 187, -1022, -1022, 995, 999, -24, -1022, 879, 1003, -1022,
+ -1022, 812, 814, -1022, 88, 824, 838, 845, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 234, -1022,
+ 847, 850, 900, 908, -1022, 243, -1022, 247, -1022, 1029,
+ -1022, 1033, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ 249, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, 1041, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, 1039, 1054, -1022,
+ -1022, -1022, -1022, -1022, -1022, 1107, -1022, 260, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ 930, 931, -1022, -1022, 938, -1022, 44, -1022, -1022, 1113,
+ -1022, -1022, -1022, -1022, -1022, 268, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, 940, 269, -1022,
+ 837, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, 660, -1022, 1114, 1118, 942, -1022, 253, -1022,
+ -1022, -1022, -1022, -1022, -1022, 1119, 941, 1120, -40, -1022,
+ -1022, -1022, -1022, -1022, 946, 947, -1022, -1022, 1121, -1022,
+ 952, -1022, -1022, -1022, 1122, -1022, -1022, 170, -1022, 105,
+ 1122, -1022, -1022, 1123, 1126, 1127, -1022, 270, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, 1128, 945, 953, 954, 1129,
+ 105, -1022, 956, -1022, -1022, -1022, 957, -1022, -1022, -1022
};
const short
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, 199, 9, 377, 11, 593, 13,
- 622, 15, 511, 17, 520, 19, 559, 21, 339, 23,
- 740, 25, 791, 27, 46, 39, 0, 0, 0, 0,
- 0, 624, 0, 522, 561, 0, 0, 0, 48, 0,
- 47, 0, 0, 40, 61, 0, 63, 789, 184, 217,
- 0, 0, 0, 644, 646, 648, 0, 215, 228, 230,
+ 59, 5, 65, 7, 206, 9, 384, 11, 602, 13,
+ 631, 15, 520, 17, 529, 19, 568, 21, 346, 23,
+ 749, 25, 800, 27, 46, 39, 0, 0, 0, 0,
+ 0, 633, 0, 531, 570, 0, 0, 0, 48, 0,
+ 47, 0, 0, 40, 61, 0, 63, 798, 191, 224,
+ 0, 0, 0, 653, 655, 657, 0, 222, 235, 237,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 149, 0, 0, 0, 0, 0, 160, 167, 169,
+ 0, 0, 0, 0, 375, 518, 559, 0, 152, 173,
+ 462, 618, 620, 455, 0, 0, 0, 308, 681, 622,
+ 337, 358, 0, 323, 716, 730, 747, 180, 182, 0,
+ 0, 0, 810, 852, 0, 137, 0, 67, 70, 71,
+ 72, 73, 74, 108, 109, 110, 111, 112, 75, 103,
+ 134, 135, 92, 93, 94, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 114, 115, 126, 127, 128,
+ 130, 131, 132, 136, 78, 79, 100, 80, 81, 82,
+ 129, 86, 87, 76, 105, 106, 107, 104, 77, 84,
+ 85, 98, 99, 101, 95, 96, 97, 83, 88, 89,
+ 90, 91, 102, 113, 133, 208, 210, 214, 0, 0,
+ 0, 0, 205, 0, 193, 196, 197, 198, 199, 200,
+ 201, 202, 203, 204, 440, 442, 444, 593, 438, 446,
+ 0, 450, 448, 677, 437, 389, 390, 391, 392, 393,
+ 417, 418, 419, 420, 421, 435, 407, 408, 422, 423,
+ 424, 425, 426, 427, 428, 429, 430, 431, 432, 433,
+ 434, 436, 0, 386, 396, 412, 413, 414, 397, 399,
+ 400, 403, 404, 405, 402, 398, 394, 395, 415, 416,
+ 401, 409, 410, 411, 406, 615, 0, 614, 610, 611,
+ 609, 0, 604, 607, 608, 612, 613, 675, 663, 665,
+ 669, 667, 673, 671, 659, 652, 646, 650, 651, 0,
+ 634, 635, 647, 648, 649, 643, 638, 644, 640, 641,
+ 642, 645, 639, 0, 549, 283, 0, 553, 551, 556,
+ 0, 545, 546, 0, 532, 533, 536, 548, 537, 538,
+ 539, 555, 540, 541, 542, 543, 544, 586, 0, 0,
+ 0, 584, 585, 588, 589, 0, 571, 572, 575, 576,
+ 577, 578, 579, 580, 581, 582, 583, 354, 356, 351,
+ 0, 348, 352, 353, 0, 786, 773, 0, 776, 0,
+ 0, 780, 784, 0, 0, 790, 792, 794, 796, 771,
+ 769, 770, 0, 751, 754, 755, 756, 757, 758, 759,
+ 760, 761, 766, 762, 763, 764, 765, 767, 768, 807,
+ 0, 0, 802, 805, 806, 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, 148, 0, 0, 0, 0, 0, 159, 166, 168,
- 0, 0, 0, 0, 368, 509, 550, 0, 151, 454,
- 609, 611, 447, 0, 0, 0, 301, 672, 613, 330,
- 351, 0, 316, 707, 721, 738, 173, 175, 0, 0,
- 0, 801, 843, 0, 136, 0, 67, 70, 71, 72,
- 73, 74, 108, 109, 110, 111, 112, 75, 103, 133,
- 134, 92, 93, 94, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 114, 115, 125, 126, 127, 129, 130,
- 131, 135, 78, 79, 100, 80, 81, 82, 128, 86,
- 87, 76, 105, 106, 107, 104, 77, 84, 85, 98,
- 99, 101, 95, 96, 97, 83, 88, 89, 90, 91,
- 102, 113, 132, 201, 203, 207, 0, 0, 0, 0,
- 198, 0, 186, 189, 190, 191, 192, 193, 194, 195,
- 196, 197, 432, 434, 436, 584, 430, 438, 0, 442,
- 440, 668, 429, 382, 383, 384, 385, 386, 410, 411,
- 412, 413, 414, 427, 400, 401, 415, 416, 417, 418,
- 419, 420, 421, 422, 423, 424, 425, 426, 428, 0,
- 379, 389, 405, 406, 407, 390, 392, 393, 396, 397,
- 398, 395, 391, 387, 388, 408, 409, 394, 402, 403,
- 404, 399, 606, 0, 605, 601, 602, 600, 0, 595,
- 598, 599, 603, 604, 666, 654, 656, 660, 658, 664,
- 662, 650, 643, 637, 641, 642, 0, 625, 626, 638,
- 639, 640, 634, 629, 635, 631, 632, 633, 636, 630,
- 0, 540, 276, 0, 544, 542, 547, 0, 536, 537,
- 0, 523, 524, 527, 539, 528, 529, 530, 546, 531,
- 532, 533, 534, 535, 577, 0, 0, 0, 575, 576,
- 579, 580, 0, 562, 563, 566, 567, 568, 569, 570,
- 571, 572, 573, 574, 347, 349, 344, 0, 341, 345,
- 346, 0, 777, 764, 0, 767, 0, 0, 771, 775,
- 0, 0, 781, 783, 785, 787, 762, 760, 761, 0,
- 742, 745, 746, 747, 748, 749, 750, 751, 752, 757,
- 753, 754, 755, 756, 758, 759, 798, 0, 0, 793,
- 796, 797, 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, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 69, 66, 0, 0, 0, 0, 0, 0, 0,
+ 195, 207, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 388, 385, 0, 0, 606, 603, 0, 0,
+ 0, 0, 0, 0, 0, 0, 632, 637, 521, 0,
+ 0, 0, 0, 0, 0, 0, 530, 535, 0, 0,
+ 0, 0, 569, 574, 0, 0, 350, 347, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 58, 69, 66, 0,
- 0, 0, 0, 0, 0, 0, 188, 200, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 381, 378,
- 0, 0, 597, 594, 0, 0, 0, 0, 0, 0,
- 0, 0, 623, 628, 512, 0, 0, 0, 0, 0,
- 0, 0, 521, 526, 0, 0, 0, 0, 560, 565,
- 0, 0, 343, 340, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 744,
- 741, 0, 0, 795, 792, 49, 41, 0, 0, 0,
- 0, 0, 153, 154, 155, 0, 0, 0, 183, 0,
- 0, 0, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 0, 178, 179, 156, 157, 158, 0,
- 0, 0, 170, 171, 172, 177, 0, 0, 0, 150,
- 0, 0, 0, 0, 0, 444, 445, 446, 0, 0,
- 0, 0, 0, 706, 0, 0, 0, 0, 0, 0,
- 180, 181, 182, 0, 0, 68, 0, 0, 0, 211,
- 212, 213, 214, 187, 0, 0, 0, 0, 0, 0,
- 453, 0, 0, 0, 380, 0, 608, 596, 0, 0,
- 0, 0, 0, 0, 0, 0, 627, 0, 0, 538,
- 0, 0, 0, 549, 525, 0, 581, 582, 583, 564,
- 0, 0, 342, 763, 0, 0, 766, 0, 769, 770,
- 0, 0, 779, 780, 0, 0, 0, 0, 743, 0,
- 800, 794, 0, 0, 0, 0, 0, 645, 647, 649,
- 0, 0, 232, 149, 161, 162, 163, 164, 165, 160,
- 167, 169, 370, 513, 552, 152, 456, 38, 610, 612,
- 449, 450, 451, 452, 448, 0, 0, 615, 332, 0,
- 0, 0, 0, 0, 174, 176, 0, 0, 51, 202,
- 205, 206, 204, 209, 210, 208, 433, 435, 437, 586,
- 431, 439, 443, 441, 0, 607, 667, 655, 657, 661,
- 659, 665, 663, 651, 541, 277, 545, 543, 548, 578,
- 348, 350, 778, 765, 768, 773, 774, 772, 776, 782,
- 784, 786, 788, 232, 42, 0, 0, 0, 224, 226,
- 0, 219, 222, 223, 264, 269, 271, 273, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 287, 0,
- 293, 295, 297, 299, 263, 0, 239, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 0, 237,
- 0, 233, 234, 375, 0, 371, 372, 518, 0, 514,
- 515, 557, 0, 553, 554, 461, 0, 457, 458, 311,
- 312, 313, 314, 315, 0, 303, 306, 307, 308, 309,
- 310, 677, 0, 674, 620, 0, 616, 617, 337, 0,
- 333, 334, 0, 0, 0, 0, 0, 0, 0, 353,
- 356, 357, 358, 359, 360, 361, 0, 0, 0, 326,
- 0, 318, 321, 322, 323, 324, 325, 717, 719, 716,
- 714, 715, 0, 709, 712, 713, 0, 733, 0, 736,
- 729, 730, 0, 723, 726, 727, 728, 731, 0, 806,
- 0, 803, 0, 0, 0, 0, 852, 0, 845, 848,
- 849, 850, 851, 53, 591, 0, 587, 588, 652, 670,
- 671, 0, 0, 62, 790, 185, 0, 0, 221, 218,
+ 0, 0, 0, 753, 750, 0, 0, 804, 801, 49,
+ 41, 0, 0, 0, 0, 0, 154, 155, 156, 0,
+ 0, 0, 190, 0, 0, 0, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 0, 185, 186,
+ 157, 158, 159, 0, 0, 0, 171, 172, 179, 184,
+ 0, 0, 0, 151, 0, 0, 0, 0, 0, 0,
+ 452, 453, 454, 0, 0, 0, 0, 0, 715, 0,
+ 0, 0, 0, 0, 0, 187, 188, 189, 0, 0,
+ 68, 0, 0, 0, 218, 219, 220, 221, 194, 0,
+ 0, 0, 0, 0, 0, 461, 0, 0, 0, 387,
+ 0, 617, 605, 0, 0, 0, 0, 0, 0, 0,
+ 0, 636, 0, 0, 547, 0, 0, 0, 558, 534,
+ 0, 590, 591, 592, 573, 0, 0, 349, 772, 0,
+ 0, 775, 0, 778, 779, 0, 0, 788, 789, 0,
+ 0, 0, 0, 752, 0, 809, 803, 0, 0, 0,
+ 0, 0, 654, 656, 658, 0, 0, 239, 150, 162,
+ 163, 164, 165, 166, 161, 168, 170, 377, 522, 561,
+ 153, 175, 176, 177, 178, 174, 464, 38, 619, 621,
+ 457, 458, 459, 460, 456, 0, 0, 624, 339, 0,
+ 0, 0, 0, 0, 181, 183, 0, 0, 51, 209,
+ 212, 213, 211, 216, 217, 215, 441, 443, 445, 595,
+ 439, 447, 451, 449, 0, 616, 676, 664, 666, 670,
+ 668, 674, 672, 660, 550, 284, 554, 552, 557, 587,
+ 355, 357, 787, 774, 777, 782, 783, 781, 785, 791,
+ 793, 795, 797, 239, 42, 0, 0, 0, 231, 233,
+ 0, 226, 229, 230, 271, 276, 278, 280, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 294, 0,
+ 300, 302, 304, 306, 270, 0, 246, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 269, 0, 244,
+ 0, 240, 241, 382, 0, 378, 379, 527, 0, 523,
+ 524, 566, 0, 562, 563, 469, 0, 465, 466, 318,
+ 319, 320, 321, 322, 0, 310, 313, 314, 315, 316,
+ 317, 686, 0, 683, 629, 0, 625, 626, 344, 0,
+ 340, 341, 0, 0, 0, 0, 0, 0, 0, 360,
+ 363, 364, 365, 366, 367, 368, 0, 0, 0, 333,
+ 0, 325, 328, 329, 330, 331, 332, 726, 728, 725,
+ 723, 724, 0, 718, 721, 722, 0, 742, 0, 745,
+ 738, 739, 0, 732, 735, 736, 737, 740, 0, 815,
+ 0, 812, 0, 0, 0, 0, 861, 0, 854, 857,
+ 858, 859, 860, 53, 600, 0, 596, 597, 661, 679,
+ 680, 0, 0, 62, 799, 192, 0, 0, 228, 225,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 241, 216, 229, 0, 231, 236, 0, 369, 374, 522,
- 510, 517, 561, 551, 556, 0, 455, 460, 305, 302,
- 679, 676, 673, 624, 614, 619, 0, 331, 336, 0,
- 0, 0, 0, 0, 0, 355, 352, 0, 0, 0,
- 320, 317, 0, 0, 711, 708, 0, 0, 0, 0,
- 725, 722, 739, 0, 805, 802, 0, 0, 0, 0,
- 847, 844, 55, 0, 54, 0, 585, 590, 0, 669,
- 799, 0, 0, 220, 0, 0, 0, 0, 275, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 0, 292,
- 0, 0, 0, 0, 240, 0, 235, 0, 373, 0,
- 516, 0, 555, 508, 484, 485, 486, 469, 470, 489,
- 490, 491, 492, 493, 506, 472, 473, 494, 495, 496,
- 497, 498, 499, 500, 501, 502, 503, 504, 505, 507,
- 466, 467, 468, 482, 483, 479, 480, 481, 478, 0,
- 463, 471, 487, 488, 474, 475, 476, 477, 459, 304,
- 701, 703, 0, 695, 696, 697, 698, 699, 700, 688,
- 689, 693, 694, 690, 691, 692, 0, 680, 681, 684,
- 685, 686, 687, 675, 0, 618, 0, 335, 362, 363,
- 364, 365, 366, 367, 354, 327, 328, 329, 319, 0,
- 0, 710, 732, 0, 735, 0, 724, 821, 0, 819,
- 817, 811, 815, 816, 0, 808, 813, 814, 812, 804,
- 853, 854, 855, 856, 846, 52, 57, 0, 589, 0,
- 225, 227, 266, 267, 268, 265, 270, 272, 274, 289,
- 290, 291, 288, 294, 296, 298, 300, 238, 376, 519,
- 558, 465, 462, 0, 0, 0, 678, 683, 621, 338,
- 718, 720, 734, 737, 0, 0, 0, 810, 807, 56,
- 592, 653, 464, 0, 0, 705, 682, 0, 818, 0,
- 809, 702, 704, 0, 820, 826, 0, 823, 0, 825,
- 822, 836, 0, 0, 0, 841, 0, 828, 831, 832,
- 833, 834, 835, 824, 0, 0, 0, 0, 0, 830,
- 827, 0, 838, 839, 840, 0, 829, 837, 842
+ 248, 223, 236, 0, 238, 243, 0, 376, 381, 531,
+ 519, 526, 570, 560, 565, 0, 463, 468, 312, 309,
+ 688, 685, 682, 633, 623, 628, 0, 338, 343, 0,
+ 0, 0, 0, 0, 0, 362, 359, 0, 0, 0,
+ 327, 324, 0, 0, 720, 717, 0, 0, 0, 0,
+ 734, 731, 748, 0, 814, 811, 0, 0, 0, 0,
+ 856, 853, 55, 0, 54, 0, 594, 599, 0, 678,
+ 808, 0, 0, 227, 0, 0, 0, 0, 282, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 0, 299,
+ 0, 0, 0, 0, 247, 0, 242, 0, 380, 0,
+ 525, 0, 564, 517, 492, 493, 494, 477, 478, 497,
+ 498, 499, 500, 501, 515, 480, 481, 502, 503, 504,
+ 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
+ 516, 474, 475, 476, 490, 491, 487, 488, 489, 486,
+ 0, 471, 479, 495, 496, 482, 483, 484, 485, 467,
+ 311, 710, 712, 0, 704, 705, 706, 707, 708, 709,
+ 697, 698, 702, 703, 699, 700, 701, 0, 689, 690,
+ 693, 694, 695, 696, 684, 0, 627, 0, 342, 369,
+ 370, 371, 372, 373, 374, 361, 334, 335, 336, 326,
+ 0, 0, 719, 741, 0, 744, 0, 733, 830, 0,
+ 828, 826, 820, 824, 825, 0, 817, 822, 823, 821,
+ 813, 862, 863, 864, 865, 855, 52, 57, 0, 598,
+ 0, 232, 234, 273, 274, 275, 272, 277, 279, 281,
+ 296, 297, 298, 295, 301, 303, 305, 307, 245, 383,
+ 528, 567, 473, 470, 0, 0, 0, 687, 692, 630,
+ 345, 727, 729, 743, 746, 0, 0, 0, 819, 816,
+ 56, 601, 662, 472, 0, 0, 714, 691, 0, 827,
+ 0, 818, 711, 713, 0, 829, 835, 0, 832, 0,
+ 834, 831, 845, 0, 0, 0, 850, 0, 837, 840,
+ 841, 842, 843, 844, 833, 0, 0, 0, 0, 0,
+ 839, 836, 0, 847, 848, 849, 0, 838, 846, 851
};
const short
Dhcp4Parser::yypgoto_[] =
{
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -59, -1012, -565, -1012, 200,
- -1012, -1012, -1012, -1012, -1012, -1012, -655, -1012, -1012, -1012,
- -67, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 400, 620,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -59, -1022, -593, -1022, 193,
+ -1022, -1022, -1022, -1022, -1022, -1022, -643, -1022, -1022, -1022,
+ -67, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 204, 626,
-30, -26, 26, -54, -37, -27, 0, 14, 16, 45,
- -1012, -1012, -1012, -1012, 48, -1012, -1012, 50, 51, 52,
- 53, 55, 56, -1012, 410, 58, -1012, 63, -1012, 66,
- 68, 69, 70, -1012, 71, -1012, 73, -1012, -1012, -1012,
- -1012, -1012, 33, -1012, -1012, 401, 597, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, 134, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, 316, -1012, 110, -1012, -719,
- 118, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -45, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, 104, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, 80, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, 95, -1012, -1012, -1012, 99, 576,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, 94, -1012, -1012,
- -1012, -1012, -1012, -1012, -1011, -1012, -1012, -1012, 113, -1012,
- -1012, -1012, 124, 613, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1008, -1012, 78, -1012, 79, -1012, 74, 76,
- 81, 84, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 107,
- -1012, -1012, -109, -62, -1012, -1012, -1012, -1012, -1012, 129,
- -1012, -1012, -1012, 125, -1012, 612, -1012, -63, -1012, -1012,
- -1012, -1012, -1012, -44, -1012, -1012, -1012, -1012, -1012, -23,
- -1012, -1012, -1012, 131, -1012, -1012, -1012, 139, -1012, 605,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, 91, -1012, -1012, -1012, 96, 624, -1012, -1012,
- -1012, -49, -1012, -10, -1012, -56, -1012, -1012, -1012, 127,
- -1012, -1012, -1012, 130, -1012, 623, 3, -1012, 13, -1012,
- 29, -1012, 394, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1007, -1012, -1012, -1012, -1012, -1012, 136, -1012, -1012, -1012,
- -88, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, 116, -1012, -1012, -1012, -1012, -1012, -1012, -1012, 112,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- 411, 594, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, 451, 593, -1012, -1012, -1012, -1012, -1012, -1012, 117,
- -1012, -1012, -90, -1012, -1012, -1012, -1012, -1012, -1012, -110,
- -1012, -1012, -129, -1012, -1012, -1012, -1012, -1012, -1012, -1012,
- -1012, -1012, -1012, 119, -1012, -1012, -1012, -1012
+ -1022, -1022, -1022, -1022, 48, -1022, -1022, 50, 51, 52,
+ 53, 55, 56, -1022, 415, 58, -1022, 63, -1022, 66,
+ 68, 69, -1022, -1022, 70, 71, -1022, 73, -1022, 74,
+ -1022, -1022, -1022, -1022, -1022, 33, -1022, -1022, 395, 615,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 138,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 315, -1022,
+ 114, -1022, -724, 120, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -45, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ 103, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 83,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, 94, -1022, -1022,
+ -1022, 99, 582, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ 89, -1022, -1022, -1022, -1022, -1022, -1022, -1021, -1022, -1022,
+ -1022, 118, -1022, -1022, -1022, 121, 617, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1019, -1022, 78, -1022, 79,
+ -1022, 76, 81, 84, 86, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, 116, -1022, -1022, -110, -62, -1022, -1022, -1022,
+ -1022, -1022, 124, -1022, -1022, -1022, 125, -1022, 602, -1022,
+ -63, -1022, -1022, -1022, -1022, -1022, -44, -1022, -1022, -1022,
+ -1022, -1022, -23, -1022, -1022, -1022, 122, -1022, -1022, -1022,
+ 137, -1022, 598, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, 92, -1022, -1022, -1022, 95,
+ 661, -1022, -1022, -1022, -49, -1022, -10, -1022, -56, -1022,
+ -1022, -1022, 126, -1022, -1022, -1022, 127, -1022, 663, 3,
+ -1022, 13, -1022, 29, -1022, 389, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1018, -1022, -1022, -1022, -1022, -1022, 132,
+ -1022, -1022, -1022, -90, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, 117, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, 112, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, 411, 604, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, 461, 606, -1022, -1022, -1022, -1022,
+ -1022, -1022, 111, -1022, -1022, -92, -1022, -1022, -1022, -1022,
+ -1022, -1022, -112, -1022, -1022, -131, -1022, -1022, -1022, -1022,
+ -1022, -1022, -1022, -1022, -1022, -1022, 119, -1022, -1022, -1022,
+ -1022
};
const short
Dhcp4Parser::yydefgoto_[] =
{
- 0, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 36, 37, 38, 65, 748,
- 82, 83, 39, 64, 79, 80, 769, 973, 1073, 1074,
- 844, 41, 66, 85, 437, 86, 43, 67, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 464, 169, 170, 481, 171, 172, 173, 174,
- 175, 176, 177, 470, 739, 178, 471, 179, 472, 180,
- 181, 182, 183, 499, 184, 500, 185, 186, 187, 188,
- 189, 190, 191, 192, 441, 231, 232, 45, 68, 233,
- 509, 234, 510, 772, 235, 511, 775, 236, 237, 238,
- 239, 193, 450, 194, 442, 820, 821, 822, 986, 823,
- 987, 195, 451, 196, 452, 870, 871, 872, 1013, 845,
- 846, 847, 990, 1235, 848, 991, 849, 992, 850, 993,
- 851, 852, 546, 853, 854, 855, 856, 857, 858, 859,
- 860, 861, 862, 1004, 1242, 863, 864, 1006, 865, 1007,
- 866, 1008, 867, 1009, 197, 489, 894, 895, 896, 897,
- 898, 899, 900, 198, 495, 930, 931, 932, 933, 934,
- 199, 492, 909, 910, 911, 1036, 59, 75, 387, 388,
- 389, 560, 390, 561, 200, 493, 918, 919, 920, 921,
- 922, 923, 924, 925, 201, 477, 874, 875, 876, 1016,
- 47, 69, 279, 280, 281, 522, 282, 518, 283, 519,
- 284, 520, 285, 523, 286, 526, 287, 525, 202, 203,
- 204, 205, 485, 754, 292, 206, 482, 886, 887, 888,
- 1025, 1149, 1150, 207, 478, 53, 72, 878, 879, 880,
- 1019, 55, 73, 350, 351, 352, 353, 354, 355, 356,
- 545, 357, 549, 358, 548, 359, 360, 550, 361, 208,
- 479, 882, 883, 884, 1022, 57, 74, 372, 373, 374,
- 375, 376, 554, 377, 378, 379, 380, 381, 294, 521,
- 975, 976, 977, 1075, 49, 70, 308, 309, 310, 530,
- 311, 209, 483, 210, 484, 211, 491, 905, 906, 907,
- 1033, 51, 71, 326, 327, 328, 212, 446, 213, 447,
- 214, 448, 332, 541, 980, 1078, 333, 535, 334, 536,
- 335, 538, 336, 537, 337, 540, 338, 539, 339, 534,
- 301, 527, 981, 215, 490, 902, 903, 1030, 1176, 1177,
- 1178, 1179, 1180, 1253, 1181, 1254, 1182, 216, 217, 496,
- 942, 943, 944, 1052, 945, 1053, 218, 497, 952, 953,
- 954, 955, 1057, 956, 957, 1059, 219, 498, 61, 76,
- 409, 410, 411, 412, 566, 413, 414, 568, 415, 416,
- 417, 571, 807, 418, 572, 419, 565, 420, 421, 422,
- 575, 423, 576, 424, 577, 425, 578, 220, 440, 63,
- 77, 428, 429, 430, 581, 431, 221, 504, 960, 961,
- 1063, 1214, 1215, 1216, 1217, 1266, 1218, 1264, 1286, 1287,
- 1288, 1296, 1297, 1298, 1304, 1299, 1300, 1301, 1302, 1308,
- 222, 505, 967, 968, 969, 970, 971, 972
+ -1, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 36, 37, 38, 65, 758,
+ 82, 83, 39, 64, 79, 80, 779, 983, 1083, 1084,
+ 854, 41, 66, 85, 440, 86, 43, 67, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 467, 170, 171, 484, 172, 173, 174, 175,
+ 176, 177, 178, 473, 744, 179, 474, 180, 475, 181,
+ 182, 183, 485, 755, 184, 185, 503, 186, 504, 187,
+ 188, 189, 190, 191, 192, 193, 194, 444, 233, 234,
+ 45, 68, 235, 513, 236, 514, 782, 237, 515, 785,
+ 238, 239, 240, 241, 195, 453, 196, 445, 830, 831,
+ 832, 996, 833, 997, 197, 454, 198, 455, 880, 881,
+ 882, 1023, 855, 856, 857, 1000, 1246, 858, 1001, 859,
+ 1002, 860, 1003, 861, 862, 550, 863, 864, 865, 866,
+ 867, 868, 869, 870, 871, 872, 1014, 1253, 873, 874,
+ 1016, 875, 1017, 876, 1018, 877, 1019, 199, 493, 904,
+ 905, 906, 907, 908, 909, 910, 200, 499, 940, 941,
+ 942, 943, 944, 201, 496, 919, 920, 921, 1046, 59,
+ 75, 390, 391, 392, 564, 393, 565, 202, 497, 928,
+ 929, 930, 931, 932, 933, 934, 935, 203, 480, 884,
+ 885, 886, 1026, 47, 69, 282, 283, 284, 526, 285,
+ 522, 286, 523, 287, 524, 288, 527, 289, 530, 290,
+ 529, 204, 205, 206, 207, 489, 764, 295, 208, 486,
+ 896, 897, 898, 1035, 1160, 1161, 209, 481, 53, 72,
+ 888, 889, 890, 1029, 55, 73, 353, 354, 355, 356,
+ 357, 358, 359, 549, 360, 553, 361, 552, 362, 363,
+ 554, 364, 210, 482, 892, 893, 894, 1032, 57, 74,
+ 375, 376, 377, 378, 379, 558, 380, 381, 382, 383,
+ 384, 297, 525, 985, 986, 987, 1085, 49, 70, 311,
+ 312, 313, 534, 314, 211, 487, 212, 488, 213, 495,
+ 915, 916, 917, 1043, 51, 71, 329, 330, 331, 214,
+ 449, 215, 450, 216, 451, 335, 545, 990, 1088, 336,
+ 539, 337, 540, 338, 542, 339, 541, 340, 544, 341,
+ 543, 342, 538, 304, 531, 991, 217, 494, 912, 913,
+ 1040, 1187, 1188, 1189, 1190, 1191, 1264, 1192, 1265, 1193,
+ 218, 219, 500, 952, 953, 954, 1062, 955, 1063, 220,
+ 501, 962, 963, 964, 965, 1067, 966, 967, 1069, 221,
+ 502, 61, 76, 412, 413, 414, 415, 570, 416, 417,
+ 572, 418, 419, 420, 575, 817, 421, 576, 422, 569,
+ 423, 424, 425, 579, 426, 580, 427, 581, 428, 582,
+ 222, 443, 63, 77, 431, 432, 433, 585, 434, 223,
+ 508, 970, 971, 1073, 1225, 1226, 1227, 1228, 1277, 1229,
+ 1275, 1297, 1298, 1299, 1307, 1308, 1309, 1315, 1310, 1311,
+ 1312, 1313, 1319, 224, 509, 977, 978, 979, 980, 981,
+ 982
};
const short
Dhcp4Parser::yytable_[] =
{
- 154, 230, 252, 304, 322, 78, 348, 368, 386, 406,
- 340, 370, 868, 297, 1141, 256, 782, 1142, 1157, 240,
- 295, 312, 324, 786, 362, 382, 438, 407, 349, 369,
- 371, 439, 257, 81, 342, 28, 29, 805, 30, 253,
- 31, 1028, 258, 254, 1029, 125, 293, 307, 323, 130,
- 131, 40, 507, 384, 385, 426, 427, 508, 241, 296,
- 313, 325, 433, 363, 383, 516, 408, 747, 528, 259,
- 517, 42, 298, 529, 329, 342, 364, 343, 344, 365,
- 366, 367, 299, 260, 330, 261, 130, 131, 532, 562,
- 130, 131, 579, 533, 563, 255, 583, 580, 300, 44,
- 331, 584, 278, 223, 224, 1031, 1064, 225, 1032, 1065,
- 226, 227, 228, 229, 262, 770, 771, 263, 507, 264,
- 265, 266, 267, 983, 268, 269, 153, 270, 1207, 341,
- 1208, 1209, 271, 937, 938, 272, 747, 273, 274, 275,
- 276, 583, 277, 288, 46, 289, 984, 516, 305, 306,
- 290, 434, 985, 291, 153, 988, 87, 130, 131, 88,
- 989, 773, 774, 734, 735, 736, 737, 962, 963, 964,
- 965, 89, 384, 385, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 153, 342, 1289, 343, 344, 1290,
- 84, 153, 345, 346, 347, 153, 806, 48, 130, 131,
- 130, 131, 738, 750, 751, 752, 753, 946, 947, 948,
- 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, 50, 1010, 1010, 125, 126,
- 1141, 1011, 1012, 1142, 1157, 52, 32, 33, 34, 35,
- 127, 128, 129, 1045, 1050, 130, 131, 126, 1046, 1051,
- 132, 54, 949, 818, 819, 133, 134, 135, 136, 137,
- 1054, 56, 302, 130, 131, 1055, 138, 93, 94, 95,
- 96, 130, 131, 58, 60, 1060, 139, 62, 249, 140,
- 1061, 432, 250, 303, 1105, 579, 141, 142, 321, 978,
- 1062, 143, 1070, 153, 144, 153, 435, 1071, 145, 1010,
- 100, 101, 102, 1291, 1247, 528, 1292, 1293, 1294, 1295,
- 1248, 436, 1251, 542, 926, 927, 928, 1252, 146, 147,
- 148, 149, 150, 151, 1232, 1233, 1234, 543, 125, 126,
- 342, 443, 152, 912, 913, 914, 915, 916, 917, 889,
- 890, 891, 892, 562, 893, 130, 131, 1267, 1259, 444,
- 153, 445, 1268, 91, 92, 93, 94, 95, 96, 449,
- 453, 1160, 1161, 1162, 585, 586, 532, 1309, 153, 454,
- 455, 1270, 1310, 1239, 1240, 1241, 153, 456, 457, 458,
- 459, 460, 461, 462, 463, 465, 466, 467, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 468, 469,
- 473, 474, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 475, 242, 243, 244, 476, 126, 480, 486,
- 487, 488, 494, 501, 502, 503, 506, 512, 513, 128,
- 154, 245, 514, 130, 131, 246, 247, 248, 132, 230,
- 515, 524, 531, 133, 134, 135, 547, 544, 249, 551,
- 153, 252, 250, 553, 138, 304, 552, 240, 555, 556,
- 557, 251, 297, 559, 256, 558, 322, 564, 567, 295,
- 569, 570, 573, 312, 574, 582, 348, 587, 588, 589,
- 590, 257, 368, 591, 324, 595, 370, 592, 253, 593,
- 596, 258, 254, 597, 362, 293, 241, 594, 349, 307,
- 382, 598, 406, 599, 369, 371, 146, 147, 296, 600,
- 323, 601, 313, 602, 603, 604, 605, 606, 259, 611,
- 407, 298, 607, 325, 608, 613, 619, 609, 610, 612,
- 614, 299, 260, 363, 261, 615, 329, 620, 153, 383,
- 616, 621, 626, 617, 255, 624, 330, 300, 618, 622,
- 623, 278, 625, 627, 628, 93, 94, 95, 629, 408,
- 630, 631, 331, 262, 1271, 632, 263, 633, 264, 265,
- 266, 267, 634, 268, 269, 635, 270, 636, 637, 650,
- 638, 271, 639, 640, 272, 641, 273, 274, 275, 276,
- 642, 277, 288, 644, 289, 645, 646, 647, 648, 290,
- 305, 306, 291, 643, 649, 653, 651, 652, 654, 656,
- 657, 658, 664, 665, 824, 661, 659, 126, 825, 826,
- 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
- 837, 838, 666, 130, 131, 839, 840, 841, 842, 843,
- 667, 668, 662, 660, 669, 670, 154, 314, 230, 671,
- 672, 673, 675, 814, 678, 315, 316, 317, 318, 319,
- 320, 679, 321, 676, 680, 681, 240, 682, 683, 684,
- 342, 91, 92, 93, 94, 95, 96, 685, 687, 688,
- 690, 689, 691, 929, 939, 692, 406, 693, 695, 700,
- 966, 696, 701, 704, 705, 697, 698, 707, 703, 706,
- 708, 935, 940, 950, 407, 241, 100, 101, 102, 103,
- 104, 105, 106, 107, 108, 109, 709, 710, 711, 712,
- 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
- 124, 713, 714, 715, 716, 126, 342, 717, 153, 719,
- 936, 941, 951, 408, 130, 131, 720, 128, 722, 723,
- 724, 130, 131, 725, 247, 726, 132, 727, 728, 729,
- 730, 133, 134, 135, 731, 732, 249, 733, 740, 741,
- 250, 742, 743, 744, 745, 746, 30, 749, 755, 251,
- 756, 757, 758, 1088, 764, 759, 760, 761, 762, 763,
- 153, 766, 765, 768, 767, 776, 779, 777, 391, 392,
- 393, 394, 395, 396, 397, 398, 399, 400, 401, 402,
- 403, 778, 780, 781, 783, 784, 813, 404, 405, 869,
- 873, 877, 881, 885, 146, 147, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 901,
- 785, 787, 788, 904, 789, 790, 791, 792, 793, 153,
- 794, 908, 959, 795, 796, 808, 153, 797, 798, 799,
- 974, 994, 995, 996, 800, 997, 802, 803, 804, 810,
- 811, 812, 998, 999, 1000, 1001, 1002, 1003, 1005, 1015,
- 1089, 1014, 1018, 1017, 1020, 1021, 1023, 1024, 1027, 1026,
- 1035, 801, 1034, 1038, 1037, 1039, 1040, 1041, 1042, 1043,
- 1044, 1047, 1048, 1049, 1056, 1058, 1066, 1067, 1068, 1069,
- 1072, 1077, 1076, 1081, 1090, 1079, 1080, 1082, 1084, 1085,
- 1086, 1087, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
- 1100, 1099, 1101, 1102, 1103, 1188, 1189, 1190, 1191, 252,
- 1192, 1193, 348, 1196, 1195, 368, 1199, 1197, 1113, 370,
- 297, 1200, 256, 1163, 1202, 1203, 322, 295, 1169, 386,
- 362, 1117, 1205, 382, 349, 1204, 1152, 369, 371, 257,
- 1140, 1171, 1220, 929, 324, 1168, 253, 939, 1118, 258,
- 254, 1221, 1222, 293, 1225, 1114, 1210, 1226, 1119, 1115,
- 1164, 935, 1151, 966, 1165, 940, 296, 1170, 304, 363,
- 323, 950, 383, 1223, 1212, 1153, 259, 1229, 1211, 298,
- 1172, 1230, 1231, 325, 1236, 1120, 312, 1237, 1154, 299,
- 260, 1238, 261, 1173, 1243, 1244, 329, 1249, 1155, 1121,
- 936, 1122, 255, 1174, 941, 300, 330, 1245, 1246, 278,
- 951, 1116, 307, 1213, 1156, 1250, 1166, 1255, 1139, 1175,
- 1256, 262, 331, 1167, 263, 313, 264, 265, 266, 267,
- 1123, 268, 269, 1124, 270, 1125, 1126, 1127, 1128, 271,
- 1129, 1130, 272, 1131, 273, 274, 275, 276, 1132, 277,
- 288, 1133, 289, 1134, 1135, 1136, 1137, 290, 1138, 1145,
- 291, 1146, 1257, 1143, 1144, 1258, 1147, 1265, 1273, 1148,
- 1274, 1277, 1279, 663, 1260, 1283, 1285, 1305, 1306, 1307,
- 1311, 1315, 1083, 815, 809, 1106, 817, 655, 1104, 982,
- 1198, 1108, 1159, 1187, 1158, 1186, 1261, 1262, 702, 1194,
- 1107, 674, 1272, 1269, 1109, 1281, 1263, 1275, 1278, 1282,
- 1110, 1312, 1284, 305, 306, 1112, 677, 1313, 1314, 1317,
- 1318, 1111, 1185, 1184, 699, 694, 686, 1183, 1228, 1276,
- 1201, 1227, 1206, 718, 958, 816, 721, 1280, 979, 1303,
- 1316, 1219, 0, 0, 1113, 0, 0, 0, 0, 1224,
- 1163, 0, 0, 0, 0, 1169, 0, 1117, 0, 0,
- 1210, 0, 1152, 0, 0, 0, 1140, 0, 1171, 0,
- 0, 0, 1168, 0, 1118, 0, 0, 0, 1212, 0,
- 0, 1114, 1211, 0, 1119, 1115, 0, 1164, 1151, 0,
- 0, 1165, 0, 0, 1170, 0, 0, 0, 0, 0,
- 0, 1153, 0, 0, 0, 0, 0, 1172, 0, 0,
- 0, 1120, 0, 0, 1154, 0, 0, 1213, 0, 0,
- 1173, 0, 0, 0, 1155, 1121, 0, 1122, 0, 0,
- 1174, 0, 0, 0, 0, 0, 0, 1116, 0, 0,
- 1156, 0, 0, 1166, 1139, 0, 1175, 0, 0, 0,
- 1167, 0, 0, 0, 0, 0, 1123, 0, 0, 1124,
- 0, 1125, 1126, 1127, 1128, 0, 1129, 1130, 0, 1131,
- 0, 0, 0, 0, 1132, 0, 0, 1133, 0, 1134,
- 1135, 1136, 1137, 0, 1138, 1145, 0, 1146, 0, 1143,
- 1144, 0, 1147, 0, 0, 1148
+ 155, 232, 254, 307, 325, 78, 351, 371, 389, 409,
+ 343, 373, 878, 300, 1152, 258, 1153, 1168, 28, 242,
+ 298, 315, 327, 815, 365, 385, 441, 410, 352, 372,
+ 374, 442, 259, 792, 387, 388, 131, 132, 1038, 255,
+ 796, 1039, 260, 256, 757, 511, 296, 310, 326, 29,
+ 512, 30, 520, 31, 40, 345, 81, 521, 243, 299,
+ 316, 328, 532, 366, 386, 125, 411, 533, 536, 261,
+ 126, 42, 301, 537, 332, 131, 132, 387, 388, 936,
+ 937, 938, 302, 262, 333, 263, 131, 132, 566, 44,
+ 305, 131, 132, 567, 583, 257, 587, 46, 303, 584,
+ 334, 588, 281, 511, 587, 48, 251, 154, 993, 994,
+ 252, 306, 1041, 757, 264, 1042, 84, 265, 520, 266,
+ 267, 268, 269, 995, 270, 271, 998, 272, 1243, 1244,
+ 1245, 999, 273, 947, 948, 274, 50, 275, 276, 277,
+ 278, 154, 279, 280, 87, 291, 1020, 88, 308, 309,
+ 292, 1021, 52, 293, 1218, 294, 1219, 1220, 1074, 89,
+ 54, 1075, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 1020, 1300, 225, 226, 1301, 1022, 227, 56,
+ 154, 228, 229, 230, 231, 1055, 58, 816, 429, 430,
+ 1056, 154, 739, 740, 741, 742, 154, 60, 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, 1060, 1064, 1070, 125, 126, 1061, 1065,
+ 1071, 743, 583, 93, 94, 95, 435, 1072, 127, 128,
+ 129, 1152, 1080, 1153, 1168, 130, 1020, 1081, 131, 132,
+ 532, 1258, 1262, 133, 436, 1259, 437, 1263, 134, 135,
+ 136, 137, 138, 566, 32, 33, 34, 35, 1270, 139,
+ 438, 1278, 536, 1320, 131, 132, 1279, 1281, 1321, 140,
+ 780, 781, 141, 828, 829, 93, 94, 95, 96, 142,
+ 143, 1250, 1251, 1252, 144, 126, 344, 145, 546, 1115,
+ 1302, 146, 62, 1303, 1304, 1305, 1306, 345, 367, 346,
+ 347, 368, 369, 370, 783, 784, 131, 132, 100, 101,
+ 102, 147, 148, 149, 150, 151, 152, 131, 132, 439,
+ 317, 131, 132, 324, 988, 153, 548, 446, 318, 319,
+ 320, 321, 322, 323, 447, 324, 125, 126, 345, 448,
+ 452, 456, 345, 154, 346, 347, 457, 458, 459, 348,
+ 349, 350, 91, 92, 93, 94, 95, 96, 131, 132,
+ 460, 461, 131, 132, 462, 463, 464, 589, 590, 154,
+ 465, 956, 957, 958, 1171, 1172, 1173, 556, 466, 468,
+ 972, 973, 974, 975, 469, 470, 471, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 154, 472, 476,
+ 477, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 154, 244, 245, 246, 478, 126, 479, 899, 900,
+ 901, 902, 154, 903, 483, 490, 959, 491, 128, 129,
+ 760, 761, 762, 763, 155, 247, 492, 131, 132, 248,
+ 249, 250, 133, 232, 498, 505, 506, 134, 135, 136,
+ 507, 510, 251, 516, 517, 254, 252, 518, 139, 307,
+ 519, 242, 528, 154, 535, 253, 300, 154, 258, 551,
+ 325, 547, 557, 298, 555, 559, 560, 315, 561, 563,
+ 351, 751, 752, 753, 754, 259, 371, 562, 327, 568,
+ 373, 571, 255, 573, 574, 260, 256, 577, 365, 296,
+ 243, 578, 352, 310, 385, 586, 409, 591, 372, 374,
+ 147, 148, 299, 592, 326, 593, 316, 594, 595, 596,
+ 597, 598, 261, 599, 410, 301, 600, 328, 922, 923,
+ 924, 925, 926, 927, 601, 302, 262, 366, 263, 603,
+ 332, 602, 154, 386, 604, 605, 606, 607, 257, 608,
+ 333, 303, 609, 610, 617, 281, 611, 620, 623, 624,
+ 612, 613, 614, 411, 621, 625, 334, 264, 615, 616,
+ 265, 618, 266, 267, 268, 269, 619, 270, 271, 630,
+ 272, 131, 132, 631, 632, 273, 622, 1282, 274, 628,
+ 275, 276, 277, 278, 626, 279, 280, 634, 291, 627,
+ 629, 635, 636, 292, 308, 309, 293, 834, 294, 633,
+ 637, 835, 836, 837, 838, 839, 840, 841, 842, 843,
+ 844, 845, 846, 847, 848, 638, 639, 640, 849, 850,
+ 851, 852, 853, 641, 643, 394, 395, 396, 397, 398,
+ 399, 400, 401, 402, 403, 404, 405, 406, 642, 644,
+ 645, 155, 646, 232, 407, 408, 647, 648, 824, 649,
+ 650, 651, 652, 345, 653, 654, 655, 656, 657, 658,
+ 659, 242, 661, 662, 663, 664, 666, 665, 667, 669,
+ 91, 92, 93, 94, 95, 96, 154, 670, 671, 672,
+ 673, 674, 676, 939, 949, 677, 409, 678, 675, 680,
+ 976, 681, 683, 684, 685, 686, 687, 688, 689, 690,
+ 243, 945, 950, 960, 410, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 692, 693, 694, 695, 114,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 696, 697, 700, 698, 126, 345, 701, 702, 703, 705,
+ 946, 951, 961, 411, 706, 708, 128, 129, 709, 710,
+ 711, 712, 715, 713, 714, 131, 132, 716, 249, 717,
+ 133, 718, 719, 720, 721, 134, 135, 136, 722, 724,
+ 251, 725, 727, 728, 252, 732, 729, 730, 154, 731,
+ 733, 734, 735, 253, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 736, 737, 738,
+ 745, 746, 747, 748, 749, 750, 756, 30, 765, 759,
+ 766, 767, 768, 774, 775, 769, 770, 771, 772, 773,
+ 776, 777, 778, 786, 787, 788, 789, 790, 147, 148,
+ 791, 794, 818, 793, 795, 797, 798, 799, 800, 801,
+ 823, 802, 803, 804, 805, 806, 807, 808, 809, 810,
+ 812, 813, 814, 820, 821, 879, 883, 822, 887, 891,
+ 154, 895, 911, 914, 918, 969, 984, 1004, 1005, 1006,
+ 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1015, 1025, 811,
+ 1024, 1028, 1027, 1030, 1031, 1033, 1034, 1037, 1036, 1045,
+ 1082, 1044, 1048, 1047, 1049, 1050, 1051, 1052, 1053, 1054,
+ 1057, 1058, 1059, 1066, 1068, 1076, 1077, 1078, 1079, 1087,
+ 1099, 1086, 825, 1091, 1090, 1089, 1092, 1094, 1095, 1096,
+ 1097, 1098, 1100, 1108, 1102, 1101, 1103, 1104, 1105, 1106,
+ 1107, 1109, 1110, 1111, 1112, 1113, 1199, 1200, 1201, 254,
+ 1202, 1203, 351, 1204, 1206, 371, 1207, 1210, 1123, 373,
+ 300, 1208, 258, 1174, 1211, 1213, 325, 298, 1180, 389,
+ 365, 1127, 1214, 385, 352, 1216, 1163, 372, 374, 259,
+ 1151, 1182, 1215, 939, 327, 1179, 255, 949, 1128, 260,
+ 256, 1236, 1237, 296, 1231, 1124, 1221, 1240, 1129, 1125,
+ 1175, 945, 1162, 976, 1176, 950, 299, 1181, 307, 366,
+ 326, 960, 386, 1232, 1223, 1164, 261, 1233, 1222, 301,
+ 1183, 1234, 1241, 328, 1242, 1130, 315, 1260, 1165, 302,
+ 262, 1261, 263, 1184, 1247, 1266, 332, 1267, 1166, 1131,
+ 946, 1132, 257, 1185, 951, 303, 333, 1268, 1248, 281,
+ 961, 1126, 310, 1224, 1167, 1249, 1177, 1254, 1150, 1186,
+ 1255, 264, 334, 1178, 265, 316, 266, 267, 268, 269,
+ 1133, 270, 271, 1134, 272, 1135, 1136, 1137, 1138, 273,
+ 1139, 1140, 274, 1141, 275, 276, 277, 278, 1142, 279,
+ 280, 1143, 291, 1144, 1145, 1146, 1147, 292, 1148, 1149,
+ 293, 1156, 294, 1154, 1155, 1269, 1157, 1276, 1284, 1158,
+ 1256, 1159, 1285, 1288, 1290, 827, 1294, 1316, 1257, 1296,
+ 1317, 1318, 1322, 1326, 819, 668, 1093, 660, 992, 1116,
+ 1114, 1170, 1198, 1209, 1205, 1197, 1118, 1117, 707, 679,
+ 1271, 1272, 1283, 1169, 1119, 1120, 1122, 1274, 1273, 699,
+ 1280, 704, 1289, 308, 309, 1286, 1292, 1293, 1323, 1121,
+ 1195, 1196, 1295, 1194, 1324, 1325, 1328, 1329, 1287, 1239,
+ 1238, 1212, 1217, 989, 968, 1230, 1291, 723, 1314, 1327,
+ 826, 0, 0, 726, 0, 1123, 0, 682, 0, 1235,
+ 0, 1174, 0, 0, 0, 0, 1180, 0, 1127, 0,
+ 691, 1221, 0, 1163, 0, 0, 0, 1151, 0, 1182,
+ 0, 0, 0, 1179, 0, 1128, 0, 0, 0, 1223,
+ 0, 0, 1124, 1222, 0, 1129, 1125, 0, 1175, 1162,
+ 0, 0, 1176, 0, 0, 1181, 0, 0, 0, 0,
+ 0, 0, 1164, 0, 0, 0, 0, 0, 1183, 0,
+ 0, 0, 1130, 0, 0, 1165, 0, 0, 1224, 0,
+ 0, 1184, 0, 0, 0, 1166, 1131, 0, 1132, 0,
+ 0, 1185, 0, 0, 0, 0, 0, 0, 1126, 0,
+ 0, 1167, 0, 0, 1177, 1150, 0, 1186, 0, 0,
+ 0, 1178, 0, 0, 0, 0, 0, 1133, 0, 0,
+ 1134, 0, 1135, 1136, 1137, 1138, 0, 1139, 1140, 0,
+ 1141, 0, 0, 0, 0, 1142, 0, 0, 1143, 0,
+ 1144, 1145, 1146, 1147, 0, 1148, 1149, 0, 1156, 0,
+ 1154, 1155, 0, 1157, 0, 0, 1158, 0, 1159
};
const short
Dhcp4Parser::yycheck_[] =
{
67, 68, 69, 70, 71, 64, 73, 74, 75, 76,
- 72, 74, 731, 69, 1025, 69, 671, 1025, 1025, 68,
- 69, 70, 71, 678, 73, 74, 3, 76, 73, 74,
- 74, 8, 69, 215, 95, 0, 5, 18, 7, 69,
- 9, 3, 69, 69, 6, 93, 69, 70, 71, 110,
- 111, 7, 3, 142, 143, 12, 13, 8, 68, 69,
- 70, 71, 3, 73, 74, 3, 76, 632, 3, 69,
- 8, 7, 69, 8, 71, 95, 96, 97, 98, 99,
- 100, 101, 69, 69, 71, 69, 110, 111, 3, 3,
- 110, 111, 3, 8, 8, 69, 3, 8, 69, 7,
- 71, 8, 69, 15, 16, 3, 3, 19, 6, 6,
- 22, 23, 24, 25, 69, 17, 18, 69, 3, 69,
- 69, 69, 69, 8, 69, 69, 215, 69, 189, 39,
- 191, 192, 69, 157, 158, 69, 701, 69, 69, 69,
- 69, 3, 69, 69, 7, 69, 8, 3, 70, 70,
- 69, 4, 8, 69, 215, 3, 11, 110, 111, 14,
- 8, 20, 21, 179, 180, 181, 182, 198, 199, 200,
- 201, 26, 142, 143, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 215, 95, 3, 97, 98, 6,
- 10, 215, 102, 103, 104, 215, 177, 7, 110, 111,
- 110, 111, 218, 116, 117, 118, 119, 160, 161, 162,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 7, 3, 3, 93, 94,
- 1251, 8, 8, 1251, 1251, 7, 215, 216, 217, 218,
- 105, 106, 107, 3, 3, 110, 111, 94, 8, 8,
- 115, 7, 215, 27, 28, 120, 121, 122, 123, 124,
- 3, 7, 109, 110, 111, 8, 131, 32, 33, 34,
- 35, 110, 111, 7, 7, 3, 141, 7, 125, 144,
- 8, 6, 129, 130, 1013, 3, 151, 152, 139, 140,
- 8, 156, 3, 215, 159, 215, 8, 8, 163, 3,
- 65, 66, 67, 190, 8, 3, 193, 194, 195, 196,
- 8, 3, 3, 8, 153, 154, 155, 8, 183, 184,
- 185, 186, 187, 188, 40, 41, 42, 3, 93, 94,
- 95, 4, 197, 145, 146, 147, 148, 149, 150, 132,
- 133, 134, 135, 3, 137, 110, 111, 3, 8, 4,
- 215, 4, 8, 30, 31, 32, 33, 34, 35, 4,
- 4, 126, 127, 128, 433, 434, 3, 3, 215, 4,
- 4, 8, 8, 57, 58, 59, 215, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 4, 4,
- 4, 4, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 4, 90, 91, 92, 4, 94, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 106,
- 507, 108, 4, 110, 111, 112, 113, 114, 115, 516,
- 4, 4, 4, 120, 121, 122, 4, 8, 125, 4,
- 215, 528, 129, 3, 131, 532, 8, 516, 4, 4,
- 4, 138, 528, 3, 528, 8, 543, 4, 4, 528,
- 4, 4, 4, 532, 4, 4, 553, 215, 4, 4,
- 4, 528, 559, 4, 543, 4, 559, 218, 528, 218,
- 4, 528, 528, 4, 553, 528, 516, 218, 553, 532,
- 559, 216, 579, 4, 559, 559, 183, 184, 528, 4,
- 543, 4, 532, 216, 216, 216, 216, 216, 528, 216,
- 579, 528, 218, 543, 217, 4, 4, 217, 217, 216,
- 216, 528, 528, 553, 528, 216, 543, 4, 215, 559,
- 218, 4, 4, 218, 528, 217, 543, 528, 218, 218,
- 218, 528, 218, 4, 4, 32, 33, 34, 216, 579,
- 4, 4, 543, 528, 1229, 4, 528, 4, 528, 528,
- 528, 528, 4, 528, 528, 218, 528, 218, 218, 218,
- 4, 528, 4, 4, 528, 4, 528, 528, 528, 528,
- 4, 528, 528, 4, 528, 4, 4, 4, 4, 528,
- 532, 532, 528, 216, 4, 4, 218, 218, 4, 4,
- 4, 4, 4, 4, 39, 216, 218, 94, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 4, 110, 111, 60, 61, 62, 63, 64,
- 4, 4, 216, 218, 4, 216, 723, 124, 725, 4,
- 4, 4, 4, 722, 4, 132, 133, 134, 135, 136,
- 137, 4, 139, 216, 4, 4, 725, 4, 4, 4,
- 95, 30, 31, 32, 33, 34, 35, 4, 4, 4,
- 4, 216, 4, 760, 761, 4, 763, 218, 4, 4,
- 767, 218, 4, 4, 4, 218, 218, 4, 218, 216,
- 216, 760, 761, 762, 763, 725, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 216, 4, 4, 218,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 218, 4, 4, 4, 94, 95, 4, 215, 4,
- 760, 761, 762, 763, 110, 111, 216, 106, 4, 7,
- 7, 110, 111, 7, 113, 7, 115, 215, 215, 215,
- 7, 120, 121, 122, 7, 5, 125, 215, 215, 215,
- 129, 5, 5, 5, 215, 5, 7, 215, 5, 138,
- 5, 5, 5, 216, 215, 7, 7, 7, 7, 7,
- 215, 5, 215, 5, 7, 215, 5, 215, 164, 165,
- 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
- 176, 215, 215, 215, 215, 7, 5, 183, 184, 7,
- 7, 7, 7, 7, 183, 184, 202, 203, 204, 205,
- 206, 207, 208, 209, 210, 211, 212, 213, 214, 7,
- 215, 215, 215, 7, 215, 215, 215, 215, 215, 215,
- 215, 7, 7, 215, 215, 178, 215, 215, 215, 215,
- 7, 4, 4, 4, 215, 4, 215, 215, 215, 215,
- 215, 215, 4, 4, 4, 4, 4, 4, 4, 3,
- 218, 6, 3, 6, 6, 3, 6, 3, 3, 6,
- 3, 701, 6, 3, 6, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 215, 3, 6, 4, 216, 8, 6, 4, 4, 4,
- 4, 4, 218, 216, 216, 216, 216, 216, 216, 4,
- 4, 216, 4, 4, 4, 216, 216, 216, 216, 1016,
- 216, 216, 1019, 216, 218, 1022, 4, 216, 1025, 1022,
- 1016, 4, 1016, 1030, 218, 4, 1033, 1016, 1030, 1036,
- 1019, 1025, 4, 1022, 1019, 216, 1025, 1022, 1022, 1016,
- 1025, 1030, 218, 1050, 1033, 1030, 1016, 1054, 1025, 1016,
- 1016, 218, 218, 1016, 6, 1025, 1063, 3, 1025, 1025,
- 1030, 1050, 1025, 1070, 1030, 1054, 1016, 1030, 1075, 1019,
- 1033, 1060, 1022, 218, 1063, 1025, 1016, 4, 1063, 1016,
- 1030, 215, 215, 1033, 215, 1025, 1075, 215, 1025, 1016,
- 1016, 215, 1016, 1030, 215, 215, 1033, 8, 1025, 1025,
- 1050, 1025, 1016, 1030, 1054, 1016, 1033, 215, 215, 1016,
- 1060, 1025, 1075, 1063, 1025, 8, 1030, 4, 1025, 1030,
- 8, 1016, 1033, 1030, 1016, 1075, 1016, 1016, 1016, 1016,
- 1025, 1016, 1016, 1025, 1016, 1025, 1025, 1025, 1025, 1016,
- 1025, 1025, 1016, 1025, 1016, 1016, 1016, 1016, 1025, 1016,
- 1016, 1025, 1016, 1025, 1025, 1025, 1025, 1016, 1025, 1025,
- 1016, 1025, 3, 1025, 1025, 8, 1025, 4, 4, 1025,
- 4, 4, 4, 516, 215, 5, 7, 4, 4, 4,
- 4, 4, 988, 723, 714, 1015, 725, 507, 1010, 813,
- 1050, 1018, 1028, 1038, 1027, 1036, 215, 215, 562, 1045,
- 1016, 528, 1251, 215, 1019, 215, 1205, 218, 216, 215,
- 1021, 218, 215, 1075, 1075, 1024, 532, 216, 216, 215,
- 215, 1022, 1035, 1033, 559, 553, 543, 1031, 1077, 1257,
- 1054, 1075, 1060, 579, 763, 724, 583, 1267, 784, 1289,
- 1309, 1064, -1, -1, 1251, -1, -1, -1, -1, 1070,
- 1257, -1, -1, -1, -1, 1257, -1, 1251, -1, -1,
- 1267, -1, 1251, -1, -1, -1, 1251, -1, 1257, -1,
- -1, -1, 1257, -1, 1251, -1, -1, -1, 1267, -1,
- -1, 1251, 1267, -1, 1251, 1251, -1, 1257, 1251, -1,
- -1, 1257, -1, -1, 1257, -1, -1, -1, -1, -1,
- -1, 1251, -1, -1, -1, -1, -1, 1257, -1, -1,
- -1, 1251, -1, -1, 1251, -1, -1, 1267, -1, -1,
- 1257, -1, -1, -1, 1251, 1251, -1, 1251, -1, -1,
- 1257, -1, -1, -1, -1, -1, -1, 1251, -1, -1,
- 1251, -1, -1, 1257, 1251, -1, 1257, -1, -1, -1,
- 1257, -1, -1, -1, -1, -1, 1251, -1, -1, 1251,
- -1, 1251, 1251, 1251, 1251, -1, 1251, 1251, -1, 1251,
- -1, -1, -1, -1, 1251, -1, -1, 1251, -1, 1251,
- 1251, 1251, 1251, -1, 1251, 1251, -1, 1251, -1, 1251,
- 1251, -1, 1251, -1, -1, 1251
+ 72, 74, 736, 69, 1035, 69, 1035, 1035, 0, 68,
+ 69, 70, 71, 18, 73, 74, 3, 76, 73, 74,
+ 74, 8, 69, 676, 147, 148, 115, 116, 3, 69,
+ 683, 6, 69, 69, 637, 3, 69, 70, 71, 5,
+ 8, 7, 3, 9, 7, 95, 220, 8, 68, 69,
+ 70, 71, 3, 73, 74, 93, 76, 8, 3, 69,
+ 94, 7, 69, 8, 71, 115, 116, 147, 148, 158,
+ 159, 160, 69, 69, 71, 69, 115, 116, 3, 7,
+ 114, 115, 116, 8, 3, 69, 3, 7, 69, 8,
+ 71, 8, 69, 3, 3, 7, 130, 220, 8, 8,
+ 134, 135, 3, 706, 69, 6, 10, 69, 3, 69,
+ 69, 69, 69, 8, 69, 69, 3, 69, 40, 41,
+ 42, 8, 69, 162, 163, 69, 7, 69, 69, 69,
+ 69, 220, 69, 69, 11, 69, 3, 14, 70, 70,
+ 69, 8, 7, 69, 194, 69, 196, 197, 3, 26,
+ 7, 6, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 3, 3, 15, 16, 6, 8, 19, 7,
+ 220, 22, 23, 24, 25, 3, 7, 182, 12, 13,
+ 8, 220, 184, 185, 186, 187, 220, 7, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 3, 3, 3, 93, 94, 8, 8,
+ 8, 223, 3, 32, 33, 34, 6, 8, 105, 106,
+ 107, 1262, 3, 1262, 1262, 112, 3, 8, 115, 116,
+ 3, 8, 3, 120, 3, 8, 4, 8, 125, 126,
+ 127, 128, 129, 3, 220, 221, 222, 223, 8, 136,
+ 8, 3, 3, 3, 115, 116, 8, 8, 8, 146,
+ 17, 18, 149, 27, 28, 32, 33, 34, 35, 156,
+ 157, 57, 58, 59, 161, 94, 39, 164, 8, 1023,
+ 195, 168, 7, 198, 199, 200, 201, 95, 96, 97,
+ 98, 99, 100, 101, 20, 21, 115, 116, 65, 66,
+ 67, 188, 189, 190, 191, 192, 193, 115, 116, 3,
+ 129, 115, 116, 144, 145, 202, 8, 4, 137, 138,
+ 139, 140, 141, 142, 4, 144, 93, 94, 95, 4,
+ 4, 4, 95, 220, 97, 98, 4, 4, 4, 102,
+ 103, 104, 30, 31, 32, 33, 34, 35, 115, 116,
+ 4, 4, 115, 116, 4, 4, 4, 436, 437, 220,
+ 4, 165, 166, 167, 131, 132, 133, 8, 4, 4,
+ 203, 204, 205, 206, 4, 4, 4, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 220, 4, 4,
+ 4, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 220, 90, 91, 92, 4, 94, 4, 137, 138,
+ 139, 140, 220, 142, 4, 4, 220, 4, 106, 107,
+ 121, 122, 123, 124, 511, 113, 4, 115, 116, 117,
+ 118, 119, 120, 520, 4, 4, 4, 125, 126, 127,
+ 4, 4, 130, 4, 4, 532, 134, 4, 136, 536,
+ 4, 520, 4, 220, 4, 143, 532, 220, 532, 4,
+ 547, 3, 3, 532, 4, 4, 4, 536, 4, 3,
+ 557, 108, 109, 110, 111, 532, 563, 8, 547, 4,
+ 563, 4, 532, 4, 4, 532, 532, 4, 557, 532,
+ 520, 4, 557, 536, 563, 4, 583, 220, 563, 563,
+ 188, 189, 532, 4, 547, 4, 536, 4, 4, 223,
+ 223, 223, 532, 4, 583, 532, 4, 547, 150, 151,
+ 152, 153, 154, 155, 4, 532, 532, 557, 532, 4,
+ 547, 221, 220, 563, 4, 4, 221, 221, 532, 221,
+ 547, 532, 221, 221, 4, 532, 223, 223, 4, 4,
+ 222, 222, 222, 583, 223, 4, 547, 532, 221, 221,
+ 532, 221, 532, 532, 532, 532, 221, 532, 532, 4,
+ 532, 115, 116, 4, 4, 532, 223, 1240, 532, 222,
+ 532, 532, 532, 532, 223, 532, 532, 4, 532, 223,
+ 223, 4, 4, 532, 536, 536, 532, 39, 532, 221,
+ 4, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 4, 4, 223, 60, 61,
+ 62, 63, 64, 223, 4, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 223, 4,
+ 4, 728, 4, 730, 188, 189, 4, 221, 727, 4,
+ 4, 4, 4, 95, 4, 4, 223, 223, 223, 4,
+ 4, 730, 4, 4, 4, 223, 221, 223, 221, 4,
+ 30, 31, 32, 33, 34, 35, 220, 4, 4, 4,
+ 4, 4, 4, 770, 771, 4, 773, 4, 221, 4,
+ 777, 221, 4, 4, 4, 4, 4, 4, 4, 4,
+ 730, 770, 771, 772, 773, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 4, 4, 221, 4, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 4, 4, 4, 223, 94, 95, 223, 223, 223, 4,
+ 770, 771, 772, 773, 4, 223, 106, 107, 4, 4,
+ 221, 4, 4, 221, 221, 115, 116, 4, 118, 223,
+ 120, 223, 4, 4, 4, 125, 126, 127, 4, 4,
+ 130, 221, 4, 7, 134, 220, 7, 7, 220, 7,
+ 220, 220, 7, 143, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 7, 5, 220,
+ 220, 220, 5, 5, 5, 220, 5, 7, 5, 220,
+ 5, 5, 5, 220, 220, 7, 7, 7, 7, 7,
+ 5, 7, 5, 220, 220, 220, 5, 220, 188, 189,
+ 220, 7, 183, 220, 220, 220, 220, 220, 220, 220,
+ 5, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 7, 7, 220, 7, 7,
+ 220, 7, 7, 7, 7, 7, 7, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 3, 706,
+ 6, 3, 6, 6, 3, 6, 3, 3, 6, 3,
+ 220, 6, 3, 6, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 3,
+ 223, 6, 728, 4, 6, 8, 4, 4, 4, 4,
+ 4, 221, 221, 4, 221, 223, 221, 221, 221, 221,
+ 221, 221, 4, 4, 4, 4, 221, 221, 221, 1026,
+ 221, 221, 1029, 221, 223, 1032, 221, 4, 1035, 1032,
+ 1026, 221, 1026, 1040, 4, 223, 1043, 1026, 1040, 1046,
+ 1029, 1035, 4, 1032, 1029, 4, 1035, 1032, 1032, 1026,
+ 1035, 1040, 221, 1060, 1043, 1040, 1026, 1064, 1035, 1026,
+ 1026, 6, 3, 1026, 223, 1035, 1073, 4, 1035, 1035,
+ 1040, 1060, 1035, 1080, 1040, 1064, 1026, 1040, 1085, 1029,
+ 1043, 1070, 1032, 223, 1073, 1035, 1026, 223, 1073, 1026,
+ 1040, 223, 220, 1043, 220, 1035, 1085, 8, 1035, 1026,
+ 1026, 8, 1026, 1040, 220, 4, 1043, 8, 1035, 1035,
+ 1060, 1035, 1026, 1040, 1064, 1026, 1043, 3, 220, 1026,
+ 1070, 1035, 1085, 1073, 1035, 220, 1040, 220, 1035, 1040,
+ 220, 1026, 1043, 1040, 1026, 1085, 1026, 1026, 1026, 1026,
+ 1035, 1026, 1026, 1035, 1026, 1035, 1035, 1035, 1035, 1026,
+ 1035, 1035, 1026, 1035, 1026, 1026, 1026, 1026, 1035, 1026,
+ 1026, 1035, 1026, 1035, 1035, 1035, 1035, 1026, 1035, 1035,
+ 1026, 1035, 1026, 1035, 1035, 8, 1035, 4, 4, 1035,
+ 220, 1035, 4, 4, 4, 730, 5, 4, 220, 7,
+ 4, 4, 4, 4, 719, 520, 998, 511, 823, 1025,
+ 1020, 1038, 1048, 1060, 1055, 1046, 1028, 1026, 566, 532,
+ 220, 220, 1262, 1037, 1029, 1031, 1034, 1216, 220, 557,
+ 220, 563, 221, 1085, 1085, 223, 220, 220, 223, 1032,
+ 1043, 1045, 220, 1041, 221, 221, 220, 220, 1268, 1087,
+ 1085, 1064, 1070, 794, 773, 1074, 1278, 583, 1300, 1320,
+ 729, -1, -1, 587, -1, 1262, -1, 536, -1, 1080,
+ -1, 1268, -1, -1, -1, -1, 1268, -1, 1262, -1,
+ 547, 1278, -1, 1262, -1, -1, -1, 1262, -1, 1268,
+ -1, -1, -1, 1268, -1, 1262, -1, -1, -1, 1278,
+ -1, -1, 1262, 1278, -1, 1262, 1262, -1, 1268, 1262,
+ -1, -1, 1268, -1, -1, 1268, -1, -1, -1, -1,
+ -1, -1, 1262, -1, -1, -1, -1, -1, 1268, -1,
+ -1, -1, 1262, -1, -1, 1262, -1, -1, 1278, -1,
+ -1, 1268, -1, -1, -1, 1262, 1262, -1, 1262, -1,
+ -1, 1268, -1, -1, -1, -1, -1, -1, 1262, -1,
+ -1, 1262, -1, -1, 1268, 1262, -1, 1268, -1, -1,
+ -1, 1268, -1, -1, -1, -1, -1, 1262, -1, -1,
+ 1262, -1, 1262, 1262, 1262, 1262, -1, 1262, 1262, -1,
+ 1262, -1, -1, -1, -1, 1262, -1, -1, 1262, -1,
+ 1262, 1262, 1262, 1262, -1, 1262, 1262, -1, 1262, -1,
+ 1262, 1262, -1, 1262, -1, -1, 1262, -1, 1262
};
const short
Dhcp4Parser::yystos_[] =
{
- 0, 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, 0, 5,
- 7, 9, 215, 216, 217, 218, 234, 235, 236, 241,
- 7, 250, 7, 255, 7, 306, 7, 419, 7, 503,
- 7, 520, 7, 454, 7, 460, 7, 484, 7, 395,
- 7, 587, 7, 618, 242, 237, 251, 256, 307, 420,
- 504, 521, 455, 461, 485, 396, 588, 619, 234, 243,
- 244, 215, 239, 240, 10, 252, 254, 11, 14, 26,
+ 0, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 225, 226, 227, 228, 229, 230,
+ 231, 232, 233, 234, 235, 236, 237, 238, 0, 5,
+ 7, 9, 220, 221, 222, 223, 239, 240, 241, 246,
+ 7, 255, 7, 260, 7, 314, 7, 427, 7, 511,
+ 7, 528, 7, 462, 7, 468, 7, 492, 7, 403,
+ 7, 595, 7, 626, 247, 242, 256, 261, 315, 428,
+ 512, 529, 463, 469, 493, 404, 596, 627, 239, 248,
+ 249, 220, 244, 245, 10, 257, 259, 11, 14, 26,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 93, 94, 105, 106, 107,
- 110, 111, 115, 120, 121, 122, 123, 124, 131, 141,
- 144, 151, 152, 156, 159, 163, 183, 184, 185, 186,
- 187, 188, 197, 215, 249, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 270, 272,
- 273, 275, 276, 277, 278, 279, 280, 281, 284, 286,
- 288, 289, 290, 291, 293, 295, 296, 297, 298, 299,
- 300, 301, 302, 320, 322, 330, 332, 373, 382, 389,
- 403, 413, 437, 438, 439, 440, 444, 452, 478, 510,
- 512, 514, 525, 527, 529, 552, 566, 567, 575, 585,
- 616, 625, 649, 15, 16, 19, 22, 23, 24, 25,
- 249, 304, 305, 308, 310, 313, 316, 317, 318, 319,
- 510, 512, 90, 91, 92, 108, 112, 113, 114, 125,
- 129, 138, 249, 259, 260, 261, 262, 263, 264, 265,
- 266, 267, 268, 273, 276, 277, 278, 279, 280, 281,
- 284, 286, 288, 289, 290, 291, 293, 295, 301, 421,
- 422, 423, 425, 427, 429, 431, 433, 435, 437, 438,
- 439, 440, 443, 478, 497, 510, 512, 514, 525, 527,
- 529, 549, 109, 130, 249, 433, 435, 478, 505, 506,
- 507, 509, 510, 512, 124, 132, 133, 134, 135, 136,
- 137, 139, 249, 478, 510, 512, 522, 523, 524, 525,
- 527, 529, 531, 535, 537, 539, 541, 543, 545, 547,
- 452, 39, 95, 97, 98, 102, 103, 104, 249, 350,
- 462, 463, 464, 465, 466, 467, 468, 470, 472, 474,
- 475, 477, 510, 512, 96, 99, 100, 101, 249, 350,
- 466, 472, 486, 487, 488, 489, 490, 492, 493, 494,
- 495, 496, 510, 512, 142, 143, 249, 397, 398, 399,
- 401, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 183, 184, 249, 510, 512, 589,
- 590, 591, 592, 594, 595, 597, 598, 599, 602, 604,
- 606, 607, 608, 610, 612, 614, 12, 13, 620, 621,
- 622, 624, 6, 3, 4, 8, 3, 253, 3, 8,
- 617, 303, 323, 4, 4, 4, 526, 528, 530, 4,
- 321, 331, 333, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 271, 4, 4, 4, 4, 4,
- 282, 285, 287, 4, 4, 4, 4, 414, 453, 479,
- 4, 274, 445, 511, 513, 441, 4, 4, 4, 374,
- 553, 515, 390, 404, 4, 383, 568, 576, 586, 292,
- 294, 4, 4, 4, 626, 650, 4, 3, 8, 309,
- 311, 314, 4, 4, 4, 4, 3, 8, 426, 428,
- 430, 498, 424, 432, 4, 436, 434, 550, 3, 8,
- 508, 4, 3, 8, 548, 536, 538, 542, 540, 546,
- 544, 532, 8, 3, 8, 469, 351, 4, 473, 471,
- 476, 4, 8, 3, 491, 4, 4, 4, 8, 3,
- 400, 402, 3, 8, 4, 605, 593, 4, 596, 4,
- 4, 600, 603, 4, 4, 609, 611, 613, 615, 3,
- 8, 623, 4, 3, 8, 234, 234, 215, 4, 4,
- 4, 4, 218, 218, 218, 4, 4, 4, 216, 4,
- 4, 4, 216, 216, 216, 216, 216, 218, 217, 217,
- 217, 216, 216, 4, 216, 216, 218, 218, 218, 4,
- 4, 4, 218, 218, 217, 218, 4, 4, 4, 216,
- 4, 4, 4, 4, 4, 218, 218, 218, 4, 4,
- 4, 4, 4, 216, 4, 4, 4, 4, 4, 4,
- 218, 218, 218, 4, 4, 258, 4, 4, 4, 218,
- 218, 216, 216, 305, 4, 4, 4, 4, 4, 4,
- 216, 4, 4, 4, 422, 4, 216, 506, 4, 4,
- 4, 4, 4, 4, 4, 4, 524, 4, 4, 216,
- 4, 4, 4, 218, 464, 4, 218, 218, 218, 488,
- 4, 4, 398, 218, 4, 4, 216, 4, 216, 216,
- 4, 4, 218, 218, 4, 4, 4, 4, 590, 4,
- 216, 621, 4, 7, 7, 7, 7, 215, 215, 215,
- 7, 7, 5, 215, 179, 180, 181, 182, 218, 283,
- 215, 215, 5, 5, 5, 215, 5, 236, 238, 215,
- 116, 117, 118, 119, 442, 5, 5, 5, 5, 7,
- 7, 7, 7, 7, 215, 215, 5, 7, 5, 245,
- 17, 18, 312, 20, 21, 315, 215, 215, 215, 5,
- 215, 215, 245, 215, 7, 215, 245, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 238, 215, 215, 215, 18, 177, 601, 178, 283,
- 215, 215, 215, 5, 234, 257, 620, 304, 27, 28,
- 324, 325, 326, 328, 39, 43, 44, 45, 46, 47,
+ 112, 115, 116, 120, 125, 126, 127, 128, 129, 136,
+ 146, 149, 156, 157, 161, 164, 168, 188, 189, 190,
+ 191, 192, 193, 202, 220, 254, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 277, 278, 280, 281, 282, 283, 284, 285, 286, 289,
+ 291, 293, 294, 295, 298, 299, 301, 303, 304, 305,
+ 306, 307, 308, 309, 310, 328, 330, 338, 340, 381,
+ 390, 397, 411, 421, 445, 446, 447, 448, 452, 460,
+ 486, 518, 520, 522, 533, 535, 537, 560, 574, 575,
+ 583, 593, 624, 633, 657, 15, 16, 19, 22, 23,
+ 24, 25, 254, 312, 313, 316, 318, 321, 324, 325,
+ 326, 327, 518, 520, 90, 91, 92, 113, 117, 118,
+ 119, 130, 134, 143, 254, 264, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 278, 281, 282, 283, 284,
+ 285, 286, 289, 291, 293, 294, 295, 298, 299, 301,
+ 303, 309, 429, 430, 431, 433, 435, 437, 439, 441,
+ 443, 445, 446, 447, 448, 451, 486, 505, 518, 520,
+ 522, 533, 535, 537, 557, 114, 135, 254, 441, 443,
+ 486, 513, 514, 515, 517, 518, 520, 129, 137, 138,
+ 139, 140, 141, 142, 144, 254, 486, 518, 520, 530,
+ 531, 532, 533, 535, 537, 539, 543, 545, 547, 549,
+ 551, 553, 555, 460, 39, 95, 97, 98, 102, 103,
+ 104, 254, 358, 470, 471, 472, 473, 474, 475, 476,
+ 478, 480, 482, 483, 485, 518, 520, 96, 99, 100,
+ 101, 254, 358, 474, 480, 494, 495, 496, 497, 498,
+ 500, 501, 502, 503, 504, 518, 520, 147, 148, 254,
+ 405, 406, 407, 409, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 188, 189, 254,
+ 518, 520, 597, 598, 599, 600, 602, 603, 605, 606,
+ 607, 610, 612, 614, 615, 616, 618, 620, 622, 12,
+ 13, 628, 629, 630, 632, 6, 3, 4, 8, 3,
+ 258, 3, 8, 625, 311, 331, 4, 4, 4, 534,
+ 536, 538, 4, 329, 339, 341, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 276, 4, 4,
+ 4, 4, 4, 287, 290, 292, 4, 4, 4, 4,
+ 422, 461, 487, 4, 279, 296, 453, 519, 521, 449,
+ 4, 4, 4, 382, 561, 523, 398, 412, 4, 391,
+ 576, 584, 594, 300, 302, 4, 4, 4, 634, 658,
+ 4, 3, 8, 317, 319, 322, 4, 4, 4, 4,
+ 3, 8, 434, 436, 438, 506, 432, 440, 4, 444,
+ 442, 558, 3, 8, 516, 4, 3, 8, 556, 544,
+ 546, 550, 548, 554, 552, 540, 8, 3, 8, 477,
+ 359, 4, 481, 479, 484, 4, 8, 3, 499, 4,
+ 4, 4, 8, 3, 408, 410, 3, 8, 4, 613,
+ 601, 4, 604, 4, 4, 608, 611, 4, 4, 617,
+ 619, 621, 623, 3, 8, 631, 4, 3, 8, 239,
+ 239, 220, 4, 4, 4, 4, 223, 223, 223, 4,
+ 4, 4, 221, 4, 4, 4, 221, 221, 221, 221,
+ 221, 223, 222, 222, 222, 221, 221, 4, 221, 221,
+ 223, 223, 223, 4, 4, 4, 223, 223, 222, 223,
+ 4, 4, 4, 221, 4, 4, 4, 4, 4, 4,
+ 223, 223, 223, 4, 4, 4, 4, 4, 221, 4,
+ 4, 4, 4, 4, 4, 223, 223, 223, 4, 4,
+ 263, 4, 4, 4, 223, 223, 221, 221, 313, 4,
+ 4, 4, 4, 4, 4, 221, 4, 4, 4, 430,
+ 4, 221, 514, 4, 4, 4, 4, 4, 4, 4,
+ 4, 532, 4, 4, 221, 4, 4, 4, 223, 472,
+ 4, 223, 223, 223, 496, 4, 4, 406, 223, 4,
+ 4, 221, 4, 221, 221, 4, 4, 223, 223, 4,
+ 4, 4, 4, 598, 4, 221, 629, 4, 7, 7,
+ 7, 7, 220, 220, 220, 7, 7, 5, 220, 184,
+ 185, 186, 187, 223, 288, 220, 220, 5, 5, 5,
+ 220, 108, 109, 110, 111, 297, 5, 241, 243, 220,
+ 121, 122, 123, 124, 450, 5, 5, 5, 5, 7,
+ 7, 7, 7, 7, 220, 220, 5, 7, 5, 250,
+ 17, 18, 320, 20, 21, 323, 220, 220, 220, 5,
+ 220, 220, 250, 220, 7, 220, 250, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 243, 220, 220, 220, 18, 182, 609, 183, 288,
+ 220, 220, 220, 5, 239, 262, 628, 312, 27, 28,
+ 332, 333, 334, 336, 39, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 60,
- 61, 62, 63, 64, 249, 338, 339, 340, 343, 345,
- 347, 349, 350, 352, 353, 354, 355, 356, 357, 358,
- 359, 360, 361, 364, 365, 367, 369, 371, 338, 7,
- 334, 335, 336, 7, 415, 416, 417, 7, 456, 457,
- 458, 7, 480, 481, 482, 7, 446, 447, 448, 132,
- 133, 134, 135, 137, 375, 376, 377, 378, 379, 380,
- 381, 7, 554, 555, 7, 516, 517, 518, 7, 391,
- 392, 393, 145, 146, 147, 148, 149, 150, 405, 406,
- 407, 408, 409, 410, 411, 412, 153, 154, 155, 249,
- 384, 385, 386, 387, 388, 510, 512, 157, 158, 249,
- 510, 512, 569, 570, 571, 573, 160, 161, 162, 215,
- 510, 512, 577, 578, 579, 580, 582, 583, 589, 7,
- 627, 628, 198, 199, 200, 201, 249, 651, 652, 653,
- 654, 655, 656, 246, 7, 499, 500, 501, 140, 531,
- 533, 551, 334, 8, 8, 8, 327, 329, 3, 8,
- 341, 344, 346, 348, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 362, 4, 366, 368, 370, 372,
- 3, 8, 8, 337, 6, 3, 418, 6, 3, 459,
- 6, 3, 483, 6, 3, 449, 6, 3, 3, 6,
- 556, 3, 6, 519, 6, 3, 394, 6, 3, 4,
+ 61, 62, 63, 64, 254, 346, 347, 348, 351, 353,
+ 355, 357, 358, 360, 361, 362, 363, 364, 365, 366,
+ 367, 368, 369, 372, 373, 375, 377, 379, 346, 7,
+ 342, 343, 344, 7, 423, 424, 425, 7, 464, 465,
+ 466, 7, 488, 489, 490, 7, 454, 455, 456, 137,
+ 138, 139, 140, 142, 383, 384, 385, 386, 387, 388,
+ 389, 7, 562, 563, 7, 524, 525, 526, 7, 399,
+ 400, 401, 150, 151, 152, 153, 154, 155, 413, 414,
+ 415, 416, 417, 418, 419, 420, 158, 159, 160, 254,
+ 392, 393, 394, 395, 396, 518, 520, 162, 163, 254,
+ 518, 520, 577, 578, 579, 581, 165, 166, 167, 220,
+ 518, 520, 585, 586, 587, 588, 590, 591, 597, 7,
+ 635, 636, 203, 204, 205, 206, 254, 659, 660, 661,
+ 662, 663, 664, 251, 7, 507, 508, 509, 145, 539,
+ 541, 559, 342, 8, 8, 8, 335, 337, 3, 8,
+ 349, 352, 354, 356, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 370, 4, 374, 376, 378, 380,
+ 3, 8, 8, 345, 6, 3, 426, 6, 3, 467,
+ 6, 3, 491, 6, 3, 457, 6, 3, 3, 6,
+ 564, 3, 6, 527, 6, 3, 402, 6, 3, 4,
4, 4, 4, 4, 4, 3, 8, 4, 4, 4,
- 3, 8, 572, 574, 3, 8, 4, 581, 4, 584,
- 3, 8, 8, 629, 3, 6, 4, 4, 4, 4,
- 3, 8, 215, 247, 248, 502, 6, 3, 534, 8,
- 6, 4, 4, 325, 4, 4, 4, 4, 216, 218,
- 216, 218, 216, 216, 216, 216, 216, 216, 4, 216,
- 4, 4, 4, 4, 339, 338, 336, 421, 417, 462,
- 458, 486, 482, 249, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 273, 276, 277, 278, 279, 280,
- 281, 284, 286, 288, 289, 290, 291, 293, 295, 301,
- 350, 413, 431, 433, 435, 437, 438, 439, 440, 450,
- 451, 478, 510, 512, 525, 527, 529, 549, 448, 376,
- 126, 127, 128, 249, 259, 260, 261, 301, 350, 452,
- 478, 510, 512, 525, 527, 529, 557, 558, 559, 560,
- 561, 563, 565, 555, 522, 518, 397, 393, 216, 216,
- 216, 216, 216, 216, 406, 218, 216, 216, 385, 4,
- 4, 570, 218, 4, 216, 4, 578, 189, 191, 192,
- 249, 350, 510, 512, 630, 631, 632, 633, 635, 628,
- 218, 218, 218, 218, 652, 6, 3, 505, 501, 4,
- 215, 215, 40, 41, 42, 342, 215, 215, 215, 57,
- 58, 59, 363, 215, 215, 215, 215, 8, 8, 8,
- 8, 3, 8, 562, 564, 4, 8, 3, 8, 8,
- 215, 215, 215, 234, 636, 4, 634, 3, 8, 215,
- 8, 245, 451, 4, 4, 218, 559, 4, 216, 4,
- 631, 215, 215, 5, 215, 7, 637, 638, 639, 3,
- 6, 190, 193, 194, 195, 196, 640, 641, 642, 644,
- 645, 646, 647, 638, 643, 4, 4, 4, 648, 3,
- 8, 4, 218, 216, 216, 4, 641, 215, 215
+ 3, 8, 580, 582, 3, 8, 4, 589, 4, 592,
+ 3, 8, 8, 637, 3, 6, 4, 4, 4, 4,
+ 3, 8, 220, 252, 253, 510, 6, 3, 542, 8,
+ 6, 4, 4, 333, 4, 4, 4, 4, 221, 223,
+ 221, 223, 221, 221, 221, 221, 221, 221, 4, 221,
+ 4, 4, 4, 4, 347, 346, 344, 429, 425, 470,
+ 466, 494, 490, 254, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 278, 281, 282, 283, 284, 285,
+ 286, 289, 291, 293, 294, 295, 298, 299, 301, 303,
+ 309, 358, 421, 439, 441, 443, 445, 446, 447, 448,
+ 458, 459, 486, 518, 520, 533, 535, 537, 557, 456,
+ 384, 131, 132, 133, 254, 264, 265, 266, 309, 358,
+ 460, 486, 518, 520, 533, 535, 537, 565, 566, 567,
+ 568, 569, 571, 573, 563, 530, 526, 405, 401, 221,
+ 221, 221, 221, 221, 221, 414, 223, 221, 221, 393,
+ 4, 4, 578, 223, 4, 221, 4, 586, 194, 196,
+ 197, 254, 358, 518, 520, 638, 639, 640, 641, 643,
+ 636, 223, 223, 223, 223, 660, 6, 3, 513, 509,
+ 4, 220, 220, 40, 41, 42, 350, 220, 220, 220,
+ 57, 58, 59, 371, 220, 220, 220, 220, 8, 8,
+ 8, 8, 3, 8, 570, 572, 4, 8, 3, 8,
+ 8, 220, 220, 220, 239, 644, 4, 642, 3, 8,
+ 220, 8, 250, 459, 4, 4, 223, 567, 4, 221,
+ 4, 639, 220, 220, 5, 220, 7, 645, 646, 647,
+ 3, 6, 195, 198, 199, 200, 201, 648, 649, 650,
+ 652, 653, 654, 655, 646, 651, 4, 4, 4, 656,
+ 3, 8, 4, 223, 221, 221, 4, 649, 220, 220
};
const short
Dhcp4Parser::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, 234,
- 234, 234, 234, 234, 234, 235, 237, 236, 238, 239,
- 239, 240, 240, 240, 242, 241, 243, 243, 244, 244,
- 244, 246, 245, 247, 247, 248, 248, 248, 249, 251,
- 250, 253, 252, 252, 254, 256, 255, 257, 257, 257,
- 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
- 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
- 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
- 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
- 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
- 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
- 258, 258, 258, 258, 258, 258, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 271, 270,
- 272, 274, 273, 275, 276, 277, 278, 279, 280, 282,
- 281, 283, 283, 283, 283, 283, 285, 284, 287, 286,
- 288, 289, 290, 292, 291, 294, 293, 295, 296, 297,
- 298, 299, 300, 301, 303, 302, 304, 304, 304, 305,
- 305, 305, 305, 305, 305, 305, 305, 305, 305, 307,
- 306, 309, 308, 311, 310, 312, 312, 314, 313, 315,
- 315, 316, 317, 318, 319, 321, 320, 323, 322, 324,
- 324, 324, 325, 325, 327, 326, 329, 328, 331, 330,
- 333, 332, 334, 334, 335, 335, 335, 337, 336, 338,
- 338, 338, 339, 339, 339, 339, 339, 339, 339, 339,
- 339, 339, 339, 339, 339, 339, 339, 339, 339, 339,
- 339, 339, 339, 339, 341, 340, 342, 342, 342, 344,
- 343, 346, 345, 348, 347, 349, 351, 350, 352, 353,
- 354, 355, 356, 357, 358, 359, 360, 362, 361, 363,
- 363, 363, 364, 366, 365, 368, 367, 370, 369, 372,
- 371, 374, 373, 375, 375, 375, 376, 376, 376, 376,
- 376, 377, 378, 379, 380, 381, 383, 382, 384, 384,
- 384, 385, 385, 385, 385, 385, 385, 386, 387, 388,
- 390, 389, 391, 391, 392, 392, 392, 394, 393, 396,
- 395, 397, 397, 397, 397, 398, 398, 400, 399, 402,
- 401, 404, 403, 405, 405, 405, 406, 406, 406, 406,
- 406, 406, 407, 408, 409, 410, 411, 412, 414, 413,
- 415, 415, 416, 416, 416, 418, 417, 420, 419, 421,
- 421, 421, 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
- 424, 423, 426, 425, 428, 427, 430, 429, 432, 431,
- 434, 433, 436, 435, 437, 438, 439, 441, 440, 442,
- 442, 442, 442, 443, 445, 444, 446, 446, 447, 447,
- 447, 449, 448, 450, 450, 450, 451, 451, 451, 451,
- 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
- 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
- 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
- 451, 451, 451, 451, 451, 451, 451, 451, 451, 453,
- 452, 455, 454, 456, 456, 457, 457, 457, 459, 458,
- 461, 460, 462, 462, 463, 463, 463, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 465, 466, 467,
- 469, 468, 471, 470, 473, 472, 474, 476, 475, 477,
- 479, 478, 480, 480, 481, 481, 481, 483, 482, 485,
- 484, 486, 486, 487, 487, 487, 488, 488, 488, 488,
- 488, 488, 488, 488, 488, 488, 489, 491, 490, 492,
- 493, 494, 495, 496, 498, 497, 499, 499, 500, 500,
- 500, 502, 501, 504, 503, 505, 505, 505, 506, 506,
- 506, 506, 506, 506, 506, 506, 508, 507, 509, 511,
- 510, 513, 512, 515, 514, 516, 516, 517, 517, 517,
- 519, 518, 521, 520, 522, 522, 523, 523, 523, 524,
- 524, 524, 524, 524, 524, 524, 524, 524, 524, 524,
- 524, 524, 524, 524, 526, 525, 528, 527, 530, 529,
- 532, 531, 534, 533, 536, 535, 538, 537, 540, 539,
- 542, 541, 544, 543, 546, 545, 548, 547, 550, 549,
- 551, 551, 553, 552, 554, 554, 554, 556, 555, 557,
- 557, 558, 558, 558, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 560, 562, 561, 564, 563, 565, 566, 568, 567, 569,
- 569, 569, 570, 570, 570, 570, 570, 572, 571, 574,
- 573, 576, 575, 577, 577, 577, 578, 578, 578, 578,
- 578, 578, 579, 581, 580, 582, 584, 583, 586, 585,
- 588, 587, 589, 589, 589, 590, 590, 590, 590, 590,
- 590, 590, 590, 590, 590, 590, 590, 590, 590, 590,
- 590, 590, 590, 591, 593, 592, 594, 596, 595, 597,
- 598, 600, 599, 601, 601, 603, 602, 605, 604, 606,
- 607, 609, 608, 611, 610, 613, 612, 615, 614, 617,
- 616, 619, 618, 620, 620, 620, 621, 621, 623, 622,
- 624, 626, 625, 627, 627, 627, 629, 628, 630, 630,
- 630, 631, 631, 631, 631, 631, 631, 631, 632, 634,
- 633, 636, 635, 637, 637, 637, 639, 638, 640, 640,
- 640, 641, 641, 641, 641, 641, 643, 642, 644, 645,
- 646, 648, 647, 650, 649, 651, 651, 651, 652, 652,
- 652, 652, 652, 653, 654, 655, 656
+ 0, 224, 226, 225, 227, 225, 228, 225, 229, 225,
+ 230, 225, 231, 225, 232, 225, 233, 225, 234, 225,
+ 235, 225, 236, 225, 237, 225, 238, 225, 239, 239,
+ 239, 239, 239, 239, 239, 240, 242, 241, 243, 244,
+ 244, 245, 245, 245, 247, 246, 248, 248, 249, 249,
+ 249, 251, 250, 252, 252, 253, 253, 253, 254, 256,
+ 255, 258, 257, 257, 259, 261, 260, 262, 262, 262,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 276,
+ 275, 277, 279, 278, 280, 281, 282, 283, 284, 285,
+ 287, 286, 288, 288, 288, 288, 288, 290, 289, 292,
+ 291, 293, 294, 296, 295, 297, 297, 297, 297, 298,
+ 300, 299, 302, 301, 303, 304, 305, 306, 307, 308,
+ 309, 311, 310, 312, 312, 312, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 315, 314, 317, 316,
+ 319, 318, 320, 320, 322, 321, 323, 323, 324, 325,
+ 326, 327, 329, 328, 331, 330, 332, 332, 332, 333,
+ 333, 335, 334, 337, 336, 339, 338, 341, 340, 342,
+ 342, 343, 343, 343, 345, 344, 346, 346, 346, 347,
+ 347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
+ 347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
+ 347, 349, 348, 350, 350, 350, 352, 351, 354, 353,
+ 356, 355, 357, 359, 358, 360, 361, 362, 363, 364,
+ 365, 366, 367, 368, 370, 369, 371, 371, 371, 372,
+ 374, 373, 376, 375, 378, 377, 380, 379, 382, 381,
+ 383, 383, 383, 384, 384, 384, 384, 384, 385, 386,
+ 387, 388, 389, 391, 390, 392, 392, 392, 393, 393,
+ 393, 393, 393, 393, 394, 395, 396, 398, 397, 399,
+ 399, 400, 400, 400, 402, 401, 404, 403, 405, 405,
+ 405, 405, 406, 406, 408, 407, 410, 409, 412, 411,
+ 413, 413, 413, 414, 414, 414, 414, 414, 414, 415,
+ 416, 417, 418, 419, 420, 422, 421, 423, 423, 424,
+ 424, 424, 426, 425, 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, 430,
+ 430, 430, 430, 430, 430, 430, 430, 430, 432, 431,
+ 434, 433, 436, 435, 438, 437, 440, 439, 442, 441,
+ 444, 443, 445, 446, 447, 449, 448, 450, 450, 450,
+ 450, 451, 453, 452, 454, 454, 455, 455, 455, 457,
+ 456, 458, 458, 458, 459, 459, 459, 459, 459, 459,
+ 459, 459, 459, 459, 459, 459, 459, 459, 459, 459,
+ 459, 459, 459, 459, 459, 459, 459, 459, 459, 459,
+ 459, 459, 459, 459, 459, 459, 459, 459, 459, 459,
+ 459, 459, 459, 459, 459, 459, 459, 459, 461, 460,
+ 463, 462, 464, 464, 465, 465, 465, 467, 466, 469,
+ 468, 470, 470, 471, 471, 471, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 473, 474, 475, 477,
+ 476, 479, 478, 481, 480, 482, 484, 483, 485, 487,
+ 486, 488, 488, 489, 489, 489, 491, 490, 493, 492,
+ 494, 494, 495, 495, 495, 496, 496, 496, 496, 496,
+ 496, 496, 496, 496, 496, 497, 499, 498, 500, 501,
+ 502, 503, 504, 506, 505, 507, 507, 508, 508, 508,
+ 510, 509, 512, 511, 513, 513, 513, 514, 514, 514,
+ 514, 514, 514, 514, 514, 516, 515, 517, 519, 518,
+ 521, 520, 523, 522, 524, 524, 525, 525, 525, 527,
+ 526, 529, 528, 530, 530, 531, 531, 531, 532, 532,
+ 532, 532, 532, 532, 532, 532, 532, 532, 532, 532,
+ 532, 532, 532, 534, 533, 536, 535, 538, 537, 540,
+ 539, 542, 541, 544, 543, 546, 545, 548, 547, 550,
+ 549, 552, 551, 554, 553, 556, 555, 558, 557, 559,
+ 559, 561, 560, 562, 562, 562, 564, 563, 565, 565,
+ 566, 566, 566, 567, 567, 567, 567, 567, 567, 567,
+ 567, 567, 567, 567, 567, 567, 567, 567, 567, 568,
+ 570, 569, 572, 571, 573, 574, 576, 575, 577, 577,
+ 577, 578, 578, 578, 578, 578, 580, 579, 582, 581,
+ 584, 583, 585, 585, 585, 586, 586, 586, 586, 586,
+ 586, 587, 589, 588, 590, 592, 591, 594, 593, 596,
+ 595, 597, 597, 597, 598, 598, 598, 598, 598, 598,
+ 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
+ 598, 598, 599, 601, 600, 602, 604, 603, 605, 606,
+ 608, 607, 609, 609, 611, 610, 613, 612, 614, 615,
+ 617, 616, 619, 618, 621, 620, 623, 622, 625, 624,
+ 627, 626, 628, 628, 628, 629, 629, 631, 630, 632,
+ 634, 633, 635, 635, 635, 637, 636, 638, 638, 638,
+ 639, 639, 639, 639, 639, 639, 639, 640, 642, 641,
+ 644, 643, 645, 645, 645, 647, 646, 648, 648, 648,
+ 649, 649, 649, 649, 649, 651, 650, 652, 653, 654,
+ 656, 655, 658, 657, 659, 659, 659, 660, 660, 660,
+ 660, 660, 661, 662, 663, 664
};
const signed char
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 0, 4,
- 3, 0, 4, 3, 3, 3, 3, 3, 3, 0,
- 4, 1, 1, 1, 1, 1, 0, 4, 0, 4,
- 3, 3, 3, 0, 4, 0, 4, 3, 3, 3,
- 3, 3, 3, 3, 0, 6, 1, 3, 2, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 4, 0, 4, 0, 4, 1, 1, 0, 4, 1,
- 1, 3, 3, 3, 3, 0, 6, 0, 6, 1,
- 3, 2, 1, 1, 0, 4, 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, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 4, 3, 0, 4, 3, 3, 3, 3, 3, 3,
+ 0, 4, 1, 1, 1, 1, 1, 0, 4, 0,
+ 4, 3, 3, 0, 4, 1, 1, 1, 1, 3,
+ 0, 4, 0, 4, 3, 3, 3, 3, 3, 3,
+ 3, 0, 6, 1, 3, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 4, 0, 4,
+ 0, 4, 1, 1, 0, 4, 1, 1, 3, 3,
+ 3, 3, 0, 6, 0, 6, 1, 3, 2, 1,
+ 1, 0, 4, 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, 0, 4, 1, 1, 1, 0,
- 4, 0, 4, 0, 4, 3, 0, 4, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 0, 4, 1,
- 1, 1, 3, 0, 4, 0, 4, 0, 4, 0,
- 4, 0, 6, 1, 3, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 6, 1, 3,
- 2, 1, 1, 1, 1, 1, 1, 3, 3, 3,
- 0, 6, 0, 1, 1, 3, 2, 0, 4, 0,
- 4, 1, 3, 2, 1, 1, 1, 0, 4, 0,
- 4, 0, 6, 1, 3, 2, 1, 1, 1, 1,
- 1, 1, 3, 3, 3, 3, 3, 3, 0, 6,
- 0, 1, 1, 3, 2, 0, 4, 0, 4, 1,
- 3, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 4, 1, 1, 1, 0, 4, 0, 4,
+ 0, 4, 3, 0, 4, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 4, 1, 1, 1, 3,
+ 0, 4, 0, 4, 0, 4, 0, 4, 0, 6,
+ 1, 3, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 6, 1, 3, 2, 1, 1,
+ 1, 1, 1, 1, 3, 3, 3, 0, 6, 0,
+ 1, 1, 3, 2, 0, 4, 0, 4, 1, 3,
+ 2, 1, 1, 1, 0, 4, 0, 4, 0, 6,
+ 1, 3, 2, 1, 1, 1, 1, 1, 1, 3,
+ 3, 3, 3, 3, 3, 0, 6, 0, 1, 1,
+ 3, 2, 0, 4, 0, 4, 1, 3, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
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,
+ 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, 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,
+ 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, 4, 1,
- 1, 3, 3, 3, 0, 6, 0, 1, 1, 3,
- 2, 0, 4, 0, 4, 1, 3, 2, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 4, 3, 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, 3, 1, 0,
+ 4, 0, 4, 0, 4, 1, 0, 4, 3, 0,
+ 6, 0, 1, 1, 3, 2, 0, 4, 0, 4,
+ 0, 1, 1, 3, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 4, 1, 1,
+ 3, 3, 3, 0, 6, 0, 1, 1, 3, 2,
+ 0, 4, 0, 4, 1, 3, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 4, 3, 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, 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, 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, 1, 1,
- 1, 0, 4, 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,
+ 0, 4, 0, 4, 3, 3, 0, 6, 1, 3,
+ 2, 1, 1, 1, 1, 1, 0, 4, 0, 4,
+ 0, 6, 1, 3, 2, 1, 1, 1, 1, 1,
+ 1, 3, 0, 4, 3, 0, 4, 0, 6, 0,
+ 4, 1, 3, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 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,
- 1, 1, 1, 3, 3, 3, 3
+ 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, 1,
+ 1, 1, 3, 3, 3, 3
};
"\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
"\"space\"", "\"csv-format\"", "\"always-send\"", "\"never-send\"",
"\"record-types\"", "\"encapsulate\"", "\"array\"",
- "\"parked-packet-limit\"", "\"allocator\"", "\"shared-networks\"",
- "\"pools\"", "\"pool\"", "\"user-context\"", "\"comment\"", "\"subnet\"",
+ "\"parked-packet-limit\"", "\"allocator\"",
+ "\"ddns-conflict-resolution-mode\"", "\"check-with-dhcid\"",
+ "\"no-check-with-dhcid\"", "\"check-exists-with-dhcid\"",
+ "\"no-check-without-dhcid\"", "\"shared-networks\"", "\"pools\"",
+ "\"pool\"", "\"user-context\"", "\"comment\"", "\"subnet\"",
"\"interface\"", "\"id\"", "\"reservation-mode\"", "\"disabled\"",
"\"out-of-pool\"", "\"global\"", "\"all\"", "\"reservations-global\"",
"\"reservations-in-subnet\"", "\"reservations-out-of-pool\"",
"ddns_replace_client_name", "$@22", "ddns_replace_client_name_value",
"ddns_generated_prefix", "$@23", "ddns_qualifying_suffix", "$@24",
"ddns_update_on_renew", "ddns_use_conflict_resolution",
- "ddns_ttl_percent", "hostname_char_set", "$@25",
- "hostname_char_replacement", "$@26", "store_extended_info",
- "statistic_default_sample_count", "statistic_default_sample_age",
- "early_global_reservations_lookup", "ip_reservations_unique",
- "reservations_lookup_first", "offer_lifetime", "interfaces_config",
- "$@27", "interfaces_config_params", "interfaces_config_param",
- "sub_interfaces4", "$@28", "interfaces_list", "$@29", "dhcp_socket_type",
- "$@30", "socket_type", "outbound_interface", "$@31",
- "outbound_interface_value", "re_detect", "service_sockets_require_all",
- "service_sockets_retry_wait_time", "service_sockets_max_retries",
- "lease_database", "$@32", "sanity_checks", "$@33",
- "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@34",
- "extended_info_checks", "$@35", "hosts_database", "$@36",
- "hosts_databases", "$@37", "database_list", "not_empty_database_list",
- "database", "$@38", "database_map_params", "database_map_param",
- "database_type", "$@39", "db_type", "user", "$@40", "password", "$@41",
- "host", "$@42", "port", "name", "$@43", "persist", "lfc_interval",
+ "ddns_conflict_resolution_mode", "$@25",
+ "ddns_conflict_resolution_mode_value", "ddns_ttl_percent",
+ "hostname_char_set", "$@26", "hostname_char_replacement", "$@27",
+ "store_extended_info", "statistic_default_sample_count",
+ "statistic_default_sample_age", "early_global_reservations_lookup",
+ "ip_reservations_unique", "reservations_lookup_first", "offer_lifetime",
+ "interfaces_config", "$@28", "interfaces_config_params",
+ "interfaces_config_param", "sub_interfaces4", "$@29", "interfaces_list",
+ "$@30", "dhcp_socket_type", "$@31", "socket_type", "outbound_interface",
+ "$@32", "outbound_interface_value", "re_detect",
+ "service_sockets_require_all", "service_sockets_retry_wait_time",
+ "service_sockets_max_retries", "lease_database", "$@33", "sanity_checks",
+ "$@34", "sanity_checks_params", "sanity_checks_param", "lease_checks",
+ "$@35", "extended_info_checks", "$@36", "hosts_database", "$@37",
+ "hosts_databases", "$@38", "database_list", "not_empty_database_list",
+ "database", "$@39", "database_map_params", "database_map_param",
+ "database_type", "$@40", "db_type", "user", "$@41", "password", "$@42",
+ "host", "$@43", "port", "name", "$@44", "persist", "lfc_interval",
"readonly", "connect_timeout", "read_timeout", "write_timeout",
"tcp_user_timeout", "max_reconnect_tries", "reconnect_wait_time",
- "on_fail", "$@44", "on_fail_mode", "max_row_errors", "trust_anchor",
- "$@45", "cert_file", "$@46", "key_file", "$@47", "cipher_list", "$@48",
- "host_reservation_identifiers", "$@49",
+ "on_fail", "$@45", "on_fail_mode", "max_row_errors", "trust_anchor",
+ "$@46", "cert_file", "$@47", "key_file", "$@48", "cipher_list", "$@49",
+ "host_reservation_identifiers", "$@50",
"host_reservation_identifiers_list", "host_reservation_identifier",
"duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id",
- "dhcp_multi_threading", "$@50", "multi_threading_params",
+ "dhcp_multi_threading", "$@51", "multi_threading_params",
"multi_threading_param", "enable_multi_threading", "thread_pool_size",
- "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",
+ "packet_queue_size", "hooks_libraries", "$@52", "hooks_libraries_list",
+ "not_empty_hooks_libraries_list", "hooks_library", "$@53",
+ "sub_hooks_library", "$@54", "hooks_params", "hooks_param", "library",
+ "$@55", "parameters", "$@56", "expired_leases_processing", "$@57",
"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", "$@57",
- "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@58",
- "sub_subnet4", "$@59", "subnet4_params", "subnet4_param", "subnet",
- "$@60", "subnet_4o6_interface", "$@61", "subnet_4o6_interface_id",
- "$@62", "subnet_4o6_subnet", "$@63", "interface", "$@64", "client_class",
- "$@65", "require_client_classes", "$@66", "reservations_global",
+ "unwarned_reclaim_cycles", "subnet4_list", "$@58",
+ "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@59",
+ "sub_subnet4", "$@60", "subnet4_params", "subnet4_param", "subnet",
+ "$@61", "subnet_4o6_interface", "$@62", "subnet_4o6_interface_id",
+ "$@63", "subnet_4o6_subnet", "$@64", "interface", "$@65", "client_class",
+ "$@66", "require_client_classes", "$@67", "reservations_global",
"reservations_in_subnet", "reservations_out_of_pool", "reservation_mode",
- "$@67", "hr_mode", "id", "shared_networks", "$@68",
+ "$@68", "hr_mode", "id", "shared_networks", "$@69",
"shared_networks_content", "shared_networks_list", "shared_network",
- "$@69", "shared_network_params", "shared_network_param",
- "option_def_list", "$@70", "sub_option_def_list", "$@71",
+ "$@70", "shared_network_params", "shared_network_param",
+ "option_def_list", "$@71", "sub_option_def_list", "$@72",
"option_def_list_content", "not_empty_option_def_list",
- "option_def_entry", "$@72", "sub_option_def", "$@73",
+ "option_def_entry", "$@73", "sub_option_def", "$@74",
"option_def_params", "not_empty_option_def_params", "option_def_param",
- "option_def_name", "code", "option_def_code", "option_def_type", "$@74",
- "option_def_record_types", "$@75", "space", "$@76", "option_def_space",
- "option_def_encapsulate", "$@77", "option_def_array", "option_data_list",
- "$@78", "option_data_list_content", "not_empty_option_data_list",
- "option_data_entry", "$@79", "sub_option_data", "$@80",
+ "option_def_name", "code", "option_def_code", "option_def_type", "$@75",
+ "option_def_record_types", "$@76", "space", "$@77", "option_def_space",
+ "option_def_encapsulate", "$@78", "option_def_array", "option_data_list",
+ "$@79", "option_data_list_content", "not_empty_option_data_list",
+ "option_data_entry", "$@80", "sub_option_data", "$@81",
"option_data_params", "not_empty_option_data_params",
- "option_data_param", "option_data_name", "option_data_data", "$@81",
+ "option_data_param", "option_data_name", "option_data_data", "$@82",
"option_data_code", "option_data_space", "option_data_csv_format",
"option_data_always_send", "option_data_never_send", "pools_list",
- "$@82", "pools_list_content", "not_empty_pools_list", "pool_list_entry",
- "$@83", "sub_pool4", "$@84", "pool_params", "pool_param", "pool_entry",
- "$@85", "pool_id", "user_context", "$@86", "comment", "$@87",
- "reservations", "$@88", "reservations_list",
- "not_empty_reservations_list", "reservation", "$@89", "sub_reservation",
- "$@90", "reservation_params", "not_empty_reservation_params",
- "reservation_param", "next_server", "$@91", "server_hostname", "$@92",
- "boot_file_name", "$@93", "ip_address", "$@94", "ip_addresses", "$@95",
- "duid", "$@96", "hw_address", "$@97", "client_id_value", "$@98",
- "circuit_id_value", "$@99", "flex_id_value", "$@100", "hostname",
- "$@101", "reservation_client_classes", "$@102", "relay", "$@103",
- "relay_map", "client_classes", "$@104", "client_classes_list",
- "client_class_entry", "$@105", "client_class_params",
+ "$@83", "pools_list_content", "not_empty_pools_list", "pool_list_entry",
+ "$@84", "sub_pool4", "$@85", "pool_params", "pool_param", "pool_entry",
+ "$@86", "pool_id", "user_context", "$@87", "comment", "$@88",
+ "reservations", "$@89", "reservations_list",
+ "not_empty_reservations_list", "reservation", "$@90", "sub_reservation",
+ "$@91", "reservation_params", "not_empty_reservation_params",
+ "reservation_param", "next_server", "$@92", "server_hostname", "$@93",
+ "boot_file_name", "$@94", "ip_address", "$@95", "ip_addresses", "$@96",
+ "duid", "$@97", "hw_address", "$@98", "client_id_value", "$@99",
+ "circuit_id_value", "$@100", "flex_id_value", "$@101", "hostname",
+ "$@102", "reservation_client_classes", "$@103", "relay", "$@104",
+ "relay_map", "client_classes", "$@105", "client_classes_list",
+ "client_class_entry", "$@106", "client_class_params",
"not_empty_client_class_params", "client_class_param",
- "client_class_name", "client_class_test", "$@106",
- "client_class_template_test", "$@107", "only_if_required",
- "dhcp4o6_port", "control_socket", "$@108", "control_socket_params",
- "control_socket_param", "control_socket_type", "$@109",
- "control_socket_name", "$@110", "dhcp_queue_control", "$@111",
+ "client_class_name", "client_class_test", "$@107",
+ "client_class_template_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",
"queue_control_params", "queue_control_param", "enable_queue",
- "queue_type", "$@112", "capacity", "arbitrary_map_entry", "$@113",
- "dhcp_ddns", "$@114", "sub_dhcp_ddns", "$@115", "dhcp_ddns_params",
- "dhcp_ddns_param", "enable_updates", "server_ip", "$@116", "server_port",
- "sender_ip", "$@117", "sender_port", "max_queue_size", "ncr_protocol",
- "$@118", "ncr_protocol_value", "ncr_format", "$@119",
- "dep_qualifying_suffix", "$@120", "dep_override_no_update",
- "dep_override_client_update", "dep_replace_client_name", "$@121",
- "dep_generated_prefix", "$@122", "dep_hostname_char_set", "$@123",
- "dep_hostname_char_replacement", "$@124", "config_control", "$@125",
- "sub_config_control", "$@126", "config_control_params",
- "config_control_param", "config_databases", "$@127",
- "config_fetch_wait_time", "loggers", "$@128", "loggers_entries",
- "logger_entry", "$@129", "logger_params", "logger_param", "debuglevel",
- "severity", "$@130", "output_options_list", "$@131",
- "output_options_list_content", "output_entry", "$@132",
- "output_params_list", "output_params", "output", "$@133", "flush",
- "maxsize", "maxver", "pattern", "$@134", "compatibility", "$@135",
+ "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",
"compatibility_params", "compatibility_param", "lenient_option_parsing",
"ignore_dhcp_server_identifier", "ignore_rai_link_selection",
"exclude_first_last_24", YY_NULLPTR
const short
Dhcp4Parser::yyrline_[] =
{
- 0, 313, 313, 313, 314, 314, 315, 315, 316, 316,
- 317, 317, 318, 318, 319, 319, 320, 320, 321, 321,
- 322, 322, 323, 323, 324, 324, 325, 325, 333, 334,
- 335, 336, 337, 338, 339, 342, 347, 347, 358, 361,
- 362, 365, 370, 376, 381, 381, 388, 389, 392, 396,
- 400, 406, 406, 413, 414, 417, 421, 425, 435, 444,
- 444, 459, 459, 473, 476, 482, 482, 491, 492, 493,
- 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,
- 560, 561, 562, 563, 564, 565, 566, 569, 575, 581,
- 587, 593, 599, 605, 611, 617, 623, 629, 635, 635,
- 644, 650, 650, 659, 665, 671, 677, 683, 689, 695,
- 695, 704, 707, 710, 713, 716, 722, 722, 731, 731,
- 740, 746, 752, 758, 758, 767, 767, 776, 782, 788,
- 794, 800, 806, 812, 818, 818, 830, 831, 832, 837,
- 838, 839, 840, 841, 842, 843, 844, 845, 846, 849,
- 849, 858, 858, 869, 869, 877, 878, 881, 881, 889,
- 891, 895, 901, 907, 913, 919, 919, 932, 932, 943,
- 944, 945, 950, 951, 954, 954, 973, 973, 991, 991,
- 1004, 1004, 1015, 1016, 1019, 1020, 1021, 1026, 1026, 1036,
- 1037, 1038, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
- 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060,
- 1061, 1062, 1063, 1064, 1067, 1067, 1075, 1076, 1077, 1080,
- 1080, 1089, 1089, 1098, 1098, 1107, 1113, 1113, 1122, 1128,
- 1134, 1140, 1146, 1152, 1158, 1164, 1170, 1176, 1176, 1184,
- 1185, 1186, 1189, 1195, 1195, 1204, 1204, 1213, 1213, 1222,
- 1222, 1231, 1231, 1242, 1243, 1244, 1249, 1250, 1251, 1252,
- 1253, 1256, 1261, 1266, 1271, 1276, 1283, 1283, 1296, 1297,
- 1298, 1303, 1304, 1305, 1306, 1307, 1308, 1311, 1317, 1323,
- 1329, 1329, 1340, 1341, 1344, 1345, 1346, 1351, 1351, 1361,
- 1361, 1371, 1372, 1373, 1376, 1379, 1380, 1383, 1383, 1392,
- 1392, 1401, 1401, 1413, 1414, 1415, 1420, 1421, 1422, 1423,
- 1424, 1425, 1428, 1434, 1440, 1446, 1452, 1458, 1467, 1467,
- 1481, 1482, 1485, 1486, 1487, 1496, 1496, 1522, 1522, 1533,
- 1534, 1535, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548,
- 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558,
- 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568,
- 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578,
- 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588,
- 1591, 1591, 1600, 1600, 1609, 1609, 1618, 1618, 1627, 1627,
- 1636, 1636, 1645, 1645, 1656, 1662, 1668, 1674, 1674, 1682,
- 1683, 1684, 1685, 1688, 1696, 1696, 1708, 1709, 1713, 1714,
- 1715, 1720, 1720, 1728, 1729, 1730, 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, 1784,
- 1784, 1798, 1798, 1807, 1808, 1811, 1812, 1813, 1820, 1820,
- 1835, 1835, 1849, 1850, 1853, 1854, 1855, 1860, 1861, 1862,
- 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1872, 1874, 1880,
- 1882, 1882, 1891, 1891, 1900, 1900, 1909, 1911, 1911, 1920,
- 1930, 1930, 1943, 1944, 1949, 1950, 1951, 1958, 1958, 1970,
- 1970, 1982, 1983, 1988, 1989, 1990, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2011, 2011, 2020,
- 2022, 2024, 2030, 2036, 2045, 2045, 2058, 2059, 2062, 2063,
- 2064, 2069, 2069, 2079, 2079, 2089, 2090, 2091, 2096, 2097,
- 2098, 2099, 2100, 2101, 2102, 2103, 2106, 2106, 2115, 2121,
- 2121, 2146, 2146, 2176, 2176, 2187, 2188, 2191, 2192, 2193,
- 2198, 2198, 2207, 2207, 2216, 2217, 2220, 2221, 2222, 2228,
- 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238,
- 2239, 2240, 2241, 2242, 2245, 2245, 2254, 2254, 2263, 2263,
- 2272, 2272, 2281, 2281, 2292, 2292, 2301, 2301, 2310, 2310,
- 2319, 2319, 2328, 2328, 2337, 2337, 2346, 2346, 2360, 2360,
- 2371, 2372, 2378, 2378, 2389, 2390, 2391, 2396, 2396, 2406,
- 2407, 2410, 2411, 2412, 2417, 2418, 2419, 2420, 2421, 2422,
- 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432,
- 2435, 2437, 2437, 2446, 2446, 2455, 2463, 2471, 2471, 2482,
- 2483, 2484, 2489, 2490, 2491, 2492, 2493, 2496, 2496, 2505,
- 2505, 2517, 2517, 2530, 2531, 2532, 2537, 2538, 2539, 2540,
- 2541, 2542, 2545, 2551, 2551, 2560, 2566, 2566, 2576, 2576,
- 2589, 2589, 2599, 2600, 2601, 2606, 2607, 2608, 2609, 2610,
- 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620,
- 2621, 2622, 2623, 2626, 2632, 2632, 2641, 2647, 2647, 2656,
- 2662, 2668, 2668, 2677, 2678, 2681, 2681, 2691, 2691, 2701,
- 2708, 2715, 2715, 2724, 2724, 2734, 2734, 2744, 2744, 2756,
- 2756, 2768, 2768, 2778, 2779, 2780, 2786, 2787, 2790, 2790,
- 2801, 2809, 2809, 2822, 2823, 2824, 2830, 2830, 2838, 2839,
- 2840, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2854, 2860,
- 2860, 2869, 2869, 2880, 2881, 2882, 2887, 2887, 2895, 2896,
- 2897, 2902, 2903, 2904, 2905, 2906, 2909, 2909, 2918, 2924,
- 2930, 2936, 2936, 2945, 2945, 2956, 2957, 2958, 2963, 2964,
- 2965, 2966, 2967, 2970, 2976, 2982, 2988
+ 0, 319, 319, 319, 320, 320, 321, 321, 322, 322,
+ 323, 323, 324, 324, 325, 325, 326, 326, 327, 327,
+ 328, 328, 329, 329, 330, 330, 331, 331, 339, 340,
+ 341, 342, 343, 344, 345, 348, 353, 353, 364, 367,
+ 368, 371, 376, 382, 387, 387, 394, 395, 398, 402,
+ 406, 412, 412, 419, 420, 423, 427, 431, 441, 450,
+ 450, 465, 465, 479, 482, 488, 488, 497, 498, 499,
+ 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, 560, 561, 562, 563, 564, 565,
+ 566, 567, 568, 569, 570, 571, 572, 573, 576, 582,
+ 588, 594, 600, 606, 612, 618, 624, 630, 636, 642,
+ 642, 651, 657, 657, 666, 672, 678, 684, 690, 696,
+ 702, 702, 711, 714, 717, 720, 723, 729, 729, 738,
+ 738, 747, 753, 759, 759, 768, 771, 774, 777, 782,
+ 788, 788, 797, 797, 806, 812, 818, 824, 830, 836,
+ 842, 848, 848, 860, 861, 862, 867, 868, 869, 870,
+ 871, 872, 873, 874, 875, 876, 879, 879, 888, 888,
+ 899, 899, 907, 908, 911, 911, 919, 921, 925, 931,
+ 937, 943, 949, 949, 962, 962, 973, 974, 975, 980,
+ 981, 984, 984, 1003, 1003, 1021, 1021, 1034, 1034, 1045,
+ 1046, 1049, 1050, 1051, 1056, 1056, 1066, 1067, 1068, 1073,
+ 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+ 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093,
+ 1094, 1097, 1097, 1105, 1106, 1107, 1110, 1110, 1119, 1119,
+ 1128, 1128, 1137, 1143, 1143, 1152, 1158, 1164, 1170, 1176,
+ 1182, 1188, 1194, 1200, 1206, 1206, 1214, 1215, 1216, 1219,
+ 1225, 1225, 1234, 1234, 1243, 1243, 1252, 1252, 1261, 1261,
+ 1272, 1273, 1274, 1279, 1280, 1281, 1282, 1283, 1286, 1291,
+ 1296, 1301, 1306, 1313, 1313, 1326, 1327, 1328, 1333, 1334,
+ 1335, 1336, 1337, 1338, 1341, 1347, 1353, 1359, 1359, 1370,
+ 1371, 1374, 1375, 1376, 1381, 1381, 1391, 1391, 1401, 1402,
+ 1403, 1406, 1409, 1410, 1413, 1413, 1422, 1422, 1431, 1431,
+ 1443, 1444, 1445, 1450, 1451, 1452, 1453, 1454, 1455, 1458,
+ 1464, 1470, 1476, 1482, 1488, 1497, 1497, 1511, 1512, 1515,
+ 1516, 1517, 1526, 1526, 1552, 1552, 1563, 1564, 1565, 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, 1608, 1609, 1610, 1611,
+ 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1622, 1622,
+ 1631, 1631, 1640, 1640, 1649, 1649, 1658, 1658, 1667, 1667,
+ 1676, 1676, 1687, 1693, 1699, 1705, 1705, 1713, 1714, 1715,
+ 1716, 1719, 1727, 1727, 1739, 1740, 1744, 1745, 1746, 1751,
+ 1751, 1759, 1760, 1761, 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, 1816, 1816,
+ 1830, 1830, 1839, 1840, 1843, 1844, 1845, 1852, 1852, 1867,
+ 1867, 1881, 1882, 1885, 1886, 1887, 1892, 1893, 1894, 1895,
+ 1896, 1897, 1898, 1899, 1900, 1901, 1904, 1906, 1912, 1914,
+ 1914, 1923, 1923, 1932, 1932, 1941, 1943, 1943, 1952, 1962,
+ 1962, 1975, 1976, 1981, 1982, 1983, 1990, 1990, 2002, 2002,
+ 2014, 2015, 2020, 2021, 2022, 2029, 2030, 2031, 2032, 2033,
+ 2034, 2035, 2036, 2037, 2038, 2041, 2043, 2043, 2052, 2054,
+ 2056, 2062, 2068, 2077, 2077, 2090, 2091, 2094, 2095, 2096,
+ 2101, 2101, 2111, 2111, 2121, 2122, 2123, 2128, 2129, 2130,
+ 2131, 2132, 2133, 2134, 2135, 2138, 2138, 2147, 2153, 2153,
+ 2178, 2178, 2208, 2208, 2219, 2220, 2223, 2224, 2225, 2230,
+ 2230, 2239, 2239, 2248, 2249, 2252, 2253, 2254, 2260, 2261,
+ 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271,
+ 2272, 2273, 2274, 2277, 2277, 2286, 2286, 2295, 2295, 2304,
+ 2304, 2313, 2313, 2324, 2324, 2333, 2333, 2342, 2342, 2351,
+ 2351, 2360, 2360, 2369, 2369, 2378, 2378, 2392, 2392, 2403,
+ 2404, 2410, 2410, 2421, 2422, 2423, 2428, 2428, 2438, 2439,
+ 2442, 2443, 2444, 2449, 2450, 2451, 2452, 2453, 2454, 2455,
+ 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2467,
+ 2469, 2469, 2478, 2478, 2487, 2495, 2503, 2503, 2514, 2515,
+ 2516, 2521, 2522, 2523, 2524, 2525, 2528, 2528, 2537, 2537,
+ 2549, 2549, 2562, 2563, 2564, 2569, 2570, 2571, 2572, 2573,
+ 2574, 2577, 2583, 2583, 2592, 2598, 2598, 2608, 2608, 2621,
+ 2621, 2631, 2632, 2633, 2638, 2639, 2640, 2641, 2642, 2643,
+ 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653,
+ 2654, 2655, 2658, 2664, 2664, 2673, 2679, 2679, 2688, 2694,
+ 2700, 2700, 2709, 2710, 2713, 2713, 2723, 2723, 2733, 2740,
+ 2747, 2747, 2756, 2756, 2766, 2766, 2776, 2776, 2788, 2788,
+ 2800, 2800, 2810, 2811, 2812, 2818, 2819, 2822, 2822, 2833,
+ 2841, 2841, 2854, 2855, 2856, 2862, 2862, 2870, 2871, 2872,
+ 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2886, 2892, 2892,
+ 2901, 2901, 2912, 2913, 2914, 2919, 2919, 2927, 2928, 2929,
+ 2934, 2935, 2936, 2937, 2938, 2941, 2941, 2950, 2956, 2962,
+ 2968, 2968, 2977, 2977, 2988, 2989, 2990, 2995, 2996, 2997,
+ 2998, 2999, 3002, 3008, 3014, 3020
};
void
#line 14 "dhcp4_parser.yy"
} } // isc::dhcp
-#line 6367 "dhcp4_parser.cc"
+#line 6439 "dhcp4_parser.cc"
-#line 2994 "dhcp4_parser.yy"
+#line 3026 "dhcp4_parser.yy"
void
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
// 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
// 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
#endif
# include "location.hh"
#include <typeinfo>
-#ifndef PARSER4__ASSERT
+#ifndef YY_ASSERT
# include <cassert>
-# define PARSER4__ASSERT assert
+# define YY_ASSERT assert
#endif
/* 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
#line 14 "dhcp4_parser.yy"
namespace isc { namespace dhcp {
-#line 210 "dhcp4_parser.h"
+#line 204 "dhcp4_parser.h"
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;
+ semantic_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
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)...);
}
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 ();
}
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);
}
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> ();
}
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> ();
}
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> ());
}
private:
#if YY_CPLUSPLUS < 201103L
/// Non copyable.
- value_type (const self_type&);
+ semantic_type (const self_type&);
/// Non copyable.
self_type& operator= (const self_type&);
#endif
T*
yyas_ () YY_NOEXCEPT
{
- void *yyp = yyraw_;
+ void *yyp = yybuffer_.yyraw;
return static_cast<T*> (yyp);
}
const T*
yyas_ () const YY_NOEXCEPT
{
- const void *yyp = yyraw_;
+ const void *yyp = yybuffer_.yyraw;
return static_cast<const T*> (yyp);
}
// value
// map_value
// ddns_replace_client_name_value
+ // ddns_conflict_resolution_mode_value
// socket_type
// outbound_interface_value
// db_type
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;
TOKEN_ARRAY = 359, // "array"
TOKEN_PARKED_PACKET_LIMIT = 360, // "parked-packet-limit"
TOKEN_ALLOCATOR = 361, // "allocator"
- TOKEN_SHARED_NETWORKS = 362, // "shared-networks"
- TOKEN_POOLS = 363, // "pools"
- TOKEN_POOL = 364, // "pool"
- TOKEN_USER_CONTEXT = 365, // "user-context"
- TOKEN_COMMENT = 366, // "comment"
- TOKEN_SUBNET = 367, // "subnet"
- TOKEN_INTERFACE = 368, // "interface"
- TOKEN_ID = 369, // "id"
- TOKEN_RESERVATION_MODE = 370, // "reservation-mode"
- TOKEN_DISABLED = 371, // "disabled"
- TOKEN_OUT_OF_POOL = 372, // "out-of-pool"
- TOKEN_GLOBAL = 373, // "global"
- TOKEN_ALL = 374, // "all"
- TOKEN_RESERVATIONS_GLOBAL = 375, // "reservations-global"
- TOKEN_RESERVATIONS_IN_SUBNET = 376, // "reservations-in-subnet"
- TOKEN_RESERVATIONS_OUT_OF_POOL = 377, // "reservations-out-of-pool"
- TOKEN_HOST_RESERVATION_IDENTIFIERS = 378, // "host-reservation-identifiers"
- TOKEN_CLIENT_CLASSES = 379, // "client-classes"
- TOKEN_REQUIRE_CLIENT_CLASSES = 380, // "require-client-classes"
- TOKEN_TEST = 381, // "test"
- TOKEN_TEMPLATE_TEST = 382, // "template-test"
- TOKEN_ONLY_IF_REQUIRED = 383, // "only-if-required"
- TOKEN_CLIENT_CLASS = 384, // "client-class"
- TOKEN_POOL_ID = 385, // "pool-id"
- TOKEN_RESERVATIONS = 386, // "reservations"
- TOKEN_DUID = 387, // "duid"
- TOKEN_HW_ADDRESS = 388, // "hw-address"
- TOKEN_CIRCUIT_ID = 389, // "circuit-id"
- TOKEN_CLIENT_ID = 390, // "client-id"
- TOKEN_HOSTNAME = 391, // "hostname"
- TOKEN_FLEX_ID = 392, // "flex-id"
- TOKEN_RELAY = 393, // "relay"
- TOKEN_IP_ADDRESS = 394, // "ip-address"
- TOKEN_IP_ADDRESSES = 395, // "ip-addresses"
- TOKEN_HOOKS_LIBRARIES = 396, // "hooks-libraries"
- TOKEN_LIBRARY = 397, // "library"
- TOKEN_PARAMETERS = 398, // "parameters"
- TOKEN_EXPIRED_LEASES_PROCESSING = 399, // "expired-leases-processing"
- TOKEN_RECLAIM_TIMER_WAIT_TIME = 400, // "reclaim-timer-wait-time"
- TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 401, // "flush-reclaimed-timer-wait-time"
- TOKEN_HOLD_RECLAIMED_TIME = 402, // "hold-reclaimed-time"
- TOKEN_MAX_RECLAIM_LEASES = 403, // "max-reclaim-leases"
- TOKEN_MAX_RECLAIM_TIME = 404, // "max-reclaim-time"
- TOKEN_UNWARNED_RECLAIM_CYCLES = 405, // "unwarned-reclaim-cycles"
- TOKEN_DHCP4O6_PORT = 406, // "dhcp4o6-port"
- TOKEN_DHCP_MULTI_THREADING = 407, // "multi-threading"
- TOKEN_ENABLE_MULTI_THREADING = 408, // "enable-multi-threading"
- TOKEN_THREAD_POOL_SIZE = 409, // "thread-pool-size"
- TOKEN_PACKET_QUEUE_SIZE = 410, // "packet-queue-size"
- TOKEN_CONTROL_SOCKET = 411, // "control-socket"
- TOKEN_SOCKET_TYPE = 412, // "socket-type"
- TOKEN_SOCKET_NAME = 413, // "socket-name"
- TOKEN_DHCP_QUEUE_CONTROL = 414, // "dhcp-queue-control"
- TOKEN_ENABLE_QUEUE = 415, // "enable-queue"
- TOKEN_QUEUE_TYPE = 416, // "queue-type"
- TOKEN_CAPACITY = 417, // "capacity"
- TOKEN_DHCP_DDNS = 418, // "dhcp-ddns"
- TOKEN_ENABLE_UPDATES = 419, // "enable-updates"
- TOKEN_QUALIFYING_SUFFIX = 420, // "qualifying-suffix"
- TOKEN_SERVER_IP = 421, // "server-ip"
- TOKEN_SERVER_PORT = 422, // "server-port"
- TOKEN_SENDER_IP = 423, // "sender-ip"
- TOKEN_SENDER_PORT = 424, // "sender-port"
- TOKEN_MAX_QUEUE_SIZE = 425, // "max-queue-size"
- TOKEN_NCR_PROTOCOL = 426, // "ncr-protocol"
- TOKEN_NCR_FORMAT = 427, // "ncr-format"
- TOKEN_OVERRIDE_NO_UPDATE = 428, // "override-no-update"
- TOKEN_OVERRIDE_CLIENT_UPDATE = 429, // "override-client-update"
- TOKEN_REPLACE_CLIENT_NAME = 430, // "replace-client-name"
- TOKEN_GENERATED_PREFIX = 431, // "generated-prefix"
- TOKEN_TCP = 432, // "tcp"
- TOKEN_JSON = 433, // "JSON"
- TOKEN_WHEN_PRESENT = 434, // "when-present"
- TOKEN_NEVER = 435, // "never"
- TOKEN_ALWAYS = 436, // "always"
- TOKEN_WHEN_NOT_PRESENT = 437, // "when-not-present"
- TOKEN_HOSTNAME_CHAR_SET = 438, // "hostname-char-set"
- TOKEN_HOSTNAME_CHAR_REPLACEMENT = 439, // "hostname-char-replacement"
- TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 440, // "early-global-reservations-lookup"
- TOKEN_IP_RESERVATIONS_UNIQUE = 441, // "ip-reservations-unique"
- TOKEN_RESERVATIONS_LOOKUP_FIRST = 442, // "reservations-lookup-first"
- TOKEN_LOGGERS = 443, // "loggers"
- TOKEN_OUTPUT_OPTIONS = 444, // "output_options"
- TOKEN_OUTPUT = 445, // "output"
- TOKEN_DEBUGLEVEL = 446, // "debuglevel"
- TOKEN_SEVERITY = 447, // "severity"
- TOKEN_FLUSH = 448, // "flush"
- TOKEN_MAXSIZE = 449, // "maxsize"
- TOKEN_MAXVER = 450, // "maxver"
- TOKEN_PATTERN = 451, // "pattern"
- TOKEN_COMPATIBILITY = 452, // "compatibility"
- TOKEN_LENIENT_OPTION_PARSING = 453, // "lenient-option-parsing"
- TOKEN_IGNORE_DHCP_SERVER_ID = 454, // "ignore-dhcp-server-identifier"
- TOKEN_IGNORE_RAI_LINK_SEL = 455, // "ignore-rai-link-selection"
- TOKEN_EXCLUDE_FIRST_LAST_24 = 456, // "exclude-first-last-24"
- TOKEN_TOPLEVEL_JSON = 457, // TOPLEVEL_JSON
- TOKEN_TOPLEVEL_DHCP4 = 458, // TOPLEVEL_DHCP4
- TOKEN_SUB_DHCP4 = 459, // SUB_DHCP4
- TOKEN_SUB_INTERFACES4 = 460, // SUB_INTERFACES4
- TOKEN_SUB_SUBNET4 = 461, // SUB_SUBNET4
- TOKEN_SUB_POOL4 = 462, // SUB_POOL4
- 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"
+ TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 362, // "ddns-conflict-resolution-mode"
+ TOKEN_CHECK_WITH_DHCID = 363, // "check-with-dhcid"
+ TOKEN_NO_CHECK_WITH_DHCID = 364, // "no-check-with-dhcid"
+ TOKEN_CHECK_EXISTS_WITH_DHCID = 365, // "check-exists-with-dhcid"
+ TOKEN_NO_CHECK_WITHOUT_DHCID = 366, // "no-check-without-dhcid"
+ TOKEN_SHARED_NETWORKS = 367, // "shared-networks"
+ TOKEN_POOLS = 368, // "pools"
+ TOKEN_POOL = 369, // "pool"
+ TOKEN_USER_CONTEXT = 370, // "user-context"
+ TOKEN_COMMENT = 371, // "comment"
+ TOKEN_SUBNET = 372, // "subnet"
+ TOKEN_INTERFACE = 373, // "interface"
+ TOKEN_ID = 374, // "id"
+ TOKEN_RESERVATION_MODE = 375, // "reservation-mode"
+ TOKEN_DISABLED = 376, // "disabled"
+ TOKEN_OUT_OF_POOL = 377, // "out-of-pool"
+ TOKEN_GLOBAL = 378, // "global"
+ TOKEN_ALL = 379, // "all"
+ TOKEN_RESERVATIONS_GLOBAL = 380, // "reservations-global"
+ TOKEN_RESERVATIONS_IN_SUBNET = 381, // "reservations-in-subnet"
+ TOKEN_RESERVATIONS_OUT_OF_POOL = 382, // "reservations-out-of-pool"
+ TOKEN_HOST_RESERVATION_IDENTIFIERS = 383, // "host-reservation-identifiers"
+ TOKEN_CLIENT_CLASSES = 384, // "client-classes"
+ TOKEN_REQUIRE_CLIENT_CLASSES = 385, // "require-client-classes"
+ TOKEN_TEST = 386, // "test"
+ TOKEN_TEMPLATE_TEST = 387, // "template-test"
+ TOKEN_ONLY_IF_REQUIRED = 388, // "only-if-required"
+ TOKEN_CLIENT_CLASS = 389, // "client-class"
+ TOKEN_POOL_ID = 390, // "pool-id"
+ TOKEN_RESERVATIONS = 391, // "reservations"
+ TOKEN_DUID = 392, // "duid"
+ TOKEN_HW_ADDRESS = 393, // "hw-address"
+ TOKEN_CIRCUIT_ID = 394, // "circuit-id"
+ TOKEN_CLIENT_ID = 395, // "client-id"
+ TOKEN_HOSTNAME = 396, // "hostname"
+ TOKEN_FLEX_ID = 397, // "flex-id"
+ TOKEN_RELAY = 398, // "relay"
+ TOKEN_IP_ADDRESS = 399, // "ip-address"
+ TOKEN_IP_ADDRESSES = 400, // "ip-addresses"
+ TOKEN_HOOKS_LIBRARIES = 401, // "hooks-libraries"
+ TOKEN_LIBRARY = 402, // "library"
+ TOKEN_PARAMETERS = 403, // "parameters"
+ TOKEN_EXPIRED_LEASES_PROCESSING = 404, // "expired-leases-processing"
+ TOKEN_RECLAIM_TIMER_WAIT_TIME = 405, // "reclaim-timer-wait-time"
+ TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 406, // "flush-reclaimed-timer-wait-time"
+ TOKEN_HOLD_RECLAIMED_TIME = 407, // "hold-reclaimed-time"
+ TOKEN_MAX_RECLAIM_LEASES = 408, // "max-reclaim-leases"
+ TOKEN_MAX_RECLAIM_TIME = 409, // "max-reclaim-time"
+ TOKEN_UNWARNED_RECLAIM_CYCLES = 410, // "unwarned-reclaim-cycles"
+ TOKEN_DHCP4O6_PORT = 411, // "dhcp4o6-port"
+ TOKEN_DHCP_MULTI_THREADING = 412, // "multi-threading"
+ TOKEN_ENABLE_MULTI_THREADING = 413, // "enable-multi-threading"
+ TOKEN_THREAD_POOL_SIZE = 414, // "thread-pool-size"
+ TOKEN_PACKET_QUEUE_SIZE = 415, // "packet-queue-size"
+ TOKEN_CONTROL_SOCKET = 416, // "control-socket"
+ TOKEN_SOCKET_TYPE = 417, // "socket-type"
+ TOKEN_SOCKET_NAME = 418, // "socket-name"
+ TOKEN_DHCP_QUEUE_CONTROL = 419, // "dhcp-queue-control"
+ TOKEN_ENABLE_QUEUE = 420, // "enable-queue"
+ TOKEN_QUEUE_TYPE = 421, // "queue-type"
+ TOKEN_CAPACITY = 422, // "capacity"
+ TOKEN_DHCP_DDNS = 423, // "dhcp-ddns"
+ TOKEN_ENABLE_UPDATES = 424, // "enable-updates"
+ TOKEN_QUALIFYING_SUFFIX = 425, // "qualifying-suffix"
+ TOKEN_SERVER_IP = 426, // "server-ip"
+ TOKEN_SERVER_PORT = 427, // "server-port"
+ TOKEN_SENDER_IP = 428, // "sender-ip"
+ TOKEN_SENDER_PORT = 429, // "sender-port"
+ TOKEN_MAX_QUEUE_SIZE = 430, // "max-queue-size"
+ TOKEN_NCR_PROTOCOL = 431, // "ncr-protocol"
+ TOKEN_NCR_FORMAT = 432, // "ncr-format"
+ TOKEN_OVERRIDE_NO_UPDATE = 433, // "override-no-update"
+ TOKEN_OVERRIDE_CLIENT_UPDATE = 434, // "override-client-update"
+ TOKEN_REPLACE_CLIENT_NAME = 435, // "replace-client-name"
+ TOKEN_GENERATED_PREFIX = 436, // "generated-prefix"
+ TOKEN_TCP = 437, // "tcp"
+ TOKEN_JSON = 438, // "JSON"
+ TOKEN_WHEN_PRESENT = 439, // "when-present"
+ TOKEN_NEVER = 440, // "never"
+ TOKEN_ALWAYS = 441, // "always"
+ TOKEN_WHEN_NOT_PRESENT = 442, // "when-not-present"
+ TOKEN_HOSTNAME_CHAR_SET = 443, // "hostname-char-set"
+ TOKEN_HOSTNAME_CHAR_REPLACEMENT = 444, // "hostname-char-replacement"
+ TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 445, // "early-global-reservations-lookup"
+ TOKEN_IP_RESERVATIONS_UNIQUE = 446, // "ip-reservations-unique"
+ TOKEN_RESERVATIONS_LOOKUP_FIRST = 447, // "reservations-lookup-first"
+ TOKEN_LOGGERS = 448, // "loggers"
+ TOKEN_OUTPUT_OPTIONS = 449, // "output_options"
+ TOKEN_OUTPUT = 450, // "output"
+ TOKEN_DEBUGLEVEL = 451, // "debuglevel"
+ TOKEN_SEVERITY = 452, // "severity"
+ TOKEN_FLUSH = 453, // "flush"
+ TOKEN_MAXSIZE = 454, // "maxsize"
+ TOKEN_MAXVER = 455, // "maxver"
+ TOKEN_PATTERN = 456, // "pattern"
+ TOKEN_COMPATIBILITY = 457, // "compatibility"
+ TOKEN_LENIENT_OPTION_PARSING = 458, // "lenient-option-parsing"
+ TOKEN_IGNORE_DHCP_SERVER_ID = 459, // "ignore-dhcp-server-identifier"
+ TOKEN_IGNORE_RAI_LINK_SEL = 460, // "ignore-rai-link-selection"
+ TOKEN_EXCLUDE_FIRST_LAST_24 = 461, // "exclude-first-last-24"
+ TOKEN_TOPLEVEL_JSON = 462, // TOPLEVEL_JSON
+ TOKEN_TOPLEVEL_DHCP4 = 463, // TOPLEVEL_DHCP4
+ TOKEN_SUB_DHCP4 = 464, // SUB_DHCP4
+ TOKEN_SUB_INTERFACES4 = 465, // SUB_INTERFACES4
+ TOKEN_SUB_SUBNET4 = 466, // SUB_SUBNET4
+ TOKEN_SUB_POOL4 = 467, // SUB_POOL4
+ TOKEN_SUB_RESERVATION = 468, // SUB_RESERVATION
+ TOKEN_SUB_OPTION_DEFS = 469, // SUB_OPTION_DEFS
+ TOKEN_SUB_OPTION_DEF = 470, // SUB_OPTION_DEF
+ TOKEN_SUB_OPTION_DATA = 471, // SUB_OPTION_DATA
+ TOKEN_SUB_HOOKS_LIBRARY = 472, // SUB_HOOKS_LIBRARY
+ TOKEN_SUB_DHCP_DDNS = 473, // SUB_DHCP_DDNS
+ TOKEN_SUB_CONFIG_CONTROL = 474, // SUB_CONFIG_CONTROL
+ TOKEN_STRING = 475, // "constant string"
+ TOKEN_INTEGER = 476, // "integer"
+ TOKEN_FLOAT = 477, // "floating point"
+ TOKEN_BOOLEAN = 478 // "boolean"
};
/// Backward compatibility alias (Bison 3.6).
typedef token_kind_type yytokentype;
};
/// Token kind, as returned by yylex.
- typedef token::token_kind_type token_kind_type;
+ typedef token::yytokentype token_kind_type;
/// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type;
{
enum symbol_kind_type
{
- YYNTOKENS = 219, ///< Number of tokens.
+ YYNTOKENS = 224, ///< Number of tokens.
S_YYEMPTY = -2,
S_YYEOF = 0, // "end of file"
S_YYerror = 1, // error
S_ARRAY = 104, // "array"
S_PARKED_PACKET_LIMIT = 105, // "parked-packet-limit"
S_ALLOCATOR = 106, // "allocator"
- S_SHARED_NETWORKS = 107, // "shared-networks"
- S_POOLS = 108, // "pools"
- S_POOL = 109, // "pool"
- S_USER_CONTEXT = 110, // "user-context"
- S_COMMENT = 111, // "comment"
- S_SUBNET = 112, // "subnet"
- S_INTERFACE = 113, // "interface"
- S_ID = 114, // "id"
- S_RESERVATION_MODE = 115, // "reservation-mode"
- S_DISABLED = 116, // "disabled"
- S_OUT_OF_POOL = 117, // "out-of-pool"
- S_GLOBAL = 118, // "global"
- S_ALL = 119, // "all"
- S_RESERVATIONS_GLOBAL = 120, // "reservations-global"
- S_RESERVATIONS_IN_SUBNET = 121, // "reservations-in-subnet"
- S_RESERVATIONS_OUT_OF_POOL = 122, // "reservations-out-of-pool"
- S_HOST_RESERVATION_IDENTIFIERS = 123, // "host-reservation-identifiers"
- S_CLIENT_CLASSES = 124, // "client-classes"
- S_REQUIRE_CLIENT_CLASSES = 125, // "require-client-classes"
- S_TEST = 126, // "test"
- S_TEMPLATE_TEST = 127, // "template-test"
- S_ONLY_IF_REQUIRED = 128, // "only-if-required"
- S_CLIENT_CLASS = 129, // "client-class"
- S_POOL_ID = 130, // "pool-id"
- S_RESERVATIONS = 131, // "reservations"
- S_DUID = 132, // "duid"
- S_HW_ADDRESS = 133, // "hw-address"
- S_CIRCUIT_ID = 134, // "circuit-id"
- S_CLIENT_ID = 135, // "client-id"
- S_HOSTNAME = 136, // "hostname"
- S_FLEX_ID = 137, // "flex-id"
- S_RELAY = 138, // "relay"
- S_IP_ADDRESS = 139, // "ip-address"
- S_IP_ADDRESSES = 140, // "ip-addresses"
- S_HOOKS_LIBRARIES = 141, // "hooks-libraries"
- S_LIBRARY = 142, // "library"
- S_PARAMETERS = 143, // "parameters"
- S_EXPIRED_LEASES_PROCESSING = 144, // "expired-leases-processing"
- S_RECLAIM_TIMER_WAIT_TIME = 145, // "reclaim-timer-wait-time"
- S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 146, // "flush-reclaimed-timer-wait-time"
- S_HOLD_RECLAIMED_TIME = 147, // "hold-reclaimed-time"
- S_MAX_RECLAIM_LEASES = 148, // "max-reclaim-leases"
- S_MAX_RECLAIM_TIME = 149, // "max-reclaim-time"
- S_UNWARNED_RECLAIM_CYCLES = 150, // "unwarned-reclaim-cycles"
- S_DHCP4O6_PORT = 151, // "dhcp4o6-port"
- S_DHCP_MULTI_THREADING = 152, // "multi-threading"
- S_ENABLE_MULTI_THREADING = 153, // "enable-multi-threading"
- S_THREAD_POOL_SIZE = 154, // "thread-pool-size"
- S_PACKET_QUEUE_SIZE = 155, // "packet-queue-size"
- S_CONTROL_SOCKET = 156, // "control-socket"
- S_SOCKET_TYPE = 157, // "socket-type"
- S_SOCKET_NAME = 158, // "socket-name"
- S_DHCP_QUEUE_CONTROL = 159, // "dhcp-queue-control"
- S_ENABLE_QUEUE = 160, // "enable-queue"
- S_QUEUE_TYPE = 161, // "queue-type"
- S_CAPACITY = 162, // "capacity"
- S_DHCP_DDNS = 163, // "dhcp-ddns"
- S_ENABLE_UPDATES = 164, // "enable-updates"
- S_QUALIFYING_SUFFIX = 165, // "qualifying-suffix"
- S_SERVER_IP = 166, // "server-ip"
- S_SERVER_PORT = 167, // "server-port"
- S_SENDER_IP = 168, // "sender-ip"
- S_SENDER_PORT = 169, // "sender-port"
- S_MAX_QUEUE_SIZE = 170, // "max-queue-size"
- S_NCR_PROTOCOL = 171, // "ncr-protocol"
- S_NCR_FORMAT = 172, // "ncr-format"
- S_OVERRIDE_NO_UPDATE = 173, // "override-no-update"
- S_OVERRIDE_CLIENT_UPDATE = 174, // "override-client-update"
- S_REPLACE_CLIENT_NAME = 175, // "replace-client-name"
- S_GENERATED_PREFIX = 176, // "generated-prefix"
- S_TCP = 177, // "tcp"
- S_JSON = 178, // "JSON"
- S_WHEN_PRESENT = 179, // "when-present"
- S_NEVER = 180, // "never"
- S_ALWAYS = 181, // "always"
- S_WHEN_NOT_PRESENT = 182, // "when-not-present"
- S_HOSTNAME_CHAR_SET = 183, // "hostname-char-set"
- S_HOSTNAME_CHAR_REPLACEMENT = 184, // "hostname-char-replacement"
- S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 185, // "early-global-reservations-lookup"
- S_IP_RESERVATIONS_UNIQUE = 186, // "ip-reservations-unique"
- S_RESERVATIONS_LOOKUP_FIRST = 187, // "reservations-lookup-first"
- S_LOGGERS = 188, // "loggers"
- S_OUTPUT_OPTIONS = 189, // "output_options"
- S_OUTPUT = 190, // "output"
- S_DEBUGLEVEL = 191, // "debuglevel"
- S_SEVERITY = 192, // "severity"
- S_FLUSH = 193, // "flush"
- S_MAXSIZE = 194, // "maxsize"
- S_MAXVER = 195, // "maxver"
- S_PATTERN = 196, // "pattern"
- S_COMPATIBILITY = 197, // "compatibility"
- S_LENIENT_OPTION_PARSING = 198, // "lenient-option-parsing"
- S_IGNORE_DHCP_SERVER_ID = 199, // "ignore-dhcp-server-identifier"
- S_IGNORE_RAI_LINK_SEL = 200, // "ignore-rai-link-selection"
- S_EXCLUDE_FIRST_LAST_24 = 201, // "exclude-first-last-24"
- S_TOPLEVEL_JSON = 202, // TOPLEVEL_JSON
- S_TOPLEVEL_DHCP4 = 203, // TOPLEVEL_DHCP4
- S_SUB_DHCP4 = 204, // SUB_DHCP4
- S_SUB_INTERFACES4 = 205, // SUB_INTERFACES4
- S_SUB_SUBNET4 = 206, // SUB_SUBNET4
- S_SUB_POOL4 = 207, // SUB_POOL4
- 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_value = 234, // value
- S_sub_json = 235, // sub_json
- S_map2 = 236, // map2
- S_237_14 = 237, // $@14
- S_map_value = 238, // map_value
- S_map_content = 239, // map_content
- S_not_empty_map = 240, // not_empty_map
- S_list_generic = 241, // list_generic
- S_242_15 = 242, // $@15
- S_list_content = 243, // list_content
- S_not_empty_list = 244, // not_empty_list
- S_list_strings = 245, // list_strings
- S_246_16 = 246, // $@16
- S_list_strings_content = 247, // list_strings_content
- S_not_empty_list_strings = 248, // not_empty_list_strings
- S_unknown_map_entry = 249, // unknown_map_entry
- S_syntax_map = 250, // syntax_map
- S_251_17 = 251, // $@17
- S_global_object = 252, // global_object
- S_253_18 = 253, // $@18
- S_global_object_comma = 254, // global_object_comma
- S_sub_dhcp4 = 255, // sub_dhcp4
- S_256_19 = 256, // $@19
- S_global_params = 257, // global_params
- S_global_param = 258, // global_param
- S_valid_lifetime = 259, // valid_lifetime
- S_min_valid_lifetime = 260, // min_valid_lifetime
- S_max_valid_lifetime = 261, // max_valid_lifetime
- S_renew_timer = 262, // renew_timer
- S_rebind_timer = 263, // rebind_timer
- S_calculate_tee_times = 264, // calculate_tee_times
- S_t1_percent = 265, // t1_percent
- S_t2_percent = 266, // t2_percent
- S_cache_threshold = 267, // cache_threshold
- S_cache_max_age = 268, // cache_max_age
- S_decline_probation_period = 269, // decline_probation_period
- S_server_tag = 270, // server_tag
- S_271_20 = 271, // $@20
- S_parked_packet_limit = 272, // parked_packet_limit
- S_allocator = 273, // allocator
- S_274_21 = 274, // $@21
- S_echo_client_id = 275, // echo_client_id
- S_match_client_id = 276, // match_client_id
- S_authoritative = 277, // authoritative
- S_ddns_send_updates = 278, // ddns_send_updates
- S_ddns_override_no_update = 279, // ddns_override_no_update
- S_ddns_override_client_update = 280, // ddns_override_client_update
- S_ddns_replace_client_name = 281, // ddns_replace_client_name
- S_282_22 = 282, // $@22
- S_ddns_replace_client_name_value = 283, // ddns_replace_client_name_value
- S_ddns_generated_prefix = 284, // ddns_generated_prefix
- S_285_23 = 285, // $@23
- S_ddns_qualifying_suffix = 286, // ddns_qualifying_suffix
- S_287_24 = 287, // $@24
- S_ddns_update_on_renew = 288, // ddns_update_on_renew
- S_ddns_use_conflict_resolution = 289, // ddns_use_conflict_resolution
- S_ddns_ttl_percent = 290, // ddns_ttl_percent
- S_hostname_char_set = 291, // hostname_char_set
- S_292_25 = 292, // $@25
- S_hostname_char_replacement = 293, // hostname_char_replacement
- S_294_26 = 294, // $@26
- S_store_extended_info = 295, // store_extended_info
- S_statistic_default_sample_count = 296, // statistic_default_sample_count
- S_statistic_default_sample_age = 297, // statistic_default_sample_age
- 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_offer_lifetime = 301, // offer_lifetime
- S_interfaces_config = 302, // interfaces_config
- S_303_27 = 303, // $@27
- S_interfaces_config_params = 304, // interfaces_config_params
- S_interfaces_config_param = 305, // interfaces_config_param
- S_sub_interfaces4 = 306, // sub_interfaces4
- S_307_28 = 307, // $@28
- S_interfaces_list = 308, // interfaces_list
- S_309_29 = 309, // $@29
- S_dhcp_socket_type = 310, // dhcp_socket_type
- S_311_30 = 311, // $@30
- S_socket_type = 312, // socket_type
- S_outbound_interface = 313, // outbound_interface
- S_314_31 = 314, // $@31
- S_outbound_interface_value = 315, // outbound_interface_value
- S_re_detect = 316, // re_detect
- S_service_sockets_require_all = 317, // service_sockets_require_all
- S_service_sockets_retry_wait_time = 318, // service_sockets_retry_wait_time
- S_service_sockets_max_retries = 319, // service_sockets_max_retries
- S_lease_database = 320, // lease_database
- S_321_32 = 321, // $@32
- S_sanity_checks = 322, // sanity_checks
- S_323_33 = 323, // $@33
- S_sanity_checks_params = 324, // sanity_checks_params
- S_sanity_checks_param = 325, // sanity_checks_param
- S_lease_checks = 326, // lease_checks
- S_327_34 = 327, // $@34
- S_extended_info_checks = 328, // extended_info_checks
- S_329_35 = 329, // $@35
- S_hosts_database = 330, // hosts_database
- S_331_36 = 331, // $@36
- S_hosts_databases = 332, // hosts_databases
- S_333_37 = 333, // $@37
- S_database_list = 334, // database_list
- S_not_empty_database_list = 335, // not_empty_database_list
- S_database = 336, // database
- S_337_38 = 337, // $@38
- S_database_map_params = 338, // database_map_params
- S_database_map_param = 339, // database_map_param
- S_database_type = 340, // database_type
- S_341_39 = 341, // $@39
- S_db_type = 342, // db_type
- S_user = 343, // user
- S_344_40 = 344, // $@40
- S_password = 345, // password
- S_346_41 = 346, // $@41
- S_host = 347, // host
- S_348_42 = 348, // $@42
- S_port = 349, // port
- S_name = 350, // name
- S_351_43 = 351, // $@43
- S_persist = 352, // persist
- S_lfc_interval = 353, // lfc_interval
- S_readonly = 354, // readonly
- S_connect_timeout = 355, // connect_timeout
- S_read_timeout = 356, // read_timeout
- S_write_timeout = 357, // write_timeout
- S_tcp_user_timeout = 358, // tcp_user_timeout
- S_max_reconnect_tries = 359, // max_reconnect_tries
- S_reconnect_wait_time = 360, // reconnect_wait_time
- S_on_fail = 361, // on_fail
- S_362_44 = 362, // $@44
- S_on_fail_mode = 363, // on_fail_mode
- S_max_row_errors = 364, // max_row_errors
- S_trust_anchor = 365, // trust_anchor
- S_366_45 = 366, // $@45
- S_cert_file = 367, // cert_file
- S_368_46 = 368, // $@46
- S_key_file = 369, // key_file
- S_370_47 = 370, // $@47
- S_cipher_list = 371, // cipher_list
- S_372_48 = 372, // $@48
- S_host_reservation_identifiers = 373, // host_reservation_identifiers
- S_374_49 = 374, // $@49
- S_host_reservation_identifiers_list = 375, // host_reservation_identifiers_list
- S_host_reservation_identifier = 376, // host_reservation_identifier
- S_duid_id = 377, // duid_id
- S_hw_address_id = 378, // hw_address_id
- S_circuit_id = 379, // circuit_id
- S_client_id = 380, // client_id
- S_flex_id = 381, // flex_id
- S_dhcp_multi_threading = 382, // dhcp_multi_threading
- S_383_50 = 383, // $@50
- S_multi_threading_params = 384, // multi_threading_params
- S_multi_threading_param = 385, // multi_threading_param
- S_enable_multi_threading = 386, // enable_multi_threading
- S_thread_pool_size = 387, // thread_pool_size
- S_packet_queue_size = 388, // packet_queue_size
- S_hooks_libraries = 389, // hooks_libraries
- S_390_51 = 390, // $@51
- S_hooks_libraries_list = 391, // hooks_libraries_list
- S_not_empty_hooks_libraries_list = 392, // not_empty_hooks_libraries_list
- S_hooks_library = 393, // hooks_library
- S_394_52 = 394, // $@52
- S_sub_hooks_library = 395, // sub_hooks_library
- S_396_53 = 396, // $@53
- S_hooks_params = 397, // hooks_params
- S_hooks_param = 398, // hooks_param
- S_library = 399, // library
- S_400_54 = 400, // $@54
- S_parameters = 401, // parameters
- S_402_55 = 402, // $@55
- S_expired_leases_processing = 403, // expired_leases_processing
- S_404_56 = 404, // $@56
- S_expired_leases_params = 405, // expired_leases_params
- S_expired_leases_param = 406, // expired_leases_param
- S_reclaim_timer_wait_time = 407, // reclaim_timer_wait_time
- S_flush_reclaimed_timer_wait_time = 408, // flush_reclaimed_timer_wait_time
- S_hold_reclaimed_time = 409, // hold_reclaimed_time
- S_max_reclaim_leases = 410, // max_reclaim_leases
- S_max_reclaim_time = 411, // max_reclaim_time
- S_unwarned_reclaim_cycles = 412, // unwarned_reclaim_cycles
- S_subnet4_list = 413, // subnet4_list
- S_414_57 = 414, // $@57
- S_subnet4_list_content = 415, // subnet4_list_content
- S_not_empty_subnet4_list = 416, // not_empty_subnet4_list
- S_subnet4 = 417, // subnet4
- S_418_58 = 418, // $@58
- S_sub_subnet4 = 419, // sub_subnet4
- S_420_59 = 420, // $@59
- S_subnet4_params = 421, // subnet4_params
- S_subnet4_param = 422, // subnet4_param
- S_subnet = 423, // subnet
- S_424_60 = 424, // $@60
- S_subnet_4o6_interface = 425, // subnet_4o6_interface
- S_426_61 = 426, // $@61
- S_subnet_4o6_interface_id = 427, // subnet_4o6_interface_id
- S_428_62 = 428, // $@62
- S_subnet_4o6_subnet = 429, // subnet_4o6_subnet
- S_430_63 = 430, // $@63
- S_interface = 431, // interface
- S_432_64 = 432, // $@64
- S_client_class = 433, // client_class
- S_434_65 = 434, // $@65
- S_require_client_classes = 435, // require_client_classes
- S_436_66 = 436, // $@66
- S_reservations_global = 437, // reservations_global
- S_reservations_in_subnet = 438, // reservations_in_subnet
- S_reservations_out_of_pool = 439, // reservations_out_of_pool
- S_reservation_mode = 440, // reservation_mode
- S_441_67 = 441, // $@67
- S_hr_mode = 442, // hr_mode
- S_id = 443, // id
- S_shared_networks = 444, // shared_networks
- S_445_68 = 445, // $@68
- S_shared_networks_content = 446, // shared_networks_content
- S_shared_networks_list = 447, // shared_networks_list
- S_shared_network = 448, // shared_network
- S_449_69 = 449, // $@69
- S_shared_network_params = 450, // shared_network_params
- S_shared_network_param = 451, // shared_network_param
- S_option_def_list = 452, // option_def_list
- S_453_70 = 453, // $@70
- S_sub_option_def_list = 454, // sub_option_def_list
- S_455_71 = 455, // $@71
- S_option_def_list_content = 456, // option_def_list_content
- S_not_empty_option_def_list = 457, // not_empty_option_def_list
- S_option_def_entry = 458, // option_def_entry
- S_459_72 = 459, // $@72
- S_sub_option_def = 460, // sub_option_def
- S_461_73 = 461, // $@73
- S_option_def_params = 462, // option_def_params
- S_not_empty_option_def_params = 463, // not_empty_option_def_params
- S_option_def_param = 464, // option_def_param
- S_option_def_name = 465, // option_def_name
- S_code = 466, // code
- S_option_def_code = 467, // option_def_code
- S_option_def_type = 468, // option_def_type
+ S_DDNS_CONFLICT_RESOLUTION_MODE = 107, // "ddns-conflict-resolution-mode"
+ S_CHECK_WITH_DHCID = 108, // "check-with-dhcid"
+ S_NO_CHECK_WITH_DHCID = 109, // "no-check-with-dhcid"
+ S_CHECK_EXISTS_WITH_DHCID = 110, // "check-exists-with-dhcid"
+ S_NO_CHECK_WITHOUT_DHCID = 111, // "no-check-without-dhcid"
+ S_SHARED_NETWORKS = 112, // "shared-networks"
+ S_POOLS = 113, // "pools"
+ S_POOL = 114, // "pool"
+ S_USER_CONTEXT = 115, // "user-context"
+ S_COMMENT = 116, // "comment"
+ S_SUBNET = 117, // "subnet"
+ S_INTERFACE = 118, // "interface"
+ S_ID = 119, // "id"
+ S_RESERVATION_MODE = 120, // "reservation-mode"
+ S_DISABLED = 121, // "disabled"
+ S_OUT_OF_POOL = 122, // "out-of-pool"
+ S_GLOBAL = 123, // "global"
+ S_ALL = 124, // "all"
+ S_RESERVATIONS_GLOBAL = 125, // "reservations-global"
+ S_RESERVATIONS_IN_SUBNET = 126, // "reservations-in-subnet"
+ S_RESERVATIONS_OUT_OF_POOL = 127, // "reservations-out-of-pool"
+ S_HOST_RESERVATION_IDENTIFIERS = 128, // "host-reservation-identifiers"
+ S_CLIENT_CLASSES = 129, // "client-classes"
+ S_REQUIRE_CLIENT_CLASSES = 130, // "require-client-classes"
+ S_TEST = 131, // "test"
+ S_TEMPLATE_TEST = 132, // "template-test"
+ S_ONLY_IF_REQUIRED = 133, // "only-if-required"
+ S_CLIENT_CLASS = 134, // "client-class"
+ S_POOL_ID = 135, // "pool-id"
+ S_RESERVATIONS = 136, // "reservations"
+ S_DUID = 137, // "duid"
+ S_HW_ADDRESS = 138, // "hw-address"
+ S_CIRCUIT_ID = 139, // "circuit-id"
+ S_CLIENT_ID = 140, // "client-id"
+ S_HOSTNAME = 141, // "hostname"
+ S_FLEX_ID = 142, // "flex-id"
+ S_RELAY = 143, // "relay"
+ S_IP_ADDRESS = 144, // "ip-address"
+ S_IP_ADDRESSES = 145, // "ip-addresses"
+ S_HOOKS_LIBRARIES = 146, // "hooks-libraries"
+ S_LIBRARY = 147, // "library"
+ S_PARAMETERS = 148, // "parameters"
+ S_EXPIRED_LEASES_PROCESSING = 149, // "expired-leases-processing"
+ S_RECLAIM_TIMER_WAIT_TIME = 150, // "reclaim-timer-wait-time"
+ S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 151, // "flush-reclaimed-timer-wait-time"
+ S_HOLD_RECLAIMED_TIME = 152, // "hold-reclaimed-time"
+ S_MAX_RECLAIM_LEASES = 153, // "max-reclaim-leases"
+ S_MAX_RECLAIM_TIME = 154, // "max-reclaim-time"
+ S_UNWARNED_RECLAIM_CYCLES = 155, // "unwarned-reclaim-cycles"
+ S_DHCP4O6_PORT = 156, // "dhcp4o6-port"
+ S_DHCP_MULTI_THREADING = 157, // "multi-threading"
+ S_ENABLE_MULTI_THREADING = 158, // "enable-multi-threading"
+ S_THREAD_POOL_SIZE = 159, // "thread-pool-size"
+ S_PACKET_QUEUE_SIZE = 160, // "packet-queue-size"
+ S_CONTROL_SOCKET = 161, // "control-socket"
+ S_SOCKET_TYPE = 162, // "socket-type"
+ S_SOCKET_NAME = 163, // "socket-name"
+ S_DHCP_QUEUE_CONTROL = 164, // "dhcp-queue-control"
+ S_ENABLE_QUEUE = 165, // "enable-queue"
+ S_QUEUE_TYPE = 166, // "queue-type"
+ S_CAPACITY = 167, // "capacity"
+ S_DHCP_DDNS = 168, // "dhcp-ddns"
+ S_ENABLE_UPDATES = 169, // "enable-updates"
+ S_QUALIFYING_SUFFIX = 170, // "qualifying-suffix"
+ S_SERVER_IP = 171, // "server-ip"
+ S_SERVER_PORT = 172, // "server-port"
+ S_SENDER_IP = 173, // "sender-ip"
+ S_SENDER_PORT = 174, // "sender-port"
+ S_MAX_QUEUE_SIZE = 175, // "max-queue-size"
+ S_NCR_PROTOCOL = 176, // "ncr-protocol"
+ S_NCR_FORMAT = 177, // "ncr-format"
+ S_OVERRIDE_NO_UPDATE = 178, // "override-no-update"
+ S_OVERRIDE_CLIENT_UPDATE = 179, // "override-client-update"
+ S_REPLACE_CLIENT_NAME = 180, // "replace-client-name"
+ S_GENERATED_PREFIX = 181, // "generated-prefix"
+ S_TCP = 182, // "tcp"
+ S_JSON = 183, // "JSON"
+ S_WHEN_PRESENT = 184, // "when-present"
+ S_NEVER = 185, // "never"
+ S_ALWAYS = 186, // "always"
+ S_WHEN_NOT_PRESENT = 187, // "when-not-present"
+ S_HOSTNAME_CHAR_SET = 188, // "hostname-char-set"
+ S_HOSTNAME_CHAR_REPLACEMENT = 189, // "hostname-char-replacement"
+ S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 190, // "early-global-reservations-lookup"
+ S_IP_RESERVATIONS_UNIQUE = 191, // "ip-reservations-unique"
+ S_RESERVATIONS_LOOKUP_FIRST = 192, // "reservations-lookup-first"
+ S_LOGGERS = 193, // "loggers"
+ S_OUTPUT_OPTIONS = 194, // "output_options"
+ S_OUTPUT = 195, // "output"
+ S_DEBUGLEVEL = 196, // "debuglevel"
+ S_SEVERITY = 197, // "severity"
+ S_FLUSH = 198, // "flush"
+ S_MAXSIZE = 199, // "maxsize"
+ S_MAXVER = 200, // "maxver"
+ S_PATTERN = 201, // "pattern"
+ S_COMPATIBILITY = 202, // "compatibility"
+ S_LENIENT_OPTION_PARSING = 203, // "lenient-option-parsing"
+ S_IGNORE_DHCP_SERVER_ID = 204, // "ignore-dhcp-server-identifier"
+ S_IGNORE_RAI_LINK_SEL = 205, // "ignore-rai-link-selection"
+ S_EXCLUDE_FIRST_LAST_24 = 206, // "exclude-first-last-24"
+ S_TOPLEVEL_JSON = 207, // TOPLEVEL_JSON
+ S_TOPLEVEL_DHCP4 = 208, // TOPLEVEL_DHCP4
+ S_SUB_DHCP4 = 209, // SUB_DHCP4
+ S_SUB_INTERFACES4 = 210, // SUB_INTERFACES4
+ S_SUB_SUBNET4 = 211, // SUB_SUBNET4
+ S_SUB_POOL4 = 212, // SUB_POOL4
+ S_SUB_RESERVATION = 213, // SUB_RESERVATION
+ S_SUB_OPTION_DEFS = 214, // SUB_OPTION_DEFS
+ S_SUB_OPTION_DEF = 215, // SUB_OPTION_DEF
+ S_SUB_OPTION_DATA = 216, // SUB_OPTION_DATA
+ S_SUB_HOOKS_LIBRARY = 217, // SUB_HOOKS_LIBRARY
+ S_SUB_DHCP_DDNS = 218, // SUB_DHCP_DDNS
+ S_SUB_CONFIG_CONTROL = 219, // SUB_CONFIG_CONTROL
+ S_STRING = 220, // "constant string"
+ S_INTEGER = 221, // "integer"
+ S_FLOAT = 222, // "floating point"
+ S_BOOLEAN = 223, // "boolean"
+ S_YYACCEPT = 224, // $accept
+ S_start = 225, // start
+ S_226_1 = 226, // $@1
+ S_227_2 = 227, // $@2
+ S_228_3 = 228, // $@3
+ S_229_4 = 229, // $@4
+ S_230_5 = 230, // $@5
+ S_231_6 = 231, // $@6
+ S_232_7 = 232, // $@7
+ S_233_8 = 233, // $@8
+ S_234_9 = 234, // $@9
+ S_235_10 = 235, // $@10
+ S_236_11 = 236, // $@11
+ S_237_12 = 237, // $@12
+ S_238_13 = 238, // $@13
+ S_value = 239, // value
+ S_sub_json = 240, // sub_json
+ S_map2 = 241, // map2
+ S_242_14 = 242, // $@14
+ S_map_value = 243, // map_value
+ S_map_content = 244, // map_content
+ S_not_empty_map = 245, // not_empty_map
+ S_list_generic = 246, // list_generic
+ S_247_15 = 247, // $@15
+ S_list_content = 248, // list_content
+ S_not_empty_list = 249, // not_empty_list
+ S_list_strings = 250, // list_strings
+ S_251_16 = 251, // $@16
+ S_list_strings_content = 252, // list_strings_content
+ S_not_empty_list_strings = 253, // not_empty_list_strings
+ S_unknown_map_entry = 254, // unknown_map_entry
+ S_syntax_map = 255, // syntax_map
+ S_256_17 = 256, // $@17
+ S_global_object = 257, // global_object
+ S_258_18 = 258, // $@18
+ S_global_object_comma = 259, // global_object_comma
+ S_sub_dhcp4 = 260, // sub_dhcp4
+ S_261_19 = 261, // $@19
+ S_global_params = 262, // global_params
+ S_global_param = 263, // global_param
+ S_valid_lifetime = 264, // valid_lifetime
+ S_min_valid_lifetime = 265, // min_valid_lifetime
+ S_max_valid_lifetime = 266, // max_valid_lifetime
+ S_renew_timer = 267, // renew_timer
+ S_rebind_timer = 268, // rebind_timer
+ S_calculate_tee_times = 269, // calculate_tee_times
+ S_t1_percent = 270, // t1_percent
+ S_t2_percent = 271, // t2_percent
+ S_cache_threshold = 272, // cache_threshold
+ S_cache_max_age = 273, // cache_max_age
+ S_decline_probation_period = 274, // decline_probation_period
+ S_server_tag = 275, // server_tag
+ S_276_20 = 276, // $@20
+ S_parked_packet_limit = 277, // parked_packet_limit
+ S_allocator = 278, // allocator
+ S_279_21 = 279, // $@21
+ S_echo_client_id = 280, // echo_client_id
+ S_match_client_id = 281, // match_client_id
+ S_authoritative = 282, // authoritative
+ S_ddns_send_updates = 283, // ddns_send_updates
+ S_ddns_override_no_update = 284, // ddns_override_no_update
+ S_ddns_override_client_update = 285, // ddns_override_client_update
+ S_ddns_replace_client_name = 286, // ddns_replace_client_name
+ S_287_22 = 287, // $@22
+ S_ddns_replace_client_name_value = 288, // ddns_replace_client_name_value
+ S_ddns_generated_prefix = 289, // ddns_generated_prefix
+ S_290_23 = 290, // $@23
+ S_ddns_qualifying_suffix = 291, // ddns_qualifying_suffix
+ S_292_24 = 292, // $@24
+ S_ddns_update_on_renew = 293, // ddns_update_on_renew
+ S_ddns_use_conflict_resolution = 294, // ddns_use_conflict_resolution
+ S_ddns_conflict_resolution_mode = 295, // ddns_conflict_resolution_mode
+ S_296_25 = 296, // $@25
+ S_ddns_conflict_resolution_mode_value = 297, // ddns_conflict_resolution_mode_value
+ S_ddns_ttl_percent = 298, // ddns_ttl_percent
+ S_hostname_char_set = 299, // hostname_char_set
+ S_300_26 = 300, // $@26
+ S_hostname_char_replacement = 301, // hostname_char_replacement
+ S_302_27 = 302, // $@27
+ S_store_extended_info = 303, // store_extended_info
+ S_statistic_default_sample_count = 304, // statistic_default_sample_count
+ S_statistic_default_sample_age = 305, // statistic_default_sample_age
+ S_early_global_reservations_lookup = 306, // early_global_reservations_lookup
+ S_ip_reservations_unique = 307, // ip_reservations_unique
+ S_reservations_lookup_first = 308, // reservations_lookup_first
+ S_offer_lifetime = 309, // offer_lifetime
+ S_interfaces_config = 310, // interfaces_config
+ S_311_28 = 311, // $@28
+ S_interfaces_config_params = 312, // interfaces_config_params
+ S_interfaces_config_param = 313, // interfaces_config_param
+ S_sub_interfaces4 = 314, // sub_interfaces4
+ S_315_29 = 315, // $@29
+ S_interfaces_list = 316, // interfaces_list
+ S_317_30 = 317, // $@30
+ S_dhcp_socket_type = 318, // dhcp_socket_type
+ S_319_31 = 319, // $@31
+ S_socket_type = 320, // socket_type
+ S_outbound_interface = 321, // outbound_interface
+ S_322_32 = 322, // $@32
+ S_outbound_interface_value = 323, // outbound_interface_value
+ S_re_detect = 324, // re_detect
+ S_service_sockets_require_all = 325, // service_sockets_require_all
+ S_service_sockets_retry_wait_time = 326, // service_sockets_retry_wait_time
+ S_service_sockets_max_retries = 327, // service_sockets_max_retries
+ S_lease_database = 328, // lease_database
+ S_329_33 = 329, // $@33
+ S_sanity_checks = 330, // sanity_checks
+ S_331_34 = 331, // $@34
+ S_sanity_checks_params = 332, // sanity_checks_params
+ S_sanity_checks_param = 333, // sanity_checks_param
+ S_lease_checks = 334, // lease_checks
+ S_335_35 = 335, // $@35
+ S_extended_info_checks = 336, // extended_info_checks
+ S_337_36 = 337, // $@36
+ S_hosts_database = 338, // hosts_database
+ S_339_37 = 339, // $@37
+ S_hosts_databases = 340, // hosts_databases
+ S_341_38 = 341, // $@38
+ S_database_list = 342, // database_list
+ S_not_empty_database_list = 343, // not_empty_database_list
+ S_database = 344, // database
+ S_345_39 = 345, // $@39
+ S_database_map_params = 346, // database_map_params
+ S_database_map_param = 347, // database_map_param
+ S_database_type = 348, // database_type
+ S_349_40 = 349, // $@40
+ S_db_type = 350, // db_type
+ S_user = 351, // user
+ S_352_41 = 352, // $@41
+ S_password = 353, // password
+ S_354_42 = 354, // $@42
+ S_host = 355, // host
+ S_356_43 = 356, // $@43
+ S_port = 357, // port
+ S_name = 358, // name
+ S_359_44 = 359, // $@44
+ S_persist = 360, // persist
+ S_lfc_interval = 361, // lfc_interval
+ S_readonly = 362, // readonly
+ S_connect_timeout = 363, // connect_timeout
+ S_read_timeout = 364, // read_timeout
+ S_write_timeout = 365, // write_timeout
+ S_tcp_user_timeout = 366, // tcp_user_timeout
+ S_max_reconnect_tries = 367, // max_reconnect_tries
+ S_reconnect_wait_time = 368, // reconnect_wait_time
+ S_on_fail = 369, // on_fail
+ S_370_45 = 370, // $@45
+ S_on_fail_mode = 371, // on_fail_mode
+ S_max_row_errors = 372, // max_row_errors
+ S_trust_anchor = 373, // trust_anchor
+ S_374_46 = 374, // $@46
+ S_cert_file = 375, // cert_file
+ S_376_47 = 376, // $@47
+ S_key_file = 377, // key_file
+ S_378_48 = 378, // $@48
+ S_cipher_list = 379, // cipher_list
+ S_380_49 = 380, // $@49
+ S_host_reservation_identifiers = 381, // host_reservation_identifiers
+ S_382_50 = 382, // $@50
+ S_host_reservation_identifiers_list = 383, // host_reservation_identifiers_list
+ S_host_reservation_identifier = 384, // host_reservation_identifier
+ S_duid_id = 385, // duid_id
+ S_hw_address_id = 386, // hw_address_id
+ S_circuit_id = 387, // circuit_id
+ S_client_id = 388, // client_id
+ S_flex_id = 389, // flex_id
+ S_dhcp_multi_threading = 390, // dhcp_multi_threading
+ S_391_51 = 391, // $@51
+ S_multi_threading_params = 392, // multi_threading_params
+ S_multi_threading_param = 393, // multi_threading_param
+ S_enable_multi_threading = 394, // enable_multi_threading
+ S_thread_pool_size = 395, // thread_pool_size
+ S_packet_queue_size = 396, // packet_queue_size
+ S_hooks_libraries = 397, // hooks_libraries
+ S_398_52 = 398, // $@52
+ S_hooks_libraries_list = 399, // hooks_libraries_list
+ S_not_empty_hooks_libraries_list = 400, // not_empty_hooks_libraries_list
+ S_hooks_library = 401, // hooks_library
+ S_402_53 = 402, // $@53
+ S_sub_hooks_library = 403, // sub_hooks_library
+ S_404_54 = 404, // $@54
+ S_hooks_params = 405, // hooks_params
+ S_hooks_param = 406, // hooks_param
+ S_library = 407, // library
+ S_408_55 = 408, // $@55
+ S_parameters = 409, // parameters
+ S_410_56 = 410, // $@56
+ S_expired_leases_processing = 411, // expired_leases_processing
+ S_412_57 = 412, // $@57
+ S_expired_leases_params = 413, // expired_leases_params
+ S_expired_leases_param = 414, // expired_leases_param
+ S_reclaim_timer_wait_time = 415, // reclaim_timer_wait_time
+ S_flush_reclaimed_timer_wait_time = 416, // flush_reclaimed_timer_wait_time
+ S_hold_reclaimed_time = 417, // hold_reclaimed_time
+ S_max_reclaim_leases = 418, // max_reclaim_leases
+ S_max_reclaim_time = 419, // max_reclaim_time
+ S_unwarned_reclaim_cycles = 420, // unwarned_reclaim_cycles
+ S_subnet4_list = 421, // subnet4_list
+ S_422_58 = 422, // $@58
+ S_subnet4_list_content = 423, // subnet4_list_content
+ S_not_empty_subnet4_list = 424, // not_empty_subnet4_list
+ S_subnet4 = 425, // subnet4
+ S_426_59 = 426, // $@59
+ S_sub_subnet4 = 427, // sub_subnet4
+ S_428_60 = 428, // $@60
+ S_subnet4_params = 429, // subnet4_params
+ S_subnet4_param = 430, // subnet4_param
+ S_subnet = 431, // subnet
+ S_432_61 = 432, // $@61
+ S_subnet_4o6_interface = 433, // subnet_4o6_interface
+ S_434_62 = 434, // $@62
+ S_subnet_4o6_interface_id = 435, // subnet_4o6_interface_id
+ S_436_63 = 436, // $@63
+ S_subnet_4o6_subnet = 437, // subnet_4o6_subnet
+ S_438_64 = 438, // $@64
+ S_interface = 439, // interface
+ S_440_65 = 440, // $@65
+ S_client_class = 441, // client_class
+ S_442_66 = 442, // $@66
+ S_require_client_classes = 443, // require_client_classes
+ S_444_67 = 444, // $@67
+ S_reservations_global = 445, // reservations_global
+ S_reservations_in_subnet = 446, // reservations_in_subnet
+ S_reservations_out_of_pool = 447, // reservations_out_of_pool
+ S_reservation_mode = 448, // reservation_mode
+ S_449_68 = 449, // $@68
+ S_hr_mode = 450, // hr_mode
+ S_id = 451, // id
+ S_shared_networks = 452, // shared_networks
+ S_453_69 = 453, // $@69
+ S_shared_networks_content = 454, // shared_networks_content
+ S_shared_networks_list = 455, // shared_networks_list
+ S_shared_network = 456, // shared_network
+ S_457_70 = 457, // $@70
+ S_shared_network_params = 458, // shared_network_params
+ S_shared_network_param = 459, // shared_network_param
+ S_option_def_list = 460, // option_def_list
+ S_461_71 = 461, // $@71
+ S_sub_option_def_list = 462, // sub_option_def_list
+ S_463_72 = 463, // $@72
+ S_option_def_list_content = 464, // option_def_list_content
+ S_not_empty_option_def_list = 465, // not_empty_option_def_list
+ S_option_def_entry = 466, // option_def_entry
+ S_467_73 = 467, // $@73
+ S_sub_option_def = 468, // sub_option_def
S_469_74 = 469, // $@74
- S_option_def_record_types = 470, // option_def_record_types
- S_471_75 = 471, // $@75
- S_space = 472, // space
- S_473_76 = 473, // $@76
- S_option_def_space = 474, // option_def_space
- S_option_def_encapsulate = 475, // option_def_encapsulate
- S_476_77 = 476, // $@77
- S_option_def_array = 477, // option_def_array
- S_option_data_list = 478, // option_data_list
- S_479_78 = 479, // $@78
- S_option_data_list_content = 480, // option_data_list_content
- S_not_empty_option_data_list = 481, // not_empty_option_data_list
- S_option_data_entry = 482, // option_data_entry
- S_483_79 = 483, // $@79
- S_sub_option_data = 484, // sub_option_data
- S_485_80 = 485, // $@80
- S_option_data_params = 486, // option_data_params
- S_not_empty_option_data_params = 487, // not_empty_option_data_params
- S_option_data_param = 488, // option_data_param
- S_option_data_name = 489, // option_data_name
- S_option_data_data = 490, // option_data_data
- S_491_81 = 491, // $@81
- S_option_data_code = 492, // option_data_code
- S_option_data_space = 493, // option_data_space
- S_option_data_csv_format = 494, // option_data_csv_format
- S_option_data_always_send = 495, // option_data_always_send
- S_option_data_never_send = 496, // option_data_never_send
- S_pools_list = 497, // pools_list
- S_498_82 = 498, // $@82
- S_pools_list_content = 499, // pools_list_content
- S_not_empty_pools_list = 500, // not_empty_pools_list
- S_pool_list_entry = 501, // pool_list_entry
- S_502_83 = 502, // $@83
- S_sub_pool4 = 503, // sub_pool4
- S_504_84 = 504, // $@84
- S_pool_params = 505, // pool_params
- S_pool_param = 506, // pool_param
- S_pool_entry = 507, // pool_entry
- S_508_85 = 508, // $@85
- S_pool_id = 509, // pool_id
- S_user_context = 510, // user_context
- S_511_86 = 511, // $@86
- S_comment = 512, // comment
- S_513_87 = 513, // $@87
- S_reservations = 514, // reservations
- S_515_88 = 515, // $@88
- S_reservations_list = 516, // reservations_list
- S_not_empty_reservations_list = 517, // not_empty_reservations_list
- S_reservation = 518, // reservation
- S_519_89 = 519, // $@89
- S_sub_reservation = 520, // sub_reservation
- S_521_90 = 521, // $@90
- S_reservation_params = 522, // reservation_params
- S_not_empty_reservation_params = 523, // not_empty_reservation_params
- S_reservation_param = 524, // reservation_param
- S_next_server = 525, // next_server
- S_526_91 = 526, // $@91
- S_server_hostname = 527, // server_hostname
- S_528_92 = 528, // $@92
- S_boot_file_name = 529, // boot_file_name
- S_530_93 = 530, // $@93
- S_ip_address = 531, // ip_address
- S_532_94 = 532, // $@94
- S_ip_addresses = 533, // ip_addresses
- S_534_95 = 534, // $@95
- S_duid = 535, // duid
- S_536_96 = 536, // $@96
- S_hw_address = 537, // hw_address
- S_538_97 = 538, // $@97
- S_client_id_value = 539, // client_id_value
- S_540_98 = 540, // $@98
- S_circuit_id_value = 541, // circuit_id_value
- S_542_99 = 542, // $@99
- S_flex_id_value = 543, // flex_id_value
- S_544_100 = 544, // $@100
- S_hostname = 545, // hostname
- S_546_101 = 546, // $@101
- S_reservation_client_classes = 547, // reservation_client_classes
- S_548_102 = 548, // $@102
- S_relay = 549, // relay
- S_550_103 = 550, // $@103
- S_relay_map = 551, // relay_map
- S_client_classes = 552, // client_classes
- S_553_104 = 553, // $@104
- S_client_classes_list = 554, // client_classes_list
- S_client_class_entry = 555, // client_class_entry
- S_556_105 = 556, // $@105
- S_client_class_params = 557, // client_class_params
- S_not_empty_client_class_params = 558, // not_empty_client_class_params
- S_client_class_param = 559, // client_class_param
- S_client_class_name = 560, // client_class_name
- S_client_class_test = 561, // client_class_test
- S_562_106 = 562, // $@106
- S_client_class_template_test = 563, // client_class_template_test
- S_564_107 = 564, // $@107
- S_only_if_required = 565, // only_if_required
- S_dhcp4o6_port = 566, // dhcp4o6_port
- S_control_socket = 567, // control_socket
- S_568_108 = 568, // $@108
- S_control_socket_params = 569, // control_socket_params
- S_control_socket_param = 570, // control_socket_param
- S_control_socket_type = 571, // control_socket_type
- S_572_109 = 572, // $@109
- S_control_socket_name = 573, // control_socket_name
- S_574_110 = 574, // $@110
- S_dhcp_queue_control = 575, // dhcp_queue_control
- S_576_111 = 576, // $@111
- S_queue_control_params = 577, // queue_control_params
- S_queue_control_param = 578, // queue_control_param
- S_enable_queue = 579, // enable_queue
- S_queue_type = 580, // queue_type
- S_581_112 = 581, // $@112
- S_capacity = 582, // capacity
- S_arbitrary_map_entry = 583, // arbitrary_map_entry
- S_584_113 = 584, // $@113
- S_dhcp_ddns = 585, // dhcp_ddns
- S_586_114 = 586, // $@114
- S_sub_dhcp_ddns = 587, // sub_dhcp_ddns
- S_588_115 = 588, // $@115
- S_dhcp_ddns_params = 589, // dhcp_ddns_params
- S_dhcp_ddns_param = 590, // dhcp_ddns_param
- S_enable_updates = 591, // enable_updates
- S_server_ip = 592, // server_ip
- S_593_116 = 593, // $@116
- S_server_port = 594, // server_port
- S_sender_ip = 595, // sender_ip
- S_596_117 = 596, // $@117
- S_sender_port = 597, // sender_port
- S_max_queue_size = 598, // max_queue_size
- S_ncr_protocol = 599, // ncr_protocol
- S_600_118 = 600, // $@118
- S_ncr_protocol_value = 601, // ncr_protocol_value
- S_ncr_format = 602, // ncr_format
- S_603_119 = 603, // $@119
- S_dep_qualifying_suffix = 604, // dep_qualifying_suffix
- S_605_120 = 605, // $@120
- S_dep_override_no_update = 606, // dep_override_no_update
- S_dep_override_client_update = 607, // dep_override_client_update
- S_dep_replace_client_name = 608, // dep_replace_client_name
- S_609_121 = 609, // $@121
- S_dep_generated_prefix = 610, // dep_generated_prefix
- S_611_122 = 611, // $@122
- S_dep_hostname_char_set = 612, // dep_hostname_char_set
- S_613_123 = 613, // $@123
- S_dep_hostname_char_replacement = 614, // dep_hostname_char_replacement
- S_615_124 = 615, // $@124
- S_config_control = 616, // config_control
- S_617_125 = 617, // $@125
- S_sub_config_control = 618, // sub_config_control
- S_619_126 = 619, // $@126
- S_config_control_params = 620, // config_control_params
- S_config_control_param = 621, // config_control_param
- S_config_databases = 622, // config_databases
- S_623_127 = 623, // $@127
- S_config_fetch_wait_time = 624, // config_fetch_wait_time
- S_loggers = 625, // loggers
- S_626_128 = 626, // $@128
- S_loggers_entries = 627, // loggers_entries
- S_logger_entry = 628, // logger_entry
- S_629_129 = 629, // $@129
- S_logger_params = 630, // logger_params
- S_logger_param = 631, // logger_param
- S_debuglevel = 632, // debuglevel
- S_severity = 633, // severity
- S_634_130 = 634, // $@130
- S_output_options_list = 635, // output_options_list
- S_636_131 = 636, // $@131
- S_output_options_list_content = 637, // output_options_list_content
- S_output_entry = 638, // output_entry
- S_639_132 = 639, // $@132
- S_output_params_list = 640, // output_params_list
- S_output_params = 641, // output_params
- S_output = 642, // output
- S_643_133 = 643, // $@133
- S_flush = 644, // flush
- S_maxsize = 645, // maxsize
- S_maxver = 646, // maxver
- S_pattern = 647, // pattern
- S_648_134 = 648, // $@134
- S_compatibility = 649, // compatibility
- S_650_135 = 650, // $@135
- S_compatibility_params = 651, // compatibility_params
- S_compatibility_param = 652, // compatibility_param
- S_lenient_option_parsing = 653, // lenient_option_parsing
- S_ignore_dhcp_server_identifier = 654, // ignore_dhcp_server_identifier
- S_ignore_rai_link_selection = 655, // ignore_rai_link_selection
- S_exclude_first_last_24 = 656 // exclude_first_last_24
+ S_option_def_params = 470, // option_def_params
+ S_not_empty_option_def_params = 471, // not_empty_option_def_params
+ S_option_def_param = 472, // option_def_param
+ S_option_def_name = 473, // option_def_name
+ S_code = 474, // code
+ S_option_def_code = 475, // option_def_code
+ S_option_def_type = 476, // option_def_type
+ S_477_75 = 477, // $@75
+ S_option_def_record_types = 478, // option_def_record_types
+ S_479_76 = 479, // $@76
+ S_space = 480, // space
+ S_481_77 = 481, // $@77
+ S_option_def_space = 482, // option_def_space
+ S_option_def_encapsulate = 483, // option_def_encapsulate
+ S_484_78 = 484, // $@78
+ S_option_def_array = 485, // option_def_array
+ S_option_data_list = 486, // option_data_list
+ S_487_79 = 487, // $@79
+ S_option_data_list_content = 488, // option_data_list_content
+ S_not_empty_option_data_list = 489, // not_empty_option_data_list
+ S_option_data_entry = 490, // option_data_entry
+ S_491_80 = 491, // $@80
+ S_sub_option_data = 492, // sub_option_data
+ S_493_81 = 493, // $@81
+ S_option_data_params = 494, // option_data_params
+ S_not_empty_option_data_params = 495, // not_empty_option_data_params
+ S_option_data_param = 496, // option_data_param
+ S_option_data_name = 497, // option_data_name
+ S_option_data_data = 498, // option_data_data
+ S_499_82 = 499, // $@82
+ S_option_data_code = 500, // option_data_code
+ S_option_data_space = 501, // option_data_space
+ S_option_data_csv_format = 502, // option_data_csv_format
+ S_option_data_always_send = 503, // option_data_always_send
+ S_option_data_never_send = 504, // option_data_never_send
+ S_pools_list = 505, // pools_list
+ S_506_83 = 506, // $@83
+ S_pools_list_content = 507, // pools_list_content
+ S_not_empty_pools_list = 508, // not_empty_pools_list
+ S_pool_list_entry = 509, // pool_list_entry
+ S_510_84 = 510, // $@84
+ S_sub_pool4 = 511, // sub_pool4
+ S_512_85 = 512, // $@85
+ S_pool_params = 513, // pool_params
+ S_pool_param = 514, // pool_param
+ S_pool_entry = 515, // pool_entry
+ S_516_86 = 516, // $@86
+ S_pool_id = 517, // pool_id
+ S_user_context = 518, // user_context
+ S_519_87 = 519, // $@87
+ S_comment = 520, // comment
+ S_521_88 = 521, // $@88
+ S_reservations = 522, // reservations
+ S_523_89 = 523, // $@89
+ S_reservations_list = 524, // reservations_list
+ S_not_empty_reservations_list = 525, // not_empty_reservations_list
+ S_reservation = 526, // reservation
+ S_527_90 = 527, // $@90
+ S_sub_reservation = 528, // sub_reservation
+ S_529_91 = 529, // $@91
+ S_reservation_params = 530, // reservation_params
+ S_not_empty_reservation_params = 531, // not_empty_reservation_params
+ S_reservation_param = 532, // reservation_param
+ S_next_server = 533, // next_server
+ S_534_92 = 534, // $@92
+ S_server_hostname = 535, // server_hostname
+ S_536_93 = 536, // $@93
+ S_boot_file_name = 537, // boot_file_name
+ S_538_94 = 538, // $@94
+ S_ip_address = 539, // ip_address
+ S_540_95 = 540, // $@95
+ S_ip_addresses = 541, // ip_addresses
+ S_542_96 = 542, // $@96
+ S_duid = 543, // duid
+ S_544_97 = 544, // $@97
+ S_hw_address = 545, // hw_address
+ S_546_98 = 546, // $@98
+ S_client_id_value = 547, // client_id_value
+ S_548_99 = 548, // $@99
+ S_circuit_id_value = 549, // circuit_id_value
+ S_550_100 = 550, // $@100
+ S_flex_id_value = 551, // flex_id_value
+ S_552_101 = 552, // $@101
+ S_hostname = 553, // hostname
+ S_554_102 = 554, // $@102
+ S_reservation_client_classes = 555, // reservation_client_classes
+ S_556_103 = 556, // $@103
+ S_relay = 557, // relay
+ S_558_104 = 558, // $@104
+ S_relay_map = 559, // relay_map
+ S_client_classes = 560, // client_classes
+ S_561_105 = 561, // $@105
+ S_client_classes_list = 562, // client_classes_list
+ S_client_class_entry = 563, // client_class_entry
+ S_564_106 = 564, // $@106
+ S_client_class_params = 565, // client_class_params
+ S_not_empty_client_class_params = 566, // not_empty_client_class_params
+ S_client_class_param = 567, // client_class_param
+ S_client_class_name = 568, // client_class_name
+ S_client_class_test = 569, // client_class_test
+ S_570_107 = 570, // $@107
+ S_client_class_template_test = 571, // client_class_template_test
+ S_572_108 = 572, // $@108
+ S_only_if_required = 573, // only_if_required
+ S_dhcp4o6_port = 574, // dhcp4o6_port
+ S_control_socket = 575, // control_socket
+ S_576_109 = 576, // $@109
+ S_control_socket_params = 577, // control_socket_params
+ S_control_socket_param = 578, // control_socket_param
+ S_control_socket_type = 579, // control_socket_type
+ S_580_110 = 580, // $@110
+ S_control_socket_name = 581, // control_socket_name
+ S_582_111 = 582, // $@111
+ S_dhcp_queue_control = 583, // dhcp_queue_control
+ S_584_112 = 584, // $@112
+ S_queue_control_params = 585, // queue_control_params
+ S_queue_control_param = 586, // queue_control_param
+ S_enable_queue = 587, // enable_queue
+ S_queue_type = 588, // queue_type
+ S_589_113 = 589, // $@113
+ S_capacity = 590, // capacity
+ S_arbitrary_map_entry = 591, // arbitrary_map_entry
+ S_592_114 = 592, // $@114
+ S_dhcp_ddns = 593, // dhcp_ddns
+ S_594_115 = 594, // $@115
+ S_sub_dhcp_ddns = 595, // sub_dhcp_ddns
+ S_596_116 = 596, // $@116
+ S_dhcp_ddns_params = 597, // dhcp_ddns_params
+ S_dhcp_ddns_param = 598, // dhcp_ddns_param
+ S_enable_updates = 599, // enable_updates
+ S_server_ip = 600, // server_ip
+ S_601_117 = 601, // $@117
+ S_server_port = 602, // server_port
+ S_sender_ip = 603, // sender_ip
+ S_604_118 = 604, // $@118
+ S_sender_port = 605, // sender_port
+ S_max_queue_size = 606, // max_queue_size
+ S_ncr_protocol = 607, // ncr_protocol
+ S_608_119 = 608, // $@119
+ S_ncr_protocol_value = 609, // ncr_protocol_value
+ S_ncr_format = 610, // ncr_format
+ S_611_120 = 611, // $@120
+ S_dep_qualifying_suffix = 612, // dep_qualifying_suffix
+ S_613_121 = 613, // $@121
+ S_dep_override_no_update = 614, // dep_override_no_update
+ S_dep_override_client_update = 615, // dep_override_client_update
+ S_dep_replace_client_name = 616, // dep_replace_client_name
+ S_617_122 = 617, // $@122
+ S_dep_generated_prefix = 618, // dep_generated_prefix
+ S_619_123 = 619, // $@123
+ S_dep_hostname_char_set = 620, // dep_hostname_char_set
+ S_621_124 = 621, // $@124
+ S_dep_hostname_char_replacement = 622, // dep_hostname_char_replacement
+ S_623_125 = 623, // $@125
+ S_config_control = 624, // config_control
+ S_625_126 = 625, // $@126
+ S_sub_config_control = 626, // sub_config_control
+ S_627_127 = 627, // $@127
+ S_config_control_params = 628, // config_control_params
+ S_config_control_param = 629, // config_control_param
+ S_config_databases = 630, // config_databases
+ S_631_128 = 631, // $@128
+ S_config_fetch_wait_time = 632, // config_fetch_wait_time
+ S_loggers = 633, // loggers
+ S_634_129 = 634, // $@129
+ S_loggers_entries = 635, // loggers_entries
+ S_logger_entry = 636, // logger_entry
+ S_637_130 = 637, // $@130
+ S_logger_params = 638, // logger_params
+ S_logger_param = 639, // logger_param
+ S_debuglevel = 640, // debuglevel
+ S_severity = 641, // severity
+ S_642_131 = 642, // $@131
+ S_output_options_list = 643, // output_options_list
+ S_644_132 = 644, // $@132
+ S_output_options_list_content = 645, // output_options_list_content
+ S_output_entry = 646, // output_entry
+ S_647_133 = 647, // $@133
+ S_output_params_list = 648, // output_params_list
+ S_output_params = 649, // output_params
+ S_output = 650, // output
+ S_651_134 = 651, // $@134
+ S_flush = 652, // flush
+ S_maxsize = 653, // maxsize
+ S_maxver = 654, // maxver
+ S_pattern = 655, // pattern
+ S_656_135 = 656, // $@135
+ S_compatibility = 657, // compatibility
+ S_658_136 = 658, // $@136
+ S_compatibility_params = 659, // compatibility_params
+ S_compatibility_param = 660, // compatibility_param
+ S_lenient_option_parsing = 661, // lenient_option_parsing
+ S_ignore_dhcp_server_identifier = 662, // ignore_dhcp_server_identifier
+ S_ignore_rai_link_selection = 663, // ignore_rai_link_selection
+ S_exclude_first_last_24 = 664 // exclude_first_last_24
};
};
typedef Base super_type;
/// Default constructor.
- basic_symbol () YY_NOEXCEPT
+ basic_symbol ()
: value ()
, location ()
{}
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
/// 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)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
: Base (t)
clear ();
}
-
-
/// Destroy contents, and record that is empty.
- void clear () YY_NOEXCEPT
+ void clear ()
{
// User destructor.
symbol_kind_type yykind = 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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
void move (basic_symbol& s);
/// The semantic value.
- value_type value;
+ semantic_type value;
/// The location.
location_type location;
/// Type access provider for token (enum) based symbols.
struct by_kind
{
- /// The symbol kind as needed by the constructor.
- typedef token_kind_type kind_type;
-
/// Default constructor.
- by_kind () YY_NOEXCEPT;
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_kind (by_kind&& that) YY_NOEXCEPT;
+ by_kind (by_kind&& 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_kind (const by_kind& that);
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
+ /// Constructor from (external) token numbers.
+ by_kind (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);
typedef basic_symbol<by_kind> 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_PARSER4_error || tok == token::TOKEN_PARSER4_UNDEF || 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_SERVICE_SOCKETS_REQUIRE_ALL || tok == token::TOKEN_SERVICE_SOCKETS_RETRY_WAIT_TIME || tok == token::TOKEN_SERVICE_SOCKETS_MAX_RETRIES || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_EXTENDED_INFO_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_OFFER_LFT || 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_READ_TIMEOUT || tok == token::TOKEN_WRITE_TIMEOUT || tok == token::TOKEN_TCP_USER_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_DDNS_TTL_PERCENT || 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_NEVER_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_ALLOCATOR || tok == token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE || tok == token::TOKEN_CHECK_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITH_DHCID || tok == token::TOKEN_CHECK_EXISTS_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITHOUT_DHCID || 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_TEMPLATE_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_POOL_ID || 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_IGNORE_DHCP_SERVER_ID || tok == token::TOKEN_IGNORE_RAI_LINK_SEL || tok == token::TOKEN_EXCLUDE_FIRST_LAST_24 || 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_PARSER4_error || tok == token::TOKEN_PARSER4_UNDEF || 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_SERVICE_SOCKETS_REQUIRE_ALL || tok == token::TOKEN_SERVICE_SOCKETS_RETRY_WAIT_TIME || tok == token::TOKEN_SERVICE_SOCKETS_MAX_RETRIES || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_EXTENDED_INFO_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_OFFER_LFT || 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_READ_TIMEOUT || tok == token::TOKEN_WRITE_TIMEOUT || tok == token::TOKEN_TCP_USER_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_DDNS_TTL_PERCENT || 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_NEVER_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_ALLOCATOR || tok == token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE || tok == token::TOKEN_CHECK_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITH_DHCID || tok == token::TOKEN_CHECK_EXISTS_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITHOUT_DHCID || 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_TEMPLATE_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_POOL_ID || 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_IGNORE_DHCP_SERVER_ID || tok == token::TOKEN_IGNORE_RAI_LINK_SEL || tok == token::TOKEN_EXCLUDE_FIRST_LAST_24 || 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.
/// 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
return symbol_type (token::TOKEN_ALLOCATOR, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_DDNS_CONFLICT_RESOLUTION_MODE (location_type l)
+ {
+ return symbol_type (token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_DDNS_CONFLICT_RESOLUTION_MODE (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_CHECK_WITH_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_CHECK_WITH_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_CHECK_WITH_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_CHECK_WITH_DHCID, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_NO_CHECK_WITH_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITH_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_NO_CHECK_WITH_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITH_DHCID, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_CHECK_EXISTS_WITH_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_CHECK_EXISTS_WITH_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_CHECK_EXISTS_WITH_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_CHECK_EXISTS_WITH_DHCID, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_NO_CHECK_WITHOUT_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITHOUT_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_NO_CHECK_WITHOUT_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITHOUT_DHCID, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
{
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; }
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { 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
/// 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;
+ /// are valid, yet not members of the token_type enum.
+ static symbol_kind_type yytranslate_ (int t);
/// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr);
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_[];
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)
{}
class slice
{
public:
- slice (const stack& stack, index_type range) YY_NOEXCEPT
+ slice (const stack& stack, index_type range)
: stack_ (stack)
, range_ (range)
{}
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);
/// Constants.
enum
{
- yylast_ = 1335, ///< Last index in yytable_.
- yynnts_ = 438, ///< Number of nonterminal symbols.
+ yylast_ = 1348, ///< Last index in yytable_.
+ yynnts_ = 441, ///< Number of nonterminal symbols.
yyfinal_ = 28 ///< Termination state number.
};
inline
Dhcp4Parser::symbol_kind_type
- Dhcp4Parser::yytranslate_ (int t) YY_NOEXCEPT
+ Dhcp4Parser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
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
+ 215, 216, 217, 218, 219, 220, 221, 222, 223
};
// Last valid token kind.
- const int code_max = 473;
+ const int code_max = 478;
if (t <= 0)
return symbol_kind::S_YYEOF;
else if (t <= code_max)
- return static_cast <symbol_kind_type> (translate_table[t]);
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
return symbol_kind::S_YYUNDEF;
}
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
-
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
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
// by_kind.
inline
- Dhcp4Parser::by_kind::by_kind () YY_NOEXCEPT
+ Dhcp4Parser::by_kind::by_kind ()
: kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- Dhcp4Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
+ Dhcp4Parser::by_kind::by_kind (by_kind&& that)
: kind_ (that.kind_)
{
that.clear ();
#endif
inline
- Dhcp4Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
+ Dhcp4Parser::by_kind::by_kind (const by_kind& that)
: kind_ (that.kind_)
{}
inline
- Dhcp4Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
+ Dhcp4Parser::by_kind::by_kind (token_kind_type t)
: kind_ (yytranslate_ (t))
{}
-
-
inline
void
- Dhcp4Parser::by_kind::clear () YY_NOEXCEPT
+ Dhcp4Parser::by_kind::clear ()
{
kind_ = symbol_kind::S_YYEMPTY;
}
return kind_;
}
-
inline
Dhcp4Parser::symbol_kind_type
Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT
return this->kind ();
}
-
#line 14 "dhcp4_parser.yy"
} } // isc::dhcp
-#line 5659 "dhcp4_parser.h"
+#line 5729 "dhcp4_parser.h"
ARRAY "array"
PARKED_PACKET_LIMIT "parked-packet-limit"
ALLOCATOR "allocator"
+ DDNS_CONFLICT_RESOLUTION_MODE "ddns-conflict-resolution-mode"
+ CHECK_WITH_DHCID "check-with-dhcid"
+ NO_CHECK_WITH_DHCID "no-check-with-dhcid"
+ CHECK_EXISTS_WITH_DHCID "check-exists-with-dhcid"
+ NO_CHECK_WITHOUT_DHCID "no-check-without-dhcid"
SHARED_NETWORKS "shared-networks"
%type <ElementPtr> hr_mode
%type <ElementPtr> ncr_protocol_value
%type <ElementPtr> ddns_replace_client_name_value
+%type <ElementPtr> ddns_conflict_resolution_mode_value
%printer { yyoutput << $$; } <*>;
| ddns_qualifying_suffix
| ddns_update_on_renew
| ddns_use_conflict_resolution
+ | ddns_conflict_resolution_mode
| ddns_ttl_percent
| store_extended_info
| statistic_default_sample_count
ctx.stack_.back()->set("ddns-use-conflict-resolution", b);
};
+ddns_conflict_resolution_mode: DDNS_CONFLICT_RESOLUTION_MODE {
+ ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(@1));
+ ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE);
+} COLON ddns_conflict_resolution_mode_value {
+ ctx.stack_.back()->set("ddns-conflict-resolution-mode", $4);
+ ctx.leave();
+};
+
+ddns_conflict_resolution_mode_value:
+ CHECK_WITH_DHCID {
+ $$ = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(@1)));
+ }
+ | NO_CHECK_WITH_DHCID {
+ $$ = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(@1)));
+ }
+ | CHECK_EXISTS_WITH_DHCID {
+ $$ = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(@1)));
+ }
+ | NO_CHECK_WITHOUT_DHCID {
+ $$ = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(@1)));
+ }
+ ;
+
ddns_ttl_percent: DDNS_TTL_PERCENT COLON FLOAT {
ctx.unique("ddns-ttl-percent", ctx.loc2pos(@1));
ElementPtr ttl(new DoubleElement($3, ctx.loc2pos(@3)));
| ddns_qualifying_suffix
| ddns_update_on_renew
| ddns_use_conflict_resolution
+ | ddns_conflict_resolution_mode
| ddns_ttl_percent
| hostname_char_set
| hostname_char_replacement
| ddns_qualifying_suffix
| ddns_update_on_renew
| ddns_use_conflict_resolution
+ | ddns_conflict_resolution_mode
| ddns_ttl_percent
| hostname_char_set
| hostname_char_replacement
(config_pair.first == "ddns-qualifying-suffix") ||
(config_pair.first == "ddns-update-on-renew") ||
(config_pair.first == "ddns-use-conflict-resolution") ||
+ (config_pair.first == "ddns-conflict-resolution-mode") ||
(config_pair.first == "ddns-ttl-percent") ||
(config_pair.first == "store-extended-info") ||
(config_pair.first == "statistic-default-sample-count") ||
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
// 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
// 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
-// Copyright (C) 2015-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2023 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
/// Used while parsing compatibility parameters
COMPATIBILITY,
+ /// Used while parsing Dhcp4/ib-ddns-conflict-resolution-mode.
+ DDNS_CONFLICT_RESOLUTION_MODE,
} ParserContext;
/// @brief File name
// ddns-send-updates should be global default
checkGlobal("ddns-send-updates", true);
+ checkGlobal("ddns-conflict-resolution-mode", "check-with-dhcid");
// The following, deprecated dhcp-ddns parameters,
// should all have global default values.
ASSERT_THROW(parseDHCP4(bad_limit), std::exception);
}
+// This test checks that ddns-conflict-resolution-mode value can be specified at
+// global and subnet levels.
+TEST_F(Dhcp4ParserTest, storeDdnsConflictResolutionMode) {
+ std::string config = "{ " + genIfaceConfig() + "," +
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet4\": [ "
+ "{"
+ " \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"check-with-dhcid\","
+ " \"subnet\": \"192.0.2.0/24\""
+ "},"
+ "{"
+ " \"pools\": [ { \"pool\": \"192.0.3.1 - 192.0.3.100\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"check-exists-with-dhcid\","
+ " \"subnet\": \"192.0.3.0/24\""
+ "},"
+ "{"
+ " \"pools\": [ { \"pool\": \"192.0.4.1 - 192.0.4.100\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"no-check-without-dhcid\","
+ " \"subnet\": \"192.0.4.0/24\""
+ "},"
+ "{"
+ " \"pools\": [ { \"pool\": \"192.0.5.1 - 192.0.5.100\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"no-check-with-dhcid\","
+ " \"subnet\": \"192.0.5.0/24\""
+ "},"
+ "{"
+ " \"pools\": [ { \"pool\": \"192.0.6.1 - 192.0.6.100\" } ],"
+ " \"subnet\": \"192.0.6.0/24\""
+ "} ],"
+ "\"valid-lifetime\": 4000,"
+ "\"ddns-conflict-resolution-mode\": \"no-check-with-dhcid\" }";
+
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP4(config));
+ extractConfig(config);
+
+ ConstElementPtr status;
+ ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+ checkResult(status, 0);
+
+ // Check global value.
+ checkGlobal("ddns-conflict-resolution-mode", "no-check-with-dhcid");
+
+ // Check values for all the subnets.
+ std::string expectedValues[] = {
+ "check-with-dhcid",
+ "check-exists-with-dhcid",
+ "no-check-without-dhcid",
+ "no-check-with-dhcid",
+ "no-check-with-dhcid"
+ };
+ CfgSubnets4Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets4();
+ char addr[10];
+ Subnet4Ptr subnet1;
+ for (int i = 0; i < 5; i++) {
+ snprintf(addr, sizeof(addr), "192.0.%d.1", i+2);
+ subnet1 = cfg->selectSubnet(IOAddress(addr));
+ ASSERT_TRUE(subnet1);
+ // Reset the fetch global function to staging (vs current) config.
+ subnet1->setFetchGlobalsFn([]() -> ConstCfgGlobalsPtr {
+ return (CfgMgr::instance().getStagingCfg()->getConfiguredGlobals());
+ });
+ EXPECT_EQ(expectedValues[i], subnet1->getDdnsConflictResolutionMode().get());
+ }
+}
+
} // namespace
" \"lease-expires-on\" : \"20140121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
return (dhcp_ddns::NameChangeRequest::fromJSON(stream.str()));
: D2ClientConfig::RCM_NEVER);
subnet_->setDdnsGeneratedPrefix("myhost");
subnet_->setDdnsQualifyingSuffix("example.com");
- subnet_->setDdnsUseConflictResolution(true);
+ subnet_->setDdnsConflictResolutionMode("check-with-dhcid");
ASSERT_NO_THROW(srv_->startD2());
}
/// @param not_strict_expire_check - when true the comparison of the NCR
/// lease expiration time is conducted as greater than or equal to rather
/// equal to CLTT plus lease ttl .
- /// @param exp_use_cr expected value of conflict resolution flag
+ /// @param exp_conflict_resolution_mode expected value of conflict resolution mode
void verifyNameChangeRequest(const isc::dhcp_ddns::NameChangeType type,
const bool reverse, const bool forward,
const std::string& addr,
const time_t cltt,
const uint16_t valid_lft,
const bool not_strict_expire_check = false,
- const bool exp_use_cr = true,
+ const ConflictResolutionMode
+ exp_conflict_resolution_mode = CHECK_WITH_DHCID,
Optional<double> ttl_percent = Optional<double>()) {
NameChangeRequestPtr ncr;
ASSERT_NO_THROW(ncr = d2_mgr_.peekAt(0));
EXPECT_EQ(ttl, ncr->getLeaseLength());
EXPECT_EQ(isc::dhcp_ddns::ST_NEW, ncr->getStatus());
- EXPECT_EQ(exp_use_cr, ncr->useConflictResolution());
+ EXPECT_EQ(exp_conflict_resolution_mode, ncr->getConflictResolutionMode());
// Process the message off the queue
ASSERT_NO_THROW(d2_mgr_.runReadyIO());
Lease4Ptr old_lease;
ASSERT_TRUE(getDdnsParams()->getEnableUpdates());
- subnet_->setDdnsUseConflictResolution(false);
+ subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid");
ASSERT_NO_THROW(srv_->createNameChangeRequests(lease, old_lease, *getDdnsParams()));
ASSERT_EQ(1, d2_mgr_.getQueueSize());
"192.0.2.3", "myhost.example.com.",
"00010132E91AA355CFBB753C0F0497A5A940436965"
"B68B6D438D98E680BF10B09F3BCF",
- lease->cltt_, 100, false, false);
+ lease->cltt_, 100, false, NO_CHECK_WITH_DHCID);
}
verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
resp->getYiaddr().toText(),
"client1.example.com.", "",
- time(NULL), lease->valid_lft_, true, true, Optional<double>(.25));
+ time(NULL), lease->valid_lft_, true,
+ CHECK_WITH_DHCID, Optional<double>(.25));
+}
+
+// Verify that conflict resolution mode is set to "check-with-dhcid" in the NCR
+// when it is configured for the lease's subnet
+TEST_F(NameDhcpv4SrvTest, checkWithDHCIDConflictResolutionMode) {
+ Lease4Ptr lease = createLease(IOAddress("192.0.2.3"), "myhost.example.com.",
+ true, true);
+ Lease4Ptr old_lease;
+ ASSERT_TRUE(getDdnsParams()->getEnableUpdates());
+ subnet_->setDdnsConflictResolutionMode("check-with-dhcid");
+
+ ASSERT_NO_THROW(srv_->createNameChangeRequests(lease, old_lease, *getDdnsParams()));
+ ASSERT_EQ(1, d2_mgr_.getQueueSize());
+
+ verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
+ "192.0.2.3", "myhost.example.com.",
+ "00010132E91AA355CFBB753C0F0497A5A940436965"
+ "B68B6D438D98E680BF10B09F3BCF",
+ lease->cltt_, 100, false, CHECK_WITH_DHCID);
+}
+
+// Verify that conflict resolution mode is set to "no-check-with-dhcid" in the NCR
+// when it is configured for the lease's subnet
+TEST_F(NameDhcpv4SrvTest, noCheckWithDHCIDConflictResolutionMode) {
+ Lease4Ptr lease = createLease(IOAddress("192.0.2.3"), "myhost.example.com.",
+ true, true);
+ Lease4Ptr old_lease;
+
+ ASSERT_TRUE(getDdnsParams()->getEnableUpdates());
+ subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid");
+
+ ASSERT_NO_THROW(srv_->createNameChangeRequests(lease, old_lease, *getDdnsParams()));
+ ASSERT_EQ(1, d2_mgr_.getQueueSize());
+
+ verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
+ "192.0.2.3", "myhost.example.com.",
+ "00010132E91AA355CFBB753C0F0497A5A940436965"
+ "B68B6D438D98E680BF10B09F3BCF",
+ lease->cltt_, 100, false, NO_CHECK_WITH_DHCID);
+}
+
+// Verify that conflict resolution mode is set to "no-check-without-dhcid" in the NCR
+// when it is configured for the lease's subnet
+TEST_F(NameDhcpv4SrvTest, noCheckWithoutDHCIDConflictResolutionMode) {
+ Lease4Ptr lease = createLease(IOAddress("192.0.2.3"), "myhost.example.com.",
+ true, true);
+ Lease4Ptr old_lease;
+
+ ASSERT_TRUE(getDdnsParams()->getEnableUpdates());
+ subnet_->setDdnsConflictResolutionMode("no-check-without-dhcid");
+
+ ASSERT_NO_THROW(srv_->createNameChangeRequests(lease, old_lease, *getDdnsParams()));
+ ASSERT_EQ(1, d2_mgr_.getQueueSize());
+
+ verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
+ "192.0.2.3", "myhost.example.com.",
+ "00010132E91AA355CFBB753C0F0497A5A940436965"
+ "B68B6D438D98E680BF10B09F3BCF",
+ lease->cltt_, 100, false, NO_CHECK_WITHOUT_DHCID);
+}
+
+// Verify that conflict resolution mode is set to "check-exists-with-dhcid" in the NCR
+// when it is configured for the lease's subnet
+TEST_F(NameDhcpv4SrvTest, checkExistsDHCIDConflictResolutionMode) {
+ Lease4Ptr lease = createLease(IOAddress("192.0.2.3"), "myhost.example.com.",
+ true, true);
+ Lease4Ptr old_lease;
+
+ ASSERT_TRUE(getDdnsParams()->getEnableUpdates());
+ subnet_->setDdnsConflictResolutionMode("check-exists-with-dhcid");
+
+ ASSERT_NO_THROW(srv_->createNameChangeRequests(lease, old_lease, *getDdnsParams()));
+ ASSERT_EQ(1, d2_mgr_.getQueueSize());
+
+ verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
+ "192.0.2.3", "myhost.example.com.",
+ "00010132E91AA355CFBB753C0F0497A5A940436965"
+ "B68B6D438D98E680BF10B09F3BCF",
+ lease->cltt_, 100, false, CHECK_EXISTS_WITH_DHCID);
}
} // end of anonymous namespace
-// Copyright (C) 2017-2023 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2017-2022 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
///@{
/// @brief extracted configurations
const char* EXTRACTED_CONFIGS[] = {
- // CONFIGURATION 0
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [ ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 1
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 2
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 3
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 4
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1024,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 100,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.101 - 192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.4.101 - 192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.4.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 34,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.5.101 - 192.0.5.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.5.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 5
-"{\n"
-" \"boot-file-name\": \"bar\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"next-server\": \"1.2.3.4\",\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"server-hostname\": \"foo\",\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 6
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"boot-file-name\": \"bar\",\n"
-" \"id\": 1,\n"
-" \"next-server\": \"1.2.3.4\",\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"foo\",\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 7
-"{\n"
-" \"boot-file-name\": \"nofile\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"next-server\": \"192.0.0.1\",\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"server-hostname\": \"nohost\",\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"boot-file-name\": \"bootfile.efi\",\n"
-" \"id\": 1,\n"
-" \"next-server\": \"1.2.3.4\",\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"some-name.example.org\",\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 8
-"{\n"
-" \"echo-client-id\": false,\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 9
-"{\n"
-" \"echo-client-id\": true,\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 10
-"{\n"
-" \"compatibility\": {\n"
-" \"exclude-first-last-24\": true,\n"
-" \"ignore-dhcp-server-identifier\": true,\n"
-" \"ignore-rai-link-selection\": true,\n"
-" \"lenient-option-parsing\": true\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 11
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"match-client-id\": true,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"match-client-id\": false,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.1 - 192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 12
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"match-client-id\": false,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.1 - 192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 13
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"authoritative\": true,\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"authoritative\": false,\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.1 - 192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 14
-"{\n"
-" \"authoritative\": true,\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"authoritative\": false,\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.1 - 192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 15
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 5,\n"
-" \"min-valid-lifetime\": 3,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2,\n"
-" \"renew-timer\": 1,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 16
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.0/28\"\n"
-" },\n"
-" {\n"
-" \"pool\": \"192.0.2.200-192.0.2.255\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.0/25\"\n"
-" },\n"
-" {\n"
-" \"pool\": \"192.0.3.128/25\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 17
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.128/28\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 18
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 19
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"uint16, ipv4-address, ipv6-address, string\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"record\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 20
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 101,\n"
-" \"name\": \"foo-2\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 21
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": true,\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 22
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"sub-opts-space\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 23
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 109,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"dhcp4\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 24
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 170,\n"
-" \"name\": \"unassigned-option-170\",\n"
-" \"space\": \"dhcp4\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 25
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\"\n"
-" },\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 26
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\"\n"
-" },\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 27
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\"\n"
-" },\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 56,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 28
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 1,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 2,\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 29
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"11\",\n"
-" \"name\": \"base-option\"\n"
-" },\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 222,\n"
-" \"encapsulate\": \"isc\",\n"
-" \"name\": \"base-option\",\n"
-" \"space\": \"dhcp4\",\n"
-" \"type\": \"uint8\"\n"
-" },\n"
-" {\n"
-" \"code\": 1,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 2,\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 3000\n"
-" }\n",
- // CONFIGURATION 30
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"AB\",\n"
-" \"name\": \"dhcp-message\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\"\n"
-" },\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 31
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"0102030405060708090A\",\n"
-" \"name\": \"dhcp-message\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"FF\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.101 - 192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 32
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\"\n"
-" },\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 33
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"192.0.2.200 - 192.0.2.250\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 34
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"true, 10.0.0.3, 127.0.0.1\",\n"
-" \"name\": \"slp-directory-agent\"\n"
-" },\n"
-" {\n"
-" \"data\": \"false, \",\n"
-" \"name\": \"slp-service-scope\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 35
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" },\n"
-" {\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 1,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 2,\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 36
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"name\": \"vendor-encapsulated-options\"\n"
-" },\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" },\n"
-" {\n"
-" \"code\": 2,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 1,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 2,\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 3000\n"
-" }\n",
- // CONFIGURATION 37
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"option-one\",\n"
-" \"space\": \"vendor-4491\"\n"
-" },\n"
-" {\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"option-two\",\n"
-" \"space\": \"vendor-1234\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1-192.0.2.10\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 38
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"data\": \"this is a string vendor-opt\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-4491\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-4491\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 39
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"eth0\", \"eth1\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 40
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"eth0\", \"*\", \"eth1\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 41
-"{\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"192.168.2.2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"192.168.2.1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 42
-"{\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"generated-prefix\": \"test.prefix\",\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"override-client-update\": true,\n"
-" \"override-no-update\": true,\n"
-" \"qualifying-suffix\": \"test.suffix.\",\n"
-" \"replace-client-name\": \"when-present\",\n"
-" \"sender-ip\": \"192.168.2.2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"192.168.2.1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 43
-"{\n"
-" \"ddns-generated-prefix\": \"global.prefix\",\n"
-" \"ddns-override-client-update\": true,\n"
-" \"ddns-override-no-update\": true,\n"
-" \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
-" \"ddns-replace-client-name\": \"always\",\n"
-" \"ddns-send-updates\": false,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"generated-prefix\": \"d2.prefix\",\n"
-" \"hostname-char-replacement\": \"z\",\n"
-" \"hostname-char-set\": \"[^0-9]\",\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"override-client-update\": false,\n"
-" \"override-no-update\": false,\n"
-" \"qualifying-suffix\": \"d2.suffix.\",\n"
-" \"replace-client-name\": \"when-present\",\n"
-" \"sender-ip\": \"192.168.2.2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"192.168.2.1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 44
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2,\n"
-" \"relay\": {\n"
-" \"ip-address\": \"192.0.2.123\"\n"
-" },\n"
-" \"renew-timer\": 1,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 45
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ \"192.0.3.123\", \"192.0.3.124\" ]\n"
-" },\n"
-" \"renew-timer\": 1,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 46
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.101 - 192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"id\": 3,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.4.101 - 192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.4.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 4,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.5.101 - 192.0.5.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.5.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 47
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"pool\": \"192.0.3.101 - 192.0.3.150\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"pool\": \"192.0.4.101 - 192.0.4.150\"\n"
-" },\n"
-" {\n"
-" \"pool\": \"192.0.5.101 - 192.0.5.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.0.0/16\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 48
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 123,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"reservations\": [ ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 234,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.101 - 192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.3.112\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"192.0.3.15\",\n"
-" \"name\": \"name-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"32\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ]\n"
-" },\n"
-" {\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"ip-address\": \"192.0.3.120\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"192.0.3.95\",\n"
-" \"name\": \"name-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"11\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ]\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 542,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.4.101 - 192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"0A:09:08:07:06:05:04:03:02:01\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.4.101\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"192.0.4.11\",\n"
-" \"name\": \"name-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"95\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ]\n"
-" },\n"
-" {\n"
-" \"circuit-id\": \"060504030201\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.4.102\"\n"
-" },\n"
-" {\n"
-" \"client-id\": \"05:01:02:03:04:05:06\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.4.103\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.4.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 49
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 234,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.101 - 192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n"
-" \"ip-address\": \"192.0.3.112\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"123\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ]\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 50
-"{\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.1.0/24\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"subnet\": \"192.0.1.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 3,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 4,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.4.0/24\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"subnet\": \"192.0.4.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 5,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.5.0/24\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.5.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 6,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.6.0/24\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"subnet\": \"192.0.6.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 7,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.7.0/24\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"subnet\": \"192.0.7.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 51
-"{\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 52
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet4\": [ ]\n"
-" }\n",
- // CONFIGURATION 53
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet4\": [ ]\n"
-" }\n",
- // CONFIGURATION 54
-"{\n"
-" \"decline-probation-period\": 12345,\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet4\": [ ]\n"
-" }\n",
- // CONFIGURATION 55
-"{\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 35,\n"
-" \"hold-reclaimed-time\": 1800,\n"
-" \"max-reclaim-leases\": 50,\n"
-" \"max-reclaim-time\": 100,\n"
-" \"reclaim-timer-wait-time\": 20,\n"
-" \"unwarned-reclaim-cycles\": 10\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet4\": [ ]\n"
-" }\n",
- // CONFIGURATION 56
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 57
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-subnet\": \"2001:db8::123/45\",\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 58
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"ethX\",\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 59
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"ethX\",\n"
-" \"4o6-subnet\": \"2001:db8::543/21\",\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 60
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface-id\": \"vlan123\",\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 61
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"name\": \"one\"\n"
-" },\n"
-" {\n"
-" \"name\": \"two\"\n"
-" },\n"
-" {\n"
-" \"name\": \"three\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 62
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"name\": \"two\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 63
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"template-test\": \"''\",\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"name\": \"two\",\n"
-" \"template-test\": \"''\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 64
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.0/28\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 65
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.0/28\",\n"
-" \"user-context\": { }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 66
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.0/28\",\n"
-" \"user-context\": {\n"
-" \"bool-param\": true,\n"
-" \"integer-param\": 42,\n"
-" \"string-param\": \"Sagittarius\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 67
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.0 - 192.0.2.15\",\n"
-" \"user-context\": {\n"
-" \"bool-param\": true,\n"
-" \"integer-param\": 42,\n"
-" \"string-param\": \"Sagittarius\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 68
-"{\n"
-" \"hosts-databases\": [\n"
-" {\n"
-" \"name\": \"keatest1\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" },\n"
-" {\n"
-" \"name\": \"keatest2\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 69
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"name\": \"all\",\n"
-" \"test\": \"'' == ''\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"match all\"\n"
-" }\n"
-" },\n"
-" {\n"
-" \"name\": \"none\"\n"
-" },\n"
-" {\n"
-" \"name\": \"both\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"a comment\",\n"
-" \"version\": 1\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"control-socket\": {\n"
-" \"socket-name\": \"/tmp/kea4-ctrl-socket\",\n"
-" \"socket-type\": \"unix\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Indirect comment\"\n"
-" }\n"
-" },\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"user-context\": {\n"
-" \"comment\": \"No dynamic DNS\"\n"
-" }\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false,\n"
-" \"user-context\": {\n"
-" \"comment\": \"Use wildcard\"\n"
-" }\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Set option value\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option definition\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"shared-networks\": [\n"
-" {\n"
-" \"name\": \"foo\",\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 100,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.1.1-192.0.1.10\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"A pool\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"hostname\": \"foo.example.com\",\n"
-" \"hw-address\": \"AA:BB:CC:DD:EE:FF\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"example.com\",\n"
-" \"name\": \"domain-name\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option in a reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"A host reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.1.0/24\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"A subnet\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"A shared network\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"A DHCPv4 server\"\n"
-" }\n"
-" }\n",
- // CONFIGURATION 70
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n"
-" \"hostname\": \"global1\",\n"
-" \"ip-address\": \"192.0.200.1\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"192.0.3.15\",\n"
-" \"name\": \"name-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"32\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ]\n"
-" },\n"
-" {\n"
-" \"hostname\": \"global2\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"192.0.3.95\",\n"
-" \"name\": \"name-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"11\",\n"
-" \"name\": \"default-ip-ttl\"\n"
-" }\n"
-" ]\n"
-" }\n"
-" ],\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 123,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"reservations\": [ ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 542,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.4.101 - 192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.4.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 71
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"shared-networks\": [\n"
-" {\n"
-" \"calculate-tee-times\": true,\n"
-" \"name\": \"foo\",\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 100,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.1.1-192.0.1.10\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.1.0/24\",\n"
-" \"t1-percent\": 0.45,\n"
-" \"t2-percent\": 0.65\n"
-" },\n"
-" {\n"
-" \"id\": 200,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1-192.0.2.10\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.4,\n"
-" \"t2-percent\": 0.75\n"
-" }\n"
-" ],\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 300,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.0 - 192.0.3.15\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 72
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": true,\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.1 - 192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 73
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"store-extended-info\": true,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.2.1 - 192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"192.0.3.1 - 192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 74
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"statistic-default-sample-age\": 5,\n"
-" \"statistic-default-sample-count\": 10,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 75
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet4\": [ ]\n"
-" }\n",
- // CONFIGURATION 76
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 1024,\n"
-" \"thread-pool-size\": 48\n"
-" },\n"
-" \"subnet4\": [ ]\n"
-" }\n"
+ // "to be replaced"
};
/// @brief unparsed configurations
const char* UNPARSED_CONFIGS[] = {
- // CONFIGURATION 0
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 1
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 2
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 3
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 4
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.4.101-192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.4.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 34,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.5.101-192.0.5.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.5.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 100,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.101-192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1024,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 5
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"bar\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"1.2.3.4\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"foo\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 6
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"boot-file-name\": \"bar\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"next-server\": \"1.2.3.4\",\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"server-hostname\": \"foo\",\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 7
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"nofile\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"192.0.0.1\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"nohost\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"boot-file-name\": \"bootfile.efi\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"next-server\": \"1.2.3.4\",\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"server-hostname\": \"some-name.example.org\",\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 8
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 9
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 10
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"compatibility\": {\n"
-" \"exclude-first-last-24\": true,\n"
-" \"ignore-dhcp-server-identifier\": true,\n"
-" \"ignore-rai-link-selection\": true,\n"
-" \"lenient-option-parsing\": true\n"
-" },\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 11
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"match-client-id\": true,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"match-client-id\": false,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.1-192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 12
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"match-client-id\": false,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.1-192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 13
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": true,\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.1-192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 14
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": true,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.1-192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 15
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 5,\n"
-" \"min-valid-lifetime\": 3,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 16
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.0/28\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.200-192.0.2.255\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.0/25\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.128/25\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 17
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.128/28\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 18
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 19
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"uint16, ipv4-address, ipv6-address, string\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"record\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 20
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 101,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo-2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 21
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": true,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 22
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"sub-opts-space\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 23
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 109,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"dhcp4\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 24
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 170,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"unassigned-option-170\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"dhcp4\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 25
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 26
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 27
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 56,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 28
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 1,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 2,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 1,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 2,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 29
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 222,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"11\",\n"
-" \"name\": \"base-option\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 1,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 2,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 222,\n"
-" \"encapsulate\": \"isc\",\n"
-" \"name\": \"base-option\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"dhcp4\",\n"
-" \"type\": \"uint8\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 1,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 2,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 3000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 3000\n"
-" }\n",
- // CONFIGURATION 30
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"AB\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 31
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"0102030405060708090A\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"FF\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.101-192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 32
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 33
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"192.0.2.200-192.0.2.250\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 34
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 78,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"true, 10.0.0.3, 127.0.0.1\",\n"
-" \"name\": \"slp-directory-agent\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 79,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"false, \",\n"
-" \"name\": \"slp-service-scope\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 35
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 1,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 2,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 1,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 2,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 36
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 43,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"0104000004D20204C0A80201\",\n"
-" \"name\": \"vendor-encapsulated-options\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 1,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 2,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-encapsulated-options-space\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 1,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 2,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"vendor-encapsulated-options-space\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 3000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 3000\n"
-" }\n",
- // CONFIGURATION 37
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"1234\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-1234\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-4491\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.10\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 38
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"this is a string vendor-opt\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-4491\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"vendor-4491\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 39
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"eth0\", \"eth1\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 40
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\", \"eth0\", \"eth1\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 41
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"192.168.2.2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"192.168.2.1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 42
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"test.prefix\",\n"
-" \"ddns-override-client-update\": true,\n"
-" \"ddns-override-no-update\": true,\n"
-" \"ddns-qualifying-suffix\": \"test.suffix.\",\n"
-" \"ddns-replace-client-name\": \"when-present\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"192.168.2.2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"192.168.2.1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 43
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"global.prefix\",\n"
-" \"ddns-override-client-update\": true,\n"
-" \"ddns-override-no-update\": true,\n"
-" \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
-" \"ddns-replace-client-name\": \"always\",\n"
-" \"ddns-send-updates\": false,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"192.168.2.2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"192.168.2.1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 44
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4,\n"
-" \"min-valid-lifetime\": 4,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ \"192.0.2.123\" ]\n"
-" },\n"
-" \"renew-timer\": 1,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 45
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4,\n"
-" \"min-valid-lifetime\": 4,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ \"192.0.3.123\", \"192.0.3.124\" ]\n"
-" },\n"
-" \"renew-timer\": 1,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 46
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"client-class\": \"alpha\",\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"client-class\": \"beta\",\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.101-192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"client-class\": \"gamma\",\n"
-" \"id\": 3,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.4.101-192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.4.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 4,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.5.101-192.0.5.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.5.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 47
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.101-192.0.3.150\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.4.101-192.0.4.150\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.5.101-192.0.5.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.0.0/16\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 48
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 123,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 234,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.101-192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"ip-address\": \"192.0.3.120\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 5,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.0.3.95\",\n"
-" \"name\": \"name-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"11\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"\"\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.3.112\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 5,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.0.3.15\",\n"
-" \"name\": \"name-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"32\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"\"\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 542,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.4.101-192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"client-id\": \"05010203040506\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.4.103\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"server-hostname\": \"\"\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"circuit-id\": \"060504030201\",\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.4.102\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"server-hostname\": \"\"\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"0a:09:08:07:06:05:04:03:02:01\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.4.101\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 5,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.0.4.11\",\n"
-" \"name\": \"name-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"95\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"\"\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.4.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 49
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 234,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.101-192.0.3.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-address\": \"192.0.3.112\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"123\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"\"\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 50
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.1.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.1.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 3,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 4,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.4.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.4.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 5,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.5.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.5.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 6,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.6.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.6.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 7,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.7.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.7.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 51
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.0/24\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 52
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 53
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 54
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 12345,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 55
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 35,\n"
-" \"hold-reclaimed-time\": 1800,\n"
-" \"max-reclaim-leases\": 50,\n"
-" \"max-reclaim-time\": 100,\n"
-" \"reclaim-timer-wait-time\": 20,\n"
-" \"unwarned-reclaim-cycles\": 10\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 56
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 57
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"2001:db8::123/45\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 58
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"ethX\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 59
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"ethX\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"2001:db8::543/21\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 60
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"vlan123\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 61
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"one\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\"\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"two\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\"\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"three\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\"\n"
-" }\n"
-" ],\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 62
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\",\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"two\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\"\n"
-" }\n"
-" ],\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 63
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\",\n"
-" \"template-test\": \"''\",\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"two\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\",\n"
-" \"template-test\": \"''\"\n"
-" }\n"
-" ],\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 64
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.0/28\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 65
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.0/28\",\n"
-" \"user-context\": { }\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 66
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.0/28\",\n"
-" \"user-context\": {\n"
-" \"bool-param\": true,\n"
-" \"integer-param\": 42,\n"
-" \"string-param\": \"Sagittarius\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 67
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.0/28\",\n"
-" \"user-context\": {\n"
-" \"bool-param\": true,\n"
-" \"integer-param\": 42,\n"
-" \"string-param\": \"Sagittarius\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 68
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"hosts-databases\": [\n"
-" {\n"
-" \"name\": \"keatest1\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" },\n"
-" {\n"
-" \"name\": \"keatest2\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 69
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"all\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\",\n"
-" \"test\": \"'' == ''\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"match all\"\n"
-" }\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"none\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\"\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"name\": \"both\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"server-hostname\": \"\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"a comment\",\n"
-" \"version\": 1\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"control-socket\": {\n"
-" \"socket-name\": \"/tmp/kea4-ctrl-socket\",\n"
-" \"socket-type\": \"unix\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Indirect comment\"\n"
-" }\n"
-" },\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001,\n"
-" \"user-context\": {\n"
-" \"comment\": \"No dynamic DNS\"\n"
-" }\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false,\n"
-" \"user-context\": {\n"
-" \"comment\": \"Use wildcard\"\n"
-" }\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 56,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"dhcp-message\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Set option value\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option definition\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"name\": \"foo\",\n"
-" \"option-data\": [ ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 100,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.1.1-192.0.1.10\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"A pool\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"foo.example.com\",\n"
-" \"hw-address\": \"aa:bb:cc:dd:ee:ff\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 15,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"example.com\",\n"
-" \"name\": \"domain-name\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option in a reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"A host reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.1.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A subnet\"\n"
-" },\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A shared network\"\n"
-" },\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A DHCPv4 server\"\n"
-" },\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 70
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"global2\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 5,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.0.3.95\",\n"
-" \"name\": \"name-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"11\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"\"\n"
-" },\n"
-" {\n"
-" \"boot-file-name\": \"\",\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
-" \"hostname\": \"global1\",\n"
-" \"ip-address\": \"192.0.200.1\",\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 5,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.0.3.15\",\n"
-" \"name\": \"name-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"32\",\n"
-" \"name\": \"default-ip-ttl\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp4\"\n"
-" }\n"
-" ],\n"
-" \"server-hostname\": \"\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 123,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 542,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.4.101-192.0.4.150\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.4.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 71
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"name\": \"foo\",\n"
-" \"option-data\": [ ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 100,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.1.1-192.0.1.10\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.1.0/24\",\n"
-" \"t1-percent\": 0.45,\n"
-" \"t2-percent\": 0.65,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 200,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.10\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.4,\n"
-" \"t2-percent\": 0.75,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.4,\n"
-" \"t2-percent\": 0.75,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 300,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.0/28\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 72
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": true,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.1-192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 73
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": true,\n"
-" \"subnet4\": [\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.2.1-192.0.2.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"192.0.2.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"4o6-interface\": \"\",\n"
-" \"4o6-interface-id\": \"\",\n"
-" \"4o6-subnet\": \"\",\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"id\": 2,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"192.0.3.1-192.0.3.100\"\n"
-" }\n"
-" ],\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": true,\n"
-" \"subnet\": \"192.0.3.0/24\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 74
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 5,\n"
-" \"statistic-default-sample-count\": 10,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 75
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 76
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"authoritative\": false,\n"
-" \"boot-file-name\": \"\",\n"
-" \"calculate-tee-times\": false,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring4\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"echo-client-id\": true,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"match-client-id\": true,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 1024,\n"
-" \"thread-pool-size\": 48\n"
-" },\n"
-" \"next-server\": \"0.0.0.0\",\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-hostname\": \"\",\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet4\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.875,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
+ // "to be replaced"
};
/// @brief the number of configurations
-#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
/* %% [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 */
+<<<<<<< HEAD
#define YY_NUM_RULES 231
#define YY_END_OF_BUFFER 232
+=======
+#define YY_NUM_RULES 235
+#define YY_END_OF_BUFFER 236
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
+<<<<<<< HEAD
static const flex_int16_t yy_accept[2206] =
{ 0,
224, 224, 0, 0, 0, 0, 0, 0, 0, 0,
213, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 215, 0, 0, 0, 0, 0,
+=======
+static const flex_int16_t yy_accept[2291] =
+ { 0,
+ 228, 228, 0, 0, 0, 0, 0, 0, 0, 0,
+ 236, 234, 10, 11, 234, 1, 228, 225, 228, 228,
+ 234, 227, 226, 234, 234, 234, 234, 234, 221, 222,
+ 234, 234, 234, 223, 224, 5, 5, 5, 234, 234,
+ 234, 10, 11, 0, 0, 216, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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,
+ 228, 228, 0, 227, 228, 3, 2, 6, 0, 228,
+ 0, 0, 0, 0, 0, 0, 4, 0, 0, 9,
+
+ 0, 217, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 219, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 8, 0, 0, 181, 0,
0, 0, 0, 0, 0, 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,
+ 2, 0, 0, 0, 0, 0, 0, 0, 8, 0,
+
+ 0, 0, 185, 0, 0, 186, 0, 0, 0, 0,
+ 0, 0, 0, 0, 218, 220, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
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, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
229, 227, 0, 226, 225, 0, 0, 0, 0, 0,
180, 0, 28, 0, 27, 0, 0, 134, 0, 0,
+=======
+ 0, 0, 0, 0, 0, 233, 231, 0, 230, 229,
+ 0, 0, 0, 0, 0, 0, 184, 0, 0, 28,
+ 0, 27, 0, 0, 138, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 0, 131,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 0, 0, 0, 0, 0, 0, 135, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 228, 225, 0, 0, 0,
0, 29, 0, 31, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 138, 0, 0, 0, 0,
0, 0, 110, 0, 0, 0, 0, 0, 0, 0,
0, 165, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 61, 0, 0, 0, 0,
+=======
+ 0, 0, 232, 229, 0, 0, 0, 0, 0, 29,
+ 0, 0, 31, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 142, 0, 0, 0, 0, 0,
+ 0, 115, 0, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+
+ 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 61, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 109, 0, 0, 0, 0, 0, 0,
+ 0, 0, 114, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 120, 0, 0, 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,
0, 0, 0, 0, 0, 169, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
7, 35, 0, 0, 0, 0, 0, 0, 0, 0,
+=======
+ 125, 0, 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, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 163, 0, 189,
+
+ 0, 55, 0, 59, 0, 0, 0, 0, 0, 0,
+ 37, 34, 33, 0, 0, 0, 0, 0, 177, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 154, 0, 0, 0, 0,
+ 0, 0, 0, 0, 188, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 57, 0,
+ 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 118, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 178, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 173, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 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,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 133, 0, 0, 0, 0,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 137,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
152, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 149, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 115, 0, 0, 0,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 156, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 153, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 120,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 124, 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, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 128, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 168, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 178,
0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
0, 0, 0, 0, 0, 0, 153, 0, 0, 63,
121, 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, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 172, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 182, 151, 0, 0,
+ 0, 0, 0, 0, 0, 155, 56, 0, 0, 0,
+ 0, 0, 0, 70, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 157, 0, 0, 63, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 104, 0, 0, 0, 0,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 205, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 0, 0, 0, 130,
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, 206, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 125, 0, 0,
+=======
+ 0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 209, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 134,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 171, 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, 0, 0, 0, 0, 60,
+ 0, 119, 0, 0, 0, 168, 0, 0, 0, 0,
+ 0, 54, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,
+ 0, 0, 91, 0, 0, 0, 0, 77, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+
+ 210, 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, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 41, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
0, 179, 14, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 89, 0, 0, 0, 0, 0, 0,
0, 143, 144, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 111, 0, 0, 0, 79, 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, 183, 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, 0, 0, 0,
+ 0, 0, 0, 174, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 158, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 170, 187, 0, 40, 0,
+ 179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 20, 0, 117,
+ 0, 0, 112, 0, 0, 0, 0, 0, 181, 0,
+ 0, 58, 0, 121, 0, 208, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+
+ 0, 89, 0, 0, 0, 0, 0, 0, 0, 147,
+ 148, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 116, 0, 0, 0, 79, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 172, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 139, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 103, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 24, 0, 0, 0, 0, 0,
0, 0, 0, 0, 192, 0, 0, 0, 0, 161,
+=======
+ 0, 0, 0, 0, 176, 0, 0, 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, 113, 136, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 86, 0, 0, 0, 0, 0, 17,
+ 0, 15, 0, 0, 205, 204, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 30, 0, 0, 0, 162, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 198, 0, 0, 207,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 130, 0, 167, 0, 46, 0, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 92, 0, 0,
+
+ 132, 66, 87, 0, 0, 175, 0, 0, 0, 0,
+ 166, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 76, 0, 126, 0, 0, 0, 0,
+ 0, 0, 0, 150, 0, 0, 0, 214, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 124, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 164, 0, 0, 0, 67, 0, 0, 0, 0,
+ 0, 0, 0, 160, 51, 0, 0, 0, 203, 38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 49, 0, 0, 0, 48,
+ 0, 0, 18, 0, 0, 0, 75, 0, 0, 0,
+ 0, 0, 152, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,
+
+ 0, 0, 0, 0, 0, 149, 0, 0, 0, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 122, 0, 0, 0, 0, 0,
+ 0, 180, 0, 0, 0, 50, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 199, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 111, 0, 71,
+ 0, 0, 0, 0, 0, 104, 0, 0, 36, 0,
+ 52, 0, 0, 0, 0, 0, 0, 0, 0, 108,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 129, 0, 0, 0, 0, 0, 72, 0, 0,
0, 0, 68, 197, 0, 0, 0, 0, 0, 0,
0, 0, 95, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
0, 0, 0, 0, 0, 0, 25, 39, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 198, 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, 73, 0, 0, 0, 0, 0,
0, 99, 0, 0, 0, 0, 0, 0, 0, 0,
+=======
+ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 196, 0, 0, 0, 0, 165, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 133, 0, 0,
+ 0, 0, 0, 72, 0, 0, 0, 0, 68, 201,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 95, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 25, 39, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 202, 0,
+ 0, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 206, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 195, 0, 85, 0, 84, 0,
+ 21, 0, 80, 0, 0, 0, 0, 0, 0, 0,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 0, 146, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 123, 0, 0, 0, 194,
+ 0, 0, 0, 0, 0, 74, 0, 0, 90, 0,
+ 69, 0, 23, 0, 139, 0, 0, 0, 0, 0,
+ 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 101, 0, 0, 0, 0, 0,
+ 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 73, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 99, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+<<<<<<< HEAD
53, 0, 0, 100, 0, 0, 0, 0, 196, 0,
0, 0, 0, 208, 211, 82, 81, 22, 0, 140,
94, 0, 0, 0, 0, 0, 0, 0, 0, 93,
0, 189, 43, 207, 0
+=======
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 107, 53, 0, 0, 0,
+ 100, 0, 0, 0, 0, 200, 0, 0, 0, 0,
+ 212, 215, 82, 81, 22, 0, 144, 161, 140, 0,
+ 0, 0, 0, 0, 0, 0, 106, 0, 0, 96,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 192, 0,
+ 0, 0, 0, 0, 0, 197, 0, 0, 98, 0,
+ 88, 0, 0, 0, 0, 0, 0, 141, 0, 0,
+ 0, 0, 0, 0, 0, 0, 191, 0, 0, 26,
+ 213, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 97, 0,
+ 0, 0, 0, 44, 42, 0, 0, 0, 0, 102,
+ 0, 0, 145, 0, 94, 0, 103, 0, 0, 0,
+ 0, 0, 0, 0, 93, 0, 193, 43, 211, 0
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
} ;
static const YY_CHAR yy_ec[256] =
5, 8, 9, 10, 11, 12, 13, 14, 15, 16,
14, 17, 14, 18, 14, 14, 14, 19, 5, 20,
5, 21, 22, 5, 23, 24, 25, 26, 27, 28,
- 5, 29, 5, 30, 5, 31, 5, 32, 33, 34,
- 5, 35, 36, 37, 38, 39, 40, 5, 41, 5,
- 42, 43, 44, 5, 45, 5, 46, 47, 48, 49,
+ 5, 29, 30, 31, 32, 33, 5, 34, 35, 36,
+ 5, 37, 38, 39, 40, 41, 42, 43, 44, 5,
+ 45, 46, 47, 5, 48, 5, 49, 50, 51, 52,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 5, 73, 5, 5, 5, 5, 5,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 5, 76, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5
} ;
-static const YY_CHAR yy_meta[74] =
+static const YY_CHAR yy_meta[77] =
{ 0,
1, 1, 2, 1, 1, 3, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1
+ 1, 1, 1, 1, 1, 1
} ;
+<<<<<<< HEAD
static const flex_int16_t yy_base[2214] =
{ 0,
0, 72, 21, 31, 43, 51, 54, 60, 91, 99,
2205, 2205, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 2213, 45, 2211, 45, 45, 45, 45,
+=======
+static const flex_int16_t yy_base[2299] =
+ { 0,
+ 0, 75, 21, 28, 39, 47, 53, 61, 95, 103,
+ 2739, 2740, 31, 2735, 151, 0, 216, 2740, 223, 230,
+ 13, 237, 2740, 2715, 124, 17, 4, 34, 2740, 2740,
+ 23, 43, 64, 2740, 2740, 2740, 56, 2723, 2673, 0,
+ 2713, 106, 2730, 2, 268, 2740, 85, 90, 2676, 2697,
+ 98, 77, 2697, 235, 231, 97, 207, 298, 226, 312,
+ 293, 62, 254, 205, 203, 223, 2676, 252, 321, 336,
+ 289, 339, 2659, 21, 344, 394, 354, 2678, 348, 0,
+ 408, 422, 448, 456, 462, 2740, 0, 2740, 438, 470,
+ 240, 256, 244, 321, 322, 278, 2740, 2675, 2719, 2740,
+
+ 266, 2740, 484, 315, 374, 2673, 2717, 323, 17, 334,
+ 362, 2711, 379, 377, 384, 391, 2715, 0, 548, 439,
+ 2654, 431, 2653, 2654, 2660, 440, 2646, 2647, 2652, 76,
+ 2662, 2645, 2654, 2644, 445, 452, 63, 2647, 2645, 444,
+ 2634, 2695, 16, 2637, 2693, 2630, 180, 2651, 2651, 2645,
+ 209, 2638, 2636, 2637, 2629, 2634, 2628, 388, 2639, 373,
+ 2624, 2623, 2637, 455, 2678, 2622, 451, 2634, 459, 2622,
+ 518, 2623, 462, 2635, 2632, 2633, 379, 2631, 2669, 2668,
+ 405, 200, 2612, 2616, 458, 2612, 2604, 2621, 2613, 2615,
+ 0, 481, 498, 473, 503, 500, 498, 2611, 2740, 512,
+
+ 530, 2606, 2740, 519, 515, 2740, 2663, 552, 559, 2662,
+ 560, 2661, 554, 2660, 2740, 2740, 603, 530, 566, 2616,
+ 2608, 2612, 2613, 2593, 2604, 2606, 2605, 334, 541, 2646,
+ 2607, 2588, 2585, 2593, 2599, 2587, 2601, 2597, 2588, 2597,
+ 2597, 2592, 2584, 2586, 2589, 2569, 2573, 2586, 2588, 2585,
+ 2577, 2567, 2570, 2584, 2740, 2570, 2578, 82, 2619, 2562,
+ 2571, 2616, 2560, 2570, 2613, 579, 2569, 2611, 2553, 2555,
+ 2566, 2607, 569, 2611, 2562, 2542, 2557, 528, 2547, 2553,
+ 488, 2544, 2542, 347, 2542, 2548, 2539, 2538, 2551, 2544,
+ 2534, 2545, 2549, 2548, 2542, 480, 2549, 2544, 2536, 2526,
+
+ 2541, 2536, 2540, 2521, 2537, 2523, 2529, 2536, 2518, 214,
+ 2523, 2520, 2519, 600, 2518, 2513, 2527, 2526, 580, 2525,
+ 2528, 2510, 2518, 2506, 581, 2740, 2740, 585, 2740, 2740,
+ 2504, 550, 582, 2554, 597, 2565, 2740, 595, 606, 2740,
+ 2564, 2740, 2558, 649, 2740, 2517, 595, 2494, 2513, 2496,
+ 2513, 2552, 2509, 2499, 2554, 2506, 2509, 2500, 2503, 2489,
+ 2500, 631, 2542, 2497, 2494, 2495, 634, 2499, 2542, 2474,
+ 2486, 2481, 2478, 2474, 2476, 2479, 2529, 2483, 2472, 2488,
+ 2525, 2468, 672, 2481, 2481, 2464, 2465, 2478, 2476, 2474,
+ 2474, 2473, 2468, 2475, 2470, 2455, 615, 2464, 2467, 2462,
+
+ 618, 2461, 2457, 2510, 594, 603, 2740, 2466, 2503, 2450,
+ 2449, 2442, 2444, 2456, 2447, 2454, 2435, 2452, 2444, 2440,
+ 2445, 619, 2495, 2445, 634, 2442, 2445, 2445, 2443, 50,
+ 2433, 2445, 627, 2420, 2421, 2442, 2433, 2423, 2420, 2434,
+ 637, 2420, 2432, 2431, 2430, 2425, 2470, 2427, 2426, 2425,
+ 2424, 2407, 2415, 2468, 2424, 2466, 2403, 2464, 2403, 686,
+ 2416, 2414, 2740, 2740, 2414, 646, 2454, 2458, 2457, 2740,
+ 2456, 617, 2740, 671, 726, 2412, 657, 2454, 2448, 2398,
+ 2400, 2402, 2389, 2386, 2740, 2391, 2384, 2396, 2399, 2386,
+ 2385, 2740, 2395, 653, 2386, 2383, 2395, 539, 2380, 2382,
+
+ 2740, 2430, 2387, 2372, 2374, 2385, 2383, 2383, 2377, 700,
+ 2384, 2372, 2365, 2419, 2740, 2363, 2379, 2416, 2420, 2373,
+ 2367, 2369, 2370, 2354, 2363, 2408, 2356, 2355, 2350, 2349,
+ 2351, 2347, 2343, 662, 2362, 2336, 2343, 2348, 2341, 2357,
+ 2394, 2398, 2740, 2340, 2336, 703, 2344, 2343, 2337, 2344,
+ 2329, 2339, 2327, 2341, 2341, 2329, 2325, 2330, 2326, 2321,
+ 2740, 2381, 2740, 2320, 2319, 2312, 2329, 2371, 2370, 2312,
+ 2311, 2316, 2325, 2319, 2313, 2322, 706, 2362, 2321, 2305,
+ 2300, 2296, 2302, 660, 2316, 2309, 2313, 2296, 2357, 2295,
+ 2295, 2349, 2291, 2292, 2291, 2289, 2306, 2740, 2302, 2740,
+
+ 2342, 2740, 2290, 2740, 2300, 2339, 2338, 2295, 2341, 703,
+ 2740, 2740, 2740, 685, 692, 691, 2278, 726, 2740, 575,
+ 2296, 2276, 2286, 2331, 2330, 2272, 2282, 2327, 2269, 2276,
+ 2269, 2277, 2270, 2279, 2261, 2261, 2276, 2275, 2259, 478,
+ 2273, 2272, 2256, 2271, 2253, 2303, 2267, 2264, 2307, 2248,
+ 2250, 2262, 2262, 2260, 2260, 2740, 2245, 2242, 2303, 2255,
+ 2247, 2253, 2244, 2252, 2740, 2237, 2248, 2252, 2234, 2246,
+ 2238, 608, 2229, 2228, 2222, 2227, 2224, 2239, 2238, 2239,
+ 2218, 2228, 2234, 2280, 2232, 2231, 2223, 2214, 2740, 2215,
+ 2217, 2740, 2212, 2218, 2223, 2265, 2264, 690, 2222, 2262,
+
+ 2204, 2260, 2204, 2207, 2205, 2207, 2198, 2740, 2212, 2198,
+ 752, 2190, 2194, 2210, 2207, 2202, 2198, 2246, 2195, 2202,
+ 2243, 2740, 2186, 2184, 2198, 2197, 2200, 2237, 2236, 2180,
+ 2234, 2191, 2175, 2231, 2226, 2740, 211, 323, 377, 487,
+ 493, 505, 506, 655, 718, 682, 693, 684, 688, 691,
+ 2740, 2740, 717, 731, 732, 726, 739, 699, 700, 719,
+ 713, 702, 698, 712, 713, 730, 776, 733, 733, 775,
+ 779, 732, 729, 734, 735, 745, 750, 736, 739, 742,
+ 751, 751, 736, 796, 755, 747, 757, 800, 760, 753,
+ 753, 755, 759, 765, 808, 768, 815, 770, 771, 2740,
+
+ 774, 769, 760, 775, 780, 777, 774, 781, 780, 768,
+ 782, 780, 788, 827, 786, 834, 835, 776, 789, 775,
+ 785, 835, 790, 843, 2740, 844, 797, 795, 797, 793,
+ 787, 803, 851, 847, 807, 796, 2740, 798, 809, 798,
+ 811, 801, 814, 861, 817, 802, 864, 804, 819, 2740,
+ 813, 807, 818, 803, 814, 827, 818, 807, 813, 871,
+ 832, 816, 816, 829, 876, 877, 821, 839, 834, 839,
+ 836, 883, 822, 834, 835, 842, 833, 830, 2740, 899,
+ 853, 854, 842, 856, 846, 849, 860, 851, 857, 858,
+ 886, 878, 907, 908, 882, 855, 869, 851, 858, 872,
+
+ 920, 874, 871, 869, 2740, 873, 868, 883, 880, 866,
+ 868, 887, 884, 884, 886, 874, 881, 882, 892, 934,
+ 898, 937, 897, 887, 900, 886, 885, 891, 950, 894,
+ 889, 890, 896, 912, 895, 952, 904, 954, 2740, 915,
+ 915, 908, 919, 917, 965, 904, 906, 921, 922, 910,
+ 908, 973, 927, 913, 919, 917, 2740, 2740, 933, 932,
+ 933, 938, 926, 936, 938, 2740, 2740, 938, 940, 927,
+ 945, 932, 934, 2740, 931, 949, 936, 936, 990, 934,
+ 938, 956, 1000, 2740, 958, 1002, 2740, 944, 958, 958,
+ 1006, 951, 950, 954, 948, 964, 1012, 962, 952, 953,
+
+ 949, 959, 963, 974, 975, 970, 972, 965, 967, 963,
+ 980, 970, 985, 968, 1030, 984, 989, 966, 989, 975,
+ 974, 2740, 981, 983, 1035, 1036, 985, 998, 1039, 983,
+ 998, 992, 1016, 1026, 1014, 1022, 1034, 1051, 997, 1049,
+ 1009, 1052, 2740, 1058, 998, 1017, 1007, 1006, 1001, 1002,
+ 1014, 1009, 1005, 1023, 1015, 1010, 1011, 1021, 1030, 1069,
+ 1017, 1016, 1037, 1029, 1024, 1080, 1086, 1040, 1031, 2740,
+ 1045, 1036, 1044, 1046, 1031, 1047, 1037, 1049, 1046, 1044,
+ 1094, 1057, 1041, 1042, 2740, 1058, 1061, 1044, 1046, 1107,
+ 1047, 1066, 2740, 1065, 1068, 1055, 1050, 1068, 1056, 1112,
+
+ 1067, 1063, 1060, 1116, 1062, 1118, 1077, 1063, 1081, 1081,
+ 1081, 1067, 1082, 1074, 1070, 1088, 1087, 1074, 1091, 2740,
+ 1075, 2740, 1084, 1134, 1084, 2740, 1092, 1095, 1088, 1145,
+ 1089, 2740, 1092, 1097, 1144, 1092, 1093, 1105, 1099, 1100,
+ 1098, 1109, 1157, 1098, 1099, 1160, 1161, 1102, 1114, 1107,
+ 2740, 1103, 1111, 1109, 1164, 1103, 1124, 1110, 1111, 1112,
+ 1113, 1119, 1127, 1118, 1132, 1133, 1134, 1149, 1178, 1161,
+ 1153, 1158, 2740, 1141, 1145, 1128, 1128, 2740, 1129, 1131,
+ 1142, 1132, 1152, 1151, 1142, 1153, 1199, 1138, 1150, 1159,
+ 1152, 1156, 1160, 1143, 1160, 1161, 1152, 1210, 1158, 1162,
+
+ 2740, 1212, 1158, 1176, 1158, 1158, 1179, 1176, 1219, 1165,
+ 1183, 1171, 1185, 1171, 1179, 1188, 1168, 1183, 1190, 1235,
+ 1236, 2740, 1186, 1238, 1239, 1178, 1188, 1198, 1182, 1202,
+ 1185, 1187, 1187, 1194, 1203, 1191, 1198, 1193, 1200, 1212,
+ 1256, 1200, 1258, 1200, 1217, 1261, 1208, 1212, 1210, 1208,
+ 1203, 1267, 1215, 1212, 1270, 1217, 1272, 1268, 1274, 1224,
+ 2740, 1213, 1230, 1223, 1214, 1233, 1227, 1222, 1232, 1233,
+ 1229, 1242, 2740, 1226, 1222, 2740, 2740, 1228, 1291, 1247,
+ 1228, 1247, 1248, 1250, 1292, 1242, 1299, 1300, 1250, 1255,
+ 1249, 1247, 1258, 1240, 1245, 1251, 1277, 1290, 1278, 1292,
+
+ 1279, 1314, 1266, 1266, 1270, 1318, 1258, 1258, 1261, 1278,
+ 1273, 1277, 1272, 2740, 1269, 1282, 1266, 1283, 1263, 1284,
+ 1274, 1273, 1329, 1279, 2740, 1293, 1295, 1298, 1282, 1291,
+ 1295, 1300, 1286, 1349, 1299, 1304, 1291, 1305, 1303, 1295,
+ 1301, 1297, 1315, 1316, 1317, 2740, 2740, 1315, 2740, 1317,
+ 2740, 1302, 1313, 1304, 1323, 1316, 1314, 1369, 1323, 1320,
+ 1367, 1328, 1317, 1324, 1329, 1326, 1332, 2740, 1325, 2740,
+ 1317, 1381, 2740, 1382, 1326, 1333, 1380, 1339, 2740, 1340,
+ 1328, 2740, 1338, 2740, 1329, 2740, 1329, 1330, 1333, 1347,
+ 1352, 1335, 1346, 1398, 1352, 1353, 1396, 1349, 1403, 1399,
+
+ 1405, 2740, 1353, 1350, 1408, 1409, 1363, 1364, 1366, 2740,
+ 2740, 1358, 1353, 1410, 1356, 1372, 1356, 1368, 1357, 1416,
+ 1399, 1400, 1392, 1425, 2740, 1379, 1370, 1381, 2740, 1429,
+ 1363, 1374, 1389, 1428, 1377, 1388, 1376, 1375, 1391, 1392,
+ 1389, 1436, 1396, 1398, 1387, 1397, 1403, 1391, 1391, 1451,
+ 1447, 1449, 1455, 1409, 2740, 1412, 1411, 1413, 1404, 1407,
+ 1416, 1417, 1414, 1404, 1407, 1407, 1469, 1413, 1471, 1415,
+ 1473, 1413, 1418, 1477, 2740, 1432, 1411, 1426, 1419, 1422,
+ 1435, 1438, 1437, 1435, 1487, 1438, 2740, 2740, 1434, 1444,
+ 1429, 1488, 1432, 1495, 1448, 1434, 1498, 1499, 1500, 1441,
+
+ 1451, 1503, 1457, 2740, 1449, 1450, 1452, 1508, 1448, 2740,
+ 1465, 2740, 1464, 1454, 2740, 2740, 1467, 1450, 1470, 1471,
+ 1457, 1459, 1521, 1468, 1523, 1469, 1463, 1490, 1508, 1523,
+ 1509, 2740, 1529, 1477, 1527, 2740, 1472, 1534, 1481, 1475,
+ 1472, 1475, 1477, 1473, 1536, 1496, 1538, 1488, 1500, 1503,
+ 1500, 1492, 1495, 1488, 1551, 1498, 2740, 1497, 1496, 2740,
+ 1498, 1560, 1510, 1501, 1558, 1517, 1517, 1520, 1520, 1517,
+ 1564, 1523, 2740, 1515, 2740, 1516, 2740, 1526, 1518, 2740,
+ 1570, 1529, 1530, 1527, 1574, 1520, 1535, 1578, 1537, 1529,
+ 2740, 1526, 1526, 1532, 1531, 1529, 1586, 2740, 1545, 1545,
+
+ 2740, 2740, 2740, 1589, 1533, 2740, 1550, 1535, 1536, 1542,
+ 2740, 1551, 1601, 1546, 1538, 1544, 1554, 1566, 1559, 1565,
+ 1555, 1613, 1563, 2740, 1572, 2740, 1569, 1617, 1594, 1595,
+ 1601, 1586, 1594, 2740, 1577, 1562, 1625, 2740, 1626, 1580,
+ 1585, 1567, 1630, 1631, 1572, 1628, 1592, 1585, 1581, 1574,
+ 1582, 1634, 1589, 1590, 2740, 1580, 1596, 1594, 1651, 2740,
+ 1586, 1648, 1609, 1609, 1605, 1652, 1597, 1602, 1600, 1662,
+ 1615, 1603, 1665, 1661, 1613, 1668, 1626, 1615, 1609, 1672,
+ 1611, 1620, 1613, 1627, 1630, 1678, 1617, 1634, 1630, 1628,
+ 1621, 1636, 1620, 1681, 1682, 1683, 1684, 1644, 1637, 1636,
+
+ 1636, 1631, 2740, 1639, 1645, 1636, 1637, 1636, 1638, 1696,
+ 1639, 2740, 1635, 1653, 1705, 2740, 1673, 1687, 1686, 1675,
+ 1677, 1711, 1661, 2740, 2740, 1652, 1663, 1715, 2740, 2740,
+ 1669, 1659, 1664, 1662, 1715, 1670, 1675, 1662, 1665, 1681,
+ 1670, 1668, 1668, 1670, 2740, 1738, 1673, 1682, 1729, 1674,
+ 1679, 1742, 1688, 1698, 1699, 2740, 1747, 1697, 1744, 2740,
+ 1692, 1700, 2740, 1691, 1706, 1694, 2740, 1704, 1705, 1706,
+ 1758, 1713, 2740, 1755, 1718, 1694, 1712, 1713, 1714, 1723,
+ 1705, 1711, 1713, 1725, 1724, 1715, 1768, 1717, 1713, 1714,
+ 1715, 1773, 1779, 1726, 1781, 1731, 1721, 1737, 1730, 2740,
+
+ 1763, 1787, 1769, 1784, 1790, 2740, 1736, 1792, 1731, 2740,
+ 1733, 1735, 1745, 1792, 1737, 1752, 1739, 1801, 1755, 1741,
+ 1748, 1748, 1759, 1760, 2740, 1754, 1749, 1763, 1749, 1812,
+ 1764, 2740, 1811, 1759, 1756, 2740, 1770, 1757, 1778, 1774,
+ 1776, 1824, 1774, 1771, 1779, 1773, 2740, 1829, 1767, 1769,
+ 1785, 1778, 1779, 1769, 1785, 1786, 1780, 1796, 1786, 1841,
+ 1798, 1782, 1791, 1840, 1795, 1847, 1793, 2740, 1787, 2740,
+ 1794, 1851, 1852, 1849, 1850, 2740, 1832, 1838, 2740, 1810,
+ 2740, 1854, 1803, 1814, 1815, 1800, 1801, 1809, 1866, 2740,
+ 1811, 1863, 1864, 1816, 1811, 1829, 1826, 1817, 1830, 1825,
+
+ 2740, 1822, 1827, 1825, 1880, 1881, 1826, 1825, 1839, 1826,
+ 2740, 1841, 1842, 1843, 1844, 2740, 1834, 1846, 1894, 1844,
+ 1849, 1897, 1836, 1844, 1838, 1846, 1859, 2740, 1860, 1841,
+ 1842, 1849, 1851, 2740, 1865, 1862, 1905, 1863, 2740, 2740,
+ 1867, 1893, 1894, 1892, 1855, 1855, 1864, 1871, 1864, 1863,
+ 1874, 1861, 2740, 1877, 1865, 1868, 1927, 1864, 1883, 1874,
+ 1886, 1879, 1878, 1887, 1889, 1893, 2740, 2740, 1886, 1877,
+ 1879, 1943, 1883, 1945, 1884, 1947, 1902, 1949, 2740, 1888,
+ 1951, 2740, 1947, 1906, 1903, 1908, 1895, 1903, 1914, 1901,
+ 1912, 1898, 1896, 1904, 1903, 1908, 1900, 1945, 1969, 1951,
+
+ 1971, 1921, 1910, 1923, 1913, 1930, 1929, 1973, 1914, 1933,
+ 1934, 2740, 1939, 1932, 1984, 1938, 1925, 1940, 1988, 1942,
+ 1945, 1932, 1941, 1942, 2740, 1994, 2740, 1946, 2740, 1955,
+ 2740, 1999, 2740, 1938, 2001, 1945, 2003, 1943, 2005, 1950,
+ 2002, 2003, 1962, 2005, 1948, 1952, 1970, 2014, 1970, 1997,
+ 2740, 1993, 2740, 1963, 1957, 1954, 2016, 1979, 1972, 1968,
+ 2025, 1965, 1967, 1966, 1973, 2740, 1969, 2031, 1972, 2740,
+ 1977, 1987, 1972, 1980, 1982, 2740, 1983, 1977, 2740, 1989,
+ 2740, 1985, 2740, 1996, 2740, 1998, 1998, 1989, 2048, 1989,
+ 1999, 1984, 1997, 2740, 1999, 2030, 2036, 2008, 2006, 2058,
+
+ 1996, 1998, 1995, 2019, 2740, 2006, 2013, 2014, 2017, 2006,
+ 2740, 2063, 2007, 2015, 2024, 2023, 2026, 2027, 2028, 2021,
+ 2016, 2017, 2017, 2029, 2026, 2740, 2037, 2025, 2081, 2029,
+ 2041, 2069, 2090, 2091, 2035, 2740, 2035, 2047, 2095, 2041,
+ 2043, 2041, 2042, 2100, 2050, 2037, 2052, 2057, 2105, 2106,
+ 2107, 2108, 2109, 2063, 2111, 2112, 2113, 2054, 2059, 2055,
+ 2071, 2054, 2066, 2060, 2122, 2740, 2740, 2067, 2078, 2125,
+ 2740, 2079, 2064, 2082, 2073, 2740, 2074, 2088, 2084, 2077,
+ 2740, 2740, 2740, 2740, 2740, 2134, 2740, 2740, 2740, 2074,
+ 2082, 2077, 2133, 2096, 2093, 2141, 2740, 2137, 2100, 2740,
+
+ 2144, 2083, 2146, 2086, 2099, 2098, 2099, 2089, 2740, 2090,
+ 2153, 2103, 2112, 2105, 2152, 2740, 2103, 2097, 2740, 2109,
+ 2740, 2156, 2162, 2101, 2117, 2165, 2166, 2740, 2120, 2114,
+ 2107, 2127, 2114, 2126, 2117, 2121, 2740, 2171, 2117, 2740,
+ 2740, 2117, 2125, 2175, 2132, 2125, 2137, 2184, 2129, 2129,
+ 2125, 2127, 2189, 2190, 2129, 2145, 2130, 2147, 2740, 2195,
+ 2139, 2146, 2198, 2740, 2740, 2148, 2200, 2145, 2202, 2740,
+ 2150, 2149, 2740, 2150, 2740, 2144, 2740, 2144, 2161, 2162,
+ 2210, 2153, 2212, 2213, 2740, 2214, 2740, 2740, 2740, 2740,
+ 2220, 2223, 2226, 2227, 2229, 2232, 2235, 2238
+
+ } ;
+
+static const flex_int16_t yy_def[2299] =
+ { 0,
+ 2291, 2291, 2292, 2292, 2291, 2291, 2291, 2291, 2291, 2291,
+ 2290, 2290, 2290, 2290, 2290, 2293, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2294,
+ 2290, 2290, 2290, 2295, 15, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2296, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2293,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2297, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2294, 2290,
+
+ 2295, 2290, 2290, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2298, 45, 2296, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 2212, 2205, 2205,
2205, 2205, 2205, 2205, 2205, 2205, 45, 45, 2205, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 2205,
+=======
+ 2297, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 45,
+
+ 45, 45, 2290, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 2298, 2290, 2290, 119, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 45, 2205,
2205, 2205, 2205, 2205, 2205, 2205, 45, 45, 45, 45,
2205, 45, 2205, 45, 2205, 45, 116, 2205, 45, 45,
+=======
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 45, 45, 45, 45, 45, 2290, 45, 45, 2290,
+ 45, 2290, 45, 119, 2290, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 45, 2205,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 45, 2290, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 2205, 2205, 2205, 45, 45,
45, 2205, 45, 2205, 45, 116, 45, 45, 45, 45,
45, 45, 45, 45, 45, 2205, 45, 45, 45, 45,
45, 45, 45, 45, 45, 2205, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
2205, 2205, 45, 45, 45, 45, 45, 45, 45, 45,
+=======
+ 45, 45, 2290, 2290, 2290, 45, 45, 45, 45, 2290,
+ 45, 45, 2290, 45, 119, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2290, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2290, 45, 2290,
+
+ 45, 2290, 45, 2290, 45, 45, 45, 2290, 45, 45,
+ 2290, 2290, 2290, 45, 45, 45, 45, 45, 2290, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2290, 45,
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 45, 2290, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2290, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 2205, 45, 45, 45, 45,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2290,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
2205, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 2205, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 2205, 45, 45, 45,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2290,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 2205, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 2205, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2290, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 2205, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 2205,
45, 45, 45, 45, 45, 45, 2205, 45, 45, 45,
45, 45, 45, 45, 45, 45, 2205, 45, 45, 2205,
2205, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+=======
+
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2290, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 2290, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 2290, 45, 45, 45,
+ 45, 45, 45, 2290, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2290, 45, 45, 2290, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 2205, 45, 45, 45, 45,
+=======
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 2205, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 45, 45, 45, 2205,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 2205, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 2205, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 2205, 45, 45,
+=======
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2290,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2290,
+ 45, 2290, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2290, 45, 45, 45, 45, 2290, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 45, 45, 2205, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 2205, 45,
45, 2205, 2205, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 2205, 45, 45, 45, 45, 45, 45,
45, 2205, 2205, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 2205, 45, 45, 45, 2205, 45, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2290, 45, 45, 2290, 2290, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2290, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 2290, 45, 2290, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2290, 45, 2290,
+ 45, 45, 2290, 45, 45, 45, 45, 45, 2290, 45,
+ 45, 2290, 45, 2290, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 2290,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 2290, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 2205, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 2205, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 2205, 45, 45, 45, 45, 2205, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+=======
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 2290, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 2290, 45, 45, 45, 45, 45, 2290,
+ 45, 2290, 45, 45, 2290, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2290, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 45, 45, 2290,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2290, 45, 2290, 45, 2290, 45, 45, 2290,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 2290, 45, 45,
+
+ 2290, 2290, 2290, 45, 45, 2290, 45, 45, 45, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2290, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 2290, 45, 45, 45, 2290, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 2290,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 2205, 45, 45, 45, 45, 45, 45, 45, 45,
2205, 45, 45, 45, 2205, 45, 45, 45, 2205, 2205,
45, 45, 45, 2205, 2205, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 2205, 45, 45, 45, 45, 45,
45, 2205, 45, 45, 45, 45, 45, 45, 45, 45,
+=======
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
+ 45, 2290, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 2290, 2290, 45, 45, 45, 2290, 2290,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 45, 2290,
+ 45, 45, 2290, 45, 45, 45, 2290, 45, 45, 45,
+ 45, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 2290,
+
+ 45, 45, 45, 45, 45, 2290, 45, 45, 45, 2290,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 2290, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2290, 45, 2290,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 2290, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 2290,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2290, 45, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 2290, 45, 45,
+ 45, 45, 45, 2290, 45, 45, 45, 45, 2290, 2290,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 2290, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2290, 45,
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
2205, 45, 45, 2205, 45, 45, 45, 45, 2205, 45,
45, 45, 45, 2205, 2205, 2205, 2205, 2205, 45, 2205,
} ;
static const flex_int16_t yy_chk[2671] =
+=======
+ 45, 2290, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 2290, 45, 2290, 45,
+ 2290, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 2290, 45, 2290, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 45, 2290,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 2290, 45,
+ 2290, 45, 2290, 45, 2290, 45, 45, 45, 45, 45,
+ 45, 45, 45, 2290, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 2290, 45, 45, 45, 45, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2290, 2290, 45, 45, 45,
+ 2290, 45, 45, 45, 45, 2290, 45, 45, 45, 45,
+ 2290, 2290, 2290, 2290, 2290, 45, 2290, 2290, 2290, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 45, 45, 2290,
+
+ 45, 45, 45, 45, 45, 45, 45, 45, 2290, 45,
+ 45, 45, 45, 45, 45, 2290, 45, 45, 2290, 45,
+ 2290, 45, 45, 45, 45, 45, 45, 2290, 45, 45,
+ 45, 45, 45, 45, 45, 45, 2290, 45, 45, 2290,
+ 2290, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2290, 45,
+ 45, 45, 45, 2290, 2290, 45, 45, 45, 45, 2290,
+ 45, 45, 2290, 45, 2290, 45, 2290, 45, 45, 45,
+ 45, 45, 45, 45, 2290, 45, 2290, 2290, 2290, 0,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290
+
+ } ;
+
+static const flex_int16_t yy_nxt[2817] =
{ 0,
- 0, 1, 1, 1, 0, 1, 1, 0, 1, 1,
+ 2290, 13, 14, 13, 2290, 15, 16, 102, 17, 18,
+ 19, 20, 21, 22, 22, 22, 22, 22, 23, 24,
+ 86, 255, 37, 14, 37, 87, 25, 26, 38, 37,
+ 14, 37, 42, 27, 42, 38, 2290, 2290, 28, 91,
+ 13, 14, 13, 92, 29, 91, 30, 103, 13, 14,
+ 13, 205, 25, 31, 13, 14, 13, 42, 40, 42,
+ 571, 32, 13, 14, 13, 91, 40, 33, 256, 170,
+ 93, 94, 92, 171, 34, 35, 13, 14, 13, 205,
+ 15, 16, 92, 17, 18, 19, 20, 21, 22, 22,
+ 22, 22, 22, 23, 24, 39, 13, 14, 13, 93,
+
+ 93, 25, 26, 39, 13, 14, 13, 42, 27, 42,
+ 134, 95, 572, 28, 109, 246, 41, 104, 105, 29,
+ 108, 30, 115, 135, 41, 233, 234, 25, 31, 96,
+ 388, 247, 89, 136, 89, 235, 32, 90, 90, 90,
+ 90, 90, 33, 109, 104, 105, 108, 389, 115, 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, 48, 49, 50, 51, 45,
+ 45, 52, 45, 53, 54, 45, 45, 45, 45, 55,
+ 56, 45, 57, 45, 45, 45, 58, 45, 45, 59,
+
+ 45, 60, 61, 62, 63, 64, 65, 66, 52, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 45, 45, 45, 45, 45, 81, 260, 82,
+ 82, 82, 82, 82, 81, 116, 84, 84, 84, 84,
+ 84, 261, 83, 85, 85, 85, 85, 85, 81, 83,
+ 84, 84, 84, 84, 84, 113, 83, 138, 104, 265,
+ 315, 111, 116, 83, 139, 140, 316, 114, 83, 112,
+ 141, 102, 192, 142, 143, 83, 108, 447, 876, 448,
+ 266, 113, 83, 194, 144, 120, 145, 111, 193, 83,
+ 45, 121, 45, 45, 45, 45, 114, 112, 45, 192,
+
+ 45, 45, 108, 118, 147, 148, 45, 45, 149, 45,
+ 45, 103, 194, 137, 150, 193, 45, 194, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 206,
+ 105, 128, 159, 45, 129, 130, 197, 45, 131, 132,
+ 160, 45, 161, 192, 193, 204, 200, 162, 163, 45,
+ 122, 133, 111, 45, 123, 45, 119, 105, 124, 151,
+ 112, 125, 207, 152, 126, 877, 116, 153, 127, 115,
+ 195, 196, 204, 275, 156, 200, 157, 164, 158, 154,
+ 165, 166, 172, 155, 356, 419, 173, 357, 112, 174,
+
+ 201, 167, 208, 116, 168, 115, 175, 176, 179, 180,
+ 420, 177, 178, 190, 210, 187, 211, 213, 113, 212,
+ 188, 85, 85, 85, 85, 85, 201, 309, 208, 878,
+ 114, 208, 276, 81, 83, 82, 82, 82, 82, 82,
+ 210, 310, 210, 213, 181, 211, 182, 212, 83, 183,
+ 184, 90, 90, 90, 90, 90, 89, 273, 89, 185,
+ 83, 90, 90, 90, 90, 90, 186, 81, 314, 84,
+ 84, 84, 84, 84, 83, 85, 85, 85, 85, 85,
+ 200, 221, 83, 90, 90, 90, 90, 90, 83, 101,
+ 222, 227, 879, 240, 223, 241, 101, 211, 218, 327,
+
+ 228, 229, 243, 250, 880, 280, 251, 290, 83, 219,
+ 252, 291, 242, 286, 83, 244, 287, 288, 325, 245,
+ 281, 282, 283, 303, 327, 327, 319, 304, 293, 101,
+ 326, 305, 326, 101, 332, 345, 415, 101, 411, 432,
+ 325, 781, 433, 881, 782, 101, 416, 325, 336, 101,
+ 330, 101, 101, 216, 333, 882, 335, 326, 883, 329,
+ 332, 217, 217, 217, 217, 217, 294, 295, 296, 328,
+ 217, 217, 217, 217, 217, 217, 336, 297, 338, 298,
+ 333, 299, 300, 339, 301, 335, 341, 343, 332, 397,
+ 644, 412, 346, 466, 358, 338, 217, 217, 217, 217,
+
+ 217, 217, 359, 645, 338, 340, 341, 463, 360, 339,
+ 452, 463, 341, 467, 347, 343, 344, 344, 344, 344,
+ 344, 406, 466, 469, 561, 344, 344, 344, 344, 344,
+ 344, 471, 341, 463, 472, 760, 492, 464, 466, 471,
+ 467, 493, 761, 614, 498, 398, 457, 544, 399, 469,
+ 499, 344, 344, 344, 344, 344, 344, 545, 812, 813,
+ 471, 472, 475, 475, 475, 475, 475, 477, 546, 614,
+ 730, 475, 475, 475, 475, 475, 475, 515, 532, 533,
+ 534, 539, 516, 609, 535, 562, 565, 540, 575, 584,
+ 566, 604, 576, 585, 609, 837, 605, 475, 475, 475,
+
+ 475, 475, 475, 633, 615, 656, 616, 634, 692, 755,
+ 657, 722, 609, 693, 680, 635, 723, 636, 637, 638,
+ 639, 640, 884, 618, 681, 731, 756, 757, 885, 753,
+ 886, 752, 615, 517, 616, 755, 759, 838, 518, 45,
+ 45, 45, 45, 45, 754, 887, 888, 889, 45, 45,
+ 45, 45, 45, 45, 756, 753, 757, 850, 890, 891,
+ 892, 896, 851, 893, 894, 895, 897, 898, 899, 900,
+ 901, 902, 903, 754, 45, 45, 45, 45, 45, 45,
+ 904, 905, 906, 907, 908, 910, 909, 892, 891, 911,
+ 893, 895, 912, 894, 913, 914, 915, 916, 917, 918,
+
+ 919, 920, 921, 922, 852, 923, 924, 925, 926, 927,
+ 928, 929, 930, 931, 934, 935, 936, 932, 937, 938,
+ 939, 933, 940, 941, 942, 943, 944, 945, 946, 947,
+ 948, 949, 950, 951, 952, 953, 954, 955, 956, 957,
+ 958, 959, 960, 961, 962, 964, 965, 963, 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, 992, 993, 994, 995, 996, 997,
+ 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
+ 1008, 1010, 1011, 1014, 1015, 1016, 1017, 1009, 1019, 1012,
+
+ 1020, 1021, 1018, 1013, 1022, 1023, 1024, 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, 1033, 1060, 1061, 1034, 1062, 1063, 1037, 1064,
+ 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074,
+ 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084,
+ 1085, 1087, 1088, 1089, 1090, 1086, 1091, 1092, 1093, 1094,
+ 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104,
+ 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1114, 1115,
+
+ 1116, 1113, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124,
+ 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134,
+ 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144,
+ 1145, 1146, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155,
+ 1156, 1157, 1158, 1147, 1159, 1160, 1161, 1162, 1163, 1164,
+ 1165, 1166, 1167, 1168, 1169, 1170, 1173, 1171, 1174, 1175,
+ 1172, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
+ 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194,
+ 1195, 1169, 1168, 1196, 1170, 1171, 1172, 1197, 1198, 1199,
+ 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+
+ 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219,
+ 1220, 1221, 1222, 1225, 1226, 1227, 1228, 1223, 1229, 1230,
+ 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240,
+ 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1251,
+ 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1250,
+ 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270,
+ 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280,
+ 1281, 1282, 1283, 1224, 1284, 1285, 1286, 1287, 1288, 1289,
+ 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1300,
+ 1299, 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, 1297, 1299, 1300, 1301,
+ 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335,
+ 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345,
+ 1346, 1347, 1348, 1349, 1351, 1353, 1354, 1355, 1350, 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, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396,
+ 1397, 1352, 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, 1424, 1423, 1425,
+ 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435,
+ 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445,
+ 1446, 1421, 1447, 1420, 1423, 1422, 1424, 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, 1480,
+ 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490,
+ 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500,
+
+ 1501, 1502, 1503, 1504, 1505, 1506, 1507, 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, 1538, 1539, 1540, 1541, 1542,
+ 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552,
+ 1553, 1554, 1555, 1556, 1529, 1530, 1557, 1558, 1531, 1559,
+ 1560, 1561, 1508, 1562, 1563, 1564, 1565, 1566, 1567, 1568,
+ 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578,
+ 1579, 1537, 1580, 1581, 1582, 1583, 1585, 1586, 1587, 1588,
+ 1589, 1590, 1591, 1584, 1592, 1593, 1594, 1595, 1596, 1597,
+
+ 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607,
+ 1608, 1609, 1610, 1611, 1613, 1614, 1616, 1615, 1612, 1617,
+ 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627,
+ 1628, 1629, 1630, 1631, 1634, 1633, 1635, 1636, 1637, 1638,
+ 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648,
+ 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1632, 1630, 1656,
+ 1629, 1633, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664,
+ 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674,
+ 1675, 1676, 1677, 1678, 1679, 1632, 1680, 1681, 1682, 1683,
+ 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693,
+
+ 1694, 1695, 1696, 1697, 1698, 1699, 1703, 1700, 1704, 1705,
+ 1701, 1706, 1707, 1702, 1708, 1709, 1710, 1711, 1712, 1713,
+ 1714, 1715, 1716, 1717, 1718, 1720, 1719, 1721, 1722, 1723,
+ 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1735,
+ 1736, 1737, 1733, 1738, 1739, 1740, 1741, 1742, 1743, 1744,
+ 1717, 1718, 1719, 1734, 1720, 1721, 1745, 1746, 1747, 1748,
+ 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 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, 1804, 1803, 1805, 1806, 1807, 1808, 1809,
+ 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1757, 1818,
+ 1819, 1820, 1821, 1822, 1823, 1824, 1827, 1828, 1802, 1829,
+ 1801, 1803, 1804, 1825, 1805, 1830, 1831, 1832, 1826, 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, 1875, 1877,
+ 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, 1937, 1938, 1939, 1940, 1936, 1941,
+ 1942, 1943, 1945, 1944, 1946, 1947, 1948, 1949, 1950, 1951,
+ 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961,
+ 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1943, 1944,
+ 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, 1998, 1999, 2024, 2000, 2025, 2026,
+ 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036,
+ 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2047,
+ 2048, 2046, 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,
+
+ 2050, 2052, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084,
+ 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094,
+ 2095, 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, 2096, 2122, 2097,
+ 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132,
+ 2134, 2133, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142,
+ 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152,
+ 2153, 2154, 2155, 2156, 2157, 2158, 2132, 2133, 2159, 2160,
+ 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170,
+
+ 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180,
+ 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190,
+ 2165, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199,
+ 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209,
+ 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219,
+ 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229,
+ 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239,
+ 2240, 2241, 2242, 2243, 2244, 2245, 2247, 2246, 2248, 2249,
+ 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259,
+ 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269,
+
+ 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279,
+ 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289,
+ 12, 12, 12, 36, 36, 36, 80, 99, 80, 101,
+ 101, 101, 117, 117, 117, 191, 875, 191, 214, 214,
+ 214, 874, 873, 872, 871, 870, 869, 868, 867, 866,
+ 865, 864, 863, 862, 861, 860, 859, 858, 857, 856,
+ 855, 854, 853, 849, 848, 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, 811, 810, 809,
+
+ 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, 780, 779, 778, 777,
+ 776, 775, 774, 773, 772, 771, 770, 769, 768, 767,
+ 766, 765, 764, 763, 762, 758, 752, 751, 750, 749,
+ 748, 747, 746, 745, 744, 743, 742, 741, 740, 739,
+ 738, 737, 736, 735, 734, 733, 732, 729, 728, 727,
+ 726, 725, 724, 721, 720, 719, 718, 717, 716, 715,
+ 714, 713, 712, 711, 710, 709, 708, 707, 706, 705,
+ 704, 703, 702, 701, 700, 699, 698, 697, 696, 695,
+
+ 694, 691, 690, 689, 688, 687, 686, 685, 684, 683,
+ 682, 679, 678, 677, 676, 675, 674, 673, 672, 671,
+ 670, 669, 668, 667, 666, 665, 664, 663, 662, 661,
+ 660, 659, 658, 655, 654, 653, 652, 651, 650, 649,
+ 648, 647, 646, 643, 642, 641, 632, 631, 630, 629,
+ 628, 627, 626, 625, 624, 623, 622, 621, 620, 619,
+ 617, 613, 612, 611, 610, 608, 607, 606, 603, 602,
+ 601, 600, 599, 598, 597, 596, 595, 594, 593, 592,
+ 591, 590, 589, 588, 587, 586, 583, 582, 581, 580,
+ 579, 578, 577, 574, 573, 570, 569, 568, 567, 564,
+
+ 563, 560, 559, 558, 557, 556, 555, 554, 553, 552,
+ 551, 550, 549, 548, 547, 543, 542, 541, 538, 537,
+ 536, 531, 530, 529, 528, 527, 526, 525, 524, 523,
+ 522, 521, 520, 519, 514, 513, 512, 511, 510, 509,
+ 508, 507, 506, 505, 504, 503, 502, 501, 500, 497,
+ 496, 495, 494, 491, 490, 489, 488, 487, 486, 485,
+ 484, 483, 482, 481, 480, 479, 478, 476, 474, 473,
+ 470, 468, 465, 462, 461, 460, 459, 458, 456, 455,
+ 454, 453, 451, 450, 449, 446, 445, 444, 443, 442,
+ 441, 440, 439, 438, 437, 436, 435, 434, 431, 430,
+
+ 429, 428, 427, 426, 425, 424, 423, 422, 421, 418,
+ 417, 414, 413, 410, 409, 408, 407, 405, 404, 403,
+ 402, 401, 400, 396, 395, 394, 393, 392, 391, 390,
+ 387, 386, 385, 384, 383, 382, 381, 380, 379, 378,
+ 377, 376, 375, 374, 373, 372, 371, 370, 369, 368,
+ 367, 366, 365, 364, 363, 362, 361, 355, 354, 353,
+ 352, 351, 350, 349, 348, 215, 342, 340, 337, 334,
+ 331, 324, 323, 322, 321, 320, 318, 317, 313, 312,
+ 311, 308, 307, 306, 302, 292, 289, 285, 284, 279,
+ 278, 277, 274, 272, 271, 270, 269, 268, 267, 264,
+
+ 263, 262, 259, 258, 257, 254, 253, 249, 248, 239,
+ 238, 237, 236, 232, 231, 230, 226, 225, 224, 220,
+ 215, 209, 203, 202, 199, 198, 189, 169, 146, 110,
+ 107, 106, 43, 100, 98, 97, 88, 43, 2290, 11,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290
+ } ;
+
+static const flex_int16_t yy_chk[2817] =
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
+ { 0,
+ 0, 1, 1, 1, 0, 1, 1, 44, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+<<<<<<< HEAD
21, 687, 3, 3, 3, 21, 1, 1, 3, 44,
0, 1, 4, 4, 4, 13, 1, 13, 4, 27,
28, 1, 107, 1, 5, 5, 5, 26, 32, 1,
2, 25, 25, 25, 25, 25, 2, 53, 51, 55,
728, 56, 253, 2, 2, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+=======
+ 21, 143, 3, 3, 3, 21, 1, 1, 3, 4,
+ 4, 4, 13, 1, 13, 4, 0, 0, 1, 26,
+ 5, 5, 5, 27, 1, 31, 1, 44, 6, 6,
+ 6, 109, 1, 1, 7, 7, 7, 37, 7, 37,
+ 430, 1, 8, 8, 8, 26, 8, 1, 143, 74,
+ 28, 31, 27, 74, 1, 1, 2, 2, 2, 109,
+ 2, 2, 32, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 5, 9, 9, 9, 28,
+
+ 33, 2, 2, 6, 10, 10, 10, 42, 2, 42,
+ 62, 32, 430, 2, 52, 137, 9, 47, 48, 2,
+ 51, 2, 56, 62, 10, 130, 130, 2, 2, 33,
+ 258, 137, 25, 62, 25, 130, 2, 25, 25, 25,
+ 25, 25, 2, 52, 47, 48, 51, 258, 56, 2,
+ 2, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
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, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 17, 110,
- 17, 17, 17, 17, 17, 19, 58, 19, 19, 19,
- 19, 19, 327, 17, 20, 20, 20, 20, 20, 22,
- 19, 22, 22, 22, 22, 22, 110, 20, 90, 91,
- 54, 59, 58, 61, 22, 59, 17, 62, 58, 59,
- 54, 327, 59, 19, 60, 59, 61, 60, 60, 59,
- 20, 60, 60, 54, 90, 91, 61, 22, 45, 69,
- 62, 45, 45, 45, 60, 45, 45, 45, 54, 57,
- 63, 62, 45, 45, 309, 45, 57, 63, 69, 309,
-
- 69, 45, 69, 45, 45, 45, 45, 45, 45, 45,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 17, 147, 17,
+ 17, 17, 17, 17, 19, 57, 19, 19, 19, 19,
+ 19, 147, 17, 20, 20, 20, 20, 20, 22, 19,
+ 22, 22, 22, 22, 22, 55, 20, 64, 59, 151,
+ 182, 54, 57, 22, 64, 65, 182, 55, 17, 54,
+ 65, 101, 91, 65, 66, 19, 63, 310, 737, 310,
+ 151, 55, 20, 93, 66, 59, 66, 54, 92, 22,
+ 45, 59, 45, 45, 45, 45, 55, 54, 45, 91,
+
+ 45, 45, 63, 58, 68, 68, 45, 45, 68, 45,
+ 58, 101, 93, 63, 68, 92, 45, 96, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+<<<<<<< HEAD
45, 45, 45, 45, 92, 65, 57, 73, 67, 67,
57, 73, 67, 78, 57, 65, 68, 65, 67, 134,
68, 108, 57, 70, 68, 113, 57, 112, 57, 57,
2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205
+=======
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 110,
+ 60, 61, 71, 58, 61, 61, 96, 58, 61, 61,
+ 71, 58, 71, 94, 95, 108, 104, 71, 71, 58,
+ 60, 61, 70, 58, 60, 58, 58, 60, 60, 69,
+ 70, 60, 110, 69, 60, 738, 79, 69, 60, 77,
+ 94, 95, 108, 160, 70, 104, 70, 72, 70, 69,
+ 72, 72, 75, 69, 228, 284, 75, 228, 70, 75,
+
+ 105, 72, 111, 79, 72, 77, 75, 75, 76, 76,
+ 284, 75, 75, 79, 113, 77, 114, 116, 76, 115,
+ 77, 81, 81, 81, 81, 81, 105, 177, 158, 739,
+ 76, 111, 160, 82, 81, 82, 82, 82, 82, 82,
+ 181, 177, 113, 116, 76, 114, 76, 115, 82, 76,
+ 76, 89, 89, 89, 89, 89, 83, 158, 83, 76,
+ 81, 83, 83, 83, 83, 83, 76, 84, 181, 84,
+ 84, 84, 84, 84, 82, 85, 85, 85, 85, 85,
+ 120, 122, 84, 90, 90, 90, 90, 90, 85, 103,
+ 122, 126, 740, 135, 122, 135, 103, 185, 120, 194,
+
+ 126, 126, 136, 140, 740, 164, 140, 169, 84, 120,
+ 140, 169, 135, 167, 85, 136, 167, 167, 192, 136,
+ 164, 164, 164, 173, 197, 194, 185, 173, 171, 103,
+ 193, 173, 196, 103, 200, 218, 281, 103, 278, 296,
+ 195, 640, 296, 741, 640, 103, 281, 192, 205, 103,
+ 197, 103, 103, 119, 201, 742, 204, 193, 743, 196,
+ 200, 119, 119, 119, 119, 119, 171, 171, 171, 195,
+ 119, 119, 119, 119, 119, 119, 205, 171, 208, 171,
+ 201, 171, 171, 209, 171, 204, 211, 213, 219, 266,
+ 498, 278, 218, 332, 229, 273, 119, 119, 119, 119,
+
+ 119, 119, 229, 498, 208, 314, 319, 325, 229, 209,
+ 314, 328, 211, 333, 219, 213, 217, 217, 217, 217,
+ 217, 273, 332, 335, 422, 217, 217, 217, 217, 217,
+ 217, 338, 319, 325, 339, 620, 362, 328, 347, 406,
+ 333, 362, 620, 472, 367, 266, 319, 405, 266, 335,
+ 367, 217, 217, 217, 217, 217, 217, 405, 672, 672,
+ 338, 339, 344, 344, 344, 344, 344, 347, 406, 472,
+ 584, 344, 344, 344, 344, 344, 344, 383, 397, 397,
+ 397, 401, 383, 466, 397, 422, 425, 401, 433, 441,
+ 425, 460, 433, 441, 477, 698, 460, 344, 344, 344,
+
+ 344, 344, 344, 494, 474, 510, 474, 494, 546, 614,
+ 510, 577, 466, 546, 534, 494, 577, 494, 494, 494,
+ 494, 494, 744, 477, 534, 584, 615, 616, 745, 610,
+ 746, 618, 474, 383, 474, 614, 618, 698, 383, 475,
+ 475, 475, 475, 475, 610, 747, 748, 749, 475, 475,
+ 475, 475, 475, 475, 615, 610, 616, 711, 750, 753,
+ 754, 758, 711, 755, 756, 757, 759, 760, 761, 762,
+ 763, 764, 765, 610, 475, 475, 475, 475, 475, 475,
+ 766, 767, 768, 769, 769, 770, 769, 754, 753, 771,
+ 755, 757, 772, 756, 773, 774, 775, 776, 777, 778,
+
+ 779, 780, 781, 782, 711, 783, 784, 785, 786, 787,
+ 788, 789, 790, 791, 792, 793, 794, 791, 795, 796,
+ 797, 791, 798, 799, 801, 802, 803, 804, 805, 806,
+ 807, 808, 809, 810, 811, 812, 813, 814, 815, 816,
+ 817, 818, 819, 820, 821, 822, 823, 821, 824, 826,
+ 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
+ 838, 839, 840, 841, 842, 843, 844, 845, 846, 847,
+ 848, 849, 851, 852, 853, 854, 855, 856, 857, 858,
+ 859, 860, 861, 862, 863, 864, 865, 866, 867, 868,
+ 869, 870, 871, 872, 873, 874, 875, 869, 876, 871,
+
+ 877, 878, 875, 871, 880, 881, 882, 883, 884, 885,
+ 886, 887, 888, 889, 890, 891, 892, 893, 894, 895,
+ 896, 897, 898, 899, 900, 901, 902, 903, 904, 906,
+ 907, 908, 909, 910, 911, 912, 913, 914, 915, 916,
+ 917, 918, 891, 919, 920, 892, 921, 922, 895, 923,
+ 924, 925, 926, 927, 928, 929, 930, 931, 932, 933,
+ 934, 935, 936, 937, 938, 940, 941, 942, 943, 944,
+ 945, 946, 947, 948, 949, 945, 950, 951, 952, 953,
+ 954, 955, 956, 959, 960, 961, 962, 963, 964, 965,
+ 968, 969, 970, 971, 972, 973, 975, 976, 977, 978,
+
+ 979, 976, 980, 981, 982, 983, 985, 986, 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, 1015, 1016, 1017, 1018, 1019,
+ 1020, 1021, 1023, 1011, 1024, 1025, 1026, 1027, 1028, 1029,
+ 1030, 1031, 1032, 1033, 1034, 1035, 1038, 1036, 1039, 1040,
+ 1037, 1041, 1042, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
+ 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060,
+ 1061, 1034, 1033, 1062, 1035, 1036, 1037, 1063, 1064, 1065,
+ 1066, 1067, 1068, 1069, 1071, 1072, 1073, 1074, 1075, 1076,
+
+ 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1086, 1087,
+ 1088, 1089, 1090, 1091, 1092, 1094, 1095, 1090, 1096, 1097,
+ 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
+ 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
+ 1118, 1119, 1121, 1123, 1124, 1125, 1127, 1128, 1129, 1116,
+ 1130, 1131, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140,
+ 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150,
+ 1152, 1153, 1154, 1090, 1155, 1156, 1157, 1158, 1159, 1160,
+ 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1171,
+ 1170, 1172, 1174, 1175, 1176, 1177, 1179, 1180, 1181, 1182,
+
+ 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192,
+ 1193, 1194, 1195, 1196, 1197, 1198, 1168, 1170, 1171, 1172,
+ 1199, 1200, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+ 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219,
+ 1220, 1221, 1223, 1224, 1225, 1226, 1227, 1228, 1224, 1229,
+ 1230, 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, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270,
+ 1271, 1225, 1272, 1274, 1275, 1278, 1279, 1280, 1281, 1282,
+
+ 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292,
+ 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1301, 1300, 1302,
+ 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312,
+ 1313, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323,
+ 1324, 1298, 1326, 1297, 1300, 1299, 1301, 1327, 1328, 1329,
+ 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339,
+ 1340, 1341, 1342, 1343, 1344, 1345, 1348, 1350, 1352, 1353,
+ 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363,
+ 1364, 1365, 1366, 1367, 1369, 1371, 1372, 1374, 1375, 1376,
+ 1377, 1378, 1380, 1381, 1383, 1385, 1387, 1388, 1389, 1390,
+
+ 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400,
+ 1401, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1412, 1413,
+ 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423,
+ 1424, 1426, 1427, 1428, 1430, 1431, 1432, 1433, 1434, 1435,
+ 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445,
+ 1446, 1447, 1448, 1449, 1421, 1422, 1450, 1451, 1423, 1452,
+ 1453, 1454, 1397, 1456, 1457, 1458, 1459, 1460, 1461, 1462,
+ 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472,
+ 1473, 1430, 1474, 1476, 1477, 1478, 1479, 1480, 1481, 1482,
+ 1483, 1484, 1485, 1478, 1486, 1489, 1490, 1491, 1492, 1493,
+
+ 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503,
+ 1505, 1506, 1507, 1508, 1509, 1511, 1513, 1511, 1508, 1514,
+ 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526,
+ 1527, 1528, 1529, 1530, 1533, 1531, 1534, 1535, 1537, 1538,
+ 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548,
+ 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1530, 1529, 1556,
+ 1528, 1531, 1558, 1559, 1561, 1562, 1563, 1564, 1565, 1566,
+ 1567, 1568, 1569, 1570, 1571, 1572, 1574, 1576, 1578, 1579,
+ 1581, 1582, 1583, 1584, 1585, 1530, 1586, 1587, 1588, 1589,
+ 1590, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1604,
+
+ 1605, 1607, 1608, 1609, 1610, 1612, 1613, 1612, 1614, 1615,
+ 1612, 1616, 1617, 1612, 1618, 1619, 1620, 1621, 1622, 1623,
+ 1625, 1627, 1628, 1629, 1630, 1632, 1631, 1633, 1635, 1636,
+ 1637, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1648,
+ 1649, 1650, 1647, 1651, 1652, 1653, 1654, 1656, 1657, 1658,
+ 1629, 1630, 1631, 1647, 1632, 1633, 1659, 1661, 1662, 1663,
+ 1664, 1665, 1666, 1667, 1668, 1669, 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,
+
+ 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714,
+ 1715, 1717, 1718, 1720, 1719, 1721, 1722, 1723, 1726, 1727,
+ 1728, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1670, 1738,
+ 1739, 1740, 1741, 1742, 1743, 1744, 1747, 1748, 1718, 1749,
+ 1717, 1719, 1720, 1746, 1721, 1750, 1751, 1752, 1746, 1753,
+ 1754, 1755, 1757, 1758, 1759, 1761, 1762, 1764, 1765, 1766,
+ 1768, 1769, 1770, 1771, 1772, 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, 1801, 1802, 1803, 1804, 1805, 1807, 1808, 1809, 1811,
+
+ 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821,
+ 1822, 1823, 1824, 1826, 1827, 1828, 1829, 1830, 1801, 1803,
+ 1831, 1833, 1834, 1835, 1837, 1838, 1839, 1840, 1841, 1842,
+ 1843, 1844, 1845, 1846, 1848, 1849, 1850, 1851, 1852, 1853,
+ 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863,
+ 1864, 1865, 1866, 1867, 1869, 1871, 1872, 1873, 1867, 1874,
+ 1875, 1877, 1880, 1878, 1882, 1883, 1884, 1885, 1886, 1887,
+ 1888, 1889, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898,
+ 1899, 1900, 1902, 1903, 1904, 1905, 1906, 1907, 1877, 1878,
+ 1908, 1909, 1910, 1912, 1913, 1914, 1915, 1917, 1918, 1919,
+
+ 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1929, 1930,
+ 1931, 1932, 1933, 1935, 1936, 1937, 1938, 1941, 1942, 1943,
+ 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1954,
+ 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964,
+ 1965, 1966, 1969, 1970, 1942, 1943, 1971, 1944, 1972, 1973,
+ 1974, 1975, 1976, 1977, 1978, 1980, 1981, 1983, 1984, 1985,
+ 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+ 1996, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013, 2014, 2015,
+ 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2026,
+
+ 1998, 2000, 2028, 2030, 2032, 2034, 2035, 2036, 2037, 2038,
+ 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048,
+ 2049, 2050, 2052, 2054, 2055, 2056, 2057, 2058, 2059, 2060,
+ 2061, 2062, 2063, 2064, 2065, 2067, 2068, 2069, 2071, 2072,
+ 2073, 2074, 2075, 2077, 2078, 2080, 2082, 2050, 2084, 2052,
+ 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2095, 2096,
+ 2098, 2097, 2099, 2100, 2101, 2102, 2103, 2104, 2106, 2107,
+ 2108, 2109, 2110, 2112, 2113, 2114, 2115, 2116, 2117, 2118,
+ 2119, 2120, 2121, 2122, 2123, 2124, 2096, 2097, 2125, 2127,
+ 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2137, 2138,
+
+ 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148,
+ 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158,
+ 2132, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2168, 2169,
+ 2170, 2172, 2173, 2174, 2175, 2177, 2178, 2179, 2180, 2186,
+ 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2198, 2199, 2201,
+ 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2210, 2211, 2212,
+ 2213, 2214, 2215, 2217, 2218, 2220, 2222, 2223, 2224, 2225,
+ 2226, 2227, 2229, 2230, 2231, 2232, 2233, 2232, 2234, 2235,
+ 2236, 2238, 2239, 2242, 2243, 2244, 2245, 2246, 2247, 2248,
+ 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258,
+
+ 2260, 2261, 2262, 2263, 2266, 2267, 2268, 2269, 2271, 2272,
+ 2274, 2276, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2286,
+ 2291, 2291, 2291, 2292, 2292, 2292, 2293, 2294, 2293, 2295,
+ 2295, 2295, 2296, 2296, 2296, 2297, 735, 2297, 2298, 2298,
+ 2298, 734, 733, 732, 731, 730, 729, 728, 727, 726,
+ 725, 724, 723, 721, 720, 719, 718, 717, 716, 715,
+ 714, 713, 712, 710, 709, 707, 706, 705, 704, 703,
+ 702, 701, 700, 699, 697, 696, 695, 694, 693, 691,
+ 690, 688, 687, 686, 685, 684, 683, 682, 681, 680,
+ 679, 678, 677, 676, 675, 674, 673, 671, 670, 669,
+
+ 668, 667, 666, 664, 663, 662, 661, 660, 659, 658,
+ 657, 655, 654, 653, 652, 651, 650, 649, 648, 647,
+ 646, 645, 644, 643, 642, 641, 639, 638, 637, 636,
+ 635, 634, 633, 632, 631, 630, 629, 628, 627, 626,
+ 625, 624, 623, 622, 621, 617, 609, 608, 607, 606,
+ 605, 603, 601, 599, 597, 596, 595, 594, 593, 592,
+ 591, 590, 589, 588, 587, 586, 585, 583, 582, 581,
+ 580, 579, 578, 576, 575, 574, 573, 572, 571, 570,
+ 569, 568, 567, 566, 565, 564, 562, 560, 559, 558,
+ 557, 556, 555, 554, 553, 552, 551, 550, 549, 548,
+
+ 547, 545, 544, 542, 541, 540, 539, 538, 537, 536,
+ 535, 533, 532, 531, 530, 529, 528, 527, 526, 525,
+ 524, 523, 522, 521, 520, 519, 518, 517, 516, 514,
+ 513, 512, 511, 509, 508, 507, 506, 505, 504, 503,
+ 502, 500, 499, 497, 496, 495, 493, 491, 490, 489,
+ 488, 487, 486, 484, 483, 482, 481, 480, 479, 478,
+ 476, 471, 469, 468, 467, 465, 462, 461, 459, 458,
+ 457, 456, 455, 454, 453, 452, 451, 450, 449, 448,
+ 447, 446, 445, 444, 443, 442, 440, 439, 438, 437,
+ 436, 435, 434, 432, 431, 429, 428, 427, 426, 424,
+
+ 423, 421, 420, 419, 418, 417, 416, 415, 414, 413,
+ 412, 411, 410, 409, 408, 404, 403, 402, 400, 399,
+ 398, 396, 395, 394, 393, 392, 391, 390, 389, 388,
+ 387, 386, 385, 384, 382, 381, 380, 379, 378, 377,
+ 376, 375, 374, 373, 372, 371, 370, 369, 368, 366,
+ 365, 364, 363, 361, 360, 359, 358, 357, 356, 355,
+ 354, 353, 352, 351, 350, 349, 348, 346, 343, 341,
+ 336, 334, 331, 324, 323, 322, 321, 320, 318, 317,
+ 316, 315, 313, 312, 311, 309, 308, 307, 306, 305,
+ 304, 303, 302, 301, 300, 299, 298, 297, 295, 294,
+
+ 293, 292, 291, 290, 289, 288, 287, 286, 285, 283,
+ 282, 280, 279, 277, 276, 275, 274, 272, 271, 270,
+ 269, 268, 267, 265, 264, 263, 262, 261, 260, 259,
+ 257, 256, 254, 253, 252, 251, 250, 249, 248, 247,
+ 246, 245, 244, 243, 242, 241, 240, 239, 238, 237,
+ 236, 235, 234, 233, 232, 231, 230, 227, 226, 225,
+ 224, 223, 222, 221, 220, 214, 212, 210, 207, 202,
+ 198, 190, 189, 188, 187, 186, 184, 183, 180, 179,
+ 178, 176, 175, 174, 172, 170, 168, 166, 165, 163,
+ 162, 161, 159, 157, 156, 155, 154, 153, 152, 150,
+
+ 149, 148, 146, 145, 144, 142, 141, 139, 138, 134,
+ 133, 132, 131, 129, 128, 127, 125, 124, 123, 121,
+ 117, 112, 107, 106, 99, 98, 78, 73, 67, 53,
+ 50, 49, 43, 41, 39, 38, 24, 14, 11, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+
+ 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290,
+ 2290, 2290, 2290, 2290, 2290, 2290
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
} ;
static yy_state_type yy_last_accepting_state;
extern int yy_flex_debug;
int yy_flex_debug = 1;
+<<<<<<< HEAD
static const flex_int16_t yy_rule_linenum[231] =
+=======
+static const flex_int16_t yy_rule_linenum[235] =
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{ 0,
148, 150, 152, 157, 158, 163, 164, 165, 177, 180,
185, 192, 201, 210, 219, 228, 237, 246, 255, 264,
870, 882, 894, 906, 918, 930, 941, 952, 961, 970,
979, 990, 1001, 1010, 1019, 1030, 1041, 1052, 1063, 1074,
+<<<<<<< HEAD
1085, 1096, 1107, 1118, 1128, 1139, 1148, 1157, 1172, 1188,
1197, 1206, 1215, 1224, 1233, 1242, 1251, 1260, 1269, 1278,
1287, 1296, 1320, 1344, 1353, 1363, 1373, 1382, 1392, 1403,
2075, 2084, 2093, 2102, 2111, 2120, 2129, 2138, 2147, 2156,
2165, 2174, 2275, 2291, 2340, 2348, 2363, 2364, 2365, 2366,
2367, 2368, 2370, 2388, 2401, 2406, 2410, 2412, 2414, 2416
+=======
+ 1085, 1096, 1107, 1118, 1127, 1136, 1145, 1157, 1168, 1178,
+ 1189, 1198, 1207, 1222, 1238, 1247, 1256, 1265, 1274, 1283,
+ 1292, 1301, 1310, 1319, 1328, 1337, 1361, 1385, 1394, 1404,
+ 1414, 1423, 1433, 1444, 1453, 1462, 1471, 1480, 1489, 1500,
+ 1511, 1522, 1532, 1541, 1550, 1559, 1570, 1581, 1592, 1603,
+ 1614, 1623, 1632, 1641, 1650, 1659, 1668, 1677, 1686, 1695,
+ 1705, 1717, 1730, 1739, 1748, 1757, 1767, 1777, 1786, 1797,
+ 1807, 1816, 1826, 1836, 1845, 1854, 1863, 1872, 1882, 1891,
+ 1900, 1909, 1918, 1927, 1936, 1945, 1954, 1963, 1972, 1981,
+ 1990, 1999, 2008, 2017, 2026, 2035, 2044, 2053, 2062, 2071,
+
+ 2080, 2089, 2098, 2107, 2116, 2125, 2134, 2143, 2152, 2161,
+ 2170, 2179, 2188, 2197, 2206, 2215, 2316, 2332, 2381, 2389,
+ 2404, 2405, 2406, 2407, 2408, 2409, 2411, 2429, 2442, 2447,
+ 2451, 2453, 2455, 2457
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
} ;
/* The intent behind this definition is that it'll catch
/* To avoid the call to exit... oops! */
#define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
+<<<<<<< HEAD
#line 2170 "dhcp6_lexer.cc"
+=======
+#line 2232 "dhcp6_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
/* noyywrap disables automatic rewinding for the next file to parse. Since we
always parse only a single string, there's no need to do any wraps. And
using yywrap requires linking with -lfl, which provides the default yywrap
by moving it ahead by yyleng bytes. yyleng specifies the length of the
currently matched token. */
#define YY_USER_ACTION driver.loc_.columns(yyleng);
+<<<<<<< HEAD
#line 2196 "dhcp6_lexer.cc"
#line 2197 "dhcp6_lexer.cc"
+=======
+#line 2258 "dhcp6_lexer.cc"
+#line 2259 "dhcp6_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
#define INITIAL 0
#define COMMENT 1
}
+<<<<<<< HEAD
#line 2527 "dhcp6_lexer.cc"
+=======
+#line 2589 "dhcp6_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
+<<<<<<< HEAD
if ( yy_current_state >= 2206 )
+=======
+ if ( yy_current_state >= 2291 )
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
+<<<<<<< HEAD
while ( yy_current_state != 2205 );
+=======
+ while ( yy_current_state != 2290 );
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
{
if ( yy_act == 0 )
fprintf( stderr, "--scanner backing up\n" );
+<<<<<<< HEAD
else if ( yy_act < 231 )
fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
(long)yy_rule_linenum[yy_act], yytext );
fprintf( stderr, "--accepting default rule (\"%s\")\n",
yytext );
else if ( yy_act == 232 )
+=======
+ else if ( yy_act < 235 )
+ fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
+ (long)yy_rule_linenum[yy_act], yytext );
+ else if ( yy_act == 235 )
+ fprintf( stderr, "--accepting default rule (\"%s\")\n",
+ yytext );
+ else if ( yy_act == 236 )
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
fprintf( stderr, "--(end of buffer or a NUL)\n" );
else
fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
- return isc::dhcp::Dhcp6Parser::make_DDNS_TTL_PERCENT(driver.loc_);
+ return isc::dhcp::Dhcp6Parser::make_DDNS_CONFLICT_RESOLUTION_MODE(driver.loc_);
default:
- return isc::dhcp::Dhcp6Parser::make_STRING("ddns-ttl-percent", driver.loc_);
+ return isc::dhcp::Dhcp6Parser::make_STRING("ddns-conflict-resolution-mode", driver.loc_);
}
}
YY_BREAK
case 104:
YY_RULE_SETUP
#line 1118 "dhcp6_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 1127 "dhcp6_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_NO_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 1136 "dhcp6_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_CHECK_EXISTS_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 1145 "dhcp6_lexer.ll"
+{
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_NO_CHECK_WITHOUT_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 1157 "dhcp6_lexer.ll"
+{
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser6Context::DHCP6:
+ case isc::dhcp::Parser6Context::SUBNET6:
+ case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ return isc::dhcp::Dhcp6Parser::make_DDNS_TTL_PERCENT(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp6Parser::make_STRING("ddns-ttl-percent", driver.loc_);
+ }
+}
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 1168 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
-case 105:
+case 110:
YY_RULE_SETUP
-#line 1128 "dhcp6_lexer.ll"
+#line 1178 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
-case 106:
+case 111:
YY_RULE_SETUP
-#line 1139 "dhcp6_lexer.ll"
+#line 1189 "dhcp6_lexer.ll"
{
switch (driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
-case 107:
+case 112:
YY_RULE_SETUP
-#line 1148 "dhcp6_lexer.ll"
+#line 1198 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
-case 108:
+case 113:
YY_RULE_SETUP
-#line 1157 "dhcp6_lexer.ll"
+#line 1207 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
-case 109:
+case 114:
YY_RULE_SETUP
-#line 1172 "dhcp6_lexer.ll"
+#line 1222 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LEASE_DATABASE:
}
}
YY_BREAK
-case 110:
+case 115:
YY_RULE_SETUP
-#line 1188 "dhcp6_lexer.ll"
+#line 1238 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DATA:
}
}
YY_BREAK
-case 111:
+case 116:
YY_RULE_SETUP
-#line 1197 "dhcp6_lexer.ll"
+#line 1247 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DATA:
}
}
YY_BREAK
-case 112:
+case 117:
YY_RULE_SETUP
-#line 1206 "dhcp6_lexer.ll"
+#line 1256 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DATA:
}
}
YY_BREAK
-case 113:
+case 118:
YY_RULE_SETUP
-#line 1215 "dhcp6_lexer.ll"
+#line 1265 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
-case 114:
+case 119:
YY_RULE_SETUP
-#line 1224 "dhcp6_lexer.ll"
+#line 1274 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
-case 115:
+case 120:
YY_RULE_SETUP
-#line 1233 "dhcp6_lexer.ll"
+#line 1283 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
}
}
YY_BREAK
-case 116:
+case 121:
YY_RULE_SETUP
-#line 1242 "dhcp6_lexer.ll"
+#line 1292 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
}
}
YY_BREAK
-case 117:
+case 122:
YY_RULE_SETUP
-#line 1251 "dhcp6_lexer.ll"
+#line 1301 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
}
}
YY_BREAK
-case 118:
+case 123:
YY_RULE_SETUP
-#line 1260 "dhcp6_lexer.ll"
+#line 1310 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
}
}
YY_BREAK
-case 119:
+case 124:
YY_RULE_SETUP
-#line 1269 "dhcp6_lexer.ll"
+#line 1319 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
}
}
YY_BREAK
-case 120:
+case 125:
YY_RULE_SETUP
-#line 1278 "dhcp6_lexer.ll"
+#line 1328 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::POOLS:
}
}
YY_BREAK
-case 121:
+case 126:
YY_RULE_SETUP
-#line 1287 "dhcp6_lexer.ll"
+#line 1337 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::POOLS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 123:
YY_RULE_SETUP
#line 1320 "dhcp6_lexer.ll"
+=======
+case 127:
+YY_RULE_SETUP
+#line 1361 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 124:
YY_RULE_SETUP
#line 1344 "dhcp6_lexer.ll"
+=======
+case 128:
+YY_RULE_SETUP
+#line 1385 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 125:
YY_RULE_SETUP
#line 1353 "dhcp6_lexer.ll"
+=======
+case 129:
+YY_RULE_SETUP
+#line 1394 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 126:
YY_RULE_SETUP
#line 1363 "dhcp6_lexer.ll"
+=======
+case 130:
+YY_RULE_SETUP
+#line 1404 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 127:
YY_RULE_SETUP
#line 1373 "dhcp6_lexer.ll"
+=======
+case 131:
+YY_RULE_SETUP
+#line 1414 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 128:
YY_RULE_SETUP
#line 1382 "dhcp6_lexer.ll"
+=======
+case 132:
+YY_RULE_SETUP
+#line 1423 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 129:
YY_RULE_SETUP
#line 1392 "dhcp6_lexer.ll"
+=======
+case 133:
+YY_RULE_SETUP
+#line 1433 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 130:
YY_RULE_SETUP
#line 1403 "dhcp6_lexer.ll"
+=======
+case 134:
+YY_RULE_SETUP
+#line 1444 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 131:
YY_RULE_SETUP
#line 1412 "dhcp6_lexer.ll"
+=======
+case 135:
+YY_RULE_SETUP
+#line 1453 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 132:
YY_RULE_SETUP
#line 1421 "dhcp6_lexer.ll"
+=======
+case 136:
+YY_RULE_SETUP
+#line 1462 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 133:
YY_RULE_SETUP
#line 1430 "dhcp6_lexer.ll"
+=======
+case 137:
+YY_RULE_SETUP
+#line 1471 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 134:
YY_RULE_SETUP
#line 1439 "dhcp6_lexer.ll"
+=======
+case 138:
+YY_RULE_SETUP
+#line 1480 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 135:
YY_RULE_SETUP
#line 1448 "dhcp6_lexer.ll"
+=======
+case 139:
+YY_RULE_SETUP
+#line 1489 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 136:
YY_RULE_SETUP
#line 1459 "dhcp6_lexer.ll"
+=======
+case 140:
+YY_RULE_SETUP
+#line 1500 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 137:
YY_RULE_SETUP
#line 1470 "dhcp6_lexer.ll"
+=======
+case 141:
+YY_RULE_SETUP
+#line 1511 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 138:
YY_RULE_SETUP
#line 1481 "dhcp6_lexer.ll"
+=======
+case 142:
+YY_RULE_SETUP
+#line 1522 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 139:
YY_RULE_SETUP
#line 1491 "dhcp6_lexer.ll"
+=======
+case 143:
+YY_RULE_SETUP
+#line 1532 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 140:
YY_RULE_SETUP
#line 1500 "dhcp6_lexer.ll"
+=======
+case 144:
+YY_RULE_SETUP
+#line 1541 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 141:
YY_RULE_SETUP
#line 1509 "dhcp6_lexer.ll"
+=======
+case 145:
+YY_RULE_SETUP
+#line 1550 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 142:
YY_RULE_SETUP
#line 1518 "dhcp6_lexer.ll"
+=======
+case 146:
+YY_RULE_SETUP
+#line 1559 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 143:
YY_RULE_SETUP
#line 1529 "dhcp6_lexer.ll"
+=======
+case 147:
+YY_RULE_SETUP
+#line 1570 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 144:
YY_RULE_SETUP
#line 1540 "dhcp6_lexer.ll"
+=======
+case 148:
+YY_RULE_SETUP
+#line 1581 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 145:
YY_RULE_SETUP
#line 1551 "dhcp6_lexer.ll"
+=======
+case 149:
+YY_RULE_SETUP
+#line 1592 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 146:
YY_RULE_SETUP
#line 1562 "dhcp6_lexer.ll"
+=======
+case 150:
+YY_RULE_SETUP
+#line 1603 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 147:
YY_RULE_SETUP
#line 1573 "dhcp6_lexer.ll"
+=======
+case 151:
+YY_RULE_SETUP
+#line 1614 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 148:
YY_RULE_SETUP
#line 1582 "dhcp6_lexer.ll"
+=======
+case 152:
+YY_RULE_SETUP
+#line 1623 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LOGGERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 149:
YY_RULE_SETUP
#line 1591 "dhcp6_lexer.ll"
+=======
+case 153:
+YY_RULE_SETUP
+#line 1632 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 150:
YY_RULE_SETUP
#line 1600 "dhcp6_lexer.ll"
+=======
+case 154:
+YY_RULE_SETUP
+#line 1641 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 151:
YY_RULE_SETUP
#line 1609 "dhcp6_lexer.ll"
+=======
+case 155:
+YY_RULE_SETUP
+#line 1650 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 152:
YY_RULE_SETUP
#line 1618 "dhcp6_lexer.ll"
+=======
+case 156:
+YY_RULE_SETUP
+#line 1659 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 153:
YY_RULE_SETUP
#line 1627 "dhcp6_lexer.ll"
+=======
+case 157:
+YY_RULE_SETUP
+#line 1668 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 154:
YY_RULE_SETUP
#line 1636 "dhcp6_lexer.ll"
+=======
+case 158:
+YY_RULE_SETUP
+#line 1677 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LOGGERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 155:
YY_RULE_SETUP
#line 1645 "dhcp6_lexer.ll"
+=======
+case 159:
+YY_RULE_SETUP
+#line 1686 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LOGGERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 156:
YY_RULE_SETUP
#line 1654 "dhcp6_lexer.ll"
+=======
+case 160:
+YY_RULE_SETUP
+#line 1695 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 157:
YY_RULE_SETUP
#line 1664 "dhcp6_lexer.ll"
+=======
+case 161:
+YY_RULE_SETUP
+#line 1705 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 158:
YY_RULE_SETUP
#line 1676 "dhcp6_lexer.ll"
+=======
+case 162:
+YY_RULE_SETUP
+#line 1717 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 159:
YY_RULE_SETUP
#line 1689 "dhcp6_lexer.ll"
+=======
+case 163:
+YY_RULE_SETUP
+#line 1730 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CLIENT_CLASSES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 160:
YY_RULE_SETUP
#line 1698 "dhcp6_lexer.ll"
+=======
+case 164:
+YY_RULE_SETUP
+#line 1739 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CLIENT_CLASSES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 161:
YY_RULE_SETUP
#line 1707 "dhcp6_lexer.ll"
+=======
+case 165:
+YY_RULE_SETUP
+#line 1748 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CLIENT_CLASSES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 162:
YY_RULE_SETUP
#line 1716 "dhcp6_lexer.ll"
+=======
+case 166:
+YY_RULE_SETUP
+#line 1757 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 163:
YY_RULE_SETUP
#line 1726 "dhcp6_lexer.ll"
+=======
+case 167:
+YY_RULE_SETUP
+#line 1767 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 164:
YY_RULE_SETUP
#line 1736 "dhcp6_lexer.ll"
+=======
+case 168:
+YY_RULE_SETUP
+#line 1777 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 165:
YY_RULE_SETUP
#line 1745 "dhcp6_lexer.ll"
+=======
+case 169:
+YY_RULE_SETUP
+#line 1786 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::MAC_SOURCES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 166:
YY_RULE_SETUP
#line 1756 "dhcp6_lexer.ll"
+=======
+case 170:
+YY_RULE_SETUP
+#line 1797 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 167:
YY_RULE_SETUP
#line 1766 "dhcp6_lexer.ll"
+=======
+case 171:
+YY_RULE_SETUP
+#line 1807 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATIONS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 168:
YY_RULE_SETUP
#line 1775 "dhcp6_lexer.ll"
+=======
+case 172:
+YY_RULE_SETUP
+#line 1816 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
}
}
YY_BREAK
+<<<<<<< HEAD
case 169:
YY_RULE_SETUP
#line 1785 "dhcp6_lexer.ll"
+=======
+case 173:
+YY_RULE_SETUP
+#line 1826 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 170:
YY_RULE_SETUP
#line 1795 "dhcp6_lexer.ll"
+=======
+case 174:
+YY_RULE_SETUP
+#line 1836 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DATA:
}
}
YY_BREAK
+<<<<<<< HEAD
case 171:
YY_RULE_SETUP
#line 1804 "dhcp6_lexer.ll"
+=======
+case 175:
+YY_RULE_SETUP
+#line 1845 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 172:
YY_RULE_SETUP
#line 1813 "dhcp6_lexer.ll"
+=======
+case 176:
+YY_RULE_SETUP
+#line 1854 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 173:
YY_RULE_SETUP
#line 1822 "dhcp6_lexer.ll"
+=======
+case 177:
+YY_RULE_SETUP
+#line 1863 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
}
}
YY_BREAK
+<<<<<<< HEAD
case 174:
YY_RULE_SETUP
#line 1831 "dhcp6_lexer.ll"
+=======
+case 178:
+YY_RULE_SETUP
+#line 1872 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 175:
YY_RULE_SETUP
#line 1841 "dhcp6_lexer.ll"
+=======
+case 179:
+YY_RULE_SETUP
+#line 1882 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RELAY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 176:
YY_RULE_SETUP
#line 1850 "dhcp6_lexer.ll"
+=======
+case 180:
+YY_RULE_SETUP
+#line 1891 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 177:
YY_RULE_SETUP
#line 1859 "dhcp6_lexer.ll"
+=======
+case 181:
+YY_RULE_SETUP
+#line 1900 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 178:
YY_RULE_SETUP
#line 1868 "dhcp6_lexer.ll"
+=======
+case 182:
+YY_RULE_SETUP
+#line 1909 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
}
}
YY_BREAK
+<<<<<<< HEAD
case 179:
YY_RULE_SETUP
#line 1877 "dhcp6_lexer.ll"
+=======
+case 183:
+YY_RULE_SETUP
+#line 1918 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 180:
YY_RULE_SETUP
#line 1886 "dhcp6_lexer.ll"
+=======
+case 184:
+YY_RULE_SETUP
+#line 1927 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DUID_TYPE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 181:
YY_RULE_SETUP
#line 1895 "dhcp6_lexer.ll"
+=======
+case 185:
+YY_RULE_SETUP
+#line 1936 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DUID_TYPE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 182:
YY_RULE_SETUP
#line 1904 "dhcp6_lexer.ll"
+=======
+case 186:
+YY_RULE_SETUP
+#line 1945 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DUID_TYPE:
}
}
YY_BREAK
+<<<<<<< HEAD
case 183:
YY_RULE_SETUP
#line 1913 "dhcp6_lexer.ll"
+=======
+case 187:
+YY_RULE_SETUP
+#line 1954 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
}
}
YY_BREAK
+<<<<<<< HEAD
case 184:
YY_RULE_SETUP
#line 1922 "dhcp6_lexer.ll"
+=======
+case 188:
+YY_RULE_SETUP
+#line 1963 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
}
}
YY_BREAK
+<<<<<<< HEAD
case 185:
YY_RULE_SETUP
#line 1931 "dhcp6_lexer.ll"
+=======
+case 189:
+YY_RULE_SETUP
+#line 1972 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
}
}
YY_BREAK
+<<<<<<< HEAD
case 186:
YY_RULE_SETUP
#line 1940 "dhcp6_lexer.ll"
+=======
+case 190:
+YY_RULE_SETUP
+#line 1981 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
}
}
YY_BREAK
+<<<<<<< HEAD
case 187:
YY_RULE_SETUP
#line 1949 "dhcp6_lexer.ll"
+=======
+case 191:
+YY_RULE_SETUP
+#line 1990 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 188:
YY_RULE_SETUP
#line 1958 "dhcp6_lexer.ll"
+=======
+case 192:
+YY_RULE_SETUP
+#line 1999 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 189:
YY_RULE_SETUP
#line 1967 "dhcp6_lexer.ll"
+=======
+case 193:
+YY_RULE_SETUP
+#line 2008 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 190:
YY_RULE_SETUP
#line 1976 "dhcp6_lexer.ll"
+=======
+case 194:
+YY_RULE_SETUP
+#line 2017 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 191:
YY_RULE_SETUP
#line 1985 "dhcp6_lexer.ll"
+=======
+case 195:
+YY_RULE_SETUP
+#line 2026 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 192:
YY_RULE_SETUP
#line 1994 "dhcp6_lexer.ll"
+=======
+case 196:
+YY_RULE_SETUP
+#line 2035 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 193:
YY_RULE_SETUP
#line 2003 "dhcp6_lexer.ll"
+=======
+case 197:
+YY_RULE_SETUP
+#line 2044 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 194:
YY_RULE_SETUP
#line 2012 "dhcp6_lexer.ll"
+=======
+case 198:
+YY_RULE_SETUP
+#line 2053 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 195:
YY_RULE_SETUP
#line 2021 "dhcp6_lexer.ll"
+=======
+case 199:
+YY_RULE_SETUP
+#line 2062 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 196:
YY_RULE_SETUP
#line 2030 "dhcp6_lexer.ll"
+=======
+case 200:
+YY_RULE_SETUP
+#line 2071 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 197:
YY_RULE_SETUP
#line 2039 "dhcp6_lexer.ll"
+=======
+case 201:
+YY_RULE_SETUP
+#line 2080 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 198:
YY_RULE_SETUP
#line 2048 "dhcp6_lexer.ll"
+=======
+case 202:
+YY_RULE_SETUP
+#line 2089 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
}
}
YY_BREAK
+<<<<<<< HEAD
case 199:
YY_RULE_SETUP
#line 2057 "dhcp6_lexer.ll"
+=======
+case 203:
+YY_RULE_SETUP
+#line 2098 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 200:
YY_RULE_SETUP
#line 2066 "dhcp6_lexer.ll"
+=======
+case 204:
+YY_RULE_SETUP
+#line 2107 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CONTROL_SOCKET:
}
}
YY_BREAK
+<<<<<<< HEAD
case 201:
YY_RULE_SETUP
#line 2075 "dhcp6_lexer.ll"
+=======
+case 205:
+YY_RULE_SETUP
+#line 2116 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CONTROL_SOCKET:
}
}
YY_BREAK
+<<<<<<< HEAD
case 202:
YY_RULE_SETUP
#line 2084 "dhcp6_lexer.ll"
+=======
+case 206:
+YY_RULE_SETUP
+#line 2125 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 203:
YY_RULE_SETUP
#line 2093 "dhcp6_lexer.ll"
+=======
+case 207:
+YY_RULE_SETUP
+#line 2134 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
}
}
YY_BREAK
+<<<<<<< HEAD
case 204:
YY_RULE_SETUP
#line 2102 "dhcp6_lexer.ll"
+=======
+case 208:
+YY_RULE_SETUP
+#line 2143 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
}
}
YY_BREAK
+<<<<<<< HEAD
case 205:
YY_RULE_SETUP
#line 2111 "dhcp6_lexer.ll"
+=======
+case 209:
+YY_RULE_SETUP
+#line 2152 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
}
}
YY_BREAK
+<<<<<<< HEAD
case 206:
YY_RULE_SETUP
#line 2120 "dhcp6_lexer.ll"
+=======
+case 210:
+YY_RULE_SETUP
+#line 2161 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 207:
YY_RULE_SETUP
#line 2129 "dhcp6_lexer.ll"
+=======
+case 211:
+YY_RULE_SETUP
+#line 2170 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 208:
YY_RULE_SETUP
#line 2138 "dhcp6_lexer.ll"
+=======
+case 212:
+YY_RULE_SETUP
+#line 2179 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 209:
YY_RULE_SETUP
#line 2147 "dhcp6_lexer.ll"
+=======
+case 213:
+YY_RULE_SETUP
+#line 2188 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 210:
YY_RULE_SETUP
#line 2156 "dhcp6_lexer.ll"
+=======
+case 214:
+YY_RULE_SETUP
+#line 2197 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
}
}
YY_BREAK
+<<<<<<< HEAD
case 211:
YY_RULE_SETUP
#line 2165 "dhcp6_lexer.ll"
+=======
+case 215:
+YY_RULE_SETUP
+#line 2206 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::COMPATIBILITY:
}
}
YY_BREAK
+<<<<<<< HEAD
case 212:
YY_RULE_SETUP
#line 2174 "dhcp6_lexer.ll"
+=======
+case 216:
+YY_RULE_SETUP
+#line 2215 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* A string has been matched. It contains the actual string and single quotes.
We need to get those quotes out of the way and just use its content, e.g.
return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 213:
/* rule 213 can match eol */
YY_RULE_SETUP
#line 2275 "dhcp6_lexer.ll"
+=======
+case 217:
+/* rule 217 can match eol */
+YY_RULE_SETUP
+#line 2316 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with a forbidden control character inside */
std::string raw(yytext+1);
pos + 1);
}
YY_BREAK
+<<<<<<< HEAD
case 214:
/* rule 214 can match eol */
YY_RULE_SETUP
#line 2291 "dhcp6_lexer.ll"
+=======
+case 218:
+/* rule 218 can match eol */
+YY_RULE_SETUP
+#line 2332 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with a bad escape inside */
std::string raw(yytext+1);
pos);
}
YY_BREAK
+<<<<<<< HEAD
case 215:
YY_RULE_SETUP
#line 2340 "dhcp6_lexer.ll"
+=======
+case 219:
+YY_RULE_SETUP
+#line 2381 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with an open escape at the end */
std::string raw(yytext+1);
raw.size() + 1);
}
YY_BREAK
+<<<<<<< HEAD
case 216:
YY_RULE_SETUP
#line 2348 "dhcp6_lexer.ll"
+=======
+case 220:
+YY_RULE_SETUP
+#line 2389 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* Bad string with an open unicode escape at the end */
std::string raw(yytext+1);
pos + 1);
}
YY_BREAK
+<<<<<<< HEAD
case 217:
YY_RULE_SETUP
#line 2363 "dhcp6_lexer.ll"
case 223:
YY_RULE_SETUP
#line 2370 "dhcp6_lexer.ll"
+=======
+case 221:
+YY_RULE_SETUP
+#line 2404 "dhcp6_lexer.ll"
+{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
+ YY_BREAK
+case 222:
+YY_RULE_SETUP
+#line 2405 "dhcp6_lexer.ll"
+{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
+ YY_BREAK
+case 223:
+YY_RULE_SETUP
+#line 2406 "dhcp6_lexer.ll"
+{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
+ YY_BREAK
+case 224:
+YY_RULE_SETUP
+#line 2407 "dhcp6_lexer.ll"
+{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
+ YY_BREAK
+case 225:
+YY_RULE_SETUP
+#line 2408 "dhcp6_lexer.ll"
+{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
+ YY_BREAK
+case 226:
+YY_RULE_SETUP
+#line 2409 "dhcp6_lexer.ll"
+{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
+ YY_BREAK
+case 227:
+YY_RULE_SETUP
+#line 2411 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* An integer was found. */
std::string tmp(yytext);
return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 224:
YY_RULE_SETUP
#line 2388 "dhcp6_lexer.ll"
+=======
+case 228:
+YY_RULE_SETUP
+#line 2429 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
/* A floating point was found. */
std::string tmp(yytext);
return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 225:
YY_RULE_SETUP
#line 2401 "dhcp6_lexer.ll"
+=======
+case 229:
+YY_RULE_SETUP
+#line 2442 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
string tmp(yytext);
return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 226:
YY_RULE_SETUP
#line 2406 "dhcp6_lexer.ll"
+=======
+case 230:
+YY_RULE_SETUP
+#line 2447 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
}
YY_BREAK
+<<<<<<< HEAD
case 227:
YY_RULE_SETUP
#line 2410 "dhcp6_lexer.ll"
YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 2418 "dhcp6_lexer.ll"
+=======
+case 231:
+YY_RULE_SETUP
+#line 2451 "dhcp6_lexer.ll"
+driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
+ YY_BREAK
+case 232:
+YY_RULE_SETUP
+#line 2453 "dhcp6_lexer.ll"
+driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
+ YY_BREAK
+case 233:
+YY_RULE_SETUP
+#line 2455 "dhcp6_lexer.ll"
+driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
+ YY_BREAK
+case 234:
+YY_RULE_SETUP
+#line 2457 "dhcp6_lexer.ll"
+driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+#line 2459 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
{
if (driver.states_.empty()) {
return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
BEGIN(DIR_EXIT);
}
YY_BREAK
+<<<<<<< HEAD
case 231:
YY_RULE_SETUP
#line 2441 "dhcp6_lexer.ll"
ECHO;
YY_BREAK
#line 5611 "dhcp6_lexer.cc"
+=======
+case 235:
+YY_RULE_SETUP
+#line 2482 "dhcp6_lexer.ll"
+ECHO;
+ YY_BREAK
+#line 5723 "dhcp6_lexer.cc"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
case YY_END_OF_BUFFER:
{
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
+<<<<<<< HEAD
if ( yy_current_state >= 2206 )
+=======
+ if ( yy_current_state >= 2291 )
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
+<<<<<<< HEAD
if ( yy_current_state >= 2206 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
yy_is_jam = (yy_current_state == 2205);
+=======
+ if ( yy_current_state >= 2291 )
+ yy_c = yy_meta[yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ yy_is_jam = (yy_current_state == 2290);
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
return yy_is_jam ? 0 : yy_current_state;
}
/* %ok-for-header */
+<<<<<<< HEAD
#line 2441 "dhcp6_lexer.ll"
+=======
+#line 2482 "dhcp6_lexer.ll"
+>>>>>>> [#2276] Initial impl ddns-resolution-conflict-mode
using namespace isc::dhcp;
}
}
+\"ddns-conflict-resolution-mode\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser6Context::DHCP6:
+ case isc::dhcp::Parser6Context::SUBNET6:
+ case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ return isc::dhcp::Dhcp6Parser::make_DDNS_CONFLICT_RESOLUTION_MODE(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp6Parser::make_STRING("ddns-conflict-resolution-mode", driver.loc_);
+ }
+}
+
+(?i:\"check-with-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+
+(?i:\"no-check-with-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_NO_CHECK_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+
+(?i:\"check-exists-with-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_CHECK_EXISTS_WITH_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+
+(?i:\"no-check-without-dhcid\") {
+ if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) {
+ return isc::dhcp::Dhcp6Parser::make_NO_CHECK_WITHOUT_DHCID(driver.loc_);
+ }
+ std::string tmp(yytext+1);
+ tmp.resize(tmp.size() - 1);
+ return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
+}
+
+
+
+
\"ddns-ttl-percent\" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
// 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
// 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
#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)
Dhcp6Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
{}
- /*---------.
- | symbol. |
- `---------*/
+ /*---------------.
+ | symbol kinds. |
+ `---------------*/
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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_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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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_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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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_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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
- YY_USE (yyoutput);
+ YYUSE (yyoutput);
if (yysym.empty ())
yyo << "empty symbol";
else
switch (yykind)
{
case symbol_kind::S_STRING: // "constant string"
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 409 "dhcp6_parser.cc"
+#line 413 "dhcp6_parser.cc"
break;
case symbol_kind::S_INTEGER: // "integer"
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < int64_t > (); }
-#line 415 "dhcp6_parser.cc"
+#line 419 "dhcp6_parser.cc"
break;
case symbol_kind::S_FLOAT: // "floating point"
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < double > (); }
-#line 421 "dhcp6_parser.cc"
+#line 425 "dhcp6_parser.cc"
break;
case symbol_kind::S_BOOLEAN: // "boolean"
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < bool > (); }
-#line 427 "dhcp6_parser.cc"
+#line 431 "dhcp6_parser.cc"
break;
case symbol_kind::S_value: // value
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 433 "dhcp6_parser.cc"
+#line 437 "dhcp6_parser.cc"
break;
case symbol_kind::S_map_value: // map_value
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 439 "dhcp6_parser.cc"
+#line 443 "dhcp6_parser.cc"
break;
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 445 "dhcp6_parser.cc"
+#line 449 "dhcp6_parser.cc"
+ break;
+
+ case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
+#line 314 "dhcp6_parser.yy"
+ { yyoutput << yysym.value.template as < ElementPtr > (); }
+#line 455 "dhcp6_parser.cc"
break;
case symbol_kind::S_db_type: // db_type
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 451 "dhcp6_parser.cc"
+#line 461 "dhcp6_parser.cc"
break;
case symbol_kind::S_on_fail_mode: // on_fail_mode
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 457 "dhcp6_parser.cc"
+#line 467 "dhcp6_parser.cc"
break;
case symbol_kind::S_hr_mode: // hr_mode
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 463 "dhcp6_parser.cc"
+#line 473 "dhcp6_parser.cc"
break;
case symbol_kind::S_duid_type: // duid_type
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 469 "dhcp6_parser.cc"
+#line 479 "dhcp6_parser.cc"
break;
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 308 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 475 "dhcp6_parser.cc"
+#line 485 "dhcp6_parser.cc"
break;
default:
}
void
- Dhcp6Parser::yypop_ (int n) YY_NOEXCEPT
+ Dhcp6Parser::yypop_ (int n)
{
yystack_.pop (n);
}
}
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_;
}
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
switch (yyn)
{
case 2: // $@1: %empty
-#line 317 "dhcp6_parser.yy"
+#line 323 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 755 "dhcp6_parser.cc"
+#line 766 "dhcp6_parser.cc"
break;
case 4: // $@2: %empty
-#line 318 "dhcp6_parser.yy"
+#line 324 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.CONFIG; }
-#line 761 "dhcp6_parser.cc"
+#line 772 "dhcp6_parser.cc"
break;
case 6: // $@3: %empty
-#line 319 "dhcp6_parser.yy"
+#line 325 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.DHCP6; }
-#line 767 "dhcp6_parser.cc"
+#line 778 "dhcp6_parser.cc"
break;
case 8: // $@4: %empty
-#line 320 "dhcp6_parser.yy"
+#line 326 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 773 "dhcp6_parser.cc"
+#line 784 "dhcp6_parser.cc"
break;
case 10: // $@5: %empty
-#line 321 "dhcp6_parser.yy"
+#line 327 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.SUBNET6; }
-#line 779 "dhcp6_parser.cc"
+#line 790 "dhcp6_parser.cc"
break;
case 12: // $@6: %empty
-#line 322 "dhcp6_parser.yy"
+#line 328 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.POOLS; }
-#line 785 "dhcp6_parser.cc"
+#line 796 "dhcp6_parser.cc"
break;
case 14: // $@7: %empty
-#line 323 "dhcp6_parser.yy"
+#line 329 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.PD_POOLS; }
-#line 791 "dhcp6_parser.cc"
+#line 802 "dhcp6_parser.cc"
break;
case 16: // $@8: %empty
-#line 324 "dhcp6_parser.yy"
+#line 330 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.RESERVATIONS; }
-#line 797 "dhcp6_parser.cc"
+#line 808 "dhcp6_parser.cc"
break;
case 18: // $@9: %empty
-#line 325 "dhcp6_parser.yy"
+#line 331 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.DHCP6; }
-#line 803 "dhcp6_parser.cc"
+#line 814 "dhcp6_parser.cc"
break;
case 20: // $@10: %empty
-#line 326 "dhcp6_parser.yy"
+#line 332 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DEF; }
-#line 809 "dhcp6_parser.cc"
+#line 820 "dhcp6_parser.cc"
break;
case 22: // $@11: %empty
-#line 327 "dhcp6_parser.yy"
+#line 333 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DATA; }
-#line 815 "dhcp6_parser.cc"
+#line 826 "dhcp6_parser.cc"
break;
case 24: // $@12: %empty
-#line 328 "dhcp6_parser.yy"
+#line 334 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 821 "dhcp6_parser.cc"
+#line 832 "dhcp6_parser.cc"
break;
case 26: // $@13: %empty
-#line 329 "dhcp6_parser.yy"
+#line 335 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 827 "dhcp6_parser.cc"
+#line 838 "dhcp6_parser.cc"
break;
case 28: // $@14: %empty
-#line 330 "dhcp6_parser.yy"
+#line 336 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 833 "dhcp6_parser.cc"
+#line 844 "dhcp6_parser.cc"
break;
case 30: // value: "integer"
-#line 338 "dhcp6_parser.yy"
+#line 344 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 839 "dhcp6_parser.cc"
+#line 850 "dhcp6_parser.cc"
break;
case 31: // value: "floating point"
-#line 339 "dhcp6_parser.yy"
+#line 345 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 845 "dhcp6_parser.cc"
+#line 856 "dhcp6_parser.cc"
break;
case 32: // value: "boolean"
-#line 340 "dhcp6_parser.yy"
+#line 346 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 851 "dhcp6_parser.cc"
+#line 862 "dhcp6_parser.cc"
break;
case 33: // value: "constant string"
-#line 341 "dhcp6_parser.yy"
+#line 347 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 857 "dhcp6_parser.cc"
+#line 868 "dhcp6_parser.cc"
break;
case 34: // value: "null"
-#line 342 "dhcp6_parser.yy"
+#line 348 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 863 "dhcp6_parser.cc"
+#line 874 "dhcp6_parser.cc"
break;
case 35: // value: map2
-#line 343 "dhcp6_parser.yy"
+#line 349 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 869 "dhcp6_parser.cc"
+#line 880 "dhcp6_parser.cc"
break;
case 36: // value: list_generic
-#line 344 "dhcp6_parser.yy"
+#line 350 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 875 "dhcp6_parser.cc"
+#line 886 "dhcp6_parser.cc"
break;
case 37: // sub_json: value
-#line 347 "dhcp6_parser.yy"
+#line 353 "dhcp6_parser.yy"
{
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
}
-#line 884 "dhcp6_parser.cc"
+#line 895 "dhcp6_parser.cc"
break;
case 38: // $@15: %empty
-#line 352 "dhcp6_parser.yy"
+#line 358 "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 895 "dhcp6_parser.cc"
+#line 906 "dhcp6_parser.cc"
break;
case 39: // map2: "{" $@15 map_content "}"
-#line 357 "dhcp6_parser.yy"
+#line 363 "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 905 "dhcp6_parser.cc"
+#line 916 "dhcp6_parser.cc"
break;
case 40: // map_value: map2
-#line 363 "dhcp6_parser.yy"
+#line 369 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 911 "dhcp6_parser.cc"
+#line 922 "dhcp6_parser.cc"
break;
case 43: // not_empty_map: "constant string" ":" value
-#line 370 "dhcp6_parser.yy"
+#line 376 "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 921 "dhcp6_parser.cc"
+#line 932 "dhcp6_parser.cc"
break;
case 44: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 375 "dhcp6_parser.yy"
+#line 381 "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 932 "dhcp6_parser.cc"
+#line 943 "dhcp6_parser.cc"
break;
case 45: // not_empty_map: not_empty_map ","
-#line 381 "dhcp6_parser.yy"
+#line 387 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 940 "dhcp6_parser.cc"
+#line 951 "dhcp6_parser.cc"
break;
case 46: // $@16: %empty
-#line 386 "dhcp6_parser.yy"
+#line 392 "dhcp6_parser.yy"
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 949 "dhcp6_parser.cc"
+#line 960 "dhcp6_parser.cc"
break;
case 47: // list_generic: "[" $@16 list_content "]"
-#line 389 "dhcp6_parser.yy"
+#line 395 "dhcp6_parser.yy"
{
// list parsing complete. Put any sanity checking here
}
-#line 957 "dhcp6_parser.cc"
+#line 968 "dhcp6_parser.cc"
break;
case 50: // not_empty_list: value
-#line 397 "dhcp6_parser.yy"
+#line 403 "dhcp6_parser.yy"
{
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 966 "dhcp6_parser.cc"
+#line 977 "dhcp6_parser.cc"
break;
case 51: // not_empty_list: not_empty_list "," value
-#line 401 "dhcp6_parser.yy"
+#line 407 "dhcp6_parser.yy"
{
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 975 "dhcp6_parser.cc"
+#line 986 "dhcp6_parser.cc"
break;
case 52: // not_empty_list: not_empty_list ","
-#line 405 "dhcp6_parser.yy"
+#line 411 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 983 "dhcp6_parser.cc"
+#line 994 "dhcp6_parser.cc"
break;
case 53: // $@17: %empty
-#line 411 "dhcp6_parser.yy"
+#line 417 "dhcp6_parser.yy"
{
// List parsing about to start
}
-#line 991 "dhcp6_parser.cc"
+#line 1002 "dhcp6_parser.cc"
break;
case 54: // list_strings: "[" $@17 list_strings_content "]"
-#line 413 "dhcp6_parser.yy"
+#line 419 "dhcp6_parser.yy"
{
// list parsing complete. Put any sanity checking here
//ctx.stack_.pop_back();
}
-#line 1000 "dhcp6_parser.cc"
+#line 1011 "dhcp6_parser.cc"
break;
case 57: // not_empty_list_strings: "constant string"
-#line 422 "dhcp6_parser.yy"
+#line 428 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1009 "dhcp6_parser.cc"
+#line 1020 "dhcp6_parser.cc"
break;
case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string"
-#line 426 "dhcp6_parser.yy"
+#line 432 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1018 "dhcp6_parser.cc"
+#line 1029 "dhcp6_parser.cc"
break;
case 59: // not_empty_list_strings: not_empty_list_strings ","
-#line 430 "dhcp6_parser.yy"
+#line 436 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1026 "dhcp6_parser.cc"
+#line 1037 "dhcp6_parser.cc"
break;
case 60: // unknown_map_entry: "constant string" ":"
-#line 440 "dhcp6_parser.yy"
+#line 446 "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 1037 "dhcp6_parser.cc"
+#line 1048 "dhcp6_parser.cc"
break;
case 61: // $@18: %empty
-#line 449 "dhcp6_parser.yy"
+#line 455 "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 1048 "dhcp6_parser.cc"
+#line 1059 "dhcp6_parser.cc"
break;
case 62: // syntax_map: "{" $@18 global_object "}"
-#line 454 "dhcp6_parser.yy"
+#line 460 "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
// Dhcp6 is required
ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
}
-#line 1061 "dhcp6_parser.cc"
+#line 1072 "dhcp6_parser.cc"
break;
case 63: // $@19: %empty
-#line 464 "dhcp6_parser.yy"
+#line 470 "dhcp6_parser.yy"
{
// This code is executed when we're about to start parsing
// the content of the map
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP6);
}
-#line 1076 "dhcp6_parser.cc"
+#line 1087 "dhcp6_parser.cc"
break;
case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}"
-#line 473 "dhcp6_parser.yy"
+#line 479 "dhcp6_parser.yy"
{
// No global parameter is required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1086 "dhcp6_parser.cc"
+#line 1097 "dhcp6_parser.cc"
break;
case 66: // global_object_comma: global_object ","
-#line 481 "dhcp6_parser.yy"
+#line 487 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1094 "dhcp6_parser.cc"
+#line 1105 "dhcp6_parser.cc"
break;
case 67: // $@20: %empty
-#line 487 "dhcp6_parser.yy"
+#line 493 "dhcp6_parser.yy"
{
// Parse the Dhcp6 map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1104 "dhcp6_parser.cc"
+#line 1115 "dhcp6_parser.cc"
break;
case 68: // sub_dhcp6: "{" $@20 global_params "}"
-#line 491 "dhcp6_parser.yy"
+#line 497 "dhcp6_parser.yy"
{
// No global parameter is required
// parsing completed
}
-#line 1113 "dhcp6_parser.cc"
+#line 1124 "dhcp6_parser.cc"
break;
case 71: // global_params: global_params ","
-#line 498 "dhcp6_parser.yy"
+#line 504 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1121 "dhcp6_parser.cc"
+#line 1132 "dhcp6_parser.cc"
break;
- case 140: // $@21: %empty
-#line 575 "dhcp6_parser.yy"
+ case 141: // $@21: %empty
+#line 582 "dhcp6_parser.yy"
{
ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1130 "dhcp6_parser.cc"
+#line 1141 "dhcp6_parser.cc"
break;
- case 141: // data_directory: "data-directory" $@21 ":" "constant string"
-#line 578 "dhcp6_parser.yy"
+ case 142: // data_directory: "data-directory" $@21 ":" "constant string"
+#line 585 "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 1140 "dhcp6_parser.cc"
+#line 1151 "dhcp6_parser.cc"
break;
- case 142: // preferred_lifetime: "preferred-lifetime" ":" "integer"
-#line 584 "dhcp6_parser.yy"
+ case 143: // preferred_lifetime: "preferred-lifetime" ":" "integer"
+#line 591 "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 1150 "dhcp6_parser.cc"
+#line 1161 "dhcp6_parser.cc"
break;
- case 143: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer"
-#line 590 "dhcp6_parser.yy"
+ case 144: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer"
+#line 597 "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 1160 "dhcp6_parser.cc"
+#line 1171 "dhcp6_parser.cc"
break;
- case 144: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer"
-#line 596 "dhcp6_parser.yy"
+ case 145: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer"
+#line 603 "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 1170 "dhcp6_parser.cc"
+#line 1181 "dhcp6_parser.cc"
break;
- case 145: // valid_lifetime: "valid-lifetime" ":" "integer"
-#line 602 "dhcp6_parser.yy"
+ case 146: // valid_lifetime: "valid-lifetime" ":" "integer"
+#line 609 "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 1180 "dhcp6_parser.cc"
+#line 1191 "dhcp6_parser.cc"
break;
- case 146: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
-#line 608 "dhcp6_parser.yy"
+ case 147: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
+#line 615 "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 1190 "dhcp6_parser.cc"
+#line 1201 "dhcp6_parser.cc"
break;
- case 147: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
-#line 614 "dhcp6_parser.yy"
+ case 148: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
+#line 621 "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 1200 "dhcp6_parser.cc"
+#line 1211 "dhcp6_parser.cc"
break;
- case 148: // renew_timer: "renew-timer" ":" "integer"
-#line 620 "dhcp6_parser.yy"
+ case 149: // renew_timer: "renew-timer" ":" "integer"
+#line 627 "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 1210 "dhcp6_parser.cc"
+#line 1221 "dhcp6_parser.cc"
break;
- case 149: // rebind_timer: "rebind-timer" ":" "integer"
-#line 626 "dhcp6_parser.yy"
+ case 150: // rebind_timer: "rebind-timer" ":" "integer"
+#line 633 "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 1220 "dhcp6_parser.cc"
+#line 1231 "dhcp6_parser.cc"
break;
- case 150: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
-#line 632 "dhcp6_parser.yy"
+ case 151: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
+#line 639 "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 1230 "dhcp6_parser.cc"
+#line 1241 "dhcp6_parser.cc"
break;
- case 151: // t1_percent: "t1-percent" ":" "floating point"
-#line 638 "dhcp6_parser.yy"
+ case 152: // t1_percent: "t1-percent" ":" "floating point"
+#line 645 "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 1240 "dhcp6_parser.cc"
+#line 1251 "dhcp6_parser.cc"
break;
- case 152: // t2_percent: "t2-percent" ":" "floating point"
-#line 644 "dhcp6_parser.yy"
+ case 153: // t2_percent: "t2-percent" ":" "floating point"
+#line 651 "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 1250 "dhcp6_parser.cc"
+#line 1261 "dhcp6_parser.cc"
break;
- case 153: // cache_threshold: "cache-threshold" ":" "floating point"
-#line 650 "dhcp6_parser.yy"
+ case 154: // cache_threshold: "cache-threshold" ":" "floating point"
+#line 657 "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 1260 "dhcp6_parser.cc"
+#line 1271 "dhcp6_parser.cc"
break;
- case 154: // cache_max_age: "cache-max-age" ":" "integer"
-#line 656 "dhcp6_parser.yy"
+ case 155: // cache_max_age: "cache-max-age" ":" "integer"
+#line 663 "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 1270 "dhcp6_parser.cc"
+#line 1281 "dhcp6_parser.cc"
break;
- case 155: // decline_probation_period: "decline-probation-period" ":" "integer"
-#line 662 "dhcp6_parser.yy"
+ case 156: // decline_probation_period: "decline-probation-period" ":" "integer"
+#line 669 "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 1280 "dhcp6_parser.cc"
+#line 1291 "dhcp6_parser.cc"
break;
- case 156: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
-#line 668 "dhcp6_parser.yy"
+ case 157: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
+#line 675 "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 1290 "dhcp6_parser.cc"
+#line 1301 "dhcp6_parser.cc"
break;
- case 157: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
-#line 674 "dhcp6_parser.yy"
+ case 158: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
+#line 681 "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 1300 "dhcp6_parser.cc"
+#line 1311 "dhcp6_parser.cc"
break;
- case 158: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
-#line 680 "dhcp6_parser.yy"
+ case 159: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
+#line 687 "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 1310 "dhcp6_parser.cc"
+#line 1321 "dhcp6_parser.cc"
break;
- case 159: // $@22: %empty
-#line 686 "dhcp6_parser.yy"
+ case 160: // $@22: %empty
+#line 693 "dhcp6_parser.yy"
{
ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 1319 "dhcp6_parser.cc"
+#line 1330 "dhcp6_parser.cc"
break;
- case 160: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
-#line 689 "dhcp6_parser.yy"
+ case 161: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
+#line 696 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1328 "dhcp6_parser.cc"
+#line 1339 "dhcp6_parser.cc"
break;
- case 161: // ddns_replace_client_name_value: "when-present"
-#line 695 "dhcp6_parser.yy"
+ case 162: // ddns_replace_client_name_value: "when-present"
+#line 702 "dhcp6_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1336 "dhcp6_parser.cc"
+#line 1347 "dhcp6_parser.cc"
break;
- case 162: // ddns_replace_client_name_value: "never"
-#line 698 "dhcp6_parser.yy"
+ case 163: // ddns_replace_client_name_value: "never"
+#line 705 "dhcp6_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
}
-#line 1344 "dhcp6_parser.cc"
+#line 1355 "dhcp6_parser.cc"
break;
- case 163: // ddns_replace_client_name_value: "always"
-#line 701 "dhcp6_parser.yy"
+ case 164: // ddns_replace_client_name_value: "always"
+#line 708 "dhcp6_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
}
-#line 1352 "dhcp6_parser.cc"
+#line 1363 "dhcp6_parser.cc"
break;
- case 164: // ddns_replace_client_name_value: "when-not-present"
-#line 704 "dhcp6_parser.yy"
+ case 165: // ddns_replace_client_name_value: "when-not-present"
+#line 711 "dhcp6_parser.yy"
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1360 "dhcp6_parser.cc"
+#line 1371 "dhcp6_parser.cc"
break;
- case 165: // ddns_replace_client_name_value: "boolean"
-#line 707 "dhcp6_parser.yy"
+ case 166: // ddns_replace_client_name_value: "boolean"
+#line 714 "dhcp6_parser.yy"
{
error(yystack_[0].location, "boolean values for the replace-client-name are "
"no longer supported");
}
-#line 1369 "dhcp6_parser.cc"
+#line 1380 "dhcp6_parser.cc"
break;
- case 166: // $@23: %empty
-#line 713 "dhcp6_parser.yy"
+ case 167: // $@23: %empty
+#line 720 "dhcp6_parser.yy"
{
ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1378 "dhcp6_parser.cc"
+#line 1389 "dhcp6_parser.cc"
break;
- case 167: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
-#line 716 "dhcp6_parser.yy"
+ case 168: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
+#line 723 "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 1388 "dhcp6_parser.cc"
+#line 1399 "dhcp6_parser.cc"
break;
- case 168: // $@24: %empty
-#line 722 "dhcp6_parser.yy"
+ case 169: // $@24: %empty
+#line 729 "dhcp6_parser.yy"
{
ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1397 "dhcp6_parser.cc"
+#line 1408 "dhcp6_parser.cc"
break;
- case 169: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
-#line 725 "dhcp6_parser.yy"
+ case 170: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
+#line 732 "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 1407 "dhcp6_parser.cc"
+#line 1418 "dhcp6_parser.cc"
break;
- case 170: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
-#line 731 "dhcp6_parser.yy"
+ case 171: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
+#line 738 "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 1417 "dhcp6_parser.cc"
+#line 1428 "dhcp6_parser.cc"
break;
- case 171: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
-#line 737 "dhcp6_parser.yy"
+ case 172: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
+#line 744 "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 1427 "dhcp6_parser.cc"
+#line 1438 "dhcp6_parser.cc"
+ break;
+
+ case 173: // $@25: %empty
+#line 750 "dhcp6_parser.yy"
+ {
+ ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(yystack_[0].location));
+ ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE);
+}
+#line 1447 "dhcp6_parser.cc"
+ break;
+
+ case 174: // ddns_conflict_resolution_mode: "ddns-conflict-resolution-mode" $@25 ":" ddns_conflict_resolution_mode_value
+#line 753 "dhcp6_parser.yy"
+ {
+ ctx.stack_.back()->set("ddns-conflict-resolution-mode", yystack_[0].value.as < ElementPtr > ());
+ ctx.leave();
+}
+#line 1456 "dhcp6_parser.cc"
+ break;
+
+ case 175: // ddns_conflict_resolution_mode_value: "check-with-dhcid"
+#line 759 "dhcp6_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1464 "dhcp6_parser.cc"
+ break;
+
+ case 176: // ddns_conflict_resolution_mode_value: "no-check-with-dhcid"
+#line 762 "dhcp6_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1472 "dhcp6_parser.cc"
+ break;
+
+ case 177: // ddns_conflict_resolution_mode_value: "check-exists-with-dhcid"
+#line 765 "dhcp6_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1480 "dhcp6_parser.cc"
break;
- case 172: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point"
-#line 743 "dhcp6_parser.yy"
+ case 178: // ddns_conflict_resolution_mode_value: "no-check-without-dhcid"
+#line 768 "dhcp6_parser.yy"
+ {
+ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(yystack_[0].location)));
+ }
+#line 1488 "dhcp6_parser.cc"
+ break;
+
+ case 179: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point"
+#line 773 "dhcp6_parser.yy"
{
ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location));
ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-ttl-percent", ttl);
}
-#line 1437 "dhcp6_parser.cc"
+#line 1498 "dhcp6_parser.cc"
break;
- case 173: // $@25: %empty
-#line 749 "dhcp6_parser.yy"
+ case 180: // $@26: %empty
+#line 779 "dhcp6_parser.yy"
{
ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1446 "dhcp6_parser.cc"
+#line 1507 "dhcp6_parser.cc"
break;
- case 174: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string"
-#line 752 "dhcp6_parser.yy"
+ case 181: // hostname_char_set: "hostname-char-set" $@26 ":" "constant string"
+#line 782 "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 1456 "dhcp6_parser.cc"
+#line 1517 "dhcp6_parser.cc"
break;
- case 175: // $@26: %empty
-#line 758 "dhcp6_parser.yy"
+ case 182: // $@27: %empty
+#line 788 "dhcp6_parser.yy"
{
ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1465 "dhcp6_parser.cc"
+#line 1526 "dhcp6_parser.cc"
break;
- case 176: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string"
-#line 761 "dhcp6_parser.yy"
+ case 183: // hostname_char_replacement: "hostname-char-replacement" $@27 ":" "constant string"
+#line 791 "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 1475 "dhcp6_parser.cc"
+#line 1536 "dhcp6_parser.cc"
break;
- case 177: // store_extended_info: "store-extended-info" ":" "boolean"
-#line 767 "dhcp6_parser.yy"
+ case 184: // store_extended_info: "store-extended-info" ":" "boolean"
+#line 797 "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 1485 "dhcp6_parser.cc"
+#line 1546 "dhcp6_parser.cc"
break;
- case 178: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
-#line 773 "dhcp6_parser.yy"
+ case 185: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
+#line 803 "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 1495 "dhcp6_parser.cc"
+#line 1556 "dhcp6_parser.cc"
break;
- case 179: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
-#line 779 "dhcp6_parser.yy"
+ case 186: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
+#line 809 "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 1505 "dhcp6_parser.cc"
+#line 1566 "dhcp6_parser.cc"
break;
- case 180: // $@27: %empty
-#line 785 "dhcp6_parser.yy"
+ case 187: // $@28: %empty
+#line 815 "dhcp6_parser.yy"
{
ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1514 "dhcp6_parser.cc"
+#line 1575 "dhcp6_parser.cc"
break;
- case 181: // server_tag: "server-tag" $@27 ":" "constant string"
-#line 788 "dhcp6_parser.yy"
+ case 188: // server_tag: "server-tag" $@28 ":" "constant string"
+#line 818 "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 1524 "dhcp6_parser.cc"
+#line 1585 "dhcp6_parser.cc"
break;
- case 182: // parked_packet_limit: "parked-packet-limit" ":" "integer"
-#line 794 "dhcp6_parser.yy"
+ case 189: // parked_packet_limit: "parked-packet-limit" ":" "integer"
+#line 824 "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 1534 "dhcp6_parser.cc"
+#line 1595 "dhcp6_parser.cc"
break;
- case 183: // $@28: %empty
-#line 800 "dhcp6_parser.yy"
+ case 190: // $@29: %empty
+#line 830 "dhcp6_parser.yy"
{
ctx.unique("allocator", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1543 "dhcp6_parser.cc"
+#line 1604 "dhcp6_parser.cc"
break;
- case 184: // allocator: "allocator" $@28 ":" "constant string"
-#line 803 "dhcp6_parser.yy"
+ case 191: // allocator: "allocator" $@29 ":" "constant string"
+#line 833 "dhcp6_parser.yy"
{
ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("allocator", al);
ctx.leave();
}
-#line 1553 "dhcp6_parser.cc"
+#line 1614 "dhcp6_parser.cc"
break;
- case 185: // $@29: %empty
-#line 809 "dhcp6_parser.yy"
+ case 192: // $@30: %empty
+#line 839 "dhcp6_parser.yy"
{
ctx.unique("pd-allocator", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1562 "dhcp6_parser.cc"
+#line 1623 "dhcp6_parser.cc"
break;
- case 186: // pd_allocator: "pd-allocator" $@29 ":" "constant string"
-#line 812 "dhcp6_parser.yy"
+ case 193: // pd_allocator: "pd-allocator" $@30 ":" "constant string"
+#line 842 "dhcp6_parser.yy"
{
ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("pd-allocator", al);
ctx.leave();
}
-#line 1572 "dhcp6_parser.cc"
+#line 1633 "dhcp6_parser.cc"
break;
- case 187: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
-#line 818 "dhcp6_parser.yy"
+ case 194: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
+#line 848 "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 1582 "dhcp6_parser.cc"
+#line 1643 "dhcp6_parser.cc"
break;
- case 188: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
-#line 824 "dhcp6_parser.yy"
+ case 195: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
+#line 854 "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 1592 "dhcp6_parser.cc"
+#line 1653 "dhcp6_parser.cc"
break;
- case 189: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
-#line 830 "dhcp6_parser.yy"
+ case 196: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
+#line 860 "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 1602 "dhcp6_parser.cc"
+#line 1663 "dhcp6_parser.cc"
break;
- case 190: // $@30: %empty
-#line 836 "dhcp6_parser.yy"
+ case 197: // $@31: %empty
+#line 866 "dhcp6_parser.yy"
{
ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.INTERFACES_CONFIG);
}
-#line 1614 "dhcp6_parser.cc"
+#line 1675 "dhcp6_parser.cc"
break;
- case 191: // interfaces_config: "interfaces-config" $@30 ":" "{" interfaces_config_params "}"
-#line 842 "dhcp6_parser.yy"
+ case 198: // interfaces_config: "interfaces-config" $@31 ":" "{" interfaces_config_params "}"
+#line 872 "dhcp6_parser.yy"
{
// No interfaces config param is required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1624 "dhcp6_parser.cc"
+#line 1685 "dhcp6_parser.cc"
break;
- case 192: // $@31: %empty
-#line 848 "dhcp6_parser.yy"
+ case 199: // $@32: %empty
+#line 878 "dhcp6_parser.yy"
{
// Parse the interfaces-config map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1634 "dhcp6_parser.cc"
+#line 1695 "dhcp6_parser.cc"
break;
- case 193: // sub_interfaces6: "{" $@31 interfaces_config_params "}"
-#line 852 "dhcp6_parser.yy"
+ case 200: // sub_interfaces6: "{" $@32 interfaces_config_params "}"
+#line 882 "dhcp6_parser.yy"
{
// No interfaces config param is required
// parsing completed
}
-#line 1643 "dhcp6_parser.cc"
+#line 1704 "dhcp6_parser.cc"
break;
- case 196: // interfaces_config_params: interfaces_config_params ","
-#line 859 "dhcp6_parser.yy"
+ case 203: // interfaces_config_params: interfaces_config_params ","
+#line 889 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1651 "dhcp6_parser.cc"
+#line 1712 "dhcp6_parser.cc"
break;
- case 205: // $@32: %empty
-#line 874 "dhcp6_parser.yy"
+ case 212: // $@33: %empty
+#line 904 "dhcp6_parser.yy"
{
ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1663 "dhcp6_parser.cc"
+#line 1724 "dhcp6_parser.cc"
break;
- case 206: // interfaces_list: "interfaces" $@32 ":" list_strings
-#line 880 "dhcp6_parser.yy"
+ case 213: // interfaces_list: "interfaces" $@33 ":" list_strings
+#line 910 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1672 "dhcp6_parser.cc"
+#line 1733 "dhcp6_parser.cc"
break;
- case 207: // re_detect: "re-detect" ":" "boolean"
-#line 885 "dhcp6_parser.yy"
+ case 214: // re_detect: "re-detect" ":" "boolean"
+#line 915 "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 1682 "dhcp6_parser.cc"
+#line 1743 "dhcp6_parser.cc"
break;
- case 208: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
-#line 891 "dhcp6_parser.yy"
+ case 215: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
+#line 921 "dhcp6_parser.yy"
{
ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("service-sockets-require-all", b);
}
-#line 1692 "dhcp6_parser.cc"
+#line 1753 "dhcp6_parser.cc"
break;
- case 209: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
-#line 897 "dhcp6_parser.yy"
+ case 216: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
+#line 927 "dhcp6_parser.yy"
{
ctx.unique("service-sockets-retry-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("service-sockets-retry-wait-time", n);
}
-#line 1702 "dhcp6_parser.cc"
+#line 1763 "dhcp6_parser.cc"
break;
- case 210: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
-#line 903 "dhcp6_parser.yy"
+ case 217: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
+#line 933 "dhcp6_parser.yy"
{
ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("service-sockets-max-retries", n);
}
-#line 1712 "dhcp6_parser.cc"
+#line 1773 "dhcp6_parser.cc"
break;
- case 211: // $@33: %empty
-#line 909 "dhcp6_parser.yy"
+ case 218: // $@34: %empty
+#line 939 "dhcp6_parser.yy"
{
ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.LEASE_DATABASE);
}
-#line 1724 "dhcp6_parser.cc"
+#line 1785 "dhcp6_parser.cc"
break;
- case 212: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}"
-#line 915 "dhcp6_parser.yy"
+ case 219: // lease_database: "lease-database" $@34 ":" "{" database_map_params "}"
+#line 945 "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 1735 "dhcp6_parser.cc"
+#line 1796 "dhcp6_parser.cc"
break;
- case 213: // $@34: %empty
-#line 922 "dhcp6_parser.yy"
+ case 220: // $@35: %empty
+#line 952 "dhcp6_parser.yy"
{
ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1747 "dhcp6_parser.cc"
+#line 1808 "dhcp6_parser.cc"
break;
- case 214: // hosts_database: "hosts-database" $@34 ":" "{" database_map_params "}"
-#line 928 "dhcp6_parser.yy"
+ case 221: // hosts_database: "hosts-database" $@35 ":" "{" database_map_params "}"
+#line 958 "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 1758 "dhcp6_parser.cc"
+#line 1819 "dhcp6_parser.cc"
break;
- case 215: // $@35: %empty
-#line 935 "dhcp6_parser.yy"
+ case 222: // $@36: %empty
+#line 965 "dhcp6_parser.yy"
{
ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1770 "dhcp6_parser.cc"
+#line 1831 "dhcp6_parser.cc"
break;
- case 216: // hosts_databases: "hosts-databases" $@35 ":" "[" database_list "]"
-#line 941 "dhcp6_parser.yy"
+ case 223: // hosts_databases: "hosts-databases" $@36 ":" "[" database_list "]"
+#line 971 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1779 "dhcp6_parser.cc"
+#line 1840 "dhcp6_parser.cc"
break;
- case 221: // not_empty_database_list: not_empty_database_list ","
-#line 952 "dhcp6_parser.yy"
+ case 228: // not_empty_database_list: not_empty_database_list ","
+#line 982 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1787 "dhcp6_parser.cc"
+#line 1848 "dhcp6_parser.cc"
break;
- case 222: // $@36: %empty
-#line 957 "dhcp6_parser.yy"
+ case 229: // $@37: %empty
+#line 987 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1797 "dhcp6_parser.cc"
+#line 1858 "dhcp6_parser.cc"
break;
- case 223: // database: "{" $@36 database_map_params "}"
-#line 961 "dhcp6_parser.yy"
+ case 230: // database: "{" $@37 database_map_params "}"
+#line 991 "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 1807 "dhcp6_parser.cc"
+#line 1868 "dhcp6_parser.cc"
break;
- case 226: // database_map_params: database_map_params ","
-#line 969 "dhcp6_parser.yy"
+ case 233: // database_map_params: database_map_params ","
+#line 999 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 1815 "dhcp6_parser.cc"
+#line 1876 "dhcp6_parser.cc"
break;
- case 249: // $@37: %empty
-#line 998 "dhcp6_parser.yy"
+ case 256: // $@38: %empty
+#line 1028 "dhcp6_parser.yy"
{
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.DATABASE_TYPE);
}
-#line 1824 "dhcp6_parser.cc"
+#line 1885 "dhcp6_parser.cc"
break;
- case 250: // database_type: "type" $@37 ":" db_type
-#line 1001 "dhcp6_parser.yy"
+ case 257: // database_type: "type" $@38 ":" db_type
+#line 1031 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1833 "dhcp6_parser.cc"
+#line 1894 "dhcp6_parser.cc"
break;
- case 251: // db_type: "memfile"
-#line 1006 "dhcp6_parser.yy"
+ case 258: // db_type: "memfile"
+#line 1036 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1839 "dhcp6_parser.cc"
+#line 1900 "dhcp6_parser.cc"
break;
- case 252: // db_type: "mysql"
-#line 1007 "dhcp6_parser.yy"
+ case 259: // db_type: "mysql"
+#line 1037 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1845 "dhcp6_parser.cc"
+#line 1906 "dhcp6_parser.cc"
break;
- case 253: // db_type: "postgresql"
-#line 1008 "dhcp6_parser.yy"
+ case 260: // db_type: "postgresql"
+#line 1038 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1851 "dhcp6_parser.cc"
+#line 1912 "dhcp6_parser.cc"
break;
- case 254: // $@38: %empty
-#line 1011 "dhcp6_parser.yy"
+ case 261: // $@39: %empty
+#line 1041 "dhcp6_parser.yy"
{
ctx.unique("user", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1860 "dhcp6_parser.cc"
+#line 1921 "dhcp6_parser.cc"
break;
- case 255: // user: "user" $@38 ":" "constant string"
-#line 1014 "dhcp6_parser.yy"
+ case 262: // user: "user" $@39 ":" "constant string"
+#line 1044 "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 1870 "dhcp6_parser.cc"
+#line 1931 "dhcp6_parser.cc"
break;
- case 256: // $@39: %empty
-#line 1020 "dhcp6_parser.yy"
+ case 263: // $@40: %empty
+#line 1050 "dhcp6_parser.yy"
{
ctx.unique("password", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1879 "dhcp6_parser.cc"
+#line 1940 "dhcp6_parser.cc"
break;
- case 257: // password: "password" $@39 ":" "constant string"
-#line 1023 "dhcp6_parser.yy"
+ case 264: // password: "password" $@40 ":" "constant string"
+#line 1053 "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 1889 "dhcp6_parser.cc"
+#line 1950 "dhcp6_parser.cc"
break;
- case 258: // $@40: %empty
-#line 1029 "dhcp6_parser.yy"
+ case 265: // $@41: %empty
+#line 1059 "dhcp6_parser.yy"
{
ctx.unique("host", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1898 "dhcp6_parser.cc"
+#line 1959 "dhcp6_parser.cc"
break;
- case 259: // host: "host" $@40 ":" "constant string"
-#line 1032 "dhcp6_parser.yy"
+ case 266: // host: "host" $@41 ":" "constant string"
+#line 1062 "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 1908 "dhcp6_parser.cc"
+#line 1969 "dhcp6_parser.cc"
break;
- case 260: // port: "port" ":" "integer"
-#line 1038 "dhcp6_parser.yy"
+ case 267: // port: "port" ":" "integer"
+#line 1068 "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 1918 "dhcp6_parser.cc"
+#line 1979 "dhcp6_parser.cc"
break;
- case 261: // $@41: %empty
-#line 1044 "dhcp6_parser.yy"
+ case 268: // $@42: %empty
+#line 1074 "dhcp6_parser.yy"
{
ctx.unique("name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1927 "dhcp6_parser.cc"
+#line 1988 "dhcp6_parser.cc"
break;
- case 262: // name: "name" $@41 ":" "constant string"
-#line 1047 "dhcp6_parser.yy"
+ case 269: // name: "name" $@42 ":" "constant string"
+#line 1077 "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 1937 "dhcp6_parser.cc"
+#line 1998 "dhcp6_parser.cc"
break;
- case 263: // persist: "persist" ":" "boolean"
-#line 1053 "dhcp6_parser.yy"
+ case 270: // persist: "persist" ":" "boolean"
+#line 1083 "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 1947 "dhcp6_parser.cc"
+#line 2008 "dhcp6_parser.cc"
break;
- case 264: // lfc_interval: "lfc-interval" ":" "integer"
-#line 1059 "dhcp6_parser.yy"
+ case 271: // lfc_interval: "lfc-interval" ":" "integer"
+#line 1089 "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 1957 "dhcp6_parser.cc"
+#line 2018 "dhcp6_parser.cc"
break;
- case 265: // readonly: "readonly" ":" "boolean"
-#line 1065 "dhcp6_parser.yy"
+ case 272: // readonly: "readonly" ":" "boolean"
+#line 1095 "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 1967 "dhcp6_parser.cc"
+#line 2028 "dhcp6_parser.cc"
break;
- case 266: // connect_timeout: "connect-timeout" ":" "integer"
-#line 1071 "dhcp6_parser.yy"
+ case 273: // connect_timeout: "connect-timeout" ":" "integer"
+#line 1101 "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 1977 "dhcp6_parser.cc"
+#line 2038 "dhcp6_parser.cc"
break;
- case 267: // read_timeout: "read-timeout" ":" "integer"
-#line 1077 "dhcp6_parser.yy"
+ case 274: // read_timeout: "read-timeout" ":" "integer"
+#line 1107 "dhcp6_parser.yy"
{
ctx.unique("read-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("read-timeout", n);
}
-#line 1987 "dhcp6_parser.cc"
+#line 2048 "dhcp6_parser.cc"
break;
- case 268: // write_timeout: "write-timeout" ":" "integer"
-#line 1083 "dhcp6_parser.yy"
+ case 275: // write_timeout: "write-timeout" ":" "integer"
+#line 1113 "dhcp6_parser.yy"
{
ctx.unique("write-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("write-timeout", n);
}
-#line 1997 "dhcp6_parser.cc"
+#line 2058 "dhcp6_parser.cc"
break;
- case 269: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
-#line 1089 "dhcp6_parser.yy"
+ case 276: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
+#line 1119 "dhcp6_parser.yy"
{
ctx.unique("tcp-user-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("tcp-user-timeout", n);
}
-#line 2007 "dhcp6_parser.cc"
+#line 2068 "dhcp6_parser.cc"
break;
- case 270: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
-#line 1096 "dhcp6_parser.yy"
+ case 277: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
+#line 1126 "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 2017 "dhcp6_parser.cc"
+#line 2078 "dhcp6_parser.cc"
break;
- case 271: // $@42: %empty
-#line 1102 "dhcp6_parser.yy"
+ case 278: // $@43: %empty
+#line 1132 "dhcp6_parser.yy"
{
ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.DATABASE_ON_FAIL);
}
-#line 2026 "dhcp6_parser.cc"
+#line 2087 "dhcp6_parser.cc"
break;
- case 272: // on_fail: "on-fail" $@42 ":" on_fail_mode
-#line 1105 "dhcp6_parser.yy"
+ case 279: // on_fail: "on-fail" $@43 ":" on_fail_mode
+#line 1135 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2035 "dhcp6_parser.cc"
+#line 2096 "dhcp6_parser.cc"
break;
- case 273: // on_fail_mode: "stop-retry-exit"
-#line 1110 "dhcp6_parser.yy"
+ case 280: // on_fail_mode: "stop-retry-exit"
+#line 1140 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2041 "dhcp6_parser.cc"
+#line 2102 "dhcp6_parser.cc"
break;
- case 274: // on_fail_mode: "serve-retry-exit"
-#line 1111 "dhcp6_parser.yy"
+ case 281: // on_fail_mode: "serve-retry-exit"
+#line 1141 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2047 "dhcp6_parser.cc"
+#line 2108 "dhcp6_parser.cc"
break;
- case 275: // on_fail_mode: "serve-retry-continue"
-#line 1112 "dhcp6_parser.yy"
+ case 282: // on_fail_mode: "serve-retry-continue"
+#line 1142 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
-#line 2053 "dhcp6_parser.cc"
+#line 2114 "dhcp6_parser.cc"
break;
- case 276: // max_row_errors: "max-row-errors" ":" "integer"
-#line 1115 "dhcp6_parser.yy"
+ case 283: // max_row_errors: "max-row-errors" ":" "integer"
+#line 1145 "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 2063 "dhcp6_parser.cc"
+#line 2124 "dhcp6_parser.cc"
break;
- case 277: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
-#line 1121 "dhcp6_parser.yy"
+ case 284: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
+#line 1151 "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 2073 "dhcp6_parser.cc"
+#line 2134 "dhcp6_parser.cc"
break;
- case 278: // $@43: %empty
-#line 1127 "dhcp6_parser.yy"
+ case 285: // $@44: %empty
+#line 1157 "dhcp6_parser.yy"
{
ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2082 "dhcp6_parser.cc"
+#line 2143 "dhcp6_parser.cc"
break;
- case 279: // trust_anchor: "trust-anchor" $@43 ":" "constant string"
-#line 1130 "dhcp6_parser.yy"
+ case 286: // trust_anchor: "trust-anchor" $@44 ":" "constant string"
+#line 1160 "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 2092 "dhcp6_parser.cc"
+#line 2153 "dhcp6_parser.cc"
break;
- case 280: // $@44: %empty
-#line 1136 "dhcp6_parser.yy"
+ case 287: // $@45: %empty
+#line 1166 "dhcp6_parser.yy"
{
ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2101 "dhcp6_parser.cc"
+#line 2162 "dhcp6_parser.cc"
break;
- case 281: // cert_file: "cert-file" $@44 ":" "constant string"
-#line 1139 "dhcp6_parser.yy"
+ case 288: // cert_file: "cert-file" $@45 ":" "constant string"
+#line 1169 "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 2111 "dhcp6_parser.cc"
+#line 2172 "dhcp6_parser.cc"
break;
- case 282: // $@45: %empty
-#line 1145 "dhcp6_parser.yy"
+ case 289: // $@46: %empty
+#line 1175 "dhcp6_parser.yy"
{
ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2120 "dhcp6_parser.cc"
+#line 2181 "dhcp6_parser.cc"
break;
- case 283: // key_file: "key-file" $@45 ":" "constant string"
-#line 1148 "dhcp6_parser.yy"
+ case 290: // key_file: "key-file" $@46 ":" "constant string"
+#line 1178 "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 2130 "dhcp6_parser.cc"
+#line 2191 "dhcp6_parser.cc"
break;
- case 284: // $@46: %empty
-#line 1154 "dhcp6_parser.yy"
+ case 291: // $@47: %empty
+#line 1184 "dhcp6_parser.yy"
{
ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2139 "dhcp6_parser.cc"
+#line 2200 "dhcp6_parser.cc"
break;
- case 285: // cipher_list: "cipher-list" $@46 ":" "constant string"
-#line 1157 "dhcp6_parser.yy"
+ case 292: // cipher_list: "cipher-list" $@47 ":" "constant string"
+#line 1187 "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 2149 "dhcp6_parser.cc"
+#line 2210 "dhcp6_parser.cc"
break;
- case 286: // $@47: %empty
-#line 1163 "dhcp6_parser.yy"
+ case 293: // $@48: %empty
+#line 1193 "dhcp6_parser.yy"
{
ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.SANITY_CHECKS);
}
-#line 2161 "dhcp6_parser.cc"
+#line 2222 "dhcp6_parser.cc"
break;
- case 287: // sanity_checks: "sanity-checks" $@47 ":" "{" sanity_checks_params "}"
-#line 1169 "dhcp6_parser.yy"
+ case 294: // sanity_checks: "sanity-checks" $@48 ":" "{" sanity_checks_params "}"
+#line 1199 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2170 "dhcp6_parser.cc"
+#line 2231 "dhcp6_parser.cc"
break;
- case 290: // sanity_checks_params: sanity_checks_params ","
-#line 1176 "dhcp6_parser.yy"
+ case 297: // sanity_checks_params: sanity_checks_params ","
+#line 1206 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2178 "dhcp6_parser.cc"
+#line 2239 "dhcp6_parser.cc"
break;
- case 293: // $@48: %empty
-#line 1185 "dhcp6_parser.yy"
+ case 300: // $@49: %empty
+#line 1215 "dhcp6_parser.yy"
{
ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2187 "dhcp6_parser.cc"
+#line 2248 "dhcp6_parser.cc"
break;
- case 294: // lease_checks: "lease-checks" $@48 ":" "constant string"
-#line 1188 "dhcp6_parser.yy"
+ case 301: // lease_checks: "lease-checks" $@49 ":" "constant string"
+#line 1218 "dhcp6_parser.yy"
{
if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
", supported values are: none, warn, fix, fix-del, del");
}
}
-#line 2207 "dhcp6_parser.cc"
+#line 2268 "dhcp6_parser.cc"
break;
- case 295: // $@49: %empty
-#line 1204 "dhcp6_parser.yy"
+ case 302: // $@50: %empty
+#line 1234 "dhcp6_parser.yy"
{
ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2216 "dhcp6_parser.cc"
+#line 2277 "dhcp6_parser.cc"
break;
- case 296: // extended_info_checks: "extended-info-checks" $@49 ":" "constant string"
-#line 1207 "dhcp6_parser.yy"
+ case 303: // extended_info_checks: "extended-info-checks" $@50 ":" "constant string"
+#line 1237 "dhcp6_parser.yy"
{
if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
", supported values are: none, fix, strict, pedantic");
}
}
-#line 2235 "dhcp6_parser.cc"
+#line 2296 "dhcp6_parser.cc"
break;
- case 297: // $@50: %empty
-#line 1222 "dhcp6_parser.yy"
+ case 304: // $@51: %empty
+#line 1252 "dhcp6_parser.yy"
{
ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.MAC_SOURCES);
}
-#line 2247 "dhcp6_parser.cc"
+#line 2308 "dhcp6_parser.cc"
break;
- case 298: // mac_sources: "mac-sources" $@50 ":" "[" mac_sources_list "]"
-#line 1228 "dhcp6_parser.yy"
+ case 305: // mac_sources: "mac-sources" $@51 ":" "[" mac_sources_list "]"
+#line 1258 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2256 "dhcp6_parser.cc"
+#line 2317 "dhcp6_parser.cc"
break;
- case 301: // mac_sources_list: mac_sources_list ","
-#line 1235 "dhcp6_parser.yy"
+ case 308: // mac_sources_list: mac_sources_list ","
+#line 1265 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2264 "dhcp6_parser.cc"
+#line 2325 "dhcp6_parser.cc"
break;
- case 304: // duid_id: "duid"
-#line 1244 "dhcp6_parser.yy"
+ case 311: // duid_id: "duid"
+#line 1274 "dhcp6_parser.yy"
{
ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
-#line 2273 "dhcp6_parser.cc"
+#line 2334 "dhcp6_parser.cc"
break;
- case 305: // string_id: "constant string"
-#line 1249 "dhcp6_parser.yy"
+ case 312: // string_id: "constant string"
+#line 1279 "dhcp6_parser.yy"
{
ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
-#line 2282 "dhcp6_parser.cc"
+#line 2343 "dhcp6_parser.cc"
break;
- case 306: // $@51: %empty
-#line 1254 "dhcp6_parser.yy"
+ case 313: // $@52: %empty
+#line 1284 "dhcp6_parser.yy"
{
ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
}
-#line 2294 "dhcp6_parser.cc"
+#line 2355 "dhcp6_parser.cc"
break;
- case 307: // host_reservation_identifiers: "host-reservation-identifiers" $@51 ":" "[" host_reservation_identifiers_list "]"
-#line 1260 "dhcp6_parser.yy"
+ case 314: // host_reservation_identifiers: "host-reservation-identifiers" $@52 ":" "[" host_reservation_identifiers_list "]"
+#line 1290 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2303 "dhcp6_parser.cc"
+#line 2364 "dhcp6_parser.cc"
break;
- case 310: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1267 "dhcp6_parser.yy"
+ case 317: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
+#line 1297 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2311 "dhcp6_parser.cc"
+#line 2372 "dhcp6_parser.cc"
break;
- case 314: // hw_address_id: "hw-address"
-#line 1277 "dhcp6_parser.yy"
+ case 321: // hw_address_id: "hw-address"
+#line 1307 "dhcp6_parser.yy"
{
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(hwaddr);
}
-#line 2320 "dhcp6_parser.cc"
+#line 2381 "dhcp6_parser.cc"
break;
- case 315: // flex_id: "flex-id"
-#line 1282 "dhcp6_parser.yy"
+ case 322: // flex_id: "flex-id"
+#line 1312 "dhcp6_parser.yy"
{
ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(flex_id);
}
-#line 2329 "dhcp6_parser.cc"
+#line 2390 "dhcp6_parser.cc"
break;
- case 316: // $@52: %empty
-#line 1289 "dhcp6_parser.yy"
+ case 323: // $@53: %empty
+#line 1319 "dhcp6_parser.yy"
{
ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2341 "dhcp6_parser.cc"
+#line 2402 "dhcp6_parser.cc"
break;
- case 317: // relay_supplied_options: "relay-supplied-options" $@52 ":" "[" list_content "]"
-#line 1295 "dhcp6_parser.yy"
+ case 324: // relay_supplied_options: "relay-supplied-options" $@53 ":" "[" list_content "]"
+#line 1325 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2350 "dhcp6_parser.cc"
+#line 2411 "dhcp6_parser.cc"
break;
- case 318: // $@53: %empty
-#line 1302 "dhcp6_parser.yy"
+ case 325: // $@54: %empty
+#line 1332 "dhcp6_parser.yy"
{
ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(mt);
ctx.enter(ctx.DHCP_MULTI_THREADING);
}
-#line 2362 "dhcp6_parser.cc"
+#line 2423 "dhcp6_parser.cc"
break;
- case 319: // dhcp_multi_threading: "multi-threading" $@53 ":" "{" multi_threading_params "}"
-#line 1308 "dhcp6_parser.yy"
+ case 326: // dhcp_multi_threading: "multi-threading" $@54 ":" "{" multi_threading_params "}"
+#line 1338 "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 2373 "dhcp6_parser.cc"
+#line 2434 "dhcp6_parser.cc"
break;
- case 322: // multi_threading_params: multi_threading_params ","
-#line 1317 "dhcp6_parser.yy"
+ case 329: // multi_threading_params: multi_threading_params ","
+#line 1347 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2381 "dhcp6_parser.cc"
+#line 2442 "dhcp6_parser.cc"
break;
- case 329: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1330 "dhcp6_parser.yy"
+ case 336: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
+#line 1360 "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 2391 "dhcp6_parser.cc"
+#line 2452 "dhcp6_parser.cc"
break;
- case 330: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1336 "dhcp6_parser.yy"
+ case 337: // thread_pool_size: "thread-pool-size" ":" "integer"
+#line 1366 "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 2401 "dhcp6_parser.cc"
+#line 2462 "dhcp6_parser.cc"
break;
- case 331: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1342 "dhcp6_parser.yy"
+ case 338: // packet_queue_size: "packet-queue-size" ":" "integer"
+#line 1372 "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 2411 "dhcp6_parser.cc"
+#line 2472 "dhcp6_parser.cc"
break;
- case 332: // $@54: %empty
-#line 1348 "dhcp6_parser.yy"
+ case 339: // $@55: %empty
+#line 1378 "dhcp6_parser.yy"
{
ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.HOOKS_LIBRARIES);
}
-#line 2423 "dhcp6_parser.cc"
+#line 2484 "dhcp6_parser.cc"
break;
- case 333: // hooks_libraries: "hooks-libraries" $@54 ":" "[" hooks_libraries_list "]"
-#line 1354 "dhcp6_parser.yy"
+ case 340: // hooks_libraries: "hooks-libraries" $@55 ":" "[" hooks_libraries_list "]"
+#line 1384 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2432 "dhcp6_parser.cc"
+#line 2493 "dhcp6_parser.cc"
break;
- case 338: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1365 "dhcp6_parser.yy"
+ case 345: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
+#line 1395 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2440 "dhcp6_parser.cc"
+#line 2501 "dhcp6_parser.cc"
break;
- case 339: // $@55: %empty
-#line 1370 "dhcp6_parser.yy"
+ case 346: // $@56: %empty
+#line 1400 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2450 "dhcp6_parser.cc"
+#line 2511 "dhcp6_parser.cc"
break;
- case 340: // hooks_library: "{" $@55 hooks_params "}"
-#line 1374 "dhcp6_parser.yy"
+ case 347: // hooks_library: "{" $@56 hooks_params "}"
+#line 1404 "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 2460 "dhcp6_parser.cc"
+#line 2521 "dhcp6_parser.cc"
break;
- case 341: // $@56: %empty
-#line 1380 "dhcp6_parser.yy"
+ case 348: // $@57: %empty
+#line 1410 "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 2470 "dhcp6_parser.cc"
+#line 2531 "dhcp6_parser.cc"
break;
- case 342: // sub_hooks_library: "{" $@56 hooks_params "}"
-#line 1384 "dhcp6_parser.yy"
+ case 349: // sub_hooks_library: "{" $@57 hooks_params "}"
+#line 1414 "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 2480 "dhcp6_parser.cc"
+#line 2541 "dhcp6_parser.cc"
break;
- case 345: // hooks_params: hooks_params ","
-#line 1392 "dhcp6_parser.yy"
+ case 352: // hooks_params: hooks_params ","
+#line 1422 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2488 "dhcp6_parser.cc"
+#line 2549 "dhcp6_parser.cc"
break;
- case 349: // $@57: %empty
-#line 1402 "dhcp6_parser.yy"
+ case 356: // $@58: %empty
+#line 1432 "dhcp6_parser.yy"
{
ctx.unique("library", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2497 "dhcp6_parser.cc"
+#line 2558 "dhcp6_parser.cc"
break;
- case 350: // library: "library" $@57 ":" "constant string"
-#line 1405 "dhcp6_parser.yy"
+ case 357: // library: "library" $@58 ":" "constant string"
+#line 1435 "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 2507 "dhcp6_parser.cc"
+#line 2568 "dhcp6_parser.cc"
break;
- case 351: // $@58: %empty
-#line 1411 "dhcp6_parser.yy"
+ case 358: // $@59: %empty
+#line 1441 "dhcp6_parser.yy"
{
ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2516 "dhcp6_parser.cc"
+#line 2577 "dhcp6_parser.cc"
break;
- case 352: // parameters: "parameters" $@58 ":" map_value
-#line 1414 "dhcp6_parser.yy"
+ case 359: // parameters: "parameters" $@59 ":" map_value
+#line 1444 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2525 "dhcp6_parser.cc"
+#line 2586 "dhcp6_parser.cc"
break;
- case 353: // $@59: %empty
-#line 1420 "dhcp6_parser.yy"
+ case 360: // $@60: %empty
+#line 1450 "dhcp6_parser.yy"
{
ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
}
-#line 2537 "dhcp6_parser.cc"
+#line 2598 "dhcp6_parser.cc"
break;
- case 354: // expired_leases_processing: "expired-leases-processing" $@59 ":" "{" expired_leases_params "}"
-#line 1426 "dhcp6_parser.yy"
+ case 361: // expired_leases_processing: "expired-leases-processing" $@60 ":" "{" expired_leases_params "}"
+#line 1456 "dhcp6_parser.yy"
{
// No expired lease parameter is required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2547 "dhcp6_parser.cc"
+#line 2608 "dhcp6_parser.cc"
break;
- case 357: // expired_leases_params: expired_leases_params ","
-#line 1434 "dhcp6_parser.yy"
+ case 364: // expired_leases_params: expired_leases_params ","
+#line 1464 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2555 "dhcp6_parser.cc"
+#line 2616 "dhcp6_parser.cc"
break;
- case 364: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1447 "dhcp6_parser.yy"
+ case 371: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
+#line 1477 "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 2565 "dhcp6_parser.cc"
+#line 2626 "dhcp6_parser.cc"
break;
- case 365: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1453 "dhcp6_parser.yy"
+ case 372: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
+#line 1483 "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 2575 "dhcp6_parser.cc"
+#line 2636 "dhcp6_parser.cc"
break;
- case 366: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1459 "dhcp6_parser.yy"
+ case 373: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
+#line 1489 "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 2585 "dhcp6_parser.cc"
+#line 2646 "dhcp6_parser.cc"
break;
- case 367: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1465 "dhcp6_parser.yy"
+ case 374: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
+#line 1495 "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 2595 "dhcp6_parser.cc"
+#line 2656 "dhcp6_parser.cc"
break;
- case 368: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1471 "dhcp6_parser.yy"
+ case 375: // max_reclaim_time: "max-reclaim-time" ":" "integer"
+#line 1501 "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 2605 "dhcp6_parser.cc"
+#line 2666 "dhcp6_parser.cc"
break;
- case 369: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1477 "dhcp6_parser.yy"
+ case 376: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
+#line 1507 "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 2615 "dhcp6_parser.cc"
+#line 2676 "dhcp6_parser.cc"
break;
- case 370: // $@60: %empty
-#line 1486 "dhcp6_parser.yy"
+ case 377: // $@61: %empty
+#line 1516 "dhcp6_parser.yy"
{
ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.SUBNET6);
}
-#line 2627 "dhcp6_parser.cc"
+#line 2688 "dhcp6_parser.cc"
break;
- case 371: // subnet6_list: "subnet6" $@60 ":" "[" subnet6_list_content "]"
-#line 1492 "dhcp6_parser.yy"
+ case 378: // subnet6_list: "subnet6" $@61 ":" "[" subnet6_list_content "]"
+#line 1522 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2636 "dhcp6_parser.cc"
+#line 2697 "dhcp6_parser.cc"
break;
- case 376: // not_empty_subnet6_list: not_empty_subnet6_list ","
-#line 1506 "dhcp6_parser.yy"
+ case 383: // not_empty_subnet6_list: not_empty_subnet6_list ","
+#line 1536 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2644 "dhcp6_parser.cc"
+#line 2705 "dhcp6_parser.cc"
break;
- case 377: // $@61: %empty
-#line 1515 "dhcp6_parser.yy"
+ case 384: // $@62: %empty
+#line 1545 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2654 "dhcp6_parser.cc"
+#line 2715 "dhcp6_parser.cc"
break;
- case 378: // subnet6: "{" $@61 subnet6_params "}"
-#line 1519 "dhcp6_parser.yy"
+ case 385: // subnet6: "{" $@62 subnet6_params "}"
+#line 1549 "dhcp6_parser.yy"
{
// Once we reached this place, the subnet parsing is now complete.
// If we want to, we can implement default values here.
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2680 "dhcp6_parser.cc"
+#line 2741 "dhcp6_parser.cc"
break;
- case 379: // $@62: %empty
-#line 1541 "dhcp6_parser.yy"
+ case 386: // $@63: %empty
+#line 1571 "dhcp6_parser.yy"
{
// Parse the subnet6 list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2690 "dhcp6_parser.cc"
+#line 2751 "dhcp6_parser.cc"
break;
- case 380: // sub_subnet6: "{" $@62 subnet6_params "}"
-#line 1545 "dhcp6_parser.yy"
+ case 387: // sub_subnet6: "{" $@63 subnet6_params "}"
+#line 1575 "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 2700 "dhcp6_parser.cc"
+#line 2761 "dhcp6_parser.cc"
break;
- case 383: // subnet6_params: subnet6_params ","
-#line 1554 "dhcp6_parser.yy"
+ case 390: // subnet6_params: subnet6_params ","
+#line 1584 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2708 "dhcp6_parser.cc"
+#line 2769 "dhcp6_parser.cc"
break;
- case 430: // $@63: %empty
-#line 1608 "dhcp6_parser.yy"
+ case 438: // $@64: %empty
+#line 1639 "dhcp6_parser.yy"
{
ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2717 "dhcp6_parser.cc"
+#line 2778 "dhcp6_parser.cc"
break;
- case 431: // subnet: "subnet" $@63 ":" "constant string"
-#line 1611 "dhcp6_parser.yy"
+ case 439: // subnet: "subnet" $@64 ":" "constant string"
+#line 1642 "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 2727 "dhcp6_parser.cc"
+#line 2788 "dhcp6_parser.cc"
break;
- case 432: // $@64: %empty
-#line 1617 "dhcp6_parser.yy"
+ case 440: // $@65: %empty
+#line 1648 "dhcp6_parser.yy"
{
ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2736 "dhcp6_parser.cc"
+#line 2797 "dhcp6_parser.cc"
break;
- case 433: // interface: "interface" $@64 ":" "constant string"
-#line 1620 "dhcp6_parser.yy"
+ case 441: // interface: "interface" $@65 ":" "constant string"
+#line 1651 "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 2746 "dhcp6_parser.cc"
+#line 2807 "dhcp6_parser.cc"
break;
- case 434: // $@65: %empty
-#line 1626 "dhcp6_parser.yy"
+ case 442: // $@66: %empty
+#line 1657 "dhcp6_parser.yy"
{
ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2755 "dhcp6_parser.cc"
+#line 2816 "dhcp6_parser.cc"
break;
- case 435: // interface_id: "interface-id" $@65 ":" "constant string"
-#line 1629 "dhcp6_parser.yy"
+ case 443: // interface_id: "interface-id" $@66 ":" "constant string"
+#line 1660 "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 2765 "dhcp6_parser.cc"
+#line 2826 "dhcp6_parser.cc"
break;
- case 436: // $@66: %empty
-#line 1635 "dhcp6_parser.yy"
+ case 444: // $@67: %empty
+#line 1666 "dhcp6_parser.yy"
{
ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2774 "dhcp6_parser.cc"
+#line 2835 "dhcp6_parser.cc"
break;
- case 437: // client_class: "client-class" $@66 ":" "constant string"
-#line 1638 "dhcp6_parser.yy"
+ case 445: // client_class: "client-class" $@67 ":" "constant string"
+#line 1669 "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 2784 "dhcp6_parser.cc"
+#line 2845 "dhcp6_parser.cc"
break;
- case 438: // $@67: %empty
-#line 1644 "dhcp6_parser.yy"
+ case 446: // $@68: %empty
+#line 1675 "dhcp6_parser.yy"
{
ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2796 "dhcp6_parser.cc"
+#line 2857 "dhcp6_parser.cc"
break;
- case 439: // require_client_classes: "require-client-classes" $@67 ":" list_strings
-#line 1650 "dhcp6_parser.yy"
+ case 447: // require_client_classes: "require-client-classes" $@68 ":" list_strings
+#line 1681 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2805 "dhcp6_parser.cc"
+#line 2866 "dhcp6_parser.cc"
break;
- case 440: // reservations_global: "reservations-global" ":" "boolean"
-#line 1655 "dhcp6_parser.yy"
+ case 448: // reservations_global: "reservations-global" ":" "boolean"
+#line 1686 "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 2815 "dhcp6_parser.cc"
+#line 2876 "dhcp6_parser.cc"
break;
- case 441: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1661 "dhcp6_parser.yy"
+ case 449: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
+#line 1692 "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 2825 "dhcp6_parser.cc"
+#line 2886 "dhcp6_parser.cc"
break;
- case 442: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1667 "dhcp6_parser.yy"
+ case 450: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
+#line 1698 "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 2835 "dhcp6_parser.cc"
+#line 2896 "dhcp6_parser.cc"
break;
- case 443: // $@68: %empty
-#line 1673 "dhcp6_parser.yy"
+ case 451: // $@69: %empty
+#line 1704 "dhcp6_parser.yy"
{
ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.RESERVATION_MODE);
}
-#line 2844 "dhcp6_parser.cc"
+#line 2905 "dhcp6_parser.cc"
break;
- case 444: // reservation_mode: "reservation-mode" $@68 ":" hr_mode
-#line 1676 "dhcp6_parser.yy"
+ case 452: // reservation_mode: "reservation-mode" $@69 ":" hr_mode
+#line 1707 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2853 "dhcp6_parser.cc"
+#line 2914 "dhcp6_parser.cc"
break;
- case 445: // hr_mode: "disabled"
-#line 1681 "dhcp6_parser.yy"
+ case 453: // hr_mode: "disabled"
+#line 1712 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2859 "dhcp6_parser.cc"
+#line 2920 "dhcp6_parser.cc"
break;
- case 446: // hr_mode: "out-of-pool"
-#line 1682 "dhcp6_parser.yy"
+ case 454: // hr_mode: "out-of-pool"
+#line 1713 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2865 "dhcp6_parser.cc"
+#line 2926 "dhcp6_parser.cc"
break;
- case 447: // hr_mode: "global"
-#line 1683 "dhcp6_parser.yy"
+ case 455: // hr_mode: "global"
+#line 1714 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2871 "dhcp6_parser.cc"
+#line 2932 "dhcp6_parser.cc"
break;
- case 448: // hr_mode: "all"
-#line 1684 "dhcp6_parser.yy"
+ case 456: // hr_mode: "all"
+#line 1715 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2877 "dhcp6_parser.cc"
+#line 2938 "dhcp6_parser.cc"
break;
- case 449: // id: "id" ":" "integer"
-#line 1687 "dhcp6_parser.yy"
+ case 457: // id: "id" ":" "integer"
+#line 1718 "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 2887 "dhcp6_parser.cc"
+#line 2948 "dhcp6_parser.cc"
break;
- case 450: // rapid_commit: "rapid-commit" ":" "boolean"
-#line 1693 "dhcp6_parser.yy"
+ case 458: // rapid_commit: "rapid-commit" ":" "boolean"
+#line 1724 "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 2897 "dhcp6_parser.cc"
+#line 2958 "dhcp6_parser.cc"
break;
- case 451: // $@69: %empty
-#line 1701 "dhcp6_parser.yy"
+ case 459: // $@70: %empty
+#line 1732 "dhcp6_parser.yy"
{
ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.SHARED_NETWORK);
}
-#line 2909 "dhcp6_parser.cc"
+#line 2970 "dhcp6_parser.cc"
break;
- case 452: // shared_networks: "shared-networks" $@69 ":" "[" shared_networks_content "]"
-#line 1707 "dhcp6_parser.yy"
+ case 460: // shared_networks: "shared-networks" $@70 ":" "[" shared_networks_content "]"
+#line 1738 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2918 "dhcp6_parser.cc"
+#line 2979 "dhcp6_parser.cc"
break;
- case 457: // shared_networks_list: shared_networks_list ","
-#line 1720 "dhcp6_parser.yy"
+ case 465: // shared_networks_list: shared_networks_list ","
+#line 1751 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2926 "dhcp6_parser.cc"
+#line 2987 "dhcp6_parser.cc"
break;
- case 458: // $@70: %empty
-#line 1725 "dhcp6_parser.yy"
+ case 466: // $@71: %empty
+#line 1756 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2936 "dhcp6_parser.cc"
+#line 2997 "dhcp6_parser.cc"
break;
- case 459: // shared_network: "{" $@70 shared_network_params "}"
-#line 1729 "dhcp6_parser.yy"
+ case 467: // shared_network: "{" $@71 shared_network_params "}"
+#line 1760 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
}
-#line 2944 "dhcp6_parser.cc"
+#line 3005 "dhcp6_parser.cc"
break;
- case 462: // shared_network_params: shared_network_params ","
-#line 1735 "dhcp6_parser.yy"
+ case 470: // shared_network_params: shared_network_params ","
+#line 1766 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2952 "dhcp6_parser.cc"
+#line 3013 "dhcp6_parser.cc"
break;
- case 506: // $@71: %empty
-#line 1789 "dhcp6_parser.yy"
+ case 515: // $@72: %empty
+#line 1821 "dhcp6_parser.yy"
{
ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DEF);
}
-#line 2964 "dhcp6_parser.cc"
+#line 3025 "dhcp6_parser.cc"
break;
- case 507: // option_def_list: "option-def" $@71 ":" "[" option_def_list_content "]"
-#line 1795 "dhcp6_parser.yy"
+ case 516: // option_def_list: "option-def" $@72 ":" "[" option_def_list_content "]"
+#line 1827 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2973 "dhcp6_parser.cc"
+#line 3034 "dhcp6_parser.cc"
break;
- case 508: // $@72: %empty
-#line 1803 "dhcp6_parser.yy"
+ case 517: // $@73: %empty
+#line 1835 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2982 "dhcp6_parser.cc"
+#line 3043 "dhcp6_parser.cc"
break;
- case 509: // sub_option_def_list: "{" $@72 option_def_list "}"
-#line 1806 "dhcp6_parser.yy"
+ case 518: // sub_option_def_list: "{" $@73 option_def_list "}"
+#line 1838 "dhcp6_parser.yy"
{
// parsing completed
}
-#line 2990 "dhcp6_parser.cc"
+#line 3051 "dhcp6_parser.cc"
break;
- case 514: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1818 "dhcp6_parser.yy"
+ case 523: // not_empty_option_def_list: not_empty_option_def_list ","
+#line 1850 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 2998 "dhcp6_parser.cc"
+#line 3059 "dhcp6_parser.cc"
break;
- case 515: // $@73: %empty
-#line 1825 "dhcp6_parser.yy"
+ case 524: // $@74: %empty
+#line 1857 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3008 "dhcp6_parser.cc"
+#line 3069 "dhcp6_parser.cc"
break;
- case 516: // option_def_entry: "{" $@73 option_def_params "}"
-#line 1829 "dhcp6_parser.yy"
+ case 525: // option_def_entry: "{" $@74 option_def_params "}"
+#line 1861 "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));
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 3020 "dhcp6_parser.cc"
+#line 3081 "dhcp6_parser.cc"
break;
- case 517: // $@74: %empty
-#line 1840 "dhcp6_parser.yy"
+ case 526: // $@75: %empty
+#line 1872 "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 3030 "dhcp6_parser.cc"
+#line 3091 "dhcp6_parser.cc"
break;
- case 518: // sub_option_def: "{" $@74 option_def_params "}"
-#line 1844 "dhcp6_parser.yy"
+ case 527: // sub_option_def: "{" $@75 option_def_params "}"
+#line 1876 "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));
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 3042 "dhcp6_parser.cc"
+#line 3103 "dhcp6_parser.cc"
break;
- case 523: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1860 "dhcp6_parser.yy"
+ case 532: // not_empty_option_def_params: not_empty_option_def_params ","
+#line 1892 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3050 "dhcp6_parser.cc"
+#line 3111 "dhcp6_parser.cc"
break;
- case 535: // code: "code" ":" "integer"
-#line 1879 "dhcp6_parser.yy"
+ case 544: // code: "code" ":" "integer"
+#line 1911 "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 3060 "dhcp6_parser.cc"
+#line 3121 "dhcp6_parser.cc"
break;
- case 537: // $@75: %empty
-#line 1887 "dhcp6_parser.yy"
+ case 546: // $@76: %empty
+#line 1919 "dhcp6_parser.yy"
{
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3069 "dhcp6_parser.cc"
+#line 3130 "dhcp6_parser.cc"
break;
- case 538: // option_def_type: "type" $@75 ":" "constant string"
-#line 1890 "dhcp6_parser.yy"
+ case 547: // option_def_type: "type" $@76 ":" "constant string"
+#line 1922 "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 3079 "dhcp6_parser.cc"
+#line 3140 "dhcp6_parser.cc"
break;
- case 539: // $@76: %empty
-#line 1896 "dhcp6_parser.yy"
+ case 548: // $@77: %empty
+#line 1928 "dhcp6_parser.yy"
{
ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3088 "dhcp6_parser.cc"
+#line 3149 "dhcp6_parser.cc"
break;
- case 540: // option_def_record_types: "record-types" $@76 ":" "constant string"
-#line 1899 "dhcp6_parser.yy"
+ case 549: // option_def_record_types: "record-types" $@77 ":" "constant string"
+#line 1931 "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 3098 "dhcp6_parser.cc"
+#line 3159 "dhcp6_parser.cc"
break;
- case 541: // $@77: %empty
-#line 1905 "dhcp6_parser.yy"
+ case 550: // $@78: %empty
+#line 1937 "dhcp6_parser.yy"
{
ctx.unique("space", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3107 "dhcp6_parser.cc"
+#line 3168 "dhcp6_parser.cc"
break;
- case 542: // space: "space" $@77 ":" "constant string"
-#line 1908 "dhcp6_parser.yy"
+ case 551: // space: "space" $@78 ":" "constant string"
+#line 1940 "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 3117 "dhcp6_parser.cc"
+#line 3178 "dhcp6_parser.cc"
break;
- case 544: // $@78: %empty
-#line 1916 "dhcp6_parser.yy"
+ case 553: // $@79: %empty
+#line 1948 "dhcp6_parser.yy"
{
ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3126 "dhcp6_parser.cc"
+#line 3187 "dhcp6_parser.cc"
break;
- case 545: // option_def_encapsulate: "encapsulate" $@78 ":" "constant string"
-#line 1919 "dhcp6_parser.yy"
+ case 554: // option_def_encapsulate: "encapsulate" $@79 ":" "constant string"
+#line 1951 "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 3136 "dhcp6_parser.cc"
+#line 3197 "dhcp6_parser.cc"
break;
- case 546: // option_def_array: "array" ":" "boolean"
-#line 1925 "dhcp6_parser.yy"
+ case 555: // option_def_array: "array" ":" "boolean"
+#line 1957 "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 3146 "dhcp6_parser.cc"
+#line 3207 "dhcp6_parser.cc"
break;
- case 547: // $@79: %empty
-#line 1935 "dhcp6_parser.yy"
+ case 556: // $@80: %empty
+#line 1967 "dhcp6_parser.yy"
{
ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DATA);
}
-#line 3158 "dhcp6_parser.cc"
+#line 3219 "dhcp6_parser.cc"
break;
- case 548: // option_data_list: "option-data" $@79 ":" "[" option_data_list_content "]"
-#line 1941 "dhcp6_parser.yy"
+ case 557: // option_data_list: "option-data" $@80 ":" "[" option_data_list_content "]"
+#line 1973 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3167 "dhcp6_parser.cc"
+#line 3228 "dhcp6_parser.cc"
break;
- case 553: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 1956 "dhcp6_parser.yy"
+ case 562: // not_empty_option_data_list: not_empty_option_data_list ","
+#line 1988 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3175 "dhcp6_parser.cc"
+#line 3236 "dhcp6_parser.cc"
break;
- case 554: // $@80: %empty
-#line 1963 "dhcp6_parser.yy"
+ case 563: // $@81: %empty
+#line 1995 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3185 "dhcp6_parser.cc"
+#line 3246 "dhcp6_parser.cc"
break;
- case 555: // option_data_entry: "{" $@80 option_data_params "}"
-#line 1967 "dhcp6_parser.yy"
+ case 564: // option_data_entry: "{" $@81 option_data_params "}"
+#line 1999 "dhcp6_parser.yy"
{
/// @todo: the code or name parameters are required.
ctx.stack_.pop_back();
}
-#line 3194 "dhcp6_parser.cc"
+#line 3255 "dhcp6_parser.cc"
break;
- case 556: // $@81: %empty
-#line 1975 "dhcp6_parser.yy"
+ case 565: // $@82: %empty
+#line 2007 "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 3204 "dhcp6_parser.cc"
+#line 3265 "dhcp6_parser.cc"
break;
- case 557: // sub_option_data: "{" $@81 option_data_params "}"
-#line 1979 "dhcp6_parser.yy"
+ case 566: // sub_option_data: "{" $@82 option_data_params "}"
+#line 2011 "dhcp6_parser.yy"
{
/// @todo: the code or name parameters are required.
// parsing completed
}
-#line 3213 "dhcp6_parser.cc"
+#line 3274 "dhcp6_parser.cc"
break;
- case 562: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 1995 "dhcp6_parser.yy"
+ case 571: // not_empty_option_data_params: not_empty_option_data_params ","
+#line 2027 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3221 "dhcp6_parser.cc"
+#line 3282 "dhcp6_parser.cc"
break;
- case 574: // $@82: %empty
-#line 2016 "dhcp6_parser.yy"
+ case 583: // $@83: %empty
+#line 2048 "dhcp6_parser.yy"
{
ctx.unique("data", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3230 "dhcp6_parser.cc"
+#line 3291 "dhcp6_parser.cc"
break;
- case 575: // option_data_data: "data" $@82 ":" "constant string"
-#line 2019 "dhcp6_parser.yy"
+ case 584: // option_data_data: "data" $@83 ":" "constant string"
+#line 2051 "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 3240 "dhcp6_parser.cc"
+#line 3301 "dhcp6_parser.cc"
break;
- case 578: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 2029 "dhcp6_parser.yy"
+ case 587: // option_data_csv_format: "csv-format" ":" "boolean"
+#line 2061 "dhcp6_parser.yy"
{
ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("csv-format", csv);
}
-#line 3250 "dhcp6_parser.cc"
+#line 3311 "dhcp6_parser.cc"
break;
- case 579: // option_data_always_send: "always-send" ":" "boolean"
-#line 2035 "dhcp6_parser.yy"
+ case 588: // option_data_always_send: "always-send" ":" "boolean"
+#line 2067 "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 3260 "dhcp6_parser.cc"
+#line 3321 "dhcp6_parser.cc"
break;
- case 580: // option_data_never_send: "never-send" ":" "boolean"
-#line 2041 "dhcp6_parser.yy"
+ case 589: // option_data_never_send: "never-send" ":" "boolean"
+#line 2073 "dhcp6_parser.yy"
{
ctx.unique("never-send", ctx.loc2pos(yystack_[2].location));
ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("never-send", cancel);
}
-#line 3270 "dhcp6_parser.cc"
+#line 3331 "dhcp6_parser.cc"
break;
- case 581: // $@83: %empty
-#line 2050 "dhcp6_parser.yy"
+ case 590: // $@84: %empty
+#line 2082 "dhcp6_parser.yy"
{
ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.POOLS);
}
-#line 3282 "dhcp6_parser.cc"
+#line 3343 "dhcp6_parser.cc"
break;
- case 582: // pools_list: "pools" $@83 ":" "[" pools_list_content "]"
-#line 2056 "dhcp6_parser.yy"
+ case 591: // pools_list: "pools" $@84 ":" "[" pools_list_content "]"
+#line 2088 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3291 "dhcp6_parser.cc"
+#line 3352 "dhcp6_parser.cc"
break;
- case 587: // not_empty_pools_list: not_empty_pools_list ","
-#line 2069 "dhcp6_parser.yy"
+ case 596: // not_empty_pools_list: not_empty_pools_list ","
+#line 2101 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3299 "dhcp6_parser.cc"
+#line 3360 "dhcp6_parser.cc"
break;
- case 588: // $@84: %empty
-#line 2074 "dhcp6_parser.yy"
+ case 597: // $@85: %empty
+#line 2106 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3309 "dhcp6_parser.cc"
+#line 3370 "dhcp6_parser.cc"
break;
- case 589: // pool_list_entry: "{" $@84 pool_params "}"
-#line 2078 "dhcp6_parser.yy"
+ case 598: // pool_list_entry: "{" $@85 pool_params "}"
+#line 2110 "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 3319 "dhcp6_parser.cc"
+#line 3380 "dhcp6_parser.cc"
break;
- case 590: // $@85: %empty
-#line 2084 "dhcp6_parser.yy"
+ case 599: // $@86: %empty
+#line 2116 "dhcp6_parser.yy"
{
// Parse the pool list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3329 "dhcp6_parser.cc"
+#line 3390 "dhcp6_parser.cc"
break;
- case 591: // sub_pool6: "{" $@85 pool_params "}"
-#line 2088 "dhcp6_parser.yy"
+ case 600: // sub_pool6: "{" $@86 pool_params "}"
+#line 2120 "dhcp6_parser.yy"
{
// The pool parameter is required.
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 3339 "dhcp6_parser.cc"
+#line 3400 "dhcp6_parser.cc"
break;
- case 594: // pool_params: pool_params ","
-#line 2096 "dhcp6_parser.yy"
+ case 603: // pool_params: pool_params ","
+#line 2128 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3347 "dhcp6_parser.cc"
+#line 3408 "dhcp6_parser.cc"
break;
- case 603: // $@86: %empty
-#line 2111 "dhcp6_parser.yy"
+ case 612: // $@87: %empty
+#line 2143 "dhcp6_parser.yy"
{
ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3356 "dhcp6_parser.cc"
+#line 3417 "dhcp6_parser.cc"
break;
- case 604: // pool_entry: "pool" $@86 ":" "constant string"
-#line 2114 "dhcp6_parser.yy"
+ case 613: // pool_entry: "pool" $@87 ":" "constant string"
+#line 2146 "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 3366 "dhcp6_parser.cc"
+#line 3427 "dhcp6_parser.cc"
break;
- case 605: // pool_id: "pool-id" ":" "integer"
-#line 2120 "dhcp6_parser.yy"
+ case 614: // pool_id: "pool-id" ":" "integer"
+#line 2152 "dhcp6_parser.yy"
{
ctx.unique("pool-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("pool-id", id);
}
-#line 3376 "dhcp6_parser.cc"
+#line 3437 "dhcp6_parser.cc"
break;
- case 606: // $@87: %empty
-#line 2126 "dhcp6_parser.yy"
+ case 615: // $@88: %empty
+#line 2158 "dhcp6_parser.yy"
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3384 "dhcp6_parser.cc"
+#line 3445 "dhcp6_parser.cc"
break;
- case 607: // user_context: "user-context" $@87 ":" map_value
-#line 2128 "dhcp6_parser.yy"
+ case 616: // user_context: "user-context" $@88 ":" map_value
+#line 2160 "dhcp6_parser.yy"
{
ElementPtr parent = ctx.stack_.back();
ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
parent->set("user-context", user_context);
ctx.leave();
}
-#line 3411 "dhcp6_parser.cc"
+#line 3472 "dhcp6_parser.cc"
break;
- case 608: // $@88: %empty
-#line 2151 "dhcp6_parser.yy"
+ case 617: // $@89: %empty
+#line 2183 "dhcp6_parser.yy"
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3419 "dhcp6_parser.cc"
+#line 3480 "dhcp6_parser.cc"
break;
- case 609: // comment: "comment" $@88 ":" "constant string"
-#line 2153 "dhcp6_parser.yy"
+ case 618: // comment: "comment" $@89 ":" "constant string"
+#line 2185 "dhcp6_parser.yy"
{
ElementPtr parent = ctx.stack_.back();
ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
parent->set("user-context", user_context);
ctx.leave();
}
-#line 3448 "dhcp6_parser.cc"
+#line 3509 "dhcp6_parser.cc"
break;
- case 610: // $@89: %empty
-#line 2181 "dhcp6_parser.yy"
+ case 619: // $@90: %empty
+#line 2213 "dhcp6_parser.yy"
{
ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.PD_POOLS);
}
-#line 3460 "dhcp6_parser.cc"
+#line 3521 "dhcp6_parser.cc"
break;
- case 611: // pd_pools_list: "pd-pools" $@89 ":" "[" pd_pools_list_content "]"
-#line 2187 "dhcp6_parser.yy"
+ case 620: // pd_pools_list: "pd-pools" $@90 ":" "[" pd_pools_list_content "]"
+#line 2219 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3469 "dhcp6_parser.cc"
+#line 3530 "dhcp6_parser.cc"
break;
- case 616: // not_empty_pd_pools_list: not_empty_pd_pools_list ","
-#line 2200 "dhcp6_parser.yy"
+ case 625: // not_empty_pd_pools_list: not_empty_pd_pools_list ","
+#line 2232 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3477 "dhcp6_parser.cc"
+#line 3538 "dhcp6_parser.cc"
break;
- case 617: // $@90: %empty
-#line 2205 "dhcp6_parser.yy"
+ case 626: // $@91: %empty
+#line 2237 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3487 "dhcp6_parser.cc"
+#line 3548 "dhcp6_parser.cc"
break;
- case 618: // pd_pool_entry: "{" $@90 pd_pool_params "}"
-#line 2209 "dhcp6_parser.yy"
+ case 627: // pd_pool_entry: "{" $@91 pd_pool_params "}"
+#line 2241 "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));
ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 3499 "dhcp6_parser.cc"
+#line 3560 "dhcp6_parser.cc"
break;
- case 619: // $@91: %empty
-#line 2217 "dhcp6_parser.yy"
+ case 628: // $@92: %empty
+#line 2249 "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 3509 "dhcp6_parser.cc"
+#line 3570 "dhcp6_parser.cc"
break;
- case 620: // sub_pd_pool: "{" $@91 pd_pool_params "}"
-#line 2221 "dhcp6_parser.yy"
+ case 629: // sub_pd_pool: "{" $@92 pd_pool_params "}"
+#line 2253 "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));
ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 3521 "dhcp6_parser.cc"
+#line 3582 "dhcp6_parser.cc"
break;
- case 623: // pd_pool_params: pd_pool_params ","
-#line 2231 "dhcp6_parser.yy"
+ case 632: // pd_pool_params: pd_pool_params ","
+#line 2263 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3529 "dhcp6_parser.cc"
+#line 3590 "dhcp6_parser.cc"
break;
- case 635: // $@92: %empty
-#line 2249 "dhcp6_parser.yy"
+ case 644: // $@93: %empty
+#line 2281 "dhcp6_parser.yy"
{
ctx.unique("prefix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3538 "dhcp6_parser.cc"
+#line 3599 "dhcp6_parser.cc"
break;
- case 636: // pd_prefix: "prefix" $@92 ":" "constant string"
-#line 2252 "dhcp6_parser.yy"
+ case 645: // pd_prefix: "prefix" $@93 ":" "constant string"
+#line 2284 "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 3548 "dhcp6_parser.cc"
+#line 3609 "dhcp6_parser.cc"
break;
- case 637: // pd_prefix_len: "prefix-len" ":" "integer"
-#line 2258 "dhcp6_parser.yy"
+ case 646: // pd_prefix_len: "prefix-len" ":" "integer"
+#line 2290 "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 3558 "dhcp6_parser.cc"
+#line 3619 "dhcp6_parser.cc"
break;
- case 638: // $@93: %empty
-#line 2264 "dhcp6_parser.yy"
+ case 647: // $@94: %empty
+#line 2296 "dhcp6_parser.yy"
{
ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3567 "dhcp6_parser.cc"
+#line 3628 "dhcp6_parser.cc"
break;
- case 639: // excluded_prefix: "excluded-prefix" $@93 ":" "constant string"
-#line 2267 "dhcp6_parser.yy"
+ case 648: // excluded_prefix: "excluded-prefix" $@94 ":" "constant string"
+#line 2299 "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 3577 "dhcp6_parser.cc"
+#line 3638 "dhcp6_parser.cc"
break;
- case 640: // excluded_prefix_len: "excluded-prefix-len" ":" "integer"
-#line 2273 "dhcp6_parser.yy"
+ case 649: // excluded_prefix_len: "excluded-prefix-len" ":" "integer"
+#line 2305 "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 3587 "dhcp6_parser.cc"
+#line 3648 "dhcp6_parser.cc"
break;
- case 641: // pd_delegated_len: "delegated-len" ":" "integer"
-#line 2279 "dhcp6_parser.yy"
+ case 650: // pd_delegated_len: "delegated-len" ":" "integer"
+#line 2311 "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 3597 "dhcp6_parser.cc"
+#line 3658 "dhcp6_parser.cc"
break;
- case 642: // $@94: %empty
-#line 2288 "dhcp6_parser.yy"
+ case 651: // $@95: %empty
+#line 2320 "dhcp6_parser.yy"
{
ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.RESERVATIONS);
}
-#line 3609 "dhcp6_parser.cc"
+#line 3670 "dhcp6_parser.cc"
break;
- case 643: // reservations: "reservations" $@94 ":" "[" reservations_list "]"
-#line 2294 "dhcp6_parser.yy"
+ case 652: // reservations: "reservations" $@95 ":" "[" reservations_list "]"
+#line 2326 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3618 "dhcp6_parser.cc"
+#line 3679 "dhcp6_parser.cc"
break;
- case 648: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2305 "dhcp6_parser.yy"
+ case 657: // not_empty_reservations_list: not_empty_reservations_list ","
+#line 2337 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3626 "dhcp6_parser.cc"
+#line 3687 "dhcp6_parser.cc"
break;
- case 649: // $@95: %empty
-#line 2310 "dhcp6_parser.yy"
+ case 658: // $@96: %empty
+#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 3636 "dhcp6_parser.cc"
+#line 3697 "dhcp6_parser.cc"
break;
- case 650: // reservation: "{" $@95 reservation_params "}"
-#line 2314 "dhcp6_parser.yy"
+ case 659: // reservation: "{" $@96 reservation_params "}"
+#line 2346 "dhcp6_parser.yy"
{
/// @todo: an identifier parameter is required.
ctx.stack_.pop_back();
}
-#line 3645 "dhcp6_parser.cc"
+#line 3706 "dhcp6_parser.cc"
break;
- case 651: // $@96: %empty
-#line 2319 "dhcp6_parser.yy"
+ case 660: // $@97: %empty
+#line 2351 "dhcp6_parser.yy"
{
// Parse the reservations list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3655 "dhcp6_parser.cc"
+#line 3716 "dhcp6_parser.cc"
break;
- case 652: // sub_reservation: "{" $@96 reservation_params "}"
-#line 2323 "dhcp6_parser.yy"
+ case 661: // sub_reservation: "{" $@97 reservation_params "}"
+#line 2355 "dhcp6_parser.yy"
{
/// @todo: an identifier parameter is required.
// parsing completed
}
-#line 3664 "dhcp6_parser.cc"
+#line 3725 "dhcp6_parser.cc"
break;
- case 657: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2334 "dhcp6_parser.yy"
+ case 666: // not_empty_reservation_params: not_empty_reservation_params ","
+#line 2366 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3672 "dhcp6_parser.cc"
+#line 3733 "dhcp6_parser.cc"
break;
- case 669: // $@97: %empty
-#line 2353 "dhcp6_parser.yy"
+ case 678: // $@98: %empty
+#line 2385 "dhcp6_parser.yy"
{
ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3684 "dhcp6_parser.cc"
+#line 3745 "dhcp6_parser.cc"
break;
- case 670: // ip_addresses: "ip-addresses" $@97 ":" list_strings
-#line 2359 "dhcp6_parser.yy"
+ case 679: // ip_addresses: "ip-addresses" $@98 ":" list_strings
+#line 2391 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3693 "dhcp6_parser.cc"
+#line 3754 "dhcp6_parser.cc"
break;
- case 671: // $@98: %empty
-#line 2364 "dhcp6_parser.yy"
+ case 680: // $@99: %empty
+#line 2396 "dhcp6_parser.yy"
{
ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3705 "dhcp6_parser.cc"
+#line 3766 "dhcp6_parser.cc"
break;
- case 672: // prefixes: "prefixes" $@98 ":" list_strings
-#line 2370 "dhcp6_parser.yy"
+ case 681: // prefixes: "prefixes" $@99 ":" list_strings
+#line 2402 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3714 "dhcp6_parser.cc"
+#line 3775 "dhcp6_parser.cc"
break;
- case 673: // $@99: %empty
-#line 2375 "dhcp6_parser.yy"
+ case 682: // $@100: %empty
+#line 2407 "dhcp6_parser.yy"
{
ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3723 "dhcp6_parser.cc"
+#line 3784 "dhcp6_parser.cc"
break;
- case 674: // duid: "duid" $@99 ":" "constant string"
-#line 2378 "dhcp6_parser.yy"
+ case 683: // duid: "duid" $@100 ":" "constant string"
+#line 2410 "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 3733 "dhcp6_parser.cc"
+#line 3794 "dhcp6_parser.cc"
break;
- case 675: // $@100: %empty
-#line 2384 "dhcp6_parser.yy"
+ case 684: // $@101: %empty
+#line 2416 "dhcp6_parser.yy"
{
ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3742 "dhcp6_parser.cc"
+#line 3803 "dhcp6_parser.cc"
break;
- case 676: // hw_address: "hw-address" $@100 ":" "constant string"
-#line 2387 "dhcp6_parser.yy"
+ case 685: // hw_address: "hw-address" $@101 ":" "constant string"
+#line 2419 "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 3752 "dhcp6_parser.cc"
+#line 3813 "dhcp6_parser.cc"
break;
- case 677: // $@101: %empty
-#line 2393 "dhcp6_parser.yy"
+ case 686: // $@102: %empty
+#line 2425 "dhcp6_parser.yy"
{
ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3761 "dhcp6_parser.cc"
+#line 3822 "dhcp6_parser.cc"
break;
- case 678: // hostname: "hostname" $@101 ":" "constant string"
-#line 2396 "dhcp6_parser.yy"
+ case 687: // hostname: "hostname" $@102 ":" "constant string"
+#line 2428 "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 3771 "dhcp6_parser.cc"
+#line 3832 "dhcp6_parser.cc"
break;
- case 679: // $@102: %empty
-#line 2402 "dhcp6_parser.yy"
+ case 688: // $@103: %empty
+#line 2434 "dhcp6_parser.yy"
{
ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3780 "dhcp6_parser.cc"
+#line 3841 "dhcp6_parser.cc"
break;
- case 680: // flex_id_value: "flex-id" $@102 ":" "constant string"
-#line 2405 "dhcp6_parser.yy"
+ case 689: // flex_id_value: "flex-id" $@103 ":" "constant string"
+#line 2437 "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 3790 "dhcp6_parser.cc"
+#line 3851 "dhcp6_parser.cc"
break;
- case 681: // $@103: %empty
-#line 2411 "dhcp6_parser.yy"
+ case 690: // $@104: %empty
+#line 2443 "dhcp6_parser.yy"
{
ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3802 "dhcp6_parser.cc"
+#line 3863 "dhcp6_parser.cc"
break;
- case 682: // reservation_client_classes: "client-classes" $@103 ":" list_strings
-#line 2417 "dhcp6_parser.yy"
+ case 691: // reservation_client_classes: "client-classes" $@104 ":" list_strings
+#line 2449 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3811 "dhcp6_parser.cc"
+#line 3872 "dhcp6_parser.cc"
break;
- case 683: // $@104: %empty
-#line 2425 "dhcp6_parser.yy"
+ case 692: // $@105: %empty
+#line 2457 "dhcp6_parser.yy"
{
ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.RELAY);
}
-#line 3823 "dhcp6_parser.cc"
+#line 3884 "dhcp6_parser.cc"
break;
- case 684: // relay: "relay" $@104 ":" "{" relay_map "}"
-#line 2431 "dhcp6_parser.yy"
+ case 693: // relay: "relay" $@105 ":" "{" relay_map "}"
+#line 2463 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3832 "dhcp6_parser.cc"
+#line 3893 "dhcp6_parser.cc"
break;
- case 687: // $@105: %empty
-#line 2440 "dhcp6_parser.yy"
+ case 696: // $@106: %empty
+#line 2472 "dhcp6_parser.yy"
{
ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3841 "dhcp6_parser.cc"
+#line 3902 "dhcp6_parser.cc"
break;
- case 688: // ip_address: "ip-address" $@105 ":" "constant string"
-#line 2443 "dhcp6_parser.yy"
+ case 697: // ip_address: "ip-address" $@106 ":" "constant string"
+#line 2475 "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 3851 "dhcp6_parser.cc"
+#line 3912 "dhcp6_parser.cc"
break;
- case 689: // $@106: %empty
-#line 2452 "dhcp6_parser.yy"
+ case 698: // $@107: %empty
+#line 2484 "dhcp6_parser.yy"
{
ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.CLIENT_CLASSES);
}
-#line 3863 "dhcp6_parser.cc"
+#line 3924 "dhcp6_parser.cc"
break;
- case 690: // client_classes: "client-classes" $@106 ":" "[" client_classes_list "]"
-#line 2458 "dhcp6_parser.yy"
+ case 699: // client_classes: "client-classes" $@107 ":" "[" client_classes_list "]"
+#line 2490 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3872 "dhcp6_parser.cc"
+#line 3933 "dhcp6_parser.cc"
break;
- case 693: // client_classes_list: client_classes_list ","
-#line 2465 "dhcp6_parser.yy"
+ case 702: // client_classes_list: client_classes_list ","
+#line 2497 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3880 "dhcp6_parser.cc"
+#line 3941 "dhcp6_parser.cc"
break;
- case 694: // $@107: %empty
-#line 2470 "dhcp6_parser.yy"
+ case 703: // $@108: %empty
+#line 2502 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3890 "dhcp6_parser.cc"
+#line 3951 "dhcp6_parser.cc"
break;
- case 695: // client_class_entry: "{" $@107 client_class_params "}"
-#line 2474 "dhcp6_parser.yy"
+ case 704: // client_class_entry: "{" $@108 client_class_params "}"
+#line 2506 "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 3900 "dhcp6_parser.cc"
+#line 3961 "dhcp6_parser.cc"
break;
- case 700: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2486 "dhcp6_parser.yy"
+ case 709: // not_empty_client_class_params: not_empty_client_class_params ","
+#line 2518 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3908 "dhcp6_parser.cc"
+#line 3969 "dhcp6_parser.cc"
break;
- case 716: // $@108: %empty
-#line 2509 "dhcp6_parser.yy"
+ case 725: // $@109: %empty
+#line 2541 "dhcp6_parser.yy"
{
ctx.unique("test", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3917 "dhcp6_parser.cc"
+#line 3978 "dhcp6_parser.cc"
break;
- case 717: // client_class_test: "test" $@108 ":" "constant string"
-#line 2512 "dhcp6_parser.yy"
+ case 726: // client_class_test: "test" $@109 ":" "constant string"
+#line 2544 "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 3927 "dhcp6_parser.cc"
+#line 3988 "dhcp6_parser.cc"
break;
- case 718: // $@109: %empty
-#line 2518 "dhcp6_parser.yy"
+ case 727: // $@110: %empty
+#line 2550 "dhcp6_parser.yy"
{
ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3936 "dhcp6_parser.cc"
+#line 3997 "dhcp6_parser.cc"
break;
- case 719: // client_class_template_test: "template-test" $@109 ":" "constant string"
-#line 2521 "dhcp6_parser.yy"
+ case 728: // client_class_template_test: "template-test" $@110 ":" "constant string"
+#line 2553 "dhcp6_parser.yy"
{
ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("template-test", template_test);
ctx.leave();
}
-#line 3946 "dhcp6_parser.cc"
+#line 4007 "dhcp6_parser.cc"
break;
- case 720: // only_if_required: "only-if-required" ":" "boolean"
-#line 2527 "dhcp6_parser.yy"
+ case 729: // only_if_required: "only-if-required" ":" "boolean"
+#line 2559 "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 3956 "dhcp6_parser.cc"
+#line 4017 "dhcp6_parser.cc"
break;
- case 721: // $@110: %empty
-#line 2536 "dhcp6_parser.yy"
+ case 730: // $@111: %empty
+#line 2568 "dhcp6_parser.yy"
{
ctx.unique("server-id", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER_ID);
}
-#line 3968 "dhcp6_parser.cc"
+#line 4029 "dhcp6_parser.cc"
break;
- case 722: // server_id: "server-id" $@110 ":" "{" server_id_params "}"
-#line 2542 "dhcp6_parser.yy"
+ case 731: // server_id: "server-id" $@111 ":" "{" server_id_params "}"
+#line 2574 "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 3979 "dhcp6_parser.cc"
+#line 4040 "dhcp6_parser.cc"
break;
- case 725: // server_id_params: server_id_params ","
-#line 2551 "dhcp6_parser.yy"
+ case 734: // server_id_params: server_id_params ","
+#line 2583 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 3987 "dhcp6_parser.cc"
+#line 4048 "dhcp6_parser.cc"
break;
- case 735: // $@111: %empty
-#line 2567 "dhcp6_parser.yy"
+ case 744: // $@112: %empty
+#line 2599 "dhcp6_parser.yy"
{
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.DUID_TYPE);
}
-#line 3996 "dhcp6_parser.cc"
+#line 4057 "dhcp6_parser.cc"
break;
- case 736: // server_id_type: "type" $@111 ":" duid_type
-#line 2570 "dhcp6_parser.yy"
+ case 745: // server_id_type: "type" $@112 ":" duid_type
+#line 2602 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 4005 "dhcp6_parser.cc"
+#line 4066 "dhcp6_parser.cc"
break;
- case 737: // duid_type: "LLT"
-#line 2575 "dhcp6_parser.yy"
+ case 746: // duid_type: "LLT"
+#line 2607 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 4011 "dhcp6_parser.cc"
+#line 4072 "dhcp6_parser.cc"
break;
- case 738: // duid_type: "EN"
-#line 2576 "dhcp6_parser.yy"
+ case 747: // duid_type: "EN"
+#line 2608 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 4017 "dhcp6_parser.cc"
+#line 4078 "dhcp6_parser.cc"
break;
- case 739: // duid_type: "LL"
-#line 2577 "dhcp6_parser.yy"
+ case 748: // duid_type: "LL"
+#line 2609 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 4023 "dhcp6_parser.cc"
+#line 4084 "dhcp6_parser.cc"
break;
- case 740: // htype: "htype" ":" "integer"
-#line 2580 "dhcp6_parser.yy"
+ case 749: // htype: "htype" ":" "integer"
+#line 2612 "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 4033 "dhcp6_parser.cc"
+#line 4094 "dhcp6_parser.cc"
break;
- case 741: // $@112: %empty
-#line 2586 "dhcp6_parser.yy"
+ case 750: // $@113: %empty
+#line 2618 "dhcp6_parser.yy"
{
ctx.unique("identifier", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4042 "dhcp6_parser.cc"
+#line 4103 "dhcp6_parser.cc"
break;
- case 742: // identifier: "identifier" $@112 ":" "constant string"
-#line 2589 "dhcp6_parser.yy"
+ case 751: // identifier: "identifier" $@113 ":" "constant string"
+#line 2621 "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 4052 "dhcp6_parser.cc"
+#line 4113 "dhcp6_parser.cc"
break;
- case 743: // time: "time" ":" "integer"
-#line 2595 "dhcp6_parser.yy"
+ case 752: // time: "time" ":" "integer"
+#line 2627 "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 4062 "dhcp6_parser.cc"
+#line 4123 "dhcp6_parser.cc"
break;
- case 744: // enterprise_id: "enterprise-id" ":" "integer"
-#line 2601 "dhcp6_parser.yy"
+ case 753: // enterprise_id: "enterprise-id" ":" "integer"
+#line 2633 "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 4072 "dhcp6_parser.cc"
+#line 4133 "dhcp6_parser.cc"
break;
- case 745: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2609 "dhcp6_parser.yy"
+ case 754: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
+#line 2641 "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 4082 "dhcp6_parser.cc"
+#line 4143 "dhcp6_parser.cc"
break;
- case 746: // $@113: %empty
-#line 2617 "dhcp6_parser.yy"
+ case 755: // $@114: %empty
+#line 2649 "dhcp6_parser.yy"
{
ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.CONTROL_SOCKET);
}
-#line 4094 "dhcp6_parser.cc"
+#line 4155 "dhcp6_parser.cc"
break;
- case 747: // control_socket: "control-socket" $@113 ":" "{" control_socket_params "}"
-#line 2623 "dhcp6_parser.yy"
+ case 756: // control_socket: "control-socket" $@114 ":" "{" control_socket_params "}"
+#line 2655 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4103 "dhcp6_parser.cc"
+#line 4164 "dhcp6_parser.cc"
break;
- case 750: // control_socket_params: control_socket_params ","
-#line 2630 "dhcp6_parser.yy"
+ case 759: // control_socket_params: control_socket_params ","
+#line 2662 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4111 "dhcp6_parser.cc"
+#line 4172 "dhcp6_parser.cc"
break;
- case 756: // $@114: %empty
-#line 2642 "dhcp6_parser.yy"
+ case 765: // $@115: %empty
+#line 2674 "dhcp6_parser.yy"
{
ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4120 "dhcp6_parser.cc"
+#line 4181 "dhcp6_parser.cc"
break;
- case 757: // socket_type: "socket-type" $@114 ":" "constant string"
-#line 2645 "dhcp6_parser.yy"
+ case 766: // socket_type: "socket-type" $@115 ":" "constant string"
+#line 2677 "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 4130 "dhcp6_parser.cc"
+#line 4191 "dhcp6_parser.cc"
break;
- case 758: // $@115: %empty
-#line 2651 "dhcp6_parser.yy"
+ case 767: // $@116: %empty
+#line 2683 "dhcp6_parser.yy"
{
ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4139 "dhcp6_parser.cc"
+#line 4200 "dhcp6_parser.cc"
break;
- case 759: // socket_name: "socket-name" $@115 ":" "constant string"
-#line 2654 "dhcp6_parser.yy"
+ case 768: // socket_name: "socket-name" $@116 ":" "constant string"
+#line 2686 "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 4149 "dhcp6_parser.cc"
+#line 4210 "dhcp6_parser.cc"
break;
- case 760: // $@116: %empty
-#line 2663 "dhcp6_parser.yy"
+ case 769: // $@117: %empty
+#line 2695 "dhcp6_parser.yy"
{
ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(qc);
ctx.enter(ctx.DHCP_QUEUE_CONTROL);
}
-#line 4161 "dhcp6_parser.cc"
+#line 4222 "dhcp6_parser.cc"
break;
- case 761: // dhcp_queue_control: "dhcp-queue-control" $@116 ":" "{" queue_control_params "}"
-#line 2669 "dhcp6_parser.yy"
+ case 770: // dhcp_queue_control: "dhcp-queue-control" $@117 ":" "{" queue_control_params "}"
+#line 2701 "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 4172 "dhcp6_parser.cc"
+#line 4233 "dhcp6_parser.cc"
break;
- case 764: // queue_control_params: queue_control_params ","
-#line 2678 "dhcp6_parser.yy"
+ case 773: // queue_control_params: queue_control_params ","
+#line 2710 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4180 "dhcp6_parser.cc"
+#line 4241 "dhcp6_parser.cc"
break;
- case 771: // enable_queue: "enable-queue" ":" "boolean"
-#line 2691 "dhcp6_parser.yy"
+ case 780: // enable_queue: "enable-queue" ":" "boolean"
+#line 2723 "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 4190 "dhcp6_parser.cc"
+#line 4251 "dhcp6_parser.cc"
break;
- case 772: // $@117: %empty
-#line 2697 "dhcp6_parser.yy"
+ case 781: // $@118: %empty
+#line 2729 "dhcp6_parser.yy"
{
ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4199 "dhcp6_parser.cc"
+#line 4260 "dhcp6_parser.cc"
break;
- case 773: // queue_type: "queue-type" $@117 ":" "constant string"
-#line 2700 "dhcp6_parser.yy"
+ case 782: // queue_type: "queue-type" $@118 ":" "constant string"
+#line 2732 "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 4209 "dhcp6_parser.cc"
+#line 4270 "dhcp6_parser.cc"
break;
- case 774: // capacity: "capacity" ":" "integer"
-#line 2706 "dhcp6_parser.yy"
+ case 783: // capacity: "capacity" ":" "integer"
+#line 2738 "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 4219 "dhcp6_parser.cc"
+#line 4280 "dhcp6_parser.cc"
break;
- case 775: // $@118: %empty
-#line 2712 "dhcp6_parser.yy"
+ case 784: // $@119: %empty
+#line 2744 "dhcp6_parser.yy"
{
ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4228 "dhcp6_parser.cc"
+#line 4289 "dhcp6_parser.cc"
break;
- case 776: // arbitrary_map_entry: "constant string" $@118 ":" value
-#line 2715 "dhcp6_parser.yy"
+ case 785: // arbitrary_map_entry: "constant string" $@119 ":" value
+#line 2747 "dhcp6_parser.yy"
{
ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 4237 "dhcp6_parser.cc"
+#line 4298 "dhcp6_parser.cc"
break;
- case 777: // $@119: %empty
-#line 2722 "dhcp6_parser.yy"
+ case 786: // $@120: %empty
+#line 2754 "dhcp6_parser.yy"
{
ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP_DDNS);
}
-#line 4249 "dhcp6_parser.cc"
+#line 4310 "dhcp6_parser.cc"
break;
- case 778: // dhcp_ddns: "dhcp-ddns" $@119 ":" "{" dhcp_ddns_params "}"
-#line 2728 "dhcp6_parser.yy"
+ case 787: // dhcp_ddns: "dhcp-ddns" $@120 ":" "{" dhcp_ddns_params "}"
+#line 2760 "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 4260 "dhcp6_parser.cc"
+#line 4321 "dhcp6_parser.cc"
break;
- case 779: // $@120: %empty
-#line 2735 "dhcp6_parser.yy"
+ case 788: // $@121: %empty
+#line 2767 "dhcp6_parser.yy"
{
// Parse the dhcp-ddns map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 4270 "dhcp6_parser.cc"
+#line 4331 "dhcp6_parser.cc"
break;
- case 780: // sub_dhcp_ddns: "{" $@120 dhcp_ddns_params "}"
-#line 2739 "dhcp6_parser.yy"
+ case 789: // sub_dhcp_ddns: "{" $@121 dhcp_ddns_params "}"
+#line 2771 "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 4280 "dhcp6_parser.cc"
+#line 4341 "dhcp6_parser.cc"
break;
- case 783: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 2747 "dhcp6_parser.yy"
+ case 792: // dhcp_ddns_params: dhcp_ddns_params ","
+#line 2779 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4288 "dhcp6_parser.cc"
+#line 4349 "dhcp6_parser.cc"
break;
- case 802: // enable_updates: "enable-updates" ":" "boolean"
-#line 2772 "dhcp6_parser.yy"
+ case 811: // enable_updates: "enable-updates" ":" "boolean"
+#line 2804 "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 4298 "dhcp6_parser.cc"
+#line 4359 "dhcp6_parser.cc"
break;
- case 803: // $@121: %empty
-#line 2779 "dhcp6_parser.yy"
+ case 812: // $@122: %empty
+#line 2811 "dhcp6_parser.yy"
{
ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4307 "dhcp6_parser.cc"
+#line 4368 "dhcp6_parser.cc"
break;
- case 804: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string"
-#line 2782 "dhcp6_parser.yy"
+ case 813: // dep_qualifying_suffix: "qualifying-suffix" $@122 ":" "constant string"
+#line 2814 "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 4317 "dhcp6_parser.cc"
+#line 4378 "dhcp6_parser.cc"
break;
- case 805: // $@122: %empty
-#line 2788 "dhcp6_parser.yy"
+ case 814: // $@123: %empty
+#line 2820 "dhcp6_parser.yy"
{
ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4326 "dhcp6_parser.cc"
+#line 4387 "dhcp6_parser.cc"
break;
- case 806: // server_ip: "server-ip" $@122 ":" "constant string"
-#line 2791 "dhcp6_parser.yy"
+ case 815: // server_ip: "server-ip" $@123 ":" "constant string"
+#line 2823 "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 4336 "dhcp6_parser.cc"
+#line 4397 "dhcp6_parser.cc"
break;
- case 807: // server_port: "server-port" ":" "integer"
-#line 2797 "dhcp6_parser.yy"
+ case 816: // server_port: "server-port" ":" "integer"
+#line 2829 "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 4346 "dhcp6_parser.cc"
+#line 4407 "dhcp6_parser.cc"
break;
- case 808: // $@123: %empty
-#line 2803 "dhcp6_parser.yy"
+ case 817: // $@124: %empty
+#line 2835 "dhcp6_parser.yy"
{
ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4355 "dhcp6_parser.cc"
+#line 4416 "dhcp6_parser.cc"
break;
- case 809: // sender_ip: "sender-ip" $@123 ":" "constant string"
-#line 2806 "dhcp6_parser.yy"
+ case 818: // sender_ip: "sender-ip" $@124 ":" "constant string"
+#line 2838 "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 4365 "dhcp6_parser.cc"
+#line 4426 "dhcp6_parser.cc"
break;
- case 810: // sender_port: "sender-port" ":" "integer"
-#line 2812 "dhcp6_parser.yy"
+ case 819: // sender_port: "sender-port" ":" "integer"
+#line 2844 "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 4375 "dhcp6_parser.cc"
+#line 4436 "dhcp6_parser.cc"
break;
- case 811: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2818 "dhcp6_parser.yy"
+ case 820: // max_queue_size: "max-queue-size" ":" "integer"
+#line 2850 "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 4385 "dhcp6_parser.cc"
+#line 4446 "dhcp6_parser.cc"
break;
- case 812: // $@124: %empty
-#line 2824 "dhcp6_parser.yy"
+ case 821: // $@125: %empty
+#line 2856 "dhcp6_parser.yy"
{
ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NCR_PROTOCOL);
}
-#line 4394 "dhcp6_parser.cc"
+#line 4455 "dhcp6_parser.cc"
break;
- case 813: // ncr_protocol: "ncr-protocol" $@124 ":" ncr_protocol_value
-#line 2827 "dhcp6_parser.yy"
+ case 822: // ncr_protocol: "ncr-protocol" $@125 ":" ncr_protocol_value
+#line 2859 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 4403 "dhcp6_parser.cc"
+#line 4464 "dhcp6_parser.cc"
break;
- case 814: // ncr_protocol_value: "UDP"
-#line 2833 "dhcp6_parser.yy"
+ case 823: // ncr_protocol_value: "UDP"
+#line 2865 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4409 "dhcp6_parser.cc"
+#line 4470 "dhcp6_parser.cc"
break;
- case 815: // ncr_protocol_value: "TCP"
-#line 2834 "dhcp6_parser.yy"
+ case 824: // ncr_protocol_value: "TCP"
+#line 2866 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4415 "dhcp6_parser.cc"
+#line 4476 "dhcp6_parser.cc"
break;
- case 816: // $@125: %empty
-#line 2837 "dhcp6_parser.yy"
+ case 825: // $@126: %empty
+#line 2869 "dhcp6_parser.yy"
{
ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NCR_FORMAT);
}
-#line 4424 "dhcp6_parser.cc"
+#line 4485 "dhcp6_parser.cc"
break;
- case 817: // ncr_format: "ncr-format" $@125 ":" "JSON"
-#line 2840 "dhcp6_parser.yy"
+ case 826: // ncr_format: "ncr-format" $@126 ":" "JSON"
+#line 2872 "dhcp6_parser.yy"
{
ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ncr-format", json);
ctx.leave();
}
-#line 4434 "dhcp6_parser.cc"
+#line 4495 "dhcp6_parser.cc"
break;
- case 818: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2847 "dhcp6_parser.yy"
+ case 827: // dep_override_no_update: "override-no-update" ":" "boolean"
+#line 2879 "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 4444 "dhcp6_parser.cc"
+#line 4505 "dhcp6_parser.cc"
break;
- case 819: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2854 "dhcp6_parser.yy"
+ case 828: // dep_override_client_update: "override-client-update" ":" "boolean"
+#line 2886 "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 4454 "dhcp6_parser.cc"
+#line 4515 "dhcp6_parser.cc"
break;
- case 820: // $@126: %empty
-#line 2861 "dhcp6_parser.yy"
+ case 829: // $@127: %empty
+#line 2893 "dhcp6_parser.yy"
{
ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 4463 "dhcp6_parser.cc"
+#line 4524 "dhcp6_parser.cc"
break;
- case 821: // dep_replace_client_name: "replace-client-name" $@126 ":" ddns_replace_client_name_value
-#line 2864 "dhcp6_parser.yy"
+ case 830: // dep_replace_client_name: "replace-client-name" $@127 ":" ddns_replace_client_name_value
+#line 2896 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 4472 "dhcp6_parser.cc"
+#line 4533 "dhcp6_parser.cc"
break;
- case 822: // $@127: %empty
-#line 2870 "dhcp6_parser.yy"
+ case 831: // $@128: %empty
+#line 2902 "dhcp6_parser.yy"
{
ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4481 "dhcp6_parser.cc"
+#line 4542 "dhcp6_parser.cc"
break;
- case 823: // dep_generated_prefix: "generated-prefix" $@127 ":" "constant string"
-#line 2873 "dhcp6_parser.yy"
+ case 832: // dep_generated_prefix: "generated-prefix" $@128 ":" "constant string"
+#line 2905 "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 4491 "dhcp6_parser.cc"
+#line 4552 "dhcp6_parser.cc"
break;
- case 824: // $@128: %empty
-#line 2880 "dhcp6_parser.yy"
+ case 833: // $@129: %empty
+#line 2912 "dhcp6_parser.yy"
{
ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4500 "dhcp6_parser.cc"
+#line 4561 "dhcp6_parser.cc"
break;
- case 825: // dep_hostname_char_set: "hostname-char-set" $@128 ":" "constant string"
-#line 2883 "dhcp6_parser.yy"
+ case 834: // dep_hostname_char_set: "hostname-char-set" $@129 ":" "constant string"
+#line 2915 "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 4510 "dhcp6_parser.cc"
+#line 4571 "dhcp6_parser.cc"
break;
- case 826: // $@129: %empty
-#line 2890 "dhcp6_parser.yy"
+ case 835: // $@130: %empty
+#line 2922 "dhcp6_parser.yy"
{
ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4519 "dhcp6_parser.cc"
+#line 4580 "dhcp6_parser.cc"
break;
- case 827: // dep_hostname_char_replacement: "hostname-char-replacement" $@129 ":" "constant string"
-#line 2893 "dhcp6_parser.yy"
+ case 836: // dep_hostname_char_replacement: "hostname-char-replacement" $@130 ":" "constant string"
+#line 2925 "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 4529 "dhcp6_parser.cc"
+#line 4590 "dhcp6_parser.cc"
break;
- case 828: // $@130: %empty
-#line 2902 "dhcp6_parser.yy"
+ case 837: // $@131: %empty
+#line 2934 "dhcp6_parser.yy"
{
ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.CONFIG_CONTROL);
}
-#line 4541 "dhcp6_parser.cc"
+#line 4602 "dhcp6_parser.cc"
break;
- case 829: // config_control: "config-control" $@130 ":" "{" config_control_params "}"
-#line 2908 "dhcp6_parser.yy"
+ case 838: // config_control: "config-control" $@131 ":" "{" config_control_params "}"
+#line 2940 "dhcp6_parser.yy"
{
// No config control params are required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4551 "dhcp6_parser.cc"
+#line 4612 "dhcp6_parser.cc"
break;
- case 830: // $@131: %empty
-#line 2914 "dhcp6_parser.yy"
+ case 839: // $@132: %empty
+#line 2946 "dhcp6_parser.yy"
{
// Parse the config-control map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 4561 "dhcp6_parser.cc"
+#line 4622 "dhcp6_parser.cc"
break;
- case 831: // sub_config_control: "{" $@131 config_control_params "}"
-#line 2918 "dhcp6_parser.yy"
+ case 840: // sub_config_control: "{" $@132 config_control_params "}"
+#line 2950 "dhcp6_parser.yy"
{
// No config_control params are required
// parsing completed
}
-#line 4570 "dhcp6_parser.cc"
+#line 4631 "dhcp6_parser.cc"
break;
- case 834: // config_control_params: config_control_params ","
-#line 2926 "dhcp6_parser.yy"
+ case 843: // config_control_params: config_control_params ","
+#line 2958 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4578 "dhcp6_parser.cc"
+#line 4639 "dhcp6_parser.cc"
break;
- case 837: // $@132: %empty
-#line 2936 "dhcp6_parser.yy"
+ case 846: // $@133: %empty
+#line 2968 "dhcp6_parser.yy"
{
ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.CONFIG_DATABASE);
}
-#line 4590 "dhcp6_parser.cc"
+#line 4651 "dhcp6_parser.cc"
break;
- case 838: // config_databases: "config-databases" $@132 ":" "[" database_list "]"
-#line 2942 "dhcp6_parser.yy"
+ case 847: // config_databases: "config-databases" $@133 ":" "[" database_list "]"
+#line 2974 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4599 "dhcp6_parser.cc"
+#line 4660 "dhcp6_parser.cc"
break;
- case 839: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2947 "dhcp6_parser.yy"
+ case 848: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
+#line 2979 "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 4609 "dhcp6_parser.cc"
+#line 4670 "dhcp6_parser.cc"
break;
- case 840: // $@133: %empty
-#line 2955 "dhcp6_parser.yy"
+ case 849: // $@134: %empty
+#line 2987 "dhcp6_parser.yy"
{
ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.LOGGERS);
}
-#line 4621 "dhcp6_parser.cc"
+#line 4682 "dhcp6_parser.cc"
break;
- case 841: // loggers: "loggers" $@133 ":" "[" loggers_entries "]"
-#line 2961 "dhcp6_parser.yy"
+ case 850: // loggers: "loggers" $@134 ":" "[" loggers_entries "]"
+#line 2993 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4630 "dhcp6_parser.cc"
+#line 4691 "dhcp6_parser.cc"
break;
- case 844: // loggers_entries: loggers_entries ","
-#line 2970 "dhcp6_parser.yy"
+ case 853: // loggers_entries: loggers_entries ","
+#line 3002 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4638 "dhcp6_parser.cc"
+#line 4699 "dhcp6_parser.cc"
break;
- case 845: // $@134: %empty
-#line 2976 "dhcp6_parser.yy"
+ case 854: // $@135: %empty
+#line 3008 "dhcp6_parser.yy"
{
ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
-#line 4648 "dhcp6_parser.cc"
+#line 4709 "dhcp6_parser.cc"
break;
- case 846: // logger_entry: "{" $@134 logger_params "}"
-#line 2980 "dhcp6_parser.yy"
+ case 855: // logger_entry: "{" $@135 logger_params "}"
+#line 3012 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
}
-#line 4656 "dhcp6_parser.cc"
+#line 4717 "dhcp6_parser.cc"
break;
- case 849: // logger_params: logger_params ","
-#line 2986 "dhcp6_parser.yy"
+ case 858: // logger_params: logger_params ","
+#line 3018 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4664 "dhcp6_parser.cc"
+#line 4725 "dhcp6_parser.cc"
break;
- case 857: // debuglevel: "debuglevel" ":" "integer"
-#line 3000 "dhcp6_parser.yy"
+ case 866: // debuglevel: "debuglevel" ":" "integer"
+#line 3032 "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 4674 "dhcp6_parser.cc"
+#line 4735 "dhcp6_parser.cc"
break;
- case 858: // $@135: %empty
-#line 3006 "dhcp6_parser.yy"
+ case 867: // $@136: %empty
+#line 3038 "dhcp6_parser.yy"
{
ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4683 "dhcp6_parser.cc"
+#line 4744 "dhcp6_parser.cc"
break;
- case 859: // severity: "severity" $@135 ":" "constant string"
-#line 3009 "dhcp6_parser.yy"
+ case 868: // severity: "severity" $@136 ":" "constant string"
+#line 3041 "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 4693 "dhcp6_parser.cc"
+#line 4754 "dhcp6_parser.cc"
break;
- case 860: // $@136: %empty
-#line 3015 "dhcp6_parser.yy"
+ case 869: // $@137: %empty
+#line 3047 "dhcp6_parser.yy"
{
ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
ctx.enter(ctx.OUTPUT_OPTIONS);
}
-#line 4705 "dhcp6_parser.cc"
+#line 4766 "dhcp6_parser.cc"
break;
- case 861: // output_options_list: "output_options" $@136 ":" "[" output_options_list_content "]"
-#line 3021 "dhcp6_parser.yy"
+ case 870: // output_options_list: "output_options" $@137 ":" "[" output_options_list_content "]"
+#line 3053 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4714 "dhcp6_parser.cc"
+#line 4775 "dhcp6_parser.cc"
break;
- case 864: // output_options_list_content: output_options_list_content ","
-#line 3028 "dhcp6_parser.yy"
+ case 873: // output_options_list_content: output_options_list_content ","
+#line 3060 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4722 "dhcp6_parser.cc"
+#line 4783 "dhcp6_parser.cc"
break;
- case 865: // $@137: %empty
-#line 3033 "dhcp6_parser.yy"
+ case 874: // $@138: %empty
+#line 3065 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 4732 "dhcp6_parser.cc"
+#line 4793 "dhcp6_parser.cc"
break;
- case 866: // output_entry: "{" $@137 output_params_list "}"
-#line 3037 "dhcp6_parser.yy"
+ case 875: // output_entry: "{" $@138 output_params_list "}"
+#line 3069 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
}
-#line 4740 "dhcp6_parser.cc"
+#line 4801 "dhcp6_parser.cc"
break;
- case 869: // output_params_list: output_params_list ","
-#line 3043 "dhcp6_parser.yy"
+ case 878: // output_params_list: output_params_list ","
+#line 3075 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4748 "dhcp6_parser.cc"
+#line 4809 "dhcp6_parser.cc"
break;
- case 875: // $@138: %empty
-#line 3055 "dhcp6_parser.yy"
+ case 884: // $@139: %empty
+#line 3087 "dhcp6_parser.yy"
{
ctx.unique("output", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4757 "dhcp6_parser.cc"
+#line 4818 "dhcp6_parser.cc"
break;
- case 876: // output: "output" $@138 ":" "constant string"
-#line 3058 "dhcp6_parser.yy"
+ case 885: // output: "output" $@139 ":" "constant string"
+#line 3090 "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 4767 "dhcp6_parser.cc"
+#line 4828 "dhcp6_parser.cc"
break;
- case 877: // flush: "flush" ":" "boolean"
-#line 3064 "dhcp6_parser.yy"
+ case 886: // flush: "flush" ":" "boolean"
+#line 3096 "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 4777 "dhcp6_parser.cc"
+#line 4838 "dhcp6_parser.cc"
break;
- case 878: // maxsize: "maxsize" ":" "integer"
-#line 3070 "dhcp6_parser.yy"
+ case 887: // maxsize: "maxsize" ":" "integer"
+#line 3102 "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 4787 "dhcp6_parser.cc"
+#line 4848 "dhcp6_parser.cc"
break;
- case 879: // maxver: "maxver" ":" "integer"
-#line 3076 "dhcp6_parser.yy"
+ case 888: // maxver: "maxver" ":" "integer"
+#line 3108 "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 4797 "dhcp6_parser.cc"
+#line 4858 "dhcp6_parser.cc"
break;
- case 880: // $@139: %empty
-#line 3082 "dhcp6_parser.yy"
+ case 889: // $@140: %empty
+#line 3114 "dhcp6_parser.yy"
{
ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4806 "dhcp6_parser.cc"
+#line 4867 "dhcp6_parser.cc"
break;
- case 881: // pattern: "pattern" $@139 ":" "constant string"
-#line 3085 "dhcp6_parser.yy"
+ case 890: // pattern: "pattern" $@140 ":" "constant string"
+#line 3117 "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 4816 "dhcp6_parser.cc"
+#line 4877 "dhcp6_parser.cc"
break;
- case 882: // $@140: %empty
-#line 3091 "dhcp6_parser.yy"
+ case 891: // $@141: %empty
+#line 3123 "dhcp6_parser.yy"
{
ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(i);
ctx.enter(ctx.COMPATIBILITY);
}
-#line 4828 "dhcp6_parser.cc"
+#line 4889 "dhcp6_parser.cc"
break;
- case 883: // compatibility: "compatibility" $@140 ":" "{" compatibility_params "}"
-#line 3097 "dhcp6_parser.yy"
+ case 892: // compatibility: "compatibility" $@141 ":" "{" compatibility_params "}"
+#line 3129 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4837 "dhcp6_parser.cc"
+#line 4898 "dhcp6_parser.cc"
break;
- case 886: // compatibility_params: compatibility_params ","
-#line 3104 "dhcp6_parser.yy"
+ case 895: // compatibility_params: compatibility_params ","
+#line 3136 "dhcp6_parser.yy"
{
ctx.warnAboutExtraCommas(yystack_[0].location);
}
-#line 4845 "dhcp6_parser.cc"
+#line 4906 "dhcp6_parser.cc"
break;
- case 889: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 3113 "dhcp6_parser.yy"
+ case 898: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
+#line 3145 "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 4855 "dhcp6_parser.cc"
+#line 4916 "dhcp6_parser.cc"
break;
-#line 4859 "dhcp6_parser.cc"
+#line 4920 "dhcp6_parser.cc"
default:
break;
// Actual number of expected tokens
int yycount = 0;
- const int yyn = yypact_[+yyparser_.yystack_[0].state];
+ 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;
+ 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;
+ int yychecklim = yylast_ - yyn + 1;
+ 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]))
-
-
-
int
Dhcp6Parser::yy_syntax_error_arguments_ (const context& yyctx,
symbol_kind_type yyarg[], int yyargn) const
}
- const short Dhcp6Parser::yypact_ninf_ = -1032;
+ const short Dhcp6Parser::yypact_ninf_ = -1044;
const signed char Dhcp6Parser::yytable_ninf_ = -1;
const short
Dhcp6Parser::yypact_[] =
{
- 629, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, 42, 34, 60, 67, 91,
- 95, 97, 107, 111, 133, 212, 245, 252, 263, 265,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 34, -176,
- 178, 172, 77, 697, 181, 225, -2, 200, 83, 118,
- -105, 244, 72, -1032, 292, 297, 302, 300, 309, -1032,
- 105, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 329, 338,
- 347, 348, 356, 357, 389, 390, 396, 406, 455, 456,
- 458, 459, -1032, 461, 462, 463, 464, 465, -1032, -1032,
- -1032, 467, 469, 478, 479, -1032, -1032, -1032, 481, -1032,
- -1032, -1032, -1032, -1032, -1032, 482, 483, 485, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, 486, -1032, -1032,
- -1032, -1032, -1032, -1032, 488, 489, 490, -1032, -1032, 493,
- -1032, 143, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, 495, 496, 499, 500, -1032, 147, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- 502, 504, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, 159, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, 505, -1032, -1032, -1032, -1032, 161,
- -1032, -1032, -1032, -1032, -1032, -1032, 506, -1032, 507, 510,
- -1032, -1032, -1032, -1032, -1032, -1032, 170, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, 324, 366, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, 363, -1032, -1032, 512, -1032, -1032,
- -1032, 514, -1032, -1032, 432, 516, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 518,
- 519, 524, -1032, -1032, -1032, -1032, 527, 536, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, 173, -1032, -1032, -1032, 539, -1032, -1032, 540, -1032,
- 541, 543, -1032, -1032, 544, 546, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, 174, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, 548, 188, -1032, -1032, -1032, -1032, 34, 34, -1032,
- 320, 549, -1032, -1032, 550, 553, 556, 557, 558, 559,
- 343, 344, 345, 346, 355, 358, 359, 360, 354, 361,
- 364, 368, 375, 376, 564, 377, 378, 371, 379, 388,
- 578, 583, 585, 391, 392, 386, 393, 596, 597, 608,
- 398, 609, 619, 620, 622, 624, 625, 407, 408, 409,
- 631, 632, 633, 647, 648, 649, 650, 662, 665, 412,
- 666, 667, 668, 669, 670, 672, 454, 460, 466, 677,
- 678, -1032, 172, -1032, 680, 472, 475, 480, 484, 77,
- -1032, 681, 682, 683, 684, 695, 487, 477, 702, 703,
- 705, 697, -1032, 706, 497, 181, -1032, 707, 498, 716,
- 501, 503, 225, -1032, 719, 722, 728, 729, 730, 732,
- 733, -1032, -2, -1032, 734, 735, 520, 736, 738, 739,
- 521, -1032, 83, 741, 537, 538, 551, -1032, 118, 758,
- 759, -49, -1032, 552, 773, 776, 565, 783, 569, 571,
- 790, 791, 573, 574, 794, 803, 805, 806, 244, -1032,
- 810, 594, 72, -1032, -1032, -1032, 812, 811, 599, 813,
- 815, 816, 817, 821, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 610, -1032,
- -1032, -1032, -1032, -1032, -141, 611, 612, -1032, -1032, -1032,
- -1032, 823, 824, 828, -1032, 630, 634, 844, 845, 635,
- -47, -1032, -1032, -1032, 846, 848, 851, 850, 853, 854,
- 855, 856, 857, -1032, 858, 859, 860, 861, 641, 642,
- -1032, -1032, -1032, 864, 863, -1032, 866, -1032, -1032, -1032,
- -1032, -1032, 867, 868, 654, 655, 656, -1032, -1032, 866,
- 657, 871, -1032, 659, -1032, -1032, 660, -1032, 661, -1032,
- -1032, -1032, 866, 866, 866, 663, 664, 671, 673, -1032,
- 674, 675, -1032, 676, 679, 685, -1032, -1032, 686, -1032,
- -1032, -1032, -1032, 687, 845, -1032, -1032, 688, 689, -1032,
- 690, -1032, -1032, -9, 700, -1032, -1032, -141, 691, 692,
- 693, -1032, 877, -1032, -1032, 34, 172, -1032, 72, 77,
- 350, 350, 879, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, 882, 883, 885, -1032, -1032, 890, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -101, 34, 56, 85,
- 891, 893, 894, 211, 57, 373, -52, -23, 244, -1032,
- -1032, 895, -121, -1032, -1032, 896, 897, -1032, -1032, -1032,
- -1032, -1032, -70, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, 879, -1032, 206, 250, 258, -1032, -1032, -1032,
- -1032, 910, 911, 912, 914, 915, 916, 917, 918, 919,
- 920, -1032, 921, -1032, -1032, -1032, -1032, -1032, 277, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, 291, -1032, 922, 814, -1032, -1032, 923, 924, -1032,
- -1032, 925, 927, -1032, -1032, 926, 930, -1032, -1032, 928,
- 932, -1032, -1032, -1032, 155, -1032, -1032, -1032, 931, -1032,
- -1032, -1032, 202, -1032, -1032, -1032, -1032, -1032, 293, -1032,
- -1032, -1032, -1032, 276, -1032, -1032, 933, 935, -1032, -1032,
- 934, 938, -1032, 939, 940, 941, 942, 943, 944, 328,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 945,
- 946, 947, -1032, -1032, -1032, -1032, 332, -1032, -1032, -1032,
- -1032, -1032, -1032, 948, 949, 950, -1032, 336, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 340,
- -1032, -1032, -1032, 951, -1032, 952, -1032, -1032, -1032, 342,
- -1032, -1032, -1032, -1032, -1032, 365, -1032, 443, -1032, 953,
- -1032, 367, -1032, -1032, 740, -1032, 936, 955, -1032, -1032,
- 956, 958, -1032, -1032, -1032, 957, -1032, 960, -1032, -1032,
- -1032, 959, 963, 964, 965, 715, 747, 743, 748, 751,
- 752, 753, 754, 756, 757, 976, 760, 979, 980, 985,
- 987, 350, -1032, -1032, 350, -1032, 879, 697, -1032, 882,
- 83, -1032, 883, 118, -1032, 885, 588, -1032, 890, -101,
- -1032, -1032, 56, -1032, 988, 990, 85, -1032, 352, 891,
- -1032, -2, -1032, 893, -105, -1032, 894, 777, 780, 784,
- 785, 786, 789, 211, -1032, 1012, 1014, 799, 800, 801,
- 57, -1032, 820, 833, 835, 373, -1032, 1030, 1054, -52,
- -1032, 836, 1065, 874, 1068, -23, -1032, -1032, 213, 895,
- -1032, 852, -121, -1032, -1032, 1070, 1071, 181, -1032, 896,
- 225, -1032, 897, 1077, -1032, -1032, 190, 888, 913, 929,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- 385, -1032, 937, 954, 961, 962, -1032, 369, -1032, 405,
- -1032, 1122, -1032, 1123, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, 433, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, 966, 967, -1032, -1032, -1032, 1130, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- 1131, 1137, -1032, -1032, -1032, -1032, -1032, -1032, 1133, -1032,
- 436, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 168,
- 968, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 969,
- 971, -1032, -1032, 972, -1032, 34, -1032, -1032, 1138, -1032,
- -1032, -1032, -1032, -1032, 439, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, 974, 440, -1032, 449, -1032, 975, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 588, -1032,
- -1032, -1032, 1139, 1140, 973, -1032, 352, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 1141, 977,
- 1142, 213, -1032, -1032, -1032, -1032, -1032, -1032, 981, 983,
- -1032, -1032, 1143, -1032, 984, -1032, -1032, -1032, 1144, -1032,
- -1032, 447, -1032, -75, 1144, -1032, -1032, 1146, 1148, 1149,
- -1032, 453, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 1150,
- 982, 986, 989, 1151, -75, -1032, 991, -1032, -1032, -1032,
- 992, -1032, -1032, -1032
+ 638, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, 46, 26, 48, 56, 70,
+ 77, 94, 108, 114, 159, 175, 179, 190, 204, 248,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 26, -181,
+ 40, 166, 23, 593, -15, 67, 219, 8, 236, 341,
+ -92, 693, 115, -1044, 207, 258, 85, 255, 278, -1044,
+ 71, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 289, 291,
+ 292, 298, 299, 307, 310, 311, 334, 348, 364, 388,
+ 389, 395, -1044, 430, 441, 449, 450, 455, -1044, -1044,
+ -1044, 456, 459, 460, 461, -1044, -1044, -1044, 465, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, 466, 467, 468, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 469, -1044,
+ -1044, -1044, -1044, -1044, -1044, 471, 473, 475, -1044, -1044,
+ 476, -1044, 88, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, 477, 478, 479, 480, -1044, 99, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, 482, 483, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, 101, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, 489, -1044, -1044,
+ -1044, -1044, 137, -1044, -1044, -1044, -1044, -1044, -1044, 490,
+ -1044, 492, 493, -1044, -1044, -1044, -1044, -1044, -1044, 140,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, 297, 328, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, 337, -1044, -1044,
+ 494, -1044, -1044, -1044, 497, -1044, -1044, 362, 339, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, 499, 500, 503, -1044, -1044, -1044, -1044, 502,
+ 369, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, 154, -1044, -1044, -1044, 504, -1044,
+ -1044, 508, -1044, 509, 510, -1044, -1044, 511, 514, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, 160, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, 516, 176, -1044, -1044, -1044, -1044,
+ 26, 26, -1044, 302, 518, -1044, -1044, 519, 522, 528,
+ 532, 533, 534, 313, 317, 318, 321, 323, 326, 330,
+ 332, 320, 324, 340, 342, 335, 344, 550, 350, 354,
+ 336, 343, 353, 553, 561, 564, 355, 357, 360, 358,
+ 568, 586, 587, 367, 590, 594, 596, 597, 598, 599,
+ 600, 377, 378, 384, 611, 612, 613, 614, 615, 616,
+ 618, 619, 625, 371, 626, 627, 628, 630, 632, 633,
+ 410, 411, 413, 652, 653, -1044, 166, -1044, 654, 431,
+ 442, 445, 447, 23, -1044, 670, 671, 672, 673, 674,
+ 453, 454, 677, 683, 684, 593, -1044, 685, 464, -15,
+ -1044, 687, 470, 689, 472, 484, 67, -1044, 691, 695,
+ 704, 705, 707, 711, 712, -1044, 219, -1044, 713, 714,
+ 495, 715, 716, 725, 505, -1044, 236, 726, 506, 515,
+ 517, -1044, 341, 728, 732, -51, -1044, 520, 738, 740,
+ 521, 745, 524, 526, 749, 750, 527, 541, 766, 767,
+ 768, 780, 693, -1044, 783, 570, 115, -1044, -1044, -1044,
+ 786, 795, 578, 797, 798, 799, 800, 803, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, 584, -1044, -1044, -1044, -1044, -1044, -94, 585,
+ 603, -1044, -1044, -1044, -1044, 806, 807, 810, -1044, 604,
+ 605, 322, 816, 815, 606, 325, -1044, -1044, -1044, 818,
+ 819, 827, 826, 829, 831, 832, 833, 834, -1044, 835,
+ 836, 837, 838, 621, 622, -1044, -1044, -1044, 858, 857,
+ -1044, 860, -1044, -1044, -1044, -1044, -1044, 861, 862, 656,
+ 657, 658, -1044, -1044, 860, 659, 878, -1044, 661, -1044,
+ -1044, 662, -1044, 665, -1044, -1044, -1044, 860, 860, 860,
+ 666, 667, 668, 669, -1044, 675, 678, -1044, 679, 680,
+ 681, -1044, -1044, 682, -1044, -1044, -1044, -1044, 686, 815,
+ -1044, -1044, 688, 690, -1044, 692, -1044, -1044, -38, 648,
+ -1044, -1044, -94, 694, 696, 697, -1044, 890, -1044, -1044,
+ 26, 166, -1044, 115, 23, 349, 349, 889, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, 891, 892, 901,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, 902, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -93, 26, 60, 120,
+ 903, 905, 907, 42, 243, 142, -42, -60, 693, -1044,
+ -1044, 909, -174, -1044, -1044, 913, 916, -1044, -1044, -1044,
+ -1044, -1044, -75, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, 889, -1044, 177, 206, 268, -1044, -1044, -1044,
+ -1044, 893, 920, 921, 922, 923, 924, 925, 926, 928,
+ 929, -1044, 930, -1044, -1044, -1044, -1044, -1044, 274, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, 275, -1044, 931, 932, -1044, -1044, 933, 935, -1044,
+ -1044, 934, 938, -1044, -1044, 936, 940, -1044, -1044, 939,
+ 941, -1044, -1044, -1044, 119, -1044, -1044, -1044, 942, -1044,
+ -1044, -1044, 141, -1044, -1044, -1044, -1044, -1044, 276, -1044,
+ -1044, -1044, -1044, 161, -1044, -1044, 943, 944, -1044, -1044,
+ 945, 947, -1044, 948, 949, 950, 951, 952, 953, 314,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 954,
+ 955, 956, -1044, -1044, -1044, -1044, 327, -1044, -1044, -1044,
+ -1044, -1044, -1044, 957, 958, 959, -1044, 329, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 331,
+ -1044, -1044, -1044, 960, -1044, 961, -1044, -1044, -1044, 338,
+ -1044, -1044, -1044, -1044, -1044, 345, -1044, 209, -1044, 962,
+ -1044, 346, -1044, -1044, 721, -1044, 963, 964, -1044, -1044,
+ 965, 967, -1044, -1044, -1044, 966, -1044, 969, -1044, -1044,
+ -1044, 968, 972, 973, 974, 710, 751, 742, 752, 747,
+ 755, 756, 757, 758, 759, 983, 762, 986, 987, 989,
+ 990, 349, -1044, -1044, 349, -1044, 889, 593, -1044, 891,
+ 236, -1044, 892, 341, -1044, 901, 706, -1044, 902, -93,
+ -1044, -1044, 60, -1044, 992, 995, 120, -1044, 359, 903,
+ -1044, 219, -1044, 905, -92, -1044, 907, 775, 776, 778,
+ 779, 782, 785, 42, -1044, 1011, 1012, 791, 794, 802,
+ 243, -1044, 804, 805, 840, 142, -1044, 1022, 1026, -42,
+ -1044, 825, 1040, 842, 1060, -60, -1044, -1044, 96, 909,
+ -1044, 841, -174, -1044, -1044, 1073, 1079, -15, -1044, 913,
+ 67, -1044, 916, 1080, -1044, -1044, 381, 866, 880, 918,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ 408, -1044, 919, 937, 946, 970, -1044, 366, -1044, 368,
+ -1044, 1077, -1044, 1078, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, 397, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, 971, 975, -1044, -1044, -1044, 1114,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, 1133, 1148, -1044, -1044, -1044, -1044, -1044, -1044, 1145,
+ -1044, 412, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ 301, 976, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ 977, 978, -1044, -1044, 979, -1044, 26, -1044, -1044, 1150,
+ -1044, -1044, -1044, -1044, -1044, 425, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, 980, 427, -1044, 428, -1044, 981,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 706,
+ -1044, -1044, -1044, 1151, 1152, 982, -1044, 359, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 1153,
+ 991, 1154, 96, -1044, -1044, -1044, -1044, -1044, -1044, 984,
+ 993, -1044, -1044, 1155, -1044, 994, -1044, -1044, -1044, 1156,
+ -1044, -1044, 259, -1044, 0, 1156, -1044, -1044, 1157, 1160,
+ 1161, -1044, 429, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ 1162, 996, 997, 999, 1163, 0, -1044, 1001, -1044, -1044,
+ -1044, 1002, -1044, -1044, -1044
};
const short
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, 192, 9, 379, 11,
- 590, 13, 619, 15, 651, 17, 508, 19, 517, 21,
- 556, 23, 341, 25, 779, 27, 830, 29, 48, 41,
- 0, 0, 0, 0, 0, 0, 653, 0, 519, 558,
+ 35, 36, 61, 5, 67, 7, 199, 9, 386, 11,
+ 599, 13, 628, 15, 660, 17, 517, 19, 526, 21,
+ 565, 23, 348, 25, 788, 27, 839, 29, 48, 41,
+ 0, 0, 0, 0, 0, 0, 662, 0, 528, 567,
0, 0, 0, 50, 0, 49, 0, 0, 42, 63,
- 0, 65, 140, 828, 190, 211, 213, 215, 0, 0,
+ 0, 65, 141, 837, 197, 218, 220, 222, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 180, 0, 0, 0, 0, 0, 159, 166,
- 168, 0, 0, 0, 0, 370, 506, 547, 0, 183,
- 185, 451, 606, 608, 443, 0, 0, 0, 297, 316,
- 306, 286, 689, 642, 332, 353, 721, 0, 318, 746,
- 760, 777, 173, 175, 0, 0, 0, 840, 882, 0,
- 139, 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, 127, 117, 118, 128,
- 129, 130, 106, 136, 137, 138, 132, 133, 134, 84,
- 85, 86, 87, 103, 88, 90, 89, 131, 94, 95,
- 82, 108, 109, 110, 107, 83, 92, 93, 101, 102,
- 104, 91, 96, 97, 98, 99, 100, 105, 116, 135,
- 205, 0, 0, 0, 0, 204, 0, 194, 197, 198,
- 199, 200, 201, 202, 203, 581, 610, 430, 432, 434,
- 0, 0, 438, 436, 683, 429, 384, 385, 386, 387,
- 388, 389, 390, 391, 410, 411, 412, 413, 414, 417,
- 418, 419, 420, 421, 422, 423, 424, 425, 415, 416,
- 426, 427, 428, 0, 381, 395, 396, 397, 400, 401,
- 404, 405, 406, 403, 398, 399, 392, 393, 408, 409,
- 394, 402, 407, 603, 0, 602, 598, 599, 597, 0,
- 592, 595, 596, 600, 601, 635, 0, 638, 0, 0,
- 634, 628, 629, 627, 632, 633, 0, 621, 624, 625,
- 630, 631, 626, 681, 669, 671, 673, 675, 677, 679,
- 668, 665, 666, 667, 0, 654, 655, 660, 661, 658,
- 662, 663, 664, 659, 0, 537, 261, 0, 541, 539,
- 544, 0, 533, 534, 0, 520, 521, 524, 536, 525,
- 526, 527, 543, 528, 529, 530, 531, 532, 574, 0,
- 0, 0, 572, 573, 576, 577, 0, 559, 560, 563,
- 564, 565, 566, 567, 568, 569, 570, 571, 349, 351,
- 346, 0, 343, 347, 348, 0, 803, 805, 0, 808,
- 0, 0, 812, 816, 0, 0, 820, 822, 824, 826,
- 801, 799, 800, 0, 781, 784, 796, 785, 786, 787,
- 788, 789, 790, 791, 792, 793, 794, 795, 797, 798,
- 837, 0, 0, 832, 835, 836, 47, 52, 0, 39,
- 45, 0, 66, 62, 0, 0, 0, 0, 0, 0,
+ 0, 0, 187, 0, 0, 0, 0, 0, 160, 167,
+ 169, 0, 0, 0, 0, 377, 515, 556, 0, 190,
+ 192, 173, 459, 615, 617, 451, 0, 0, 0, 304,
+ 323, 313, 293, 698, 651, 339, 360, 730, 0, 325,
+ 755, 769, 786, 180, 182, 0, 0, 0, 849, 891,
+ 0, 140, 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, 127, 128, 117,
+ 118, 129, 130, 131, 106, 137, 138, 139, 133, 134,
+ 135, 84, 85, 86, 87, 103, 88, 90, 89, 132,
+ 94, 95, 82, 108, 109, 110, 107, 83, 92, 93,
+ 101, 102, 104, 91, 96, 97, 98, 99, 100, 105,
+ 116, 136, 212, 0, 0, 0, 0, 211, 0, 201,
+ 204, 205, 206, 207, 208, 209, 210, 590, 619, 438,
+ 440, 442, 0, 0, 446, 444, 692, 437, 391, 392,
+ 393, 394, 395, 396, 397, 398, 417, 418, 419, 420,
+ 421, 424, 425, 426, 427, 428, 429, 430, 431, 432,
+ 433, 422, 423, 434, 435, 436, 0, 388, 402, 403,
+ 404, 407, 408, 411, 412, 413, 410, 405, 406, 399,
+ 400, 415, 416, 401, 409, 414, 612, 0, 611, 607,
+ 608, 606, 0, 601, 604, 605, 609, 610, 644, 0,
+ 647, 0, 0, 643, 637, 638, 636, 641, 642, 0,
+ 630, 633, 634, 639, 640, 635, 690, 678, 680, 682,
+ 684, 686, 688, 677, 674, 675, 676, 0, 663, 664,
+ 669, 670, 667, 671, 672, 673, 668, 0, 546, 268,
+ 0, 550, 548, 553, 0, 542, 543, 0, 529, 530,
+ 533, 545, 534, 535, 536, 552, 537, 538, 539, 540,
+ 541, 583, 0, 0, 0, 581, 582, 585, 586, 0,
+ 568, 569, 572, 573, 574, 575, 576, 577, 578, 579,
+ 580, 356, 358, 353, 0, 350, 354, 355, 0, 812,
+ 814, 0, 817, 0, 0, 821, 825, 0, 0, 829,
+ 831, 833, 835, 810, 808, 809, 0, 790, 793, 805,
+ 794, 795, 796, 797, 798, 799, 800, 801, 802, 803,
+ 804, 806, 807, 846, 0, 0, 841, 844, 845, 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, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 60, 71, 68, 0, 0, 0, 0, 0, 196,
- 193, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 383, 380, 0, 0, 594, 591, 0, 0, 0,
- 0, 0, 623, 620, 0, 0, 0, 0, 0, 0,
- 0, 652, 657, 509, 0, 0, 0, 0, 0, 0,
- 0, 518, 523, 0, 0, 0, 0, 557, 562, 0,
- 0, 345, 342, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 783, 780,
- 0, 0, 834, 831, 51, 43, 0, 0, 0, 0,
- 0, 0, 0, 0, 142, 143, 144, 145, 146, 147,
- 148, 149, 150, 151, 152, 153, 154, 155, 0, 178,
- 179, 156, 157, 158, 0, 0, 0, 170, 171, 172,
- 177, 0, 0, 0, 182, 0, 0, 0, 0, 0,
- 0, 440, 441, 442, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 745, 0, 0, 0, 0, 0, 0,
- 187, 188, 189, 0, 0, 70, 0, 207, 208, 209,
- 210, 195, 0, 0, 0, 0, 0, 449, 450, 0,
- 0, 0, 382, 0, 605, 593, 0, 637, 0, 640,
- 641, 622, 0, 0, 0, 0, 0, 0, 0, 656,
- 0, 0, 535, 0, 0, 0, 546, 522, 0, 578,
- 579, 580, 561, 0, 0, 344, 802, 0, 0, 807,
- 0, 810, 811, 0, 0, 818, 819, 0, 0, 0,
- 0, 782, 0, 839, 833, 0, 0, 141, 0, 0,
- 0, 0, 217, 181, 161, 162, 163, 164, 165, 160,
- 167, 169, 372, 510, 549, 184, 186, 453, 40, 607,
- 609, 445, 446, 447, 448, 444, 0, 48, 0, 0,
- 0, 644, 334, 0, 0, 0, 0, 0, 0, 174,
- 176, 0, 0, 53, 206, 583, 612, 431, 433, 435,
- 439, 437, 0, 604, 636, 639, 682, 670, 672, 674,
- 676, 678, 680, 538, 262, 542, 540, 545, 575, 350,
- 352, 804, 806, 809, 814, 815, 813, 817, 821, 823,
- 825, 827, 217, 44, 0, 0, 0, 249, 254, 256,
- 258, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 271, 0, 278, 280, 282, 284, 248, 0, 224,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 241, 242, 243, 240, 244, 245, 246,
- 247, 0, 222, 0, 218, 219, 377, 0, 373, 374,
- 515, 0, 511, 512, 554, 0, 550, 551, 458, 0,
- 454, 455, 304, 305, 0, 299, 302, 303, 0, 314,
- 315, 311, 0, 308, 312, 313, 293, 295, 0, 288,
- 291, 292, 694, 0, 691, 649, 0, 645, 646, 339,
- 0, 335, 336, 0, 0, 0, 0, 0, 0, 0,
- 355, 358, 359, 360, 361, 362, 363, 735, 741, 0,
- 0, 0, 734, 731, 732, 733, 0, 723, 726, 729,
- 727, 728, 730, 0, 0, 0, 328, 0, 320, 323,
- 324, 325, 326, 327, 756, 758, 755, 753, 754, 0,
- 748, 751, 752, 0, 772, 0, 775, 768, 769, 0,
- 762, 765, 766, 767, 770, 0, 845, 0, 842, 0,
- 888, 0, 884, 887, 55, 588, 0, 584, 585, 617,
- 0, 613, 614, 687, 686, 0, 685, 0, 64, 829,
- 191, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 60, 71, 68, 0, 0,
+ 0, 0, 0, 203, 200, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 390, 387, 0, 0, 603,
+ 600, 0, 0, 0, 0, 0, 632, 629, 0, 0,
+ 0, 0, 0, 0, 0, 661, 666, 518, 0, 0,
+ 0, 0, 0, 0, 0, 527, 532, 0, 0, 0,
+ 0, 566, 571, 0, 0, 352, 349, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 226, 212, 214, 0, 216, 221, 0, 371, 376,
- 519, 507, 514, 558, 548, 553, 0, 452, 457, 301,
- 298, 317, 310, 307, 0, 0, 290, 287, 696, 693,
- 690, 653, 643, 648, 0, 333, 338, 0, 0, 0,
- 0, 0, 0, 357, 354, 0, 0, 0, 0, 0,
- 725, 722, 0, 0, 0, 322, 319, 0, 0, 750,
- 747, 0, 0, 0, 0, 764, 761, 778, 0, 844,
- 841, 0, 886, 883, 57, 0, 56, 0, 582, 587,
- 0, 611, 616, 0, 684, 838, 0, 0, 0, 0,
- 260, 263, 264, 265, 266, 267, 268, 269, 277, 270,
- 0, 276, 0, 0, 0, 0, 225, 0, 220, 0,
- 375, 0, 513, 0, 552, 505, 477, 478, 479, 481,
- 482, 483, 467, 468, 486, 487, 488, 489, 490, 493,
- 494, 495, 496, 497, 498, 499, 500, 501, 491, 492,
- 502, 503, 504, 463, 464, 465, 466, 475, 476, 472,
- 473, 474, 471, 480, 0, 460, 469, 484, 485, 470,
- 456, 300, 309, 0, 0, 289, 716, 718, 0, 714,
- 708, 709, 710, 711, 712, 713, 715, 705, 706, 707,
- 0, 697, 698, 701, 702, 703, 704, 692, 0, 647,
- 0, 337, 364, 365, 366, 367, 368, 369, 356, 0,
- 0, 740, 743, 744, 724, 329, 330, 331, 321, 0,
- 0, 749, 771, 0, 774, 0, 763, 860, 0, 858,
- 856, 850, 854, 855, 0, 847, 852, 853, 851, 843,
- 889, 885, 54, 59, 0, 586, 0, 615, 0, 251,
- 252, 253, 250, 255, 257, 259, 273, 274, 275, 272,
- 279, 281, 283, 285, 223, 378, 516, 555, 462, 459,
- 294, 296, 0, 0, 0, 695, 700, 650, 340, 737,
- 738, 739, 736, 742, 757, 759, 773, 776, 0, 0,
- 0, 849, 846, 58, 589, 618, 688, 461, 0, 0,
- 720, 699, 0, 857, 0, 848, 717, 719, 0, 859,
- 865, 0, 862, 0, 864, 861, 875, 0, 0, 0,
- 880, 0, 867, 870, 871, 872, 873, 874, 863, 0,
- 0, 0, 0, 0, 869, 866, 0, 877, 878, 879,
- 0, 868, 876, 881
+ 0, 0, 792, 789, 0, 0, 843, 840, 51, 43,
+ 0, 0, 0, 0, 0, 0, 0, 0, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 0, 185, 186, 157, 158, 159, 0, 0,
+ 0, 171, 172, 179, 184, 0, 0, 0, 189, 0,
+ 0, 0, 0, 0, 0, 0, 448, 449, 450, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 754, 0,
+ 0, 0, 0, 0, 0, 194, 195, 196, 0, 0,
+ 70, 0, 214, 215, 216, 217, 202, 0, 0, 0,
+ 0, 0, 457, 458, 0, 0, 0, 389, 0, 614,
+ 602, 0, 646, 0, 649, 650, 631, 0, 0, 0,
+ 0, 0, 0, 0, 665, 0, 0, 544, 0, 0,
+ 0, 555, 531, 0, 587, 588, 589, 570, 0, 0,
+ 351, 811, 0, 0, 816, 0, 819, 820, 0, 0,
+ 827, 828, 0, 0, 0, 0, 791, 0, 848, 842,
+ 0, 0, 142, 0, 0, 0, 0, 224, 188, 162,
+ 163, 164, 165, 166, 161, 168, 170, 379, 519, 558,
+ 191, 193, 175, 176, 177, 178, 174, 461, 40, 616,
+ 618, 453, 454, 455, 456, 452, 0, 48, 0, 0,
+ 0, 653, 341, 0, 0, 0, 0, 0, 0, 181,
+ 183, 0, 0, 53, 213, 592, 621, 439, 441, 443,
+ 447, 445, 0, 613, 645, 648, 691, 679, 681, 683,
+ 685, 687, 689, 547, 269, 551, 549, 554, 584, 357,
+ 359, 813, 815, 818, 823, 824, 822, 826, 830, 832,
+ 834, 836, 224, 44, 0, 0, 0, 256, 261, 263,
+ 265, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 278, 0, 285, 287, 289, 291, 255, 0, 231,
+ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
+ 244, 245, 246, 248, 249, 250, 247, 251, 252, 253,
+ 254, 0, 229, 0, 225, 226, 384, 0, 380, 381,
+ 524, 0, 520, 521, 563, 0, 559, 560, 466, 0,
+ 462, 463, 311, 312, 0, 306, 309, 310, 0, 321,
+ 322, 318, 0, 315, 319, 320, 300, 302, 0, 295,
+ 298, 299, 703, 0, 700, 658, 0, 654, 655, 346,
+ 0, 342, 343, 0, 0, 0, 0, 0, 0, 0,
+ 362, 365, 366, 367, 368, 369, 370, 744, 750, 0,
+ 0, 0, 743, 740, 741, 742, 0, 732, 735, 738,
+ 736, 737, 739, 0, 0, 0, 335, 0, 327, 330,
+ 331, 332, 333, 334, 765, 767, 764, 762, 763, 0,
+ 757, 760, 761, 0, 781, 0, 784, 777, 778, 0,
+ 771, 774, 775, 776, 779, 0, 854, 0, 851, 0,
+ 897, 0, 893, 896, 55, 597, 0, 593, 594, 626,
+ 0, 622, 623, 696, 695, 0, 694, 0, 64, 838,
+ 198, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 233, 219, 221, 0, 223, 228, 0, 378, 383,
+ 528, 516, 523, 567, 557, 562, 0, 460, 465, 308,
+ 305, 324, 317, 314, 0, 0, 297, 294, 705, 702,
+ 699, 662, 652, 657, 0, 340, 345, 0, 0, 0,
+ 0, 0, 0, 364, 361, 0, 0, 0, 0, 0,
+ 734, 731, 0, 0, 0, 329, 326, 0, 0, 759,
+ 756, 0, 0, 0, 0, 773, 770, 787, 0, 853,
+ 850, 0, 895, 892, 57, 0, 56, 0, 591, 596,
+ 0, 620, 625, 0, 693, 847, 0, 0, 0, 0,
+ 267, 270, 271, 272, 273, 274, 275, 276, 284, 277,
+ 0, 283, 0, 0, 0, 0, 232, 0, 227, 0,
+ 382, 0, 522, 0, 561, 514, 485, 486, 487, 489,
+ 490, 491, 475, 476, 494, 495, 496, 497, 498, 501,
+ 502, 503, 504, 505, 506, 507, 508, 509, 510, 499,
+ 500, 511, 512, 513, 471, 472, 473, 474, 483, 484,
+ 480, 481, 482, 479, 488, 0, 468, 477, 492, 493,
+ 478, 464, 307, 316, 0, 0, 296, 725, 727, 0,
+ 723, 717, 718, 719, 720, 721, 722, 724, 714, 715,
+ 716, 0, 706, 707, 710, 711, 712, 713, 701, 0,
+ 656, 0, 344, 371, 372, 373, 374, 375, 376, 363,
+ 0, 0, 749, 752, 753, 733, 336, 337, 338, 328,
+ 0, 0, 758, 780, 0, 783, 0, 772, 869, 0,
+ 867, 865, 859, 863, 864, 0, 856, 861, 862, 860,
+ 852, 898, 894, 54, 59, 0, 595, 0, 624, 0,
+ 258, 259, 260, 257, 262, 264, 266, 280, 281, 282,
+ 279, 286, 288, 290, 292, 230, 385, 525, 564, 470,
+ 467, 301, 303, 0, 0, 0, 704, 709, 659, 347,
+ 746, 747, 748, 745, 751, 766, 768, 782, 785, 0,
+ 0, 0, 858, 855, 58, 598, 627, 697, 469, 0,
+ 0, 729, 708, 0, 866, 0, 857, 726, 728, 0,
+ 868, 874, 0, 871, 0, 873, 870, 884, 0, 0,
+ 0, 889, 0, 876, 879, 880, 881, 882, 883, 872,
+ 0, 0, 0, 0, 0, 878, 875, 0, 886, 887,
+ 888, 0, 877, 885, 890
};
const short
Dhcp6Parser::yypgoto_[] =
{
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -10, -1032, -615, -1032,
- 235, -1032, -1032, -1032, -1032, 149, -1032, -649, -1032, -1032,
- -1032, -71, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 401,
- 636, -1032, -1032, -43, -39, 10, 14, 15, 17, -61,
- -24, -21, -17, -11, 30, 32, -1032, 33, 37, 43,
- 44, -1032, 419, 47, -1032, 50, -1032, 51, 62, 63,
- 64, -1032, 65, -1032, 66, -1032, -1032, -1032, -1032, -1032,
- 68, -1032, 69, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, 410, 637, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, 330, -1032, 114, -1032, -731,
- 120, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -41, -1032, -773, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, 98, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, 104, -755, -1032, -1032, -1032,
- -1032, 103, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 74,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, 92, -1032, -1032,
- -1032, 93, 589, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- 88, -1032, -1032, -1032, -1032, -1032, -1032, -1031, -1032, -1032,
- -1032, 123, -1032, -1032, -1032, 126, 638, -1032, -1032, -1030,
- -1032, -1029, -1032, 73, -1032, 82, -1032, 76, 79, 80,
- 81, -1032, -1032, -1032, -1027, -1032, -1032, -1032, -1032, 117,
- -1032, -1032, -122, 1100, -1032, -1032, -1032, -1032, -1032, 128,
- -1032, -1032, -1032, 134, -1032, 606, -1032, -66, -1032, -1032,
- -1032, -1032, -1032, -65, -1032, -1032, -1032, -1032, -1032, -16,
- -1032, -1032, -1032, 130, -1032, -1032, -1032, 144, -1032, 605,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, 87, -1032, -1032, -1032, 96, 694, -1032, -1032,
- -1032, -57, -1032, -3, -1032, -1032, -1032, -1032, -1032, 78,
- -1032, -1032, -1032, 89, 696, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -45, -1032, -1032, -1032, 135, -1032, -1032, -1032,
- 145, -1032, 652, 413, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1025, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, 148, -1032, -1032, -1032, -88,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 129,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, 121, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- 116, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, 434, 626, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, 492, 621, -1032, -1032, -1032, -1032, -1032, -1032,
- 119, -1032, -1032, -96, -1032, -1032, -1032, -1032, -1032, -1032,
- -118, -1032, -1032, -135, -1032, -1032, -1032, -1032, -1032, -1032,
- -1032, -1032, -1032, -1032, 122, -1032
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -4, -1044, -621, -1044,
+ 439, -1044, -1044, -1044, -1044, 372, -1044, -627, -1044, -1044,
+ -1044, -71, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 418,
+ 644, -1044, -1044, -43, -39, 10, 14, 15, 17, -24,
+ -21, -17, -11, 30, 32, 33, -1044, 37, 43, 44,
+ 47, -1044, 432, 50, -1044, 51, -1044, 62, 63, 64,
+ -1044, -1044, 65, 66, -1044, 68, -1044, 69, -1044, -1044,
+ -1044, -1044, -1044, 76, -1044, 79, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, 419, 639, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 333, -1044,
+ 121, -1044, -745, 125, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -41, -1044, -788, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ 102, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 110, -768,
+ -1044, -1044, -1044, -1044, 109, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, 75, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ 97, -1044, -1044, -1044, 98, 601, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, 91, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1043, -1044, -1044, -1044, 126, -1044, -1044, -1044, 130, 643,
+ -1044, -1044, -1041, -1044, -1040, -1044, 84, -1044, 86, -1044,
+ 80, 81, 82, 83, -1044, -1044, -1044, -1039, -1044, -1044,
+ -1044, -1044, 122, -1044, -1044, -120, 1115, -1044, -1044, -1044,
+ -1044, -1044, 129, -1044, -1044, -1044, 133, -1044, 623, -1044,
+ -66, -1044, -1044, -1044, -1044, -1044, -65, -1044, -1044, -1044,
+ -1044, -1044, -16, -1044, -1044, -1044, 132, -1044, -1044, -1044,
+ 131, -1044, 640, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, 78, -1044, -1044, -1044, 93,
+ 649, -1044, -1044, -1044, -57, -1044, -3, -1044, -1044, -1044,
+ -1044, -1044, 89, -1044, -1044, -1044, 100, 676, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -45, -1044, -1044, -1044, 145,
+ -1044, -1044, -1044, 127, -1044, 646, 403, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1037, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 150, -1044,
+ -1044, -1044, -86, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, 134, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, 124, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, 128, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, 437, 634, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, 486, 631, -1044, -1044, -1044,
+ -1044, -1044, -1044, 123, -1044, -1044, -91, -1044, -1044, -1044,
+ -1044, -1044, -1044, -115, -1044, -1044, -131, -1044, -1044, -1044,
+ -1044, -1044, -1044, -1044, -1044, -1044, -1044, 135, -1044
};
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,
- 769, 87, 88, 41, 68, 84, 85, 794, 1004, 1115,
- 1116, 857, 43, 70, 90, 451, 91, 45, 71, 161,
- 162, 163, 454, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 480, 759, 182, 481, 183, 482, 184, 185, 186,
- 187, 514, 188, 515, 189, 190, 191, 192, 474, 193,
- 194, 491, 195, 492, 196, 197, 198, 199, 456, 47,
- 72, 236, 237, 238, 524, 239, 240, 241, 242, 200,
- 457, 201, 458, 202, 459, 883, 884, 885, 1044, 858,
- 859, 860, 1021, 1282, 861, 1022, 862, 1023, 863, 1024,
- 864, 865, 565, 866, 867, 868, 869, 870, 871, 872,
- 873, 874, 1035, 1289, 875, 876, 877, 1037, 878, 1038,
- 879, 1039, 880, 1040, 203, 503, 918, 919, 920, 1064,
- 921, 1065, 204, 500, 904, 905, 906, 907, 205, 502,
- 912, 913, 914, 915, 206, 501, 207, 510, 967, 968,
- 969, 970, 971, 208, 506, 930, 931, 932, 1074, 63,
- 80, 401, 402, 403, 579, 404, 580, 209, 507, 939,
- 940, 941, 942, 943, 944, 945, 946, 210, 487, 887,
- 888, 889, 1047, 49, 73, 283, 284, 285, 533, 286,
- 534, 287, 535, 288, 539, 289, 538, 211, 212, 213,
- 214, 496, 775, 294, 295, 215, 493, 899, 900, 901,
- 1056, 1194, 1195, 216, 488, 57, 77, 891, 892, 893,
- 1050, 59, 78, 364, 365, 366, 367, 368, 369, 370,
- 564, 371, 568, 372, 567, 373, 374, 569, 375, 217,
- 489, 895, 896, 897, 1053, 61, 79, 386, 387, 388,
- 389, 390, 573, 391, 392, 393, 394, 395, 297, 531,
- 1006, 1007, 1008, 1117, 51, 74, 309, 310, 311, 543,
- 312, 218, 494, 219, 495, 300, 532, 1010, 1011, 1012,
- 1120, 53, 75, 326, 327, 328, 547, 329, 330, 549,
- 331, 332, 220, 505, 926, 927, 928, 1071, 55, 76,
- 344, 345, 346, 347, 555, 348, 556, 349, 557, 350,
- 558, 351, 559, 352, 560, 353, 554, 302, 540, 1015,
- 1016, 1123, 221, 504, 923, 924, 1068, 1220, 1221, 1222,
- 1223, 1224, 1302, 1225, 1303, 1226, 222, 508, 956, 957,
- 958, 1085, 1312, 959, 960, 1086, 961, 962, 223, 224,
- 511, 979, 980, 981, 1097, 982, 1098, 225, 512, 989,
- 990, 991, 992, 1102, 993, 994, 1104, 226, 513, 65,
- 81, 423, 424, 425, 426, 584, 427, 585, 428, 429,
- 587, 430, 431, 432, 590, 826, 433, 591, 434, 435,
- 436, 594, 437, 595, 438, 596, 439, 597, 227, 455,
- 67, 82, 442, 443, 444, 600, 445, 228, 519, 997,
- 998, 1108, 1264, 1265, 1266, 1267, 1320, 1268, 1318, 1341,
- 1342, 1343, 1351, 1352, 1353, 1359, 1354, 1355, 1356, 1357,
- 1363, 229, 520, 1001, 1002, 1003
+ 779, 87, 88, 41, 68, 84, 85, 804, 1014, 1125,
+ 1126, 867, 43, 70, 90, 454, 91, 45, 71, 162,
+ 163, 164, 457, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 483, 764, 183, 484, 184, 485, 185, 186, 187,
+ 496, 776, 188, 189, 518, 190, 519, 191, 192, 193,
+ 194, 477, 195, 196, 494, 197, 495, 198, 199, 200,
+ 201, 459, 47, 72, 238, 239, 240, 528, 241, 242,
+ 243, 244, 202, 460, 203, 461, 204, 462, 893, 894,
+ 895, 1054, 868, 869, 870, 1031, 1293, 871, 1032, 872,
+ 1033, 873, 1034, 874, 875, 569, 876, 877, 878, 879,
+ 880, 881, 882, 883, 884, 1045, 1300, 885, 886, 887,
+ 1047, 888, 1048, 889, 1049, 890, 1050, 205, 507, 928,
+ 929, 930, 1074, 931, 1075, 206, 504, 914, 915, 916,
+ 917, 207, 506, 922, 923, 924, 925, 208, 505, 209,
+ 514, 977, 978, 979, 980, 981, 210, 510, 940, 941,
+ 942, 1084, 63, 80, 404, 405, 406, 583, 407, 584,
+ 211, 511, 949, 950, 951, 952, 953, 954, 955, 956,
+ 212, 490, 897, 898, 899, 1057, 49, 73, 286, 287,
+ 288, 537, 289, 538, 290, 539, 291, 543, 292, 542,
+ 213, 214, 215, 216, 500, 785, 297, 298, 217, 497,
+ 909, 910, 911, 1066, 1205, 1206, 218, 491, 57, 77,
+ 901, 902, 903, 1060, 59, 78, 367, 368, 369, 370,
+ 371, 372, 373, 568, 374, 572, 375, 571, 376, 377,
+ 573, 378, 219, 492, 905, 906, 907, 1063, 61, 79,
+ 389, 390, 391, 392, 393, 577, 394, 395, 396, 397,
+ 398, 300, 535, 1016, 1017, 1018, 1127, 51, 74, 312,
+ 313, 314, 547, 315, 220, 498, 221, 499, 303, 536,
+ 1020, 1021, 1022, 1130, 53, 75, 329, 330, 331, 551,
+ 332, 333, 553, 334, 335, 222, 509, 936, 937, 938,
+ 1081, 55, 76, 347, 348, 349, 350, 559, 351, 560,
+ 352, 561, 353, 562, 354, 563, 355, 564, 356, 558,
+ 305, 544, 1025, 1026, 1133, 223, 508, 933, 934, 1078,
+ 1231, 1232, 1233, 1234, 1235, 1313, 1236, 1314, 1237, 224,
+ 512, 966, 967, 968, 1095, 1323, 969, 970, 1096, 971,
+ 972, 225, 226, 515, 989, 990, 991, 1107, 992, 1108,
+ 227, 516, 999, 1000, 1001, 1002, 1112, 1003, 1004, 1114,
+ 228, 517, 65, 81, 426, 427, 428, 429, 588, 430,
+ 589, 431, 432, 591, 433, 434, 435, 594, 836, 436,
+ 595, 437, 438, 439, 598, 440, 599, 441, 600, 442,
+ 601, 229, 458, 67, 82, 445, 446, 447, 604, 448,
+ 230, 523, 1007, 1008, 1118, 1275, 1276, 1277, 1278, 1331,
+ 1279, 1329, 1352, 1353, 1354, 1362, 1363, 1364, 1370, 1365,
+ 1366, 1367, 1368, 1374, 231, 524, 1011, 1012, 1013
};
const short
Dhcp6Parser::yytable_[] =
{
- 160, 235, 255, 305, 320, 340, 38, 362, 382, 400,
- 420, 953, 262, 384, 385, 243, 298, 313, 324, 342,
- 881, 376, 396, 911, 421, 1184, 1185, 1186, 301, 1193,
- 256, 1199, 902, 768, 257, 398, 399, 363, 383, 31,
- 800, 32, 30, 33, 86, 754, 755, 756, 757, 263,
- 132, 133, 264, 806, 807, 808, 265, 296, 308, 323,
- 341, 334, 266, 771, 772, 773, 774, 42, 1013, 244,
- 299, 314, 325, 343, 44, 377, 397, 127, 422, 132,
- 133, 947, 758, 258, 999, 440, 441, 259, 260, 842,
- 261, 398, 399, 230, 231, 232, 233, 234, 46, 159,
- 132, 133, 48, 267, 50, 268, 269, 355, 452, 768,
- 270, 974, 975, 453, 52, 159, 271, 272, 54, 903,
- 273, 333, 1346, 274, 275, 1347, 1348, 1349, 1350, 334,
- 335, 336, 337, 338, 339, 276, 277, 278, 279, 280,
- 56, 281, 282, 983, 984, 985, 522, 306, 321, 290,
- 529, 523, 291, 292, 293, 530, 307, 322, 1059, 132,
- 133, 1060, 541, 356, 545, 357, 358, 542, 159, 546,
- 359, 360, 361, 552, 824, 825, 581, 598, 553, 132,
- 133, 582, 599, 92, 93, 132, 133, 94, 89, 902,
- 909, 602, 910, 95, 96, 97, 603, 986, 356, 378,
- 357, 358, 379, 380, 381, 1062, 916, 917, 1063, 522,
- 948, 949, 950, 951, 1018, 1279, 1280, 1281, 159, 58,
- 132, 133, 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, 127, 60, 602, 34, 35, 36, 37, 1019, 62,
- 127, 529, 128, 129, 130, 131, 1020, 1184, 1185, 1186,
- 64, 1193, 66, 1199, 132, 133, 303, 159, 126, 1069,
- 1041, 134, 1070, 132, 133, 1042, 135, 136, 137, 138,
- 139, 140, 141, 356, 1041, 142, 1066, 159, 446, 1043,
- 447, 1067, 143, 159, 127, 252, 448, 911, 449, 253,
- 304, 144, 450, 1147, 145, 132, 133, 953, 1309, 1310,
- 1311, 146, 315, 316, 317, 318, 319, 132, 133, 147,
- 148, 1083, 561, 460, 149, 1090, 1084, 150, 159, 1095,
- 1091, 151, 461, 1099, 1096, 1105, 132, 133, 1100, 252,
- 1106, 462, 463, 253, 933, 934, 935, 936, 937, 938,
- 464, 465, 152, 153, 154, 155, 156, 157, 598, 562,
- 1112, 563, 1041, 1107, 837, 1113, 158, 1294, 838, 839,
- 840, 841, 842, 843, 844, 845, 846, 847, 848, 849,
- 850, 851, 159, 466, 467, 852, 853, 854, 855, 856,
- 468, 159, 98, 99, 100, 101, 102, 103, 541, 1257,
- 469, 1258, 1259, 1295, 405, 406, 407, 408, 409, 410,
- 411, 412, 413, 414, 415, 416, 417, 1286, 1287, 1288,
- 356, 127, 356, 159, 418, 419, 1298, 604, 605, 581,
- 571, 1299, 1321, 545, 1308, 159, 1109, 1322, 1324, 1110,
- 1344, 160, 552, 1345, 132, 133, 1364, 1325, 235, 470,
- 471, 1365, 472, 473, 159, 475, 476, 477, 478, 479,
- 255, 483, 243, 484, 305, 132, 133, 1206, 1207, 1208,
- 262, 320, 485, 486, 298, 490, 497, 498, 313, 499,
- 509, 340, 516, 517, 518, 324, 301, 521, 256, 525,
- 526, 362, 257, 527, 528, 342, 536, 382, 537, 544,
- 548, 550, 384, 385, 551, 376, 566, 263, 570, 572,
- 264, 396, 574, 575, 265, 296, 244, 420, 576, 308,
- 266, 363, 963, 964, 965, 577, 323, 383, 299, 578,
- 606, 421, 314, 583, 586, 588, 341, 589, 592, 325,
- 593, 258, 601, 607, 608, 259, 260, 609, 261, 343,
- 610, 611, 612, 613, 614, 615, 616, 617, 628, 377,
- 159, 267, 159, 268, 269, 397, 618, 622, 270, 619,
- 620, 621, 634, 623, 271, 272, 624, 635, 273, 636,
- 625, 274, 275, 159, 631, 422, 626, 627, 629, 630,
- 641, 642, 632, 276, 277, 278, 279, 280, 639, 281,
- 282, 633, 643, 645, 637, 638, 640, 290, 306, 644,
- 291, 292, 293, 646, 647, 321, 648, 307, 649, 650,
- 651, 652, 653, 663, 322, 654, 655, 656, 98, 99,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 657, 658, 659, 660, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 661, 127, 356, 662,
- 664, 665, 666, 667, 668, 160, 669, 670, 235, 129,
- 130, 673, 674, 671, 676, 682, 683, 684, 685, 672,
- 132, 133, 243, 248, 249, 677, 251, 134, 678, 686,
- 688, 679, 135, 136, 137, 680, 689, 690, 687, 691,
- 693, 696, 252, 952, 966, 976, 253, 420, 694, 697,
- 698, 1000, 699, 702, 700, 254, 703, 954, 972, 977,
- 987, 421, 704, 705, 706, 833, 707, 708, 710, 711,
- 713, 712, 714, 715, 716, 718, 244, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 719, 720, 723, 724, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 721, 726, 127, 727, 152, 153,
- 728, 955, 973, 978, 988, 422, 729, 730, 129, 130,
- 731, 245, 732, 246, 733, 734, 735, 736, 737, 132,
- 133, 247, 248, 249, 250, 251, 134, 738, 159, 739,
- 740, 135, 136, 137, 742, 743, 745, 1046, 746, 747,
- 748, 252, 749, 750, 751, 253, 752, 143, 762, 763,
- 753, 760, 761, 764, 254, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 767,
- 765, 776, 32, 777, 766, 770, 778, 779, 780, 781,
- 782, 789, 790, 783, 784, 785, 786, 787, 788, 791,
- 792, 793, 795, 796, 797, 798, 799, 801, 802, 803,
- 804, 805, 832, 809, 810, 827, 882, 152, 153, 886,
- 890, 811, 894, 812, 813, 814, 815, 898, 922, 816,
- 925, 929, 996, 1005, 1009, 817, 818, 819, 821, 822,
- 823, 829, 830, 831, 1025, 1026, 1027, 159, 1028, 1029,
- 1030, 1031, 1032, 1033, 1034, 1036, 908, 1049, 1045, 1048,
- 1052, 1051, 1054, 1055, 1057, 1058, 1130, 1061, 1073, 1072,
- 1075, 1076, 1118, 1077, 1078, 1079, 1080, 1081, 1082, 1087,
- 1088, 1089, 1092, 1093, 1094, 1101, 1103, 1111, 1119, 820,
- 1114, 1122, 1121, 1126, 1132, 1124, 1125, 1127, 1128, 1129,
- 1131, 1133, 1134, 1135, 1136, 1137, 255, 1138, 1139, 362,
- 1140, 1141, 382, 1142, 1143, 1155, 262, 384, 385, 1144,
- 298, 1145, 1203, 376, 1204, 1162, 396, 1209, 1232, 1197,
- 340, 1233, 301, 400, 256, 1234, 1235, 1236, 257, 363,
- 1237, 1218, 383, 1156, 342, 1183, 1239, 1157, 1240, 952,
- 1241, 1242, 1243, 263, 966, 1210, 264, 1216, 976, 1211,
- 265, 296, 1163, 954, 1249, 1164, 266, 1260, 972, 1165,
- 1196, 1000, 977, 1245, 299, 1166, 305, 377, 987, 320,
- 397, 1262, 1217, 1198, 1246, 341, 1247, 258, 1250, 1252,
- 313, 259, 260, 324, 261, 1219, 1158, 1261, 343, 1253,
- 1159, 1160, 1255, 1161, 1273, 1270, 1272, 267, 1212, 268,
- 269, 1278, 1213, 1214, 270, 1215, 1167, 955, 1168, 1169,
- 271, 272, 973, 1170, 273, 1254, 978, 274, 275, 1171,
- 1172, 308, 988, 1173, 323, 1263, 1174, 1175, 1283, 276,
- 277, 278, 279, 280, 314, 281, 282, 325, 1176, 1177,
- 1178, 1179, 1180, 290, 1181, 1182, 291, 292, 293, 1187,
- 1296, 1297, 1189, 1284, 1304, 1190, 1191, 1192, 1188, 1305,
- 1306, 1307, 1319, 1328, 1329, 1332, 1334, 834, 1338, 1285,
- 1360, 1340, 1361, 1362, 1366, 1370, 828, 1290, 675, 836,
- 1148, 1146, 1017, 1201, 1205, 1202, 681, 1230, 1231, 1248,
- 725, 1238, 1150, 1149, 1291, 1200, 1327, 354, 717, 692,
- 1152, 1292, 1293, 722, 1151, 1154, 1300, 1301, 1313, 1314,
- 306, 1315, 1316, 321, 1323, 1326, 1330, 1153, 1333, 307,
- 1277, 1336, 322, 1337, 1339, 1367, 1275, 1368, 1229, 1276,
- 1369, 1372, 1373, 1274, 709, 1014, 1228, 1227, 1331, 1244,
- 1251, 1256, 995, 744, 741, 1335, 1358, 1155, 1269, 1371,
- 0, 0, 0, 0, 1271, 1209, 0, 1162, 0, 695,
- 835, 1197, 0, 0, 0, 1317, 0, 0, 701, 1218,
- 1260, 0, 0, 0, 0, 1156, 0, 1183, 0, 1157,
- 0, 0, 0, 1210, 1262, 1216, 0, 1211, 0, 0,
- 0, 0, 0, 0, 1163, 0, 0, 1164, 0, 0,
- 1261, 1165, 1196, 0, 0, 0, 0, 1166, 0, 0,
- 1217, 0, 0, 0, 0, 1198, 0, 0, 0, 0,
- 0, 0, 0, 1219, 0, 0, 0, 0, 1158, 0,
- 0, 0, 1159, 1160, 0, 1161, 1212, 0, 1263, 0,
- 1213, 1214, 0, 1215, 0, 0, 0, 0, 1167, 0,
- 1168, 1169, 0, 0, 0, 1170, 0, 0, 0, 0,
- 0, 1171, 1172, 0, 0, 1173, 0, 0, 1174, 1175,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1176, 1177, 1178, 1179, 1180, 0, 1181, 1182, 0, 0,
- 0, 1187, 0, 0, 1189, 0, 0, 1190, 1191, 1192,
- 1188
+ 161, 237, 257, 308, 323, 343, 963, 365, 385, 403,
+ 423, 891, 38, 387, 388, 245, 301, 316, 327, 345,
+ 921, 379, 399, 1195, 424, 1196, 1197, 1204, 304, 1210,
+ 258, 31, 778, 32, 259, 33, 1009, 366, 386, 232,
+ 233, 234, 235, 236, 86, 912, 30, 133, 134, 264,
+ 89, 160, 265, 401, 402, 42, 266, 299, 311, 326,
+ 344, 337, 267, 44, 127, 133, 134, 810, 1023, 246,
+ 302, 317, 328, 346, 455, 380, 400, 46, 425, 456,
+ 816, 817, 818, 260, 48, 306, 126, 261, 262, 451,
+ 263, 526, 133, 134, 401, 402, 527, 759, 760, 761,
+ 762, 50, 533, 268, 545, 269, 270, 534, 778, 546,
+ 271, 993, 994, 995, 254, 52, 272, 273, 255, 307,
+ 274, 54, 1069, 275, 276, 1070, 984, 985, 443, 444,
+ 133, 134, 913, 160, 763, 277, 278, 279, 280, 281,
+ 549, 282, 283, 556, 1072, 550, 127, 1073, 557, 284,
+ 834, 835, 285, 293, 294, 295, 296, 585, 309, 324,
+ 310, 325, 586, 602, 1079, 996, 56, 1080, 603, 318,
+ 319, 320, 321, 322, 133, 134, 359, 92, 93, 606,
+ 526, 94, 58, 160, 607, 1028, 60, 95, 96, 97,
+ 943, 944, 945, 946, 947, 948, 254, 62, 912, 919,
+ 255, 920, 1357, 133, 134, 1358, 1359, 1360, 1361, 606,
+ 160, 64, 1119, 449, 1029, 1120, 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, 127, 926, 927, 160, 133,
+ 134, 34, 35, 36, 37, 66, 128, 129, 130, 131,
+ 358, 450, 1355, 452, 132, 1356, 1195, 957, 1196, 1197,
+ 1204, 533, 1210, 133, 134, 852, 1030, 1051, 1051, 1076,
+ 135, 453, 1052, 1053, 1077, 136, 137, 138, 139, 140,
+ 141, 142, 160, 463, 143, 464, 465, 1268, 127, 1269,
+ 1270, 144, 466, 467, 921, 565, 973, 974, 975, 1157,
+ 145, 468, 963, 146, 469, 470, 359, 1093, 360, 361,
+ 147, 160, 1094, 362, 363, 364, 133, 134, 148, 149,
+ 1100, 566, 1105, 150, 1109, 1101, 151, 1106, 471, 1110,
+ 152, 1115, 576, 133, 134, 567, 1116, 336, 602, 1122,
+ 133, 134, 472, 1117, 1123, 337, 338, 339, 340, 341,
+ 342, 153, 154, 155, 156, 157, 158, 160, 473, 1051,
+ 575, 545, 582, 847, 1305, 159, 1306, 848, 849, 850,
+ 851, 852, 853, 854, 855, 856, 857, 858, 859, 860,
+ 861, 160, 474, 475, 862, 863, 864, 865, 866, 476,
+ 1309, 958, 959, 960, 961, 1310, 1290, 1291, 1292, 98,
+ 99, 100, 101, 102, 103, 585, 772, 773, 774, 775,
+ 1319, 359, 381, 360, 361, 382, 383, 384, 1332, 359,
+ 549, 556, 1375, 1333, 478, 1335, 1336, 1376, 127, 359,
+ 781, 782, 783, 784, 160, 479, 608, 609, 133, 134,
+ 1297, 1298, 1299, 480, 481, 161, 1320, 1321, 1322, 482,
+ 486, 160, 237, 487, 488, 489, 133, 134, 160, 493,
+ 501, 502, 503, 513, 257, 520, 245, 521, 308, 522,
+ 525, 529, 530, 531, 532, 323, 540, 541, 301, 1217,
+ 1218, 1219, 316, 548, 552, 343, 554, 555, 570, 327,
+ 304, 574, 258, 578, 579, 365, 259, 580, 587, 345,
+ 581, 385, 590, 592, 593, 596, 387, 388, 597, 379,
+ 605, 264, 611, 612, 265, 399, 613, 610, 266, 299,
+ 246, 423, 614, 311, 267, 366, 615, 616, 617, 618,
+ 326, 386, 302, 619, 620, 424, 317, 621, 626, 622,
+ 344, 627, 623, 328, 632, 260, 624, 638, 625, 261,
+ 262, 630, 263, 346, 635, 639, 160, 628, 640, 629,
+ 631, 636, 645, 380, 160, 268, 633, 269, 270, 400,
+ 634, 637, 271, 641, 160, 642, 644, 643, 272, 273,
+ 646, 647, 274, 648, 649, 275, 276, 668, 650, 425,
+ 651, 652, 653, 654, 655, 656, 657, 277, 278, 279,
+ 280, 281, 658, 282, 283, 659, 660, 661, 662, 663,
+ 664, 284, 665, 666, 285, 293, 294, 295, 296, 667,
+ 669, 670, 671, 309, 672, 310, 673, 674, 675, 676,
+ 324, 677, 325, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 678, 679, 681, 682,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 683, 684, 127, 685, 687, 688, 689, 690, 691, 692,
+ 161, 694, 693, 237, 129, 130, 131, 695, 696, 698,
+ 699, 701, 247, 703, 248, 707, 702, 245, 704, 708,
+ 133, 134, 249, 250, 251, 252, 253, 135, 709, 710,
+ 705, 711, 136, 137, 138, 712, 713, 715, 716, 718,
+ 719, 717, 254, 962, 976, 986, 255, 423, 144, 720,
+ 723, 1010, 728, 721, 724, 256, 729, 964, 982, 987,
+ 997, 424, 732, 725, 733, 726, 843, 734, 731, 735,
+ 736, 246, 737, 738, 739, 740, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 741,
+ 742, 743, 744, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 745, 127, 359, 747, 153, 154,
+ 750, 965, 983, 988, 998, 425, 748, 129, 130, 131,
+ 133, 134, 751, 752, 753, 754, 755, 756, 757, 758,
+ 765, 767, 768, 133, 134, 769, 250, 251, 160, 253,
+ 135, 777, 32, 786, 787, 136, 137, 138, 766, 770,
+ 771, 780, 788, 789, 790, 254, 791, 792, 837, 255,
+ 793, 794, 795, 796, 797, 798, 799, 800, 256, 1,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 801, 802, 803, 805, 806, 408, 409,
+ 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
+ 420, 807, 808, 809, 811, 812, 813, 814, 421, 422,
+ 815, 819, 820, 821, 822, 842, 892, 1035, 896, 900,
+ 823, 153, 154, 824, 825, 826, 827, 828, 904, 908,
+ 932, 829, 935, 831, 939, 832, 1006, 833, 160, 839,
+ 1015, 840, 841, 1019, 1036, 1037, 1038, 1039, 1040, 1041,
+ 1042, 160, 1043, 1044, 1046, 1056, 1140, 1055, 1059, 1058,
+ 1061, 1062, 1064, 1065, 1068, 1067, 1124, 1083, 1071, 1082,
+ 1086, 1085, 1087, 1088, 1089, 1090, 1091, 1092, 1097, 1098,
+ 1099, 1102, 1103, 1104, 1111, 1113, 1121, 1129, 1142, 1128,
+ 1132, 1131, 1136, 1144, 1134, 1135, 1137, 1138, 1139, 1141,
+ 1143, 1145, 1146, 1147, 1148, 1149, 257, 1150, 1151, 365,
+ 1152, 1153, 385, 1154, 1155, 1165, 1214, 387, 388, 1215,
+ 301, 1243, 1244, 379, 1245, 1246, 399, 1220, 1247, 1208,
+ 343, 1248, 304, 403, 258, 1250, 1251, 1252, 259, 366,
+ 1253, 1229, 386, 1166, 345, 1194, 1260, 1167, 1254, 962,
+ 1261, 1257, 1256, 264, 976, 1221, 265, 1227, 986, 1222,
+ 266, 299, 1172, 964, 1264, 1173, 267, 1271, 982, 1174,
+ 1207, 1010, 987, 1263, 302, 1175, 308, 380, 997, 323,
+ 400, 1273, 1228, 1209, 1266, 344, 1258, 260, 1265, 1281,
+ 316, 261, 262, 327, 263, 1230, 1168, 1272, 346, 1283,
+ 1169, 1170, 1284, 1171, 1289, 1307, 1308, 268, 1223, 269,
+ 270, 1294, 1224, 1225, 271, 1226, 1176, 965, 1177, 1178,
+ 272, 273, 983, 1179, 274, 1295, 988, 275, 276, 1180,
+ 1181, 311, 998, 1182, 326, 1274, 1183, 1184, 1315, 277,
+ 278, 279, 280, 281, 317, 282, 283, 328, 1185, 1186,
+ 1187, 1188, 1189, 284, 1190, 1191, 285, 293, 294, 295,
+ 296, 1316, 1192, 1296, 1301, 1193, 1200, 1201, 1202, 1203,
+ 1198, 1317, 1199, 1318, 1330, 1339, 1340, 1343, 1345, 918,
+ 1349, 1371, 1302, 1351, 1372, 1373, 1377, 1381, 830, 844,
+ 680, 1303, 686, 846, 838, 1027, 1156, 1158, 1216, 1212,
+ 1259, 1213, 1241, 1242, 1249, 1160, 730, 1159, 697, 1338,
+ 1211, 1162, 357, 1161, 1163, 1304, 1311, 1164, 700, 722,
+ 1312, 1324, 1325, 1326, 1327, 1334, 1337, 1286, 1239, 1347,
+ 1341, 309, 714, 310, 324, 1024, 325, 1344, 1348, 1350,
+ 1285, 1288, 727, 1379, 1378, 1380, 1383, 1384, 1240, 1238,
+ 1287, 1342, 706, 1262, 1255, 1005, 746, 749, 1165, 845,
+ 1369, 1346, 1280, 1267, 1382, 0, 1220, 0, 0, 0,
+ 0, 0, 1208, 0, 0, 0, 0, 1282, 0, 0,
+ 1229, 1271, 1328, 0, 0, 0, 1166, 0, 1194, 0,
+ 1167, 0, 0, 0, 1221, 1273, 1227, 0, 1222, 0,
+ 0, 0, 0, 0, 0, 1172, 0, 0, 1173, 0,
+ 0, 1272, 1174, 1207, 0, 0, 0, 0, 1175, 0,
+ 0, 1228, 0, 0, 0, 0, 1209, 0, 0, 0,
+ 0, 0, 0, 0, 1230, 0, 0, 0, 0, 1168,
+ 0, 0, 0, 1169, 1170, 0, 1171, 1223, 0, 1274,
+ 0, 1224, 1225, 0, 1226, 0, 0, 0, 0, 1176,
+ 0, 1177, 1178, 0, 0, 0, 1179, 0, 0, 0,
+ 0, 0, 1180, 1181, 0, 0, 1182, 0, 0, 1183,
+ 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1185, 1186, 1187, 1188, 1189, 0, 1190, 1191, 0,
+ 0, 0, 0, 0, 0, 1192, 0, 0, 1193, 1200,
+ 1201, 1202, 1203, 1198, 0, 1199
};
const short
Dhcp6Parser::yycheck_[] =
{
- 71, 72, 73, 74, 75, 76, 16, 78, 79, 80,
- 81, 784, 73, 79, 79, 72, 73, 74, 75, 76,
- 751, 78, 79, 778, 81, 1056, 1056, 1056, 73, 1056,
- 73, 1056, 133, 648, 73, 140, 141, 78, 79, 5,
- 689, 7, 0, 9, 220, 186, 187, 188, 189, 73,
- 102, 103, 73, 702, 703, 704, 73, 73, 74, 75,
- 76, 131, 73, 110, 111, 112, 113, 7, 138, 72,
- 73, 74, 75, 76, 7, 78, 79, 79, 81, 102,
- 103, 24, 223, 73, 205, 13, 14, 73, 73, 32,
- 73, 140, 141, 16, 17, 18, 19, 20, 7, 220,
- 102, 103, 7, 73, 7, 73, 73, 24, 3, 724,
- 73, 163, 164, 8, 7, 220, 73, 73, 7, 220,
- 73, 123, 197, 73, 73, 200, 201, 202, 203, 131,
- 132, 133, 134, 135, 136, 73, 73, 73, 73, 73,
- 7, 73, 73, 166, 167, 168, 3, 74, 75, 73,
- 3, 8, 73, 73, 73, 8, 74, 75, 3, 102,
- 103, 6, 3, 80, 3, 82, 83, 8, 220, 8,
- 87, 88, 89, 3, 183, 184, 3, 3, 8, 102,
- 103, 8, 8, 11, 12, 102, 103, 15, 10, 133,
- 134, 3, 136, 21, 22, 23, 8, 220, 80, 81,
- 82, 83, 84, 85, 86, 3, 121, 122, 6, 3,
- 153, 154, 155, 156, 8, 25, 26, 27, 220, 7,
- 102, 103, 50, 51, 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, 7, 3, 220, 221, 222, 223, 8, 7,
- 79, 3, 90, 91, 92, 93, 8, 1298, 1298, 1298,
- 7, 1298, 7, 1298, 102, 103, 95, 220, 78, 3,
- 3, 109, 6, 102, 103, 8, 114, 115, 116, 117,
- 118, 119, 120, 80, 3, 123, 3, 220, 6, 8,
- 3, 8, 130, 220, 79, 124, 4, 1062, 8, 128,
- 129, 139, 3, 1044, 142, 102, 103, 1090, 150, 151,
- 152, 149, 97, 98, 99, 100, 101, 102, 103, 157,
- 158, 3, 8, 4, 162, 3, 8, 165, 220, 3,
- 8, 169, 4, 3, 8, 3, 102, 103, 8, 124,
- 8, 4, 4, 128, 143, 144, 145, 146, 147, 148,
- 4, 4, 190, 191, 192, 193, 194, 195, 3, 3,
- 3, 8, 3, 8, 24, 8, 204, 8, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 220, 4, 4, 45, 46, 47, 48, 49,
- 4, 220, 50, 51, 52, 53, 54, 55, 3, 196,
- 4, 198, 199, 8, 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 42, 43, 44,
- 80, 79, 80, 220, 190, 191, 3, 447, 448, 3,
- 8, 8, 3, 3, 8, 220, 3, 8, 8, 6,
- 3, 522, 3, 6, 102, 103, 3, 8, 529, 4,
- 4, 8, 4, 4, 220, 4, 4, 4, 4, 4,
- 541, 4, 529, 4, 545, 102, 103, 125, 126, 127,
- 541, 552, 4, 4, 541, 4, 4, 4, 545, 4,
- 4, 562, 4, 4, 4, 552, 541, 4, 541, 4,
- 4, 572, 541, 4, 4, 562, 4, 578, 4, 4,
- 4, 4, 578, 578, 4, 572, 4, 541, 4, 3,
- 541, 578, 4, 4, 541, 541, 529, 598, 4, 545,
- 541, 572, 159, 160, 161, 8, 552, 578, 541, 3,
- 220, 598, 545, 4, 4, 4, 562, 4, 4, 552,
- 4, 541, 4, 4, 4, 541, 541, 4, 541, 562,
- 4, 4, 4, 4, 221, 221, 221, 221, 4, 572,
- 220, 541, 220, 541, 541, 578, 221, 223, 541, 221,
- 221, 221, 4, 222, 541, 541, 222, 4, 541, 4,
- 222, 541, 541, 220, 223, 598, 221, 221, 221, 221,
- 4, 4, 223, 541, 541, 541, 541, 541, 222, 541,
- 541, 223, 4, 4, 223, 223, 223, 541, 545, 221,
- 541, 541, 541, 4, 4, 552, 4, 545, 4, 4,
- 223, 223, 223, 221, 552, 4, 4, 4, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 4, 4, 4, 4, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 4, 79, 80, 4,
- 4, 4, 4, 4, 4, 746, 4, 223, 749, 91,
- 92, 4, 4, 223, 4, 4, 4, 4, 4, 223,
- 102, 103, 749, 105, 106, 223, 108, 109, 223, 4,
- 223, 221, 114, 115, 116, 221, 4, 4, 221, 4,
- 4, 4, 124, 784, 785, 786, 128, 788, 221, 221,
- 4, 792, 221, 4, 221, 137, 4, 784, 785, 786,
- 787, 788, 4, 4, 4, 745, 4, 4, 4, 4,
- 4, 221, 4, 4, 223, 4, 749, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 223, 223, 4, 4, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 223, 223, 79, 4, 190, 191,
- 4, 784, 785, 786, 787, 788, 221, 4, 91, 92,
- 221, 94, 221, 96, 4, 4, 223, 223, 4, 102,
- 103, 104, 105, 106, 107, 108, 109, 4, 220, 4,
- 4, 114, 115, 116, 4, 221, 4, 3, 7, 220,
- 7, 124, 7, 7, 7, 128, 5, 130, 5, 5,
- 220, 220, 220, 5, 137, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 5,
- 220, 5, 7, 5, 220, 220, 5, 7, 5, 5,
- 5, 220, 220, 7, 7, 7, 7, 7, 7, 5,
- 7, 5, 5, 5, 220, 220, 220, 220, 7, 220,
- 220, 220, 5, 220, 220, 185, 7, 190, 191, 7,
- 7, 220, 7, 220, 220, 220, 220, 7, 7, 220,
- 7, 7, 7, 7, 7, 220, 220, 220, 220, 220,
- 220, 220, 220, 220, 4, 4, 4, 220, 4, 4,
- 4, 4, 4, 4, 4, 4, 777, 3, 6, 6,
- 3, 6, 6, 3, 6, 3, 221, 6, 3, 6,
- 6, 3, 6, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 3, 724,
- 220, 3, 6, 4, 221, 8, 6, 4, 4, 4,
- 223, 223, 221, 221, 221, 221, 1047, 221, 221, 1050,
- 4, 221, 1053, 4, 4, 1056, 1047, 1053, 1053, 4,
- 1047, 4, 4, 1050, 4, 1056, 1053, 1068, 221, 1056,
- 1071, 221, 1047, 1074, 1047, 221, 221, 221, 1047, 1050,
- 221, 1068, 1053, 1056, 1071, 1056, 4, 1056, 4, 1090,
- 221, 221, 221, 1047, 1095, 1068, 1047, 1068, 1099, 1068,
- 1047, 1047, 1056, 1090, 4, 1056, 1047, 1108, 1095, 1056,
- 1056, 1112, 1099, 223, 1047, 1056, 1117, 1050, 1105, 1120,
- 1053, 1108, 1068, 1056, 221, 1071, 221, 1047, 4, 223,
- 1117, 1047, 1047, 1120, 1047, 1068, 1056, 1108, 1071, 4,
- 1056, 1056, 4, 1056, 3, 223, 6, 1047, 1068, 1047,
- 1047, 4, 1068, 1068, 1047, 1068, 1056, 1090, 1056, 1056,
- 1047, 1047, 1095, 1056, 1047, 221, 1099, 1047, 1047, 1056,
- 1056, 1117, 1105, 1056, 1120, 1108, 1056, 1056, 220, 1047,
- 1047, 1047, 1047, 1047, 1117, 1047, 1047, 1120, 1056, 1056,
- 1056, 1056, 1056, 1047, 1056, 1056, 1047, 1047, 1047, 1056,
- 8, 8, 1056, 220, 4, 1056, 1056, 1056, 1056, 8,
- 3, 8, 4, 4, 4, 4, 4, 746, 5, 220,
- 4, 7, 4, 4, 4, 4, 737, 220, 522, 749,
- 1046, 1041, 832, 1059, 1066, 1062, 529, 1074, 1076, 1095,
- 581, 1083, 1049, 1047, 220, 1058, 1298, 77, 572, 541,
- 1052, 220, 220, 578, 1050, 1055, 220, 220, 220, 220,
- 1117, 220, 220, 1120, 220, 220, 223, 1053, 221, 1117,
- 1122, 220, 1120, 220, 220, 223, 1119, 221, 1073, 1120,
- 221, 220, 220, 1117, 562, 802, 1071, 1069, 1306, 1090,
- 1099, 1105, 788, 602, 598, 1321, 1344, 1298, 1109, 1364,
- -1, -1, -1, -1, 1112, 1306, -1, 1298, -1, 545,
- 748, 1298, -1, -1, -1, 1255, -1, -1, 552, 1306,
- 1321, -1, -1, -1, -1, 1298, -1, 1298, -1, 1298,
- -1, -1, -1, 1306, 1321, 1306, -1, 1306, -1, -1,
- -1, -1, -1, -1, 1298, -1, -1, 1298, -1, -1,
- 1321, 1298, 1298, -1, -1, -1, -1, 1298, -1, -1,
- 1306, -1, -1, -1, -1, 1298, -1, -1, -1, -1,
- -1, -1, -1, 1306, -1, -1, -1, -1, 1298, -1,
- -1, -1, 1298, 1298, -1, 1298, 1306, -1, 1321, -1,
- 1306, 1306, -1, 1306, -1, -1, -1, -1, 1298, -1,
- 1298, 1298, -1, -1, -1, 1298, -1, -1, -1, -1,
- -1, 1298, 1298, -1, -1, 1298, -1, -1, 1298, 1298,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 1298, 1298, 1298, 1298, 1298, -1, 1298, 1298, -1, -1,
- -1, 1298, -1, -1, 1298, -1, -1, 1298, 1298, 1298,
- 1298
+ 71, 72, 73, 74, 75, 76, 794, 78, 79, 80,
+ 81, 756, 16, 79, 79, 72, 73, 74, 75, 76,
+ 788, 78, 79, 1066, 81, 1066, 1066, 1066, 73, 1066,
+ 73, 5, 653, 7, 73, 9, 210, 78, 79, 16,
+ 17, 18, 19, 20, 225, 138, 0, 107, 108, 73,
+ 10, 225, 73, 145, 146, 7, 73, 73, 74, 75,
+ 76, 136, 73, 7, 79, 107, 108, 694, 143, 72,
+ 73, 74, 75, 76, 3, 78, 79, 7, 81, 8,
+ 707, 708, 709, 73, 7, 100, 78, 73, 73, 4,
+ 73, 3, 107, 108, 145, 146, 8, 191, 192, 193,
+ 194, 7, 3, 73, 3, 73, 73, 8, 729, 8,
+ 73, 171, 172, 173, 129, 7, 73, 73, 133, 134,
+ 73, 7, 3, 73, 73, 6, 168, 169, 13, 14,
+ 107, 108, 225, 225, 228, 73, 73, 73, 73, 73,
+ 3, 73, 73, 3, 3, 8, 79, 6, 8, 73,
+ 188, 189, 73, 73, 73, 73, 73, 3, 74, 75,
+ 74, 75, 8, 3, 3, 225, 7, 6, 8, 102,
+ 103, 104, 105, 106, 107, 108, 80, 11, 12, 3,
+ 3, 15, 7, 225, 8, 8, 7, 21, 22, 23,
+ 148, 149, 150, 151, 152, 153, 129, 7, 138, 139,
+ 133, 141, 202, 107, 108, 205, 206, 207, 208, 3,
+ 225, 7, 3, 6, 8, 6, 50, 51, 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, 126, 127, 225, 107,
+ 108, 225, 226, 227, 228, 7, 90, 91, 92, 93,
+ 24, 3, 3, 8, 98, 6, 1309, 24, 1309, 1309,
+ 1309, 3, 1309, 107, 108, 32, 8, 3, 3, 3,
+ 114, 3, 8, 8, 8, 119, 120, 121, 122, 123,
+ 124, 125, 225, 4, 128, 4, 4, 201, 79, 203,
+ 204, 135, 4, 4, 1072, 8, 164, 165, 166, 1054,
+ 144, 4, 1100, 147, 4, 4, 80, 3, 82, 83,
+ 154, 225, 8, 87, 88, 89, 107, 108, 162, 163,
+ 3, 3, 3, 167, 3, 8, 170, 8, 4, 8,
+ 174, 3, 3, 107, 108, 8, 8, 128, 3, 3,
+ 107, 108, 4, 8, 8, 136, 137, 138, 139, 140,
+ 141, 195, 196, 197, 198, 199, 200, 225, 4, 3,
+ 8, 3, 3, 24, 8, 209, 8, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 225, 4, 4, 45, 46, 47, 48, 49, 4,
+ 3, 158, 159, 160, 161, 8, 25, 26, 27, 50,
+ 51, 52, 53, 54, 55, 3, 94, 95, 96, 97,
+ 8, 80, 81, 82, 83, 84, 85, 86, 3, 80,
+ 3, 3, 3, 8, 4, 8, 8, 8, 79, 80,
+ 115, 116, 117, 118, 225, 4, 450, 451, 107, 108,
+ 42, 43, 44, 4, 4, 526, 155, 156, 157, 4,
+ 4, 225, 533, 4, 4, 4, 107, 108, 225, 4,
+ 4, 4, 4, 4, 545, 4, 533, 4, 549, 4,
+ 4, 4, 4, 4, 4, 556, 4, 4, 545, 130,
+ 131, 132, 549, 4, 4, 566, 4, 4, 4, 556,
+ 545, 4, 545, 4, 4, 576, 545, 4, 4, 566,
+ 8, 582, 4, 4, 4, 4, 582, 582, 4, 576,
+ 4, 545, 4, 4, 545, 582, 4, 225, 545, 545,
+ 533, 602, 4, 549, 545, 576, 4, 4, 4, 226,
+ 556, 582, 545, 226, 226, 602, 549, 226, 228, 226,
+ 566, 227, 226, 556, 4, 545, 226, 4, 226, 545,
+ 545, 226, 545, 566, 228, 4, 225, 227, 4, 227,
+ 226, 228, 4, 576, 225, 545, 226, 545, 545, 582,
+ 226, 228, 545, 228, 225, 228, 228, 227, 545, 545,
+ 4, 4, 545, 226, 4, 545, 545, 226, 4, 602,
+ 4, 4, 4, 4, 4, 228, 228, 545, 545, 545,
+ 545, 545, 228, 545, 545, 4, 4, 4, 4, 4,
+ 4, 545, 4, 4, 545, 545, 545, 545, 545, 4,
+ 4, 4, 4, 549, 4, 549, 4, 4, 228, 228,
+ 556, 228, 556, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 4, 4, 4, 228,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 228, 226, 79, 226, 4, 4, 4, 4, 4, 226,
+ 751, 4, 228, 754, 91, 92, 93, 4, 4, 4,
+ 226, 4, 99, 4, 101, 4, 226, 754, 226, 4,
+ 107, 108, 109, 110, 111, 112, 113, 114, 4, 4,
+ 226, 4, 119, 120, 121, 4, 4, 4, 4, 4,
+ 4, 226, 129, 794, 795, 796, 133, 798, 135, 4,
+ 4, 802, 4, 228, 228, 142, 4, 794, 795, 796,
+ 797, 798, 4, 228, 4, 228, 750, 226, 228, 4,
+ 226, 754, 226, 4, 4, 228, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 228,
+ 4, 4, 4, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 4, 79, 80, 4, 195, 196,
+ 4, 794, 795, 796, 797, 798, 226, 91, 92, 93,
+ 107, 108, 7, 225, 7, 7, 7, 7, 5, 225,
+ 225, 5, 5, 107, 108, 5, 110, 111, 225, 113,
+ 114, 5, 7, 5, 5, 119, 120, 121, 225, 225,
+ 225, 225, 5, 7, 5, 129, 5, 5, 190, 133,
+ 7, 7, 7, 7, 7, 7, 225, 225, 142, 211,
+ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
+ 222, 223, 224, 5, 7, 5, 5, 5, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 225, 225, 225, 225, 7, 225, 225, 195, 196,
+ 225, 225, 225, 225, 225, 5, 7, 4, 7, 7,
+ 225, 195, 196, 225, 225, 225, 225, 225, 7, 7,
+ 7, 225, 7, 225, 7, 225, 7, 225, 225, 225,
+ 7, 225, 225, 7, 4, 4, 4, 4, 4, 4,
+ 4, 225, 4, 4, 4, 3, 226, 6, 3, 6,
+ 6, 3, 6, 3, 3, 6, 225, 3, 6, 6,
+ 3, 6, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 3, 226, 6,
+ 3, 6, 4, 226, 8, 6, 4, 4, 4, 228,
+ 228, 226, 226, 226, 226, 226, 1057, 4, 226, 1060,
+ 4, 4, 1063, 4, 4, 1066, 4, 1063, 1063, 4,
+ 1057, 226, 226, 1060, 226, 226, 1063, 1078, 226, 1066,
+ 1081, 226, 1057, 1084, 1057, 4, 4, 226, 1057, 1060,
+ 226, 1078, 1063, 1066, 1081, 1066, 4, 1066, 226, 1100,
+ 4, 226, 228, 1057, 1105, 1078, 1057, 1078, 1109, 1078,
+ 1057, 1057, 1066, 1100, 4, 1066, 1057, 1118, 1105, 1066,
+ 1066, 1122, 1109, 228, 1057, 1066, 1127, 1060, 1115, 1130,
+ 1063, 1118, 1078, 1066, 4, 1081, 226, 1057, 226, 228,
+ 1127, 1057, 1057, 1130, 1057, 1078, 1066, 1118, 1081, 6,
+ 1066, 1066, 3, 1066, 4, 8, 8, 1057, 1078, 1057,
+ 1057, 225, 1078, 1078, 1057, 1078, 1066, 1100, 1066, 1066,
+ 1057, 1057, 1105, 1066, 1057, 225, 1109, 1057, 1057, 1066,
+ 1066, 1127, 1115, 1066, 1130, 1118, 1066, 1066, 4, 1057,
+ 1057, 1057, 1057, 1057, 1127, 1057, 1057, 1130, 1066, 1066,
+ 1066, 1066, 1066, 1057, 1066, 1066, 1057, 1057, 1057, 1057,
+ 1057, 8, 1066, 225, 225, 1066, 1066, 1066, 1066, 1066,
+ 1066, 3, 1066, 8, 4, 4, 4, 4, 4, 787,
+ 5, 4, 225, 7, 4, 4, 4, 4, 729, 751,
+ 526, 225, 533, 754, 742, 842, 1051, 1056, 1076, 1069,
+ 1105, 1072, 1084, 1086, 1093, 1059, 585, 1057, 545, 1309,
+ 1068, 1062, 77, 1060, 1063, 225, 225, 1065, 549, 576,
+ 225, 225, 225, 225, 225, 225, 225, 1129, 1081, 225,
+ 228, 1127, 566, 1127, 1130, 812, 1130, 226, 225, 225,
+ 1127, 1132, 582, 226, 228, 226, 225, 225, 1083, 1079,
+ 1130, 1317, 556, 1109, 1100, 798, 602, 606, 1309, 753,
+ 1355, 1332, 1119, 1115, 1375, -1, 1317, -1, -1, -1,
+ -1, -1, 1309, -1, -1, -1, -1, 1122, -1, -1,
+ 1317, 1332, 1266, -1, -1, -1, 1309, -1, 1309, -1,
+ 1309, -1, -1, -1, 1317, 1332, 1317, -1, 1317, -1,
+ -1, -1, -1, -1, -1, 1309, -1, -1, 1309, -1,
+ -1, 1332, 1309, 1309, -1, -1, -1, -1, 1309, -1,
+ -1, 1317, -1, -1, -1, -1, 1309, -1, -1, -1,
+ -1, -1, -1, -1, 1317, -1, -1, -1, -1, 1309,
+ -1, -1, -1, 1309, 1309, -1, 1309, 1317, -1, 1332,
+ -1, 1317, 1317, -1, 1317, -1, -1, -1, -1, 1309,
+ -1, 1309, 1309, -1, -1, -1, 1309, -1, -1, -1,
+ -1, -1, 1309, 1309, -1, -1, 1309, -1, -1, 1309,
+ 1309, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 1309, 1309, 1309, 1309, 1309, -1, 1309, 1309, -1,
+ -1, -1, -1, -1, -1, 1309, -1, -1, 1309, 1309,
+ 1309, 1309, 1309, 1309, -1, 1309
};
const short
Dhcp6Parser::yystos_[] =
{
- 0, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 225, 226, 227, 228, 229,
- 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
- 0, 5, 7, 9, 220, 221, 222, 223, 240, 241,
- 242, 247, 7, 256, 7, 261, 7, 313, 7, 427,
- 7, 508, 7, 525, 7, 542, 7, 459, 7, 465,
- 7, 489, 7, 403, 7, 613, 7, 644, 248, 243,
- 257, 262, 314, 428, 509, 526, 543, 460, 466, 490,
- 404, 614, 645, 240, 249, 250, 220, 245, 246, 10,
- 258, 260, 11, 12, 15, 21, 22, 23, 50, 51,
+ 0, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 230, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
+ 0, 5, 7, 9, 225, 226, 227, 228, 245, 246,
+ 247, 252, 7, 261, 7, 266, 7, 321, 7, 435,
+ 7, 516, 7, 533, 7, 550, 7, 467, 7, 473,
+ 7, 497, 7, 411, 7, 621, 7, 652, 253, 248,
+ 262, 267, 322, 436, 517, 534, 551, 468, 474, 498,
+ 412, 622, 653, 245, 254, 255, 225, 250, 251, 10,
+ 263, 265, 11, 12, 15, 21, 22, 23, 50, 51,
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, 90, 91,
- 92, 93, 102, 103, 109, 114, 115, 116, 117, 118,
- 119, 120, 123, 130, 139, 142, 149, 157, 158, 162,
- 165, 169, 190, 191, 192, 193, 194, 195, 204, 220,
- 255, 263, 264, 265, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 287, 289, 291, 292, 293, 294, 296, 298,
- 299, 300, 301, 303, 304, 306, 308, 309, 310, 311,
- 323, 325, 327, 368, 376, 382, 388, 390, 397, 411,
- 421, 441, 442, 443, 444, 449, 457, 483, 515, 517,
- 536, 566, 580, 592, 593, 601, 611, 642, 651, 675,
- 16, 17, 18, 19, 20, 255, 315, 316, 317, 319,
- 320, 321, 322, 515, 517, 94, 96, 104, 105, 106,
- 107, 108, 124, 128, 137, 255, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 281,
- 282, 283, 284, 287, 289, 291, 292, 293, 294, 296,
- 298, 304, 306, 429, 430, 431, 433, 435, 437, 439,
- 441, 442, 443, 444, 447, 448, 483, 502, 515, 517,
- 519, 536, 561, 95, 129, 255, 437, 439, 483, 510,
- 511, 512, 514, 515, 517, 97, 98, 99, 100, 101,
- 255, 437, 439, 483, 515, 517, 527, 528, 529, 531,
- 532, 534, 535, 123, 131, 132, 133, 134, 135, 136,
- 255, 483, 515, 517, 544, 545, 546, 547, 549, 551,
- 553, 555, 557, 559, 457, 24, 80, 82, 83, 87,
- 88, 89, 255, 345, 467, 468, 469, 470, 471, 472,
- 473, 475, 477, 479, 480, 482, 515, 517, 81, 84,
- 85, 86, 255, 345, 471, 477, 491, 492, 493, 494,
- 495, 497, 498, 499, 500, 501, 515, 517, 140, 141,
- 255, 405, 406, 407, 409, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 190, 191,
- 255, 515, 517, 615, 616, 617, 618, 620, 622, 623,
- 625, 626, 627, 630, 632, 633, 634, 636, 638, 640,
- 13, 14, 646, 647, 648, 650, 6, 3, 4, 8,
- 3, 259, 3, 8, 266, 643, 312, 324, 326, 328,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 302, 4, 4, 4, 4, 4,
- 285, 288, 290, 4, 4, 4, 4, 422, 458, 484,
- 4, 305, 307, 450, 516, 518, 445, 4, 4, 4,
- 377, 389, 383, 369, 567, 537, 398, 412, 581, 4,
- 391, 594, 602, 612, 295, 297, 4, 4, 4, 652,
- 676, 4, 3, 8, 318, 4, 4, 4, 4, 3,
- 8, 503, 520, 432, 434, 436, 4, 4, 440, 438,
- 562, 3, 8, 513, 4, 3, 8, 530, 4, 533,
- 4, 4, 3, 8, 560, 548, 550, 552, 554, 556,
- 558, 8, 3, 8, 474, 346, 4, 478, 476, 481,
- 4, 8, 3, 496, 4, 4, 4, 8, 3, 408,
- 410, 3, 8, 4, 619, 621, 4, 624, 4, 4,
- 628, 631, 4, 4, 635, 637, 639, 641, 3, 8,
- 649, 4, 3, 8, 240, 240, 220, 4, 4, 4,
- 4, 4, 4, 4, 221, 221, 221, 221, 221, 221,
- 221, 221, 223, 222, 222, 222, 221, 221, 4, 221,
- 221, 223, 223, 223, 4, 4, 4, 223, 223, 222,
- 223, 4, 4, 4, 221, 4, 4, 4, 4, 4,
- 4, 223, 223, 223, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 221, 4, 4, 4, 4, 4, 4,
- 223, 223, 223, 4, 4, 264, 4, 223, 223, 221,
- 221, 316, 4, 4, 4, 4, 4, 221, 223, 4,
- 4, 4, 430, 4, 221, 511, 4, 221, 4, 221,
- 221, 528, 4, 4, 4, 4, 4, 4, 4, 546,
- 4, 4, 221, 4, 4, 4, 223, 469, 4, 223,
- 223, 223, 493, 4, 4, 406, 223, 4, 4, 221,
- 4, 221, 221, 4, 4, 223, 223, 4, 4, 4,
- 4, 616, 4, 221, 647, 4, 7, 220, 7, 7,
- 7, 7, 5, 220, 186, 187, 188, 189, 223, 286,
- 220, 220, 5, 5, 5, 220, 220, 5, 242, 244,
- 220, 110, 111, 112, 113, 446, 5, 5, 5, 7,
- 5, 5, 5, 7, 7, 7, 7, 7, 7, 220,
- 220, 5, 7, 5, 251, 5, 5, 220, 220, 220,
- 251, 220, 7, 220, 220, 220, 251, 251, 251, 220,
- 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
- 244, 220, 220, 220, 183, 184, 629, 185, 286, 220,
- 220, 220, 5, 240, 263, 646, 315, 24, 28, 29,
+ 92, 93, 98, 107, 108, 114, 119, 120, 121, 122,
+ 123, 124, 125, 128, 135, 144, 147, 154, 162, 163,
+ 167, 170, 174, 195, 196, 197, 198, 199, 200, 209,
+ 225, 260, 268, 269, 270, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 292, 294, 296, 297, 298, 301, 302,
+ 304, 306, 307, 308, 309, 311, 312, 314, 316, 317,
+ 318, 319, 331, 333, 335, 376, 384, 390, 396, 398,
+ 405, 419, 429, 449, 450, 451, 452, 457, 465, 491,
+ 523, 525, 544, 574, 588, 600, 601, 609, 619, 650,
+ 659, 683, 16, 17, 18, 19, 20, 260, 323, 324,
+ 325, 327, 328, 329, 330, 523, 525, 99, 101, 109,
+ 110, 111, 112, 113, 129, 133, 142, 260, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 286, 287, 288, 289, 292, 294, 296, 297, 298,
+ 301, 302, 304, 306, 312, 314, 437, 438, 439, 441,
+ 443, 445, 447, 449, 450, 451, 452, 455, 456, 491,
+ 510, 523, 525, 527, 544, 569, 100, 134, 260, 445,
+ 447, 491, 518, 519, 520, 522, 523, 525, 102, 103,
+ 104, 105, 106, 260, 445, 447, 491, 523, 525, 535,
+ 536, 537, 539, 540, 542, 543, 128, 136, 137, 138,
+ 139, 140, 141, 260, 491, 523, 525, 552, 553, 554,
+ 555, 557, 559, 561, 563, 565, 567, 465, 24, 80,
+ 82, 83, 87, 88, 89, 260, 353, 475, 476, 477,
+ 478, 479, 480, 481, 483, 485, 487, 488, 490, 523,
+ 525, 81, 84, 85, 86, 260, 353, 479, 485, 499,
+ 500, 501, 502, 503, 505, 506, 507, 508, 509, 523,
+ 525, 145, 146, 260, 413, 414, 415, 417, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 195, 196, 260, 523, 525, 623, 624, 625, 626,
+ 628, 630, 631, 633, 634, 635, 638, 640, 641, 642,
+ 644, 646, 648, 13, 14, 654, 655, 656, 658, 6,
+ 3, 4, 8, 3, 264, 3, 8, 271, 651, 320,
+ 332, 334, 336, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 310, 4, 4,
+ 4, 4, 4, 290, 293, 295, 4, 4, 4, 4,
+ 430, 466, 492, 4, 313, 315, 299, 458, 524, 526,
+ 453, 4, 4, 4, 385, 397, 391, 377, 575, 545,
+ 406, 420, 589, 4, 399, 602, 610, 620, 303, 305,
+ 4, 4, 4, 660, 684, 4, 3, 8, 326, 4,
+ 4, 4, 4, 3, 8, 511, 528, 440, 442, 444,
+ 4, 4, 448, 446, 570, 3, 8, 521, 4, 3,
+ 8, 538, 4, 541, 4, 4, 3, 8, 568, 556,
+ 558, 560, 562, 564, 566, 8, 3, 8, 482, 354,
+ 4, 486, 484, 489, 4, 8, 3, 504, 4, 4,
+ 4, 8, 3, 416, 418, 3, 8, 4, 627, 629,
+ 4, 632, 4, 4, 636, 639, 4, 4, 643, 645,
+ 647, 649, 3, 8, 657, 4, 3, 8, 245, 245,
+ 225, 4, 4, 4, 4, 4, 4, 4, 226, 226,
+ 226, 226, 226, 226, 226, 226, 228, 227, 227, 227,
+ 226, 226, 4, 226, 226, 228, 228, 228, 4, 4,
+ 4, 228, 228, 227, 228, 4, 4, 4, 226, 4,
+ 4, 4, 4, 4, 4, 4, 228, 228, 228, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 226, 4,
+ 4, 4, 4, 4, 4, 228, 228, 228, 4, 4,
+ 269, 4, 228, 228, 226, 226, 324, 4, 4, 4,
+ 4, 4, 226, 228, 4, 4, 4, 438, 4, 226,
+ 519, 4, 226, 4, 226, 226, 536, 4, 4, 4,
+ 4, 4, 4, 4, 554, 4, 4, 226, 4, 4,
+ 4, 228, 477, 4, 228, 228, 228, 501, 4, 4,
+ 414, 228, 4, 4, 226, 4, 226, 226, 4, 4,
+ 228, 228, 4, 4, 4, 4, 624, 4, 226, 655,
+ 4, 7, 225, 7, 7, 7, 7, 5, 225, 191,
+ 192, 193, 194, 228, 291, 225, 225, 5, 5, 5,
+ 225, 225, 94, 95, 96, 97, 300, 5, 247, 249,
+ 225, 115, 116, 117, 118, 454, 5, 5, 5, 7,
+ 5, 5, 5, 7, 7, 7, 7, 7, 7, 225,
+ 225, 5, 7, 5, 256, 5, 5, 225, 225, 225,
+ 256, 225, 7, 225, 225, 225, 256, 256, 256, 225,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 249, 225, 225, 225, 188, 189, 637, 190, 291, 225,
+ 225, 225, 5, 245, 268, 654, 323, 24, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 45, 46, 47, 48, 49, 255, 333, 334,
- 335, 338, 340, 342, 344, 345, 347, 348, 349, 350,
- 351, 352, 353, 354, 355, 358, 359, 360, 362, 364,
- 366, 333, 7, 329, 330, 331, 7, 423, 424, 425,
- 7, 461, 462, 463, 7, 485, 486, 487, 7, 451,
- 452, 453, 133, 220, 378, 379, 380, 381, 249, 134,
- 136, 380, 384, 385, 386, 387, 121, 122, 370, 371,
- 372, 374, 7, 568, 569, 7, 538, 539, 540, 7,
- 399, 400, 401, 143, 144, 145, 146, 147, 148, 413,
- 414, 415, 416, 417, 418, 419, 420, 24, 153, 154,
- 155, 156, 255, 347, 515, 517, 582, 583, 584, 587,
- 588, 590, 591, 159, 160, 161, 255, 392, 393, 394,
- 395, 396, 515, 517, 163, 164, 255, 515, 517, 595,
- 596, 597, 599, 166, 167, 168, 220, 515, 517, 603,
- 604, 605, 606, 608, 609, 615, 7, 653, 654, 205,
- 255, 677, 678, 679, 252, 7, 504, 505, 506, 7,
- 521, 522, 523, 138, 547, 563, 564, 329, 8, 8,
- 8, 336, 339, 341, 343, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 356, 4, 361, 363, 365,
- 367, 3, 8, 8, 332, 6, 3, 426, 6, 3,
- 464, 6, 3, 488, 6, 3, 454, 6, 3, 3,
- 6, 6, 3, 6, 373, 375, 3, 8, 570, 3,
- 6, 541, 6, 3, 402, 6, 3, 4, 4, 4,
- 4, 4, 4, 3, 8, 585, 589, 4, 4, 4,
- 3, 8, 4, 4, 4, 3, 8, 598, 600, 3,
- 8, 4, 607, 4, 610, 3, 8, 8, 655, 3,
- 6, 4, 3, 8, 220, 253, 254, 507, 6, 3,
- 524, 6, 3, 565, 8, 6, 4, 4, 4, 4,
- 221, 223, 221, 223, 221, 221, 221, 221, 221, 221,
- 4, 221, 4, 4, 4, 4, 334, 333, 331, 429,
- 425, 467, 463, 491, 487, 255, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 281,
- 282, 283, 284, 287, 289, 291, 292, 293, 294, 296,
- 298, 304, 306, 345, 421, 433, 435, 437, 439, 441,
- 442, 443, 444, 448, 455, 456, 483, 515, 517, 561,
- 453, 379, 385, 4, 4, 371, 125, 126, 127, 255,
- 267, 268, 269, 270, 271, 272, 345, 483, 515, 517,
- 571, 572, 573, 574, 575, 577, 579, 569, 544, 540,
- 405, 401, 221, 221, 221, 221, 221, 221, 414, 4,
- 4, 221, 221, 221, 583, 223, 221, 221, 393, 4,
- 4, 596, 223, 4, 221, 4, 604, 196, 198, 199,
- 255, 345, 515, 517, 656, 657, 658, 659, 661, 654,
- 223, 678, 6, 3, 510, 506, 527, 523, 4, 25,
- 26, 27, 337, 220, 220, 220, 42, 43, 44, 357,
- 220, 220, 220, 220, 8, 8, 8, 8, 3, 8,
- 220, 220, 576, 578, 4, 8, 3, 8, 8, 150,
- 151, 152, 586, 220, 220, 220, 220, 240, 662, 4,
- 660, 3, 8, 220, 8, 8, 220, 456, 4, 4,
- 223, 573, 4, 221, 4, 657, 220, 220, 5, 220,
- 7, 663, 664, 665, 3, 6, 197, 200, 201, 202,
- 203, 666, 667, 668, 670, 671, 672, 673, 664, 669,
- 4, 4, 4, 674, 3, 8, 4, 223, 221, 221,
- 4, 667, 220, 220
+ 40, 41, 45, 46, 47, 48, 49, 260, 341, 342,
+ 343, 346, 348, 350, 352, 353, 355, 356, 357, 358,
+ 359, 360, 361, 362, 363, 366, 367, 368, 370, 372,
+ 374, 341, 7, 337, 338, 339, 7, 431, 432, 433,
+ 7, 469, 470, 471, 7, 493, 494, 495, 7, 459,
+ 460, 461, 138, 225, 386, 387, 388, 389, 254, 139,
+ 141, 388, 392, 393, 394, 395, 126, 127, 378, 379,
+ 380, 382, 7, 576, 577, 7, 546, 547, 548, 7,
+ 407, 408, 409, 148, 149, 150, 151, 152, 153, 421,
+ 422, 423, 424, 425, 426, 427, 428, 24, 158, 159,
+ 160, 161, 260, 355, 523, 525, 590, 591, 592, 595,
+ 596, 598, 599, 164, 165, 166, 260, 400, 401, 402,
+ 403, 404, 523, 525, 168, 169, 260, 523, 525, 603,
+ 604, 605, 607, 171, 172, 173, 225, 523, 525, 611,
+ 612, 613, 614, 616, 617, 623, 7, 661, 662, 210,
+ 260, 685, 686, 687, 257, 7, 512, 513, 514, 7,
+ 529, 530, 531, 143, 555, 571, 572, 337, 8, 8,
+ 8, 344, 347, 349, 351, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 364, 4, 369, 371, 373,
+ 375, 3, 8, 8, 340, 6, 3, 434, 6, 3,
+ 472, 6, 3, 496, 6, 3, 462, 6, 3, 3,
+ 6, 6, 3, 6, 381, 383, 3, 8, 578, 3,
+ 6, 549, 6, 3, 410, 6, 3, 4, 4, 4,
+ 4, 4, 4, 3, 8, 593, 597, 4, 4, 4,
+ 3, 8, 4, 4, 4, 3, 8, 606, 608, 3,
+ 8, 4, 615, 4, 618, 3, 8, 8, 663, 3,
+ 6, 4, 3, 8, 225, 258, 259, 515, 6, 3,
+ 532, 6, 3, 573, 8, 6, 4, 4, 4, 4,
+ 226, 228, 226, 228, 226, 226, 226, 226, 226, 226,
+ 4, 226, 4, 4, 4, 4, 342, 341, 339, 437,
+ 433, 475, 471, 499, 495, 260, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 286,
+ 287, 288, 289, 292, 294, 296, 297, 298, 301, 302,
+ 304, 306, 312, 314, 353, 429, 441, 443, 445, 447,
+ 449, 450, 451, 452, 456, 463, 464, 491, 523, 525,
+ 569, 461, 387, 393, 4, 4, 379, 130, 131, 132,
+ 260, 272, 273, 274, 275, 276, 277, 353, 491, 523,
+ 525, 579, 580, 581, 582, 583, 585, 587, 577, 552,
+ 548, 413, 409, 226, 226, 226, 226, 226, 226, 422,
+ 4, 4, 226, 226, 226, 591, 228, 226, 226, 401,
+ 4, 4, 604, 228, 4, 226, 4, 612, 201, 203,
+ 204, 260, 353, 523, 525, 664, 665, 666, 667, 669,
+ 662, 228, 686, 6, 3, 518, 514, 535, 531, 4,
+ 25, 26, 27, 345, 225, 225, 225, 42, 43, 44,
+ 365, 225, 225, 225, 225, 8, 8, 8, 8, 3,
+ 8, 225, 225, 584, 586, 4, 8, 3, 8, 8,
+ 155, 156, 157, 594, 225, 225, 225, 225, 245, 670,
+ 4, 668, 3, 8, 225, 8, 8, 225, 464, 4,
+ 4, 228, 581, 4, 226, 4, 665, 225, 225, 5,
+ 225, 7, 671, 672, 673, 3, 6, 202, 205, 206,
+ 207, 208, 674, 675, 676, 678, 679, 680, 681, 672,
+ 677, 4, 4, 4, 682, 3, 8, 4, 228, 226,
+ 226, 4, 675, 225, 225
};
const short
Dhcp6Parser::yyr1_[] =
{
- 0, 224, 226, 225, 227, 225, 228, 225, 229, 225,
- 230, 225, 231, 225, 232, 225, 233, 225, 234, 225,
- 235, 225, 236, 225, 237, 225, 238, 225, 239, 225,
- 240, 240, 240, 240, 240, 240, 240, 241, 243, 242,
- 244, 245, 245, 246, 246, 246, 248, 247, 249, 249,
- 250, 250, 250, 252, 251, 253, 253, 254, 254, 254,
- 255, 257, 256, 259, 258, 258, 260, 262, 261, 263,
- 263, 263, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 266, 265, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 285,
- 284, 286, 286, 286, 286, 286, 288, 287, 290, 289,
- 291, 292, 293, 295, 294, 297, 296, 298, 299, 300,
- 302, 301, 303, 305, 304, 307, 306, 308, 309, 310,
- 312, 311, 314, 313, 315, 315, 315, 316, 316, 316,
- 316, 316, 316, 316, 316, 318, 317, 319, 320, 321,
- 322, 324, 323, 326, 325, 328, 327, 329, 329, 330,
- 330, 330, 332, 331, 333, 333, 333, 334, 334, 334,
- 334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
- 334, 334, 334, 334, 334, 334, 334, 334, 334, 336,
- 335, 337, 337, 337, 339, 338, 341, 340, 343, 342,
- 344, 346, 345, 347, 348, 349, 350, 351, 352, 353,
- 354, 356, 355, 357, 357, 357, 358, 359, 361, 360,
- 363, 362, 365, 364, 367, 366, 369, 368, 370, 370,
- 370, 371, 371, 373, 372, 375, 374, 377, 376, 378,
- 378, 378, 379, 379, 380, 381, 383, 382, 384, 384,
- 384, 385, 385, 385, 386, 387, 389, 388, 391, 390,
- 392, 392, 392, 393, 393, 393, 393, 393, 393, 394,
- 395, 396, 398, 397, 399, 399, 400, 400, 400, 402,
- 401, 404, 403, 405, 405, 405, 405, 406, 406, 408,
- 407, 410, 409, 412, 411, 413, 413, 413, 414, 414,
- 414, 414, 414, 414, 415, 416, 417, 418, 419, 420,
- 422, 421, 423, 423, 424, 424, 424, 426, 425, 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, 430, 430, 430, 430, 430, 430,
- 432, 431, 434, 433, 436, 435, 438, 437, 440, 439,
- 441, 442, 443, 445, 444, 446, 446, 446, 446, 447,
- 448, 450, 449, 451, 451, 452, 452, 452, 454, 453,
- 455, 455, 455, 456, 456, 456, 456, 456, 456, 456,
- 456, 456, 456, 456, 456, 456, 456, 456, 456, 456,
- 456, 456, 456, 456, 456, 456, 456, 456, 456, 456,
- 456, 456, 456, 456, 456, 456, 456, 456, 456, 456,
- 456, 456, 456, 456, 456, 456, 458, 457, 460, 459,
- 461, 461, 462, 462, 462, 464, 463, 466, 465, 467,
- 467, 468, 468, 468, 469, 469, 469, 469, 469, 469,
- 469, 469, 469, 469, 470, 471, 472, 474, 473, 476,
- 475, 478, 477, 479, 481, 480, 482, 484, 483, 485,
- 485, 486, 486, 486, 488, 487, 490, 489, 491, 491,
- 492, 492, 492, 493, 493, 493, 493, 493, 493, 493,
- 493, 493, 493, 494, 496, 495, 497, 498, 499, 500,
- 501, 503, 502, 504, 504, 505, 505, 505, 507, 506,
- 509, 508, 510, 510, 510, 511, 511, 511, 511, 511,
- 511, 511, 511, 513, 512, 514, 516, 515, 518, 517,
- 520, 519, 521, 521, 522, 522, 522, 524, 523, 526,
- 525, 527, 527, 527, 528, 528, 528, 528, 528, 528,
- 528, 528, 528, 528, 528, 530, 529, 531, 533, 532,
- 534, 535, 537, 536, 538, 538, 539, 539, 539, 541,
- 540, 543, 542, 544, 544, 545, 545, 545, 546, 546,
- 546, 546, 546, 546, 546, 546, 546, 546, 546, 548,
- 547, 550, 549, 552, 551, 554, 553, 556, 555, 558,
- 557, 560, 559, 562, 561, 563, 563, 565, 564, 567,
- 566, 568, 568, 568, 570, 569, 571, 571, 572, 572,
- 572, 573, 573, 573, 573, 573, 573, 573, 573, 573,
- 573, 573, 573, 573, 573, 574, 576, 575, 578, 577,
- 579, 581, 580, 582, 582, 582, 583, 583, 583, 583,
- 583, 583, 583, 583, 583, 585, 584, 586, 586, 586,
- 587, 589, 588, 590, 591, 592, 594, 593, 595, 595,
- 595, 596, 596, 596, 596, 596, 598, 597, 600, 599,
- 602, 601, 603, 603, 603, 604, 604, 604, 604, 604,
- 604, 605, 607, 606, 608, 610, 609, 612, 611, 614,
- 613, 615, 615, 615, 616, 616, 616, 616, 616, 616,
- 616, 616, 616, 616, 616, 616, 616, 616, 616, 616,
- 616, 616, 617, 619, 618, 621, 620, 622, 624, 623,
- 625, 626, 628, 627, 629, 629, 631, 630, 632, 633,
- 635, 634, 637, 636, 639, 638, 641, 640, 643, 642,
- 645, 644, 646, 646, 646, 647, 647, 649, 648, 650,
- 652, 651, 653, 653, 653, 655, 654, 656, 656, 656,
- 657, 657, 657, 657, 657, 657, 657, 658, 660, 659,
- 662, 661, 663, 663, 663, 665, 664, 666, 666, 666,
- 667, 667, 667, 667, 667, 669, 668, 670, 671, 672,
- 674, 673, 676, 675, 677, 677, 677, 678, 678, 679
+ 0, 229, 231, 230, 232, 230, 233, 230, 234, 230,
+ 235, 230, 236, 230, 237, 230, 238, 230, 239, 230,
+ 240, 230, 241, 230, 242, 230, 243, 230, 244, 230,
+ 245, 245, 245, 245, 245, 245, 245, 246, 248, 247,
+ 249, 250, 250, 251, 251, 251, 253, 252, 254, 254,
+ 255, 255, 255, 257, 256, 258, 258, 259, 259, 259,
+ 260, 262, 261, 264, 263, 263, 265, 267, 266, 268,
+ 268, 268, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 271, 270, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 290, 289, 291, 291, 291, 291, 291, 293, 292, 295,
+ 294, 296, 297, 299, 298, 300, 300, 300, 300, 301,
+ 303, 302, 305, 304, 306, 307, 308, 310, 309, 311,
+ 313, 312, 315, 314, 316, 317, 318, 320, 319, 322,
+ 321, 323, 323, 323, 324, 324, 324, 324, 324, 324,
+ 324, 324, 326, 325, 327, 328, 329, 330, 332, 331,
+ 334, 333, 336, 335, 337, 337, 338, 338, 338, 340,
+ 339, 341, 341, 341, 342, 342, 342, 342, 342, 342,
+ 342, 342, 342, 342, 342, 342, 342, 342, 342, 342,
+ 342, 342, 342, 342, 342, 342, 344, 343, 345, 345,
+ 345, 347, 346, 349, 348, 351, 350, 352, 354, 353,
+ 355, 356, 357, 358, 359, 360, 361, 362, 364, 363,
+ 365, 365, 365, 366, 367, 369, 368, 371, 370, 373,
+ 372, 375, 374, 377, 376, 378, 378, 378, 379, 379,
+ 381, 380, 383, 382, 385, 384, 386, 386, 386, 387,
+ 387, 388, 389, 391, 390, 392, 392, 392, 393, 393,
+ 393, 394, 395, 397, 396, 399, 398, 400, 400, 400,
+ 401, 401, 401, 401, 401, 401, 402, 403, 404, 406,
+ 405, 407, 407, 408, 408, 408, 410, 409, 412, 411,
+ 413, 413, 413, 413, 414, 414, 416, 415, 418, 417,
+ 420, 419, 421, 421, 421, 422, 422, 422, 422, 422,
+ 422, 423, 424, 425, 426, 427, 428, 430, 429, 431,
+ 431, 432, 432, 432, 434, 433, 436, 435, 437, 437,
+ 437, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 438, 438, 438, 438, 438, 438, 438, 440, 439,
+ 442, 441, 444, 443, 446, 445, 448, 447, 449, 450,
+ 451, 453, 452, 454, 454, 454, 454, 455, 456, 458,
+ 457, 459, 459, 460, 460, 460, 462, 461, 463, 463,
+ 463, 464, 464, 464, 464, 464, 464, 464, 464, 464,
+ 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
+ 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
+ 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
+ 464, 464, 464, 464, 464, 466, 465, 468, 467, 469,
+ 469, 470, 470, 470, 472, 471, 474, 473, 475, 475,
+ 476, 476, 476, 477, 477, 477, 477, 477, 477, 477,
+ 477, 477, 477, 478, 479, 480, 482, 481, 484, 483,
+ 486, 485, 487, 489, 488, 490, 492, 491, 493, 493,
+ 494, 494, 494, 496, 495, 498, 497, 499, 499, 500,
+ 500, 500, 501, 501, 501, 501, 501, 501, 501, 501,
+ 501, 501, 502, 504, 503, 505, 506, 507, 508, 509,
+ 511, 510, 512, 512, 513, 513, 513, 515, 514, 517,
+ 516, 518, 518, 518, 519, 519, 519, 519, 519, 519,
+ 519, 519, 521, 520, 522, 524, 523, 526, 525, 528,
+ 527, 529, 529, 530, 530, 530, 532, 531, 534, 533,
+ 535, 535, 535, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 538, 537, 539, 541, 540, 542,
+ 543, 545, 544, 546, 546, 547, 547, 547, 549, 548,
+ 551, 550, 552, 552, 553, 553, 553, 554, 554, 554,
+ 554, 554, 554, 554, 554, 554, 554, 554, 556, 555,
+ 558, 557, 560, 559, 562, 561, 564, 563, 566, 565,
+ 568, 567, 570, 569, 571, 571, 573, 572, 575, 574,
+ 576, 576, 576, 578, 577, 579, 579, 580, 580, 580,
+ 581, 581, 581, 581, 581, 581, 581, 581, 581, 581,
+ 581, 581, 581, 581, 582, 584, 583, 586, 585, 587,
+ 589, 588, 590, 590, 590, 591, 591, 591, 591, 591,
+ 591, 591, 591, 591, 593, 592, 594, 594, 594, 595,
+ 597, 596, 598, 599, 600, 602, 601, 603, 603, 603,
+ 604, 604, 604, 604, 604, 606, 605, 608, 607, 610,
+ 609, 611, 611, 611, 612, 612, 612, 612, 612, 612,
+ 613, 615, 614, 616, 618, 617, 620, 619, 622, 621,
+ 623, 623, 623, 624, 624, 624, 624, 624, 624, 624,
+ 624, 624, 624, 624, 624, 624, 624, 624, 624, 624,
+ 624, 625, 627, 626, 629, 628, 630, 632, 631, 633,
+ 634, 636, 635, 637, 637, 639, 638, 640, 641, 643,
+ 642, 645, 644, 647, 646, 649, 648, 651, 650, 653,
+ 652, 654, 654, 654, 655, 655, 657, 656, 658, 660,
+ 659, 661, 661, 661, 663, 662, 664, 664, 664, 665,
+ 665, 665, 665, 665, 665, 665, 666, 668, 667, 670,
+ 669, 671, 671, 671, 673, 672, 674, 674, 674, 675,
+ 675, 675, 675, 675, 677, 676, 678, 679, 680, 682,
+ 681, 684, 683, 685, 685, 685, 686, 686, 687
};
const signed char
1, 1, 1, 1, 1, 1, 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, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
- 4, 1, 1, 1, 1, 1, 0, 4, 0, 4,
- 3, 3, 3, 0, 4, 0, 4, 3, 3, 3,
- 0, 4, 3, 0, 4, 0, 4, 3, 3, 3,
- 0, 6, 0, 4, 1, 3, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 4, 3, 3, 3,
- 3, 0, 6, 0, 6, 0, 6, 0, 1, 1,
- 3, 2, 0, 4, 1, 3, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 4, 1, 1, 1, 0, 4, 0, 4, 0, 4,
- 3, 0, 4, 3, 3, 3, 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, 1, 0, 4, 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,
+ 1, 0, 4, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 4, 1, 1, 1, 1, 1, 0, 4, 0,
+ 4, 3, 3, 0, 4, 1, 1, 1, 1, 3,
+ 0, 4, 0, 4, 3, 3, 3, 0, 4, 3,
+ 0, 4, 0, 4, 3, 3, 3, 0, 6, 0,
+ 4, 1, 3, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 4, 3, 3, 3, 3, 0, 6,
+ 0, 6, 0, 6, 0, 1, 1, 3, 2, 0,
4, 1, 3, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 4, 1, 1,
+ 1, 0, 4, 0, 4, 0, 4, 3, 0, 4,
+ 3, 3, 3, 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, 1,
+ 0, 4, 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,
- 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, 0, 4,
+ 0, 4, 0, 4, 0, 4, 0, 4, 3, 3,
+ 3, 0, 4, 1, 1, 1, 1, 3, 3, 0,
+ 6, 0, 1, 1, 3, 2, 0, 4, 1, 3,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 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, 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, 4, 1, 1, 3, 3,
- 3, 0, 6, 0, 1, 1, 3, 2, 0, 4,
- 0, 4, 1, 3, 2, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 4, 3, 0, 4, 0, 4,
+ 1, 1, 1, 1, 3, 1, 0, 4, 0, 4,
+ 0, 4, 1, 0, 4, 3, 0, 6, 0, 1,
+ 1, 3, 2, 0, 4, 0, 4, 0, 1, 1,
+ 3, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 4, 1, 1, 3, 3, 3,
0, 6, 0, 1, 1, 3, 2, 0, 4, 0,
4, 1, 3, 2, 1, 1, 1, 1, 1, 1,
- 1, 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, 1, 0, 4, 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,
+ 1, 1, 0, 4, 3, 0, 4, 0, 4, 0,
+ 6, 0, 1, 1, 3, 2, 0, 4, 0, 4,
+ 1, 3, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 4, 3, 0, 4, 3,
+ 3, 0, 6, 0, 1, 1, 3, 2, 0, 4,
+ 0, 4, 0, 1, 1, 3, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
+ 0, 4, 0, 4, 0, 4, 0, 4, 0, 4,
+ 0, 4, 0, 6, 1, 1, 0, 4, 0, 6,
+ 1, 3, 2, 0, 4, 0, 1, 1, 3, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 4, 0, 4, 3,
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, 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, 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
+ 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
};
"\"space\"", "\"csv-format\"", "\"always-send\"", "\"never-send\"",
"\"record-types\"", "\"encapsulate\"", "\"array\"",
"\"parked-packet-limit\"", "\"allocator\"", "\"pd-allocator\"",
- "\"shared-networks\"", "\"pools\"", "\"pool\"", "\"pd-pools\"",
- "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"",
- "\"excluded-prefix-len\"", "\"delegated-len\"", "\"user-context\"",
- "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"",
- "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"",
- "\"out-of-pool\"", "\"global\"", "\"all\"", "\"reservations-global\"",
- "\"reservations-in-subnet\"", "\"reservations-out-of-pool\"",
- "\"mac-sources\"", "\"relay-supplied-options\"",
- "\"host-reservation-identifiers\"", "\"sanity-checks\"",
- "\"lease-checks\"", "\"extended-info-checks\"", "\"client-classes\"",
- "\"require-client-classes\"", "\"test\"", "\"template-test\"",
- "\"only-if-required\"", "\"client-class\"", "\"pool-id\"",
- "\"reservations\"", "\"ip-addresses\"", "\"prefixes\"", "\"duid\"",
- "\"hw-address\"", "\"hostname\"", "\"flex-id\"", "\"relay\"",
+ "\"ddns-conflict-resolution-mode\"", "\"check-with-dhcid\"",
+ "\"no-check-with-dhcid\"", "\"check-exists-with-dhcid\"",
+ "\"no-check-without-dhcid\"", "\"shared-networks\"", "\"pools\"",
+ "\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"",
+ "\"excluded-prefix\"", "\"excluded-prefix-len\"", "\"delegated-len\"",
+ "\"user-context\"", "\"comment\"", "\"subnet\"", "\"interface\"",
+ "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
+ "\"disabled\"", "\"out-of-pool\"", "\"global\"", "\"all\"",
+ "\"reservations-global\"", "\"reservations-in-subnet\"",
+ "\"reservations-out-of-pool\"", "\"mac-sources\"",
+ "\"relay-supplied-options\"", "\"host-reservation-identifiers\"",
+ "\"sanity-checks\"", "\"lease-checks\"", "\"extended-info-checks\"",
+ "\"client-classes\"", "\"require-client-classes\"", "\"test\"",
+ "\"template-test\"", "\"only-if-required\"", "\"client-class\"",
+ "\"pool-id\"", "\"reservations\"", "\"ip-addresses\"", "\"prefixes\"",
+ "\"duid\"", "\"hw-address\"", "\"hostname\"", "\"flex-id\"", "\"relay\"",
"\"ip-address\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
"\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"",
"\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"",
"ddns_replace_client_name", "$@22", "ddns_replace_client_name_value",
"ddns_generated_prefix", "$@23", "ddns_qualifying_suffix", "$@24",
"ddns_update_on_renew", "ddns_use_conflict_resolution",
- "ddns_ttl_percent", "hostname_char_set", "$@25",
- "hostname_char_replacement", "$@26", "store_extended_info",
- "statistic_default_sample_count", "statistic_default_sample_age",
- "server_tag", "$@27", "parked_packet_limit", "allocator", "$@28",
- "pd_allocator", "$@29", "early_global_reservations_lookup",
- "ip_reservations_unique", "reservations_lookup_first",
- "interfaces_config", "$@30", "sub_interfaces6", "$@31",
- "interfaces_config_params", "interfaces_config_param", "interfaces_list",
- "$@32", "re_detect", "service_sockets_require_all",
- "service_sockets_retry_wait_time", "service_sockets_max_retries",
- "lease_database", "$@33", "hosts_database", "$@34", "hosts_databases",
- "$@35", "database_list", "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",
- "read_timeout", "write_timeout", "tcp_user_timeout",
- "reconnect_wait_time", "on_fail", "$@42", "on_fail_mode",
- "max_row_errors", "max_reconnect_tries", "trust_anchor", "$@43",
- "cert_file", "$@44", "key_file", "$@45", "cipher_list", "$@46",
- "sanity_checks", "$@47", "sanity_checks_params", "sanity_checks_param",
- "lease_checks", "$@48", "extended_info_checks", "$@49", "mac_sources",
- "$@50", "mac_sources_list", "mac_sources_value", "duid_id", "string_id",
- "host_reservation_identifiers", "$@51",
+ "ddns_conflict_resolution_mode", "$@25",
+ "ddns_conflict_resolution_mode_value", "ddns_ttl_percent",
+ "hostname_char_set", "$@26", "hostname_char_replacement", "$@27",
+ "store_extended_info", "statistic_default_sample_count",
+ "statistic_default_sample_age", "server_tag", "$@28",
+ "parked_packet_limit", "allocator", "$@29", "pd_allocator", "$@30",
+ "early_global_reservations_lookup", "ip_reservations_unique",
+ "reservations_lookup_first", "interfaces_config", "$@31",
+ "sub_interfaces6", "$@32", "interfaces_config_params",
+ "interfaces_config_param", "interfaces_list", "$@33", "re_detect",
+ "service_sockets_require_all", "service_sockets_retry_wait_time",
+ "service_sockets_max_retries", "lease_database", "$@34",
+ "hosts_database", "$@35", "hosts_databases", "$@36", "database_list",
+ "not_empty_database_list", "database", "$@37", "database_map_params",
+ "database_map_param", "database_type", "$@38", "db_type", "user", "$@39",
+ "password", "$@40", "host", "$@41", "port", "name", "$@42", "persist",
+ "lfc_interval", "readonly", "connect_timeout", "read_timeout",
+ "write_timeout", "tcp_user_timeout", "reconnect_wait_time", "on_fail",
+ "$@43", "on_fail_mode", "max_row_errors", "max_reconnect_tries",
+ "trust_anchor", "$@44", "cert_file", "$@45", "key_file", "$@46",
+ "cipher_list", "$@47", "sanity_checks", "$@48", "sanity_checks_params",
+ "sanity_checks_param", "lease_checks", "$@49", "extended_info_checks",
+ "$@50", "mac_sources", "$@51", "mac_sources_list", "mac_sources_value",
+ "duid_id", "string_id", "host_reservation_identifiers", "$@52",
"host_reservation_identifiers_list", "host_reservation_identifier",
- "hw_address_id", "flex_id", "relay_supplied_options", "$@52",
- "dhcp_multi_threading", "$@53", "multi_threading_params",
+ "hw_address_id", "flex_id", "relay_supplied_options", "$@53",
+ "dhcp_multi_threading", "$@54", "multi_threading_params",
"multi_threading_param", "enable_multi_threading", "thread_pool_size",
- "packet_queue_size", "hooks_libraries", "$@54", "hooks_libraries_list",
- "not_empty_hooks_libraries_list", "hooks_library", "$@55",
- "sub_hooks_library", "$@56", "hooks_params", "hooks_param", "library",
- "$@57", "parameters", "$@58", "expired_leases_processing", "$@59",
+ "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",
"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", "$@60",
- "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@61",
- "sub_subnet6", "$@62", "subnet6_params", "subnet6_param", "subnet",
- "$@63", "interface", "$@64", "interface_id", "$@65", "client_class",
- "$@66", "require_client_classes", "$@67", "reservations_global",
+ "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",
"reservations_in_subnet", "reservations_out_of_pool", "reservation_mode",
- "$@68", "hr_mode", "id", "rapid_commit", "shared_networks", "$@69",
+ "$@69", "hr_mode", "id", "rapid_commit", "shared_networks", "$@70",
"shared_networks_content", "shared_networks_list", "shared_network",
- "$@70", "shared_network_params", "shared_network_param",
- "option_def_list", "$@71", "sub_option_def_list", "$@72",
+ "$@71", "shared_network_params", "shared_network_param",
+ "option_def_list", "$@72", "sub_option_def_list", "$@73",
"option_def_list_content", "not_empty_option_def_list",
- "option_def_entry", "$@73", "sub_option_def", "$@74",
+ "option_def_entry", "$@74", "sub_option_def", "$@75",
"option_def_params", "not_empty_option_def_params", "option_def_param",
- "option_def_name", "code", "option_def_code", "option_def_type", "$@75",
- "option_def_record_types", "$@76", "space", "$@77", "option_def_space",
- "option_def_encapsulate", "$@78", "option_def_array", "option_data_list",
- "$@79", "option_data_list_content", "not_empty_option_data_list",
- "option_data_entry", "$@80", "sub_option_data", "$@81",
+ "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_data_params", "not_empty_option_data_params",
- "option_data_param", "option_data_name", "option_data_data", "$@82",
+ "option_data_param", "option_data_name", "option_data_data", "$@83",
"option_data_code", "option_data_space", "option_data_csv_format",
"option_data_always_send", "option_data_never_send", "pools_list",
- "$@83", "pools_list_content", "not_empty_pools_list", "pool_list_entry",
- "$@84", "sub_pool6", "$@85", "pool_params", "pool_param", "pool_entry",
- "$@86", "pool_id", "user_context", "$@87", "comment", "$@88",
- "pd_pools_list", "$@89", "pd_pools_list_content",
- "not_empty_pd_pools_list", "pd_pool_entry", "$@90", "sub_pd_pool",
- "$@91", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@92",
- "pd_prefix_len", "excluded_prefix", "$@93", "excluded_prefix_len",
- "pd_delegated_len", "reservations", "$@94", "reservations_list",
- "not_empty_reservations_list", "reservation", "$@95", "sub_reservation",
- "$@96", "reservation_params", "not_empty_reservation_params",
- "reservation_param", "ip_addresses", "$@97", "prefixes", "$@98", "duid",
- "$@99", "hw_address", "$@100", "hostname", "$@101", "flex_id_value",
- "$@102", "reservation_client_classes", "$@103", "relay", "$@104",
- "relay_map", "ip_address", "$@105", "client_classes", "$@106",
- "client_classes_list", "client_class_entry", "$@107",
+ "$@84", "pools_list_content", "not_empty_pools_list", "pool_list_entry",
+ "$@85", "sub_pool6", "$@86", "pool_params", "pool_param", "pool_entry",
+ "$@87", "pool_id", "user_context", "$@88", "comment", "$@89",
+ "pd_pools_list", "$@90", "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", "reservations_list",
+ "not_empty_reservations_list", "reservation", "$@96", "sub_reservation",
+ "$@97", "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", "not_empty_client_class_params",
- "client_class_param", "client_class_name", "client_class_test", "$@108",
- "client_class_template_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_param", "client_class_name", "client_class_test", "$@109",
+ "client_class_template_test", "$@110", "only_if_required", "server_id",
+ "$@111", "server_id_params", "server_id_param", "server_id_type",
+ "$@112", "duid_type", "htype", "identifier", "$@113", "time",
+ "enterprise_id", "dhcp4o6_port", "control_socket", "$@114",
+ "control_socket_params", "control_socket_param", "socket_type", "$@115",
+ "socket_name", "$@116", "dhcp_queue_control", "$@117",
"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", "$@118", "capacity", "arbitrary_map_entry", "$@119",
+ "dhcp_ddns", "$@120", "sub_dhcp_ddns", "$@121", "dhcp_ddns_params",
+ "dhcp_ddns_param", "enable_updates", "dep_qualifying_suffix", "$@122",
+ "server_ip", "$@123", "server_port", "sender_ip", "$@124", "sender_port",
+ "max_queue_size", "ncr_protocol", "$@125", "ncr_protocol_value",
+ "ncr_format", "$@126", "dep_override_no_update",
+ "dep_override_client_update", "dep_replace_client_name", "$@127",
+ "dep_generated_prefix", "$@128", "dep_hostname_char_set", "$@129",
+ "dep_hostname_char_replacement", "$@130", "config_control", "$@131",
+ "sub_config_control", "$@132", "config_control_params",
+ "config_control_param", "config_databases", "$@133",
+ "config_fetch_wait_time", "loggers", "$@134", "loggers_entries",
+ "logger_entry", "$@135", "logger_params", "logger_param", "debuglevel",
+ "severity", "$@136", "output_options_list", "$@137",
+ "output_options_list_content", "output_entry", "$@138",
+ "output_params_list", "output_params", "output", "$@139", "flush",
+ "maxsize", "maxver", "pattern", "$@140", "compatibility", "$@141",
"compatibility_params", "compatibility_param", "lenient_option_parsing", YY_NULLPTR
};
#endif
const short
Dhcp6Parser::yyrline_[] =
{
- 0, 317, 317, 317, 318, 318, 319, 319, 320, 320,
- 321, 321, 322, 322, 323, 323, 324, 324, 325, 325,
- 326, 326, 327, 327, 328, 328, 329, 329, 330, 330,
- 338, 339, 340, 341, 342, 343, 344, 347, 352, 352,
- 363, 366, 367, 370, 375, 381, 386, 386, 393, 394,
- 397, 401, 405, 411, 411, 418, 419, 422, 426, 430,
- 440, 449, 449, 464, 464, 478, 481, 487, 487, 496,
- 497, 498, 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, 560, 561, 562,
- 563, 564, 565, 566, 567, 568, 569, 570, 571, 572,
- 575, 575, 584, 590, 596, 602, 608, 614, 620, 626,
- 632, 638, 644, 650, 656, 662, 668, 674, 680, 686,
- 686, 695, 698, 701, 704, 707, 713, 713, 722, 722,
- 731, 737, 743, 749, 749, 758, 758, 767, 773, 779,
- 785, 785, 794, 800, 800, 809, 809, 818, 824, 830,
- 836, 836, 848, 848, 857, 858, 859, 864, 865, 866,
- 867, 868, 869, 870, 871, 874, 874, 885, 891, 897,
- 903, 909, 909, 922, 922, 935, 935, 946, 947, 950,
- 951, 952, 957, 957, 967, 968, 969, 974, 975, 976,
- 977, 978, 979, 980, 981, 982, 983, 984, 985, 986,
- 987, 988, 989, 990, 991, 992, 993, 994, 995, 998,
- 998, 1006, 1007, 1008, 1011, 1011, 1020, 1020, 1029, 1029,
- 1038, 1044, 1044, 1053, 1059, 1065, 1071, 1077, 1083, 1089,
- 1096, 1102, 1102, 1110, 1111, 1112, 1115, 1121, 1127, 1127,
- 1136, 1136, 1145, 1145, 1154, 1154, 1163, 1163, 1174, 1175,
- 1176, 1181, 1182, 1185, 1185, 1204, 1204, 1222, 1222, 1233,
- 1234, 1235, 1240, 1241, 1244, 1249, 1254, 1254, 1265, 1266,
- 1267, 1272, 1273, 1274, 1277, 1282, 1289, 1289, 1302, 1302,
- 1315, 1316, 1317, 1322, 1323, 1324, 1325, 1326, 1327, 1330,
- 1336, 1342, 1348, 1348, 1359, 1360, 1363, 1364, 1365, 1370,
- 1370, 1380, 1380, 1390, 1391, 1392, 1395, 1398, 1399, 1402,
- 1402, 1411, 1411, 1420, 1420, 1432, 1433, 1434, 1439, 1440,
- 1441, 1442, 1443, 1444, 1447, 1453, 1459, 1465, 1471, 1477,
- 1486, 1486, 1500, 1501, 1504, 1505, 1506, 1515, 1515, 1541,
- 1541, 1552, 1553, 1554, 1560, 1561, 1562, 1563, 1564, 1565,
- 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,
- 1608, 1608, 1617, 1617, 1626, 1626, 1635, 1635, 1644, 1644,
- 1655, 1661, 1667, 1673, 1673, 1681, 1682, 1683, 1684, 1687,
- 1693, 1701, 1701, 1713, 1714, 1718, 1719, 1720, 1725, 1725,
- 1733, 1734, 1735, 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, 1789, 1789, 1803, 1803,
- 1812, 1813, 1816, 1817, 1818, 1825, 1825, 1840, 1840, 1854,
- 1855, 1858, 1859, 1860, 1865, 1866, 1867, 1868, 1869, 1870,
- 1871, 1872, 1873, 1874, 1877, 1879, 1885, 1887, 1887, 1896,
- 1896, 1905, 1905, 1914, 1916, 1916, 1925, 1935, 1935, 1948,
- 1949, 1954, 1955, 1956, 1963, 1963, 1975, 1975, 1987, 1988,
- 1993, 1994, 1995, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011, 2014, 2016, 2016, 2025, 2027, 2029, 2035,
- 2041, 2050, 2050, 2063, 2064, 2067, 2068, 2069, 2074, 2074,
- 2084, 2084, 2094, 2095, 2096, 2101, 2102, 2103, 2104, 2105,
- 2106, 2107, 2108, 2111, 2111, 2120, 2126, 2126, 2151, 2151,
- 2181, 2181, 2194, 2195, 2198, 2199, 2200, 2205, 2205, 2217,
- 2217, 2229, 2230, 2231, 2236, 2237, 2238, 2239, 2240, 2241,
- 2242, 2243, 2244, 2245, 2246, 2249, 2249, 2258, 2264, 2264,
- 2273, 2279, 2288, 2288, 2299, 2300, 2303, 2304, 2305, 2310,
- 2310, 2319, 2319, 2328, 2329, 2332, 2333, 2334, 2340, 2341,
- 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2353,
- 2353, 2364, 2364, 2375, 2375, 2384, 2384, 2393, 2393, 2402,
- 2402, 2411, 2411, 2425, 2425, 2436, 2437, 2440, 2440, 2452,
- 2452, 2463, 2464, 2465, 2470, 2470, 2480, 2481, 2484, 2485,
- 2486, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499,
- 2500, 2501, 2502, 2503, 2504, 2507, 2509, 2509, 2518, 2518,
- 2527, 2536, 2536, 2549, 2550, 2551, 2556, 2557, 2558, 2559,
- 2560, 2561, 2562, 2563, 2564, 2567, 2567, 2575, 2576, 2577,
- 2580, 2586, 2586, 2595, 2601, 2609, 2617, 2617, 2628, 2629,
- 2630, 2635, 2636, 2637, 2638, 2639, 2642, 2642, 2651, 2651,
- 2663, 2663, 2676, 2677, 2678, 2683, 2684, 2685, 2686, 2687,
- 2688, 2691, 2697, 2697, 2706, 2712, 2712, 2722, 2722, 2735,
- 2735, 2745, 2746, 2747, 2752, 2753, 2754, 2755, 2756, 2757,
- 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767,
- 2768, 2769, 2772, 2779, 2779, 2788, 2788, 2797, 2803, 2803,
- 2812, 2818, 2824, 2824, 2833, 2834, 2837, 2837, 2847, 2854,
- 2861, 2861, 2870, 2870, 2880, 2880, 2890, 2890, 2902, 2902,
- 2914, 2914, 2924, 2925, 2926, 2932, 2933, 2936, 2936, 2947,
- 2955, 2955, 2968, 2969, 2970, 2976, 2976, 2984, 2985, 2986,
- 2991, 2992, 2993, 2994, 2995, 2996, 2997, 3000, 3006, 3006,
- 3015, 3015, 3026, 3027, 3028, 3033, 3033, 3041, 3042, 3043,
- 3048, 3049, 3050, 3051, 3052, 3055, 3055, 3064, 3070, 3076,
- 3082, 3082, 3091, 3091, 3102, 3103, 3104, 3109, 3110, 3113
+ 0, 323, 323, 323, 324, 324, 325, 325, 326, 326,
+ 327, 327, 328, 328, 329, 329, 330, 330, 331, 331,
+ 332, 332, 333, 333, 334, 334, 335, 335, 336, 336,
+ 344, 345, 346, 347, 348, 349, 350, 353, 358, 358,
+ 369, 372, 373, 376, 381, 387, 392, 392, 399, 400,
+ 403, 407, 411, 417, 417, 424, 425, 428, 432, 436,
+ 446, 455, 455, 470, 470, 484, 487, 493, 493, 502,
+ 503, 504, 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, 560, 561, 562, 563, 564, 565, 566, 567, 568,
+ 569, 570, 571, 572, 573, 574, 575, 576, 577, 578,
+ 579, 582, 582, 591, 597, 603, 609, 615, 621, 627,
+ 633, 639, 645, 651, 657, 663, 669, 675, 681, 687,
+ 693, 693, 702, 705, 708, 711, 714, 720, 720, 729,
+ 729, 738, 744, 750, 750, 759, 762, 765, 768, 773,
+ 779, 779, 788, 788, 797, 803, 809, 815, 815, 824,
+ 830, 830, 839, 839, 848, 854, 860, 866, 866, 878,
+ 878, 887, 888, 889, 894, 895, 896, 897, 898, 899,
+ 900, 901, 904, 904, 915, 921, 927, 933, 939, 939,
+ 952, 952, 965, 965, 976, 977, 980, 981, 982, 987,
+ 987, 997, 998, 999, 1004, 1005, 1006, 1007, 1008, 1009,
+ 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
+ 1020, 1021, 1022, 1023, 1024, 1025, 1028, 1028, 1036, 1037,
+ 1038, 1041, 1041, 1050, 1050, 1059, 1059, 1068, 1074, 1074,
+ 1083, 1089, 1095, 1101, 1107, 1113, 1119, 1126, 1132, 1132,
+ 1140, 1141, 1142, 1145, 1151, 1157, 1157, 1166, 1166, 1175,
+ 1175, 1184, 1184, 1193, 1193, 1204, 1205, 1206, 1211, 1212,
+ 1215, 1215, 1234, 1234, 1252, 1252, 1263, 1264, 1265, 1270,
+ 1271, 1274, 1279, 1284, 1284, 1295, 1296, 1297, 1302, 1303,
+ 1304, 1307, 1312, 1319, 1319, 1332, 1332, 1345, 1346, 1347,
+ 1352, 1353, 1354, 1355, 1356, 1357, 1360, 1366, 1372, 1378,
+ 1378, 1389, 1390, 1393, 1394, 1395, 1400, 1400, 1410, 1410,
+ 1420, 1421, 1422, 1425, 1428, 1429, 1432, 1432, 1441, 1441,
+ 1450, 1450, 1462, 1463, 1464, 1469, 1470, 1471, 1472, 1473,
+ 1474, 1477, 1483, 1489, 1495, 1501, 1507, 1516, 1516, 1530,
+ 1531, 1534, 1535, 1536, 1545, 1545, 1571, 1571, 1582, 1583,
+ 1584, 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, 1625, 1626, 1627, 1628,
+ 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1639, 1639,
+ 1648, 1648, 1657, 1657, 1666, 1666, 1675, 1675, 1686, 1692,
+ 1698, 1704, 1704, 1712, 1713, 1714, 1715, 1718, 1724, 1732,
+ 1732, 1744, 1745, 1749, 1750, 1751, 1756, 1756, 1764, 1765,
+ 1766, 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, 1821, 1821, 1835, 1835, 1844,
+ 1845, 1848, 1849, 1850, 1857, 1857, 1872, 1872, 1886, 1887,
+ 1890, 1891, 1892, 1897, 1898, 1899, 1900, 1901, 1902, 1903,
+ 1904, 1905, 1906, 1909, 1911, 1917, 1919, 1919, 1928, 1928,
+ 1937, 1937, 1946, 1948, 1948, 1957, 1967, 1967, 1980, 1981,
+ 1986, 1987, 1988, 1995, 1995, 2007, 2007, 2019, 2020, 2025,
+ 2026, 2027, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041,
+ 2042, 2043, 2046, 2048, 2048, 2057, 2059, 2061, 2067, 2073,
+ 2082, 2082, 2095, 2096, 2099, 2100, 2101, 2106, 2106, 2116,
+ 2116, 2126, 2127, 2128, 2133, 2134, 2135, 2136, 2137, 2138,
+ 2139, 2140, 2143, 2143, 2152, 2158, 2158, 2183, 2183, 2213,
+ 2213, 2226, 2227, 2230, 2231, 2232, 2237, 2237, 2249, 2249,
+ 2261, 2262, 2263, 2268, 2269, 2270, 2271, 2272, 2273, 2274,
+ 2275, 2276, 2277, 2278, 2281, 2281, 2290, 2296, 2296, 2305,
+ 2311, 2320, 2320, 2331, 2332, 2335, 2336, 2337, 2342, 2342,
+ 2351, 2351, 2360, 2361, 2364, 2365, 2366, 2372, 2373, 2374,
+ 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2385, 2385,
+ 2396, 2396, 2407, 2407, 2416, 2416, 2425, 2425, 2434, 2434,
+ 2443, 2443, 2457, 2457, 2468, 2469, 2472, 2472, 2484, 2484,
+ 2495, 2496, 2497, 2502, 2502, 2512, 2513, 2516, 2517, 2518,
+ 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532,
+ 2533, 2534, 2535, 2536, 2539, 2541, 2541, 2550, 2550, 2559,
+ 2568, 2568, 2581, 2582, 2583, 2588, 2589, 2590, 2591, 2592,
+ 2593, 2594, 2595, 2596, 2599, 2599, 2607, 2608, 2609, 2612,
+ 2618, 2618, 2627, 2633, 2641, 2649, 2649, 2660, 2661, 2662,
+ 2667, 2668, 2669, 2670, 2671, 2674, 2674, 2683, 2683, 2695,
+ 2695, 2708, 2709, 2710, 2715, 2716, 2717, 2718, 2719, 2720,
+ 2723, 2729, 2729, 2738, 2744, 2744, 2754, 2754, 2767, 2767,
+ 2777, 2778, 2779, 2784, 2785, 2786, 2787, 2788, 2789, 2790,
+ 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800,
+ 2801, 2804, 2811, 2811, 2820, 2820, 2829, 2835, 2835, 2844,
+ 2850, 2856, 2856, 2865, 2866, 2869, 2869, 2879, 2886, 2893,
+ 2893, 2902, 2902, 2912, 2912, 2922, 2922, 2934, 2934, 2946,
+ 2946, 2956, 2957, 2958, 2964, 2965, 2968, 2968, 2979, 2987,
+ 2987, 3000, 3001, 3002, 3008, 3008, 3016, 3017, 3018, 3023,
+ 3024, 3025, 3026, 3027, 3028, 3029, 3032, 3038, 3038, 3047,
+ 3047, 3058, 3059, 3060, 3065, 3065, 3073, 3074, 3075, 3080,
+ 3081, 3082, 3083, 3084, 3087, 3087, 3096, 3102, 3108, 3114,
+ 3114, 3123, 3123, 3134, 3135, 3136, 3141, 3142, 3145
};
void
#line 14 "dhcp6_parser.yy"
} } // isc::dhcp
-#line 6544 "dhcp6_parser.cc"
+#line 6613 "dhcp6_parser.cc"
-#line 3119 "dhcp6_parser.yy"
+#line 3151 "dhcp6_parser.yy"
void
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
// 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
// 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
#endif
# include "location.hh"
#include <typeinfo>
-#ifndef PARSER6__ASSERT
+#ifndef YY_ASSERT
# include <cassert>
-# define PARSER6__ASSERT assert
+# define YY_ASSERT assert
#endif
/* 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
#line 14 "dhcp6_parser.yy"
namespace isc { namespace dhcp {
-#line 210 "dhcp6_parser.h"
+#line 204 "dhcp6_parser.h"
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;
+ semantic_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
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)...);
}
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 ();
}
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);
}
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> ();
}
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> ();
}
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> ());
}
private:
#if YY_CPLUSPLUS < 201103L
/// Non copyable.
- value_type (const self_type&);
+ semantic_type (const self_type&);
/// Non copyable.
self_type& operator= (const self_type&);
#endif
T*
yyas_ () YY_NOEXCEPT
{
- void *yyp = yyraw_;
+ void *yyp = yybuffer_.yyraw;
return static_cast<T*> (yyp);
}
const T*
yyas_ () const YY_NOEXCEPT
{
- const void *yyp = yyraw_;
+ const void *yyp = yybuffer_.yyraw;
return static_cast<const T*> (yyp);
}
// value
// map_value
// ddns_replace_client_name_value
+ // ddns_conflict_resolution_mode_value
// db_type
// on_fail_mode
// hr_mode
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;
TOKEN_PARKED_PACKET_LIMIT = 345, // "parked-packet-limit"
TOKEN_ALLOCATOR = 346, // "allocator"
TOKEN_PD_ALLOCATOR = 347, // "pd-allocator"
- TOKEN_SHARED_NETWORKS = 348, // "shared-networks"
- TOKEN_POOLS = 349, // "pools"
- TOKEN_POOL = 350, // "pool"
- TOKEN_PD_POOLS = 351, // "pd-pools"
- TOKEN_PREFIX = 352, // "prefix"
- TOKEN_PREFIX_LEN = 353, // "prefix-len"
- TOKEN_EXCLUDED_PREFIX = 354, // "excluded-prefix"
- TOKEN_EXCLUDED_PREFIX_LEN = 355, // "excluded-prefix-len"
- TOKEN_DELEGATED_LEN = 356, // "delegated-len"
- TOKEN_USER_CONTEXT = 357, // "user-context"
- TOKEN_COMMENT = 358, // "comment"
- TOKEN_SUBNET = 359, // "subnet"
- TOKEN_INTERFACE = 360, // "interface"
- TOKEN_INTERFACE_ID = 361, // "interface-id"
- TOKEN_ID = 362, // "id"
- TOKEN_RAPID_COMMIT = 363, // "rapid-commit"
- TOKEN_RESERVATION_MODE = 364, // "reservation-mode"
- TOKEN_DISABLED = 365, // "disabled"
- TOKEN_OUT_OF_POOL = 366, // "out-of-pool"
- TOKEN_GLOBAL = 367, // "global"
- TOKEN_ALL = 368, // "all"
- TOKEN_RESERVATIONS_GLOBAL = 369, // "reservations-global"
- TOKEN_RESERVATIONS_IN_SUBNET = 370, // "reservations-in-subnet"
- TOKEN_RESERVATIONS_OUT_OF_POOL = 371, // "reservations-out-of-pool"
- TOKEN_MAC_SOURCES = 372, // "mac-sources"
- TOKEN_RELAY_SUPPLIED_OPTIONS = 373, // "relay-supplied-options"
- TOKEN_HOST_RESERVATION_IDENTIFIERS = 374, // "host-reservation-identifiers"
- TOKEN_SANITY_CHECKS = 375, // "sanity-checks"
- TOKEN_LEASE_CHECKS = 376, // "lease-checks"
- TOKEN_EXTENDED_INFO_CHECKS = 377, // "extended-info-checks"
- TOKEN_CLIENT_CLASSES = 378, // "client-classes"
- TOKEN_REQUIRE_CLIENT_CLASSES = 379, // "require-client-classes"
- TOKEN_TEST = 380, // "test"
- TOKEN_TEMPLATE_TEST = 381, // "template-test"
- TOKEN_ONLY_IF_REQUIRED = 382, // "only-if-required"
- TOKEN_CLIENT_CLASS = 383, // "client-class"
- TOKEN_POOL_ID = 384, // "pool-id"
- TOKEN_RESERVATIONS = 385, // "reservations"
- TOKEN_IP_ADDRESSES = 386, // "ip-addresses"
- TOKEN_PREFIXES = 387, // "prefixes"
- TOKEN_DUID = 388, // "duid"
- TOKEN_HW_ADDRESS = 389, // "hw-address"
- TOKEN_HOSTNAME = 390, // "hostname"
- TOKEN_FLEX_ID = 391, // "flex-id"
- TOKEN_RELAY = 392, // "relay"
- TOKEN_IP_ADDRESS = 393, // "ip-address"
- TOKEN_HOOKS_LIBRARIES = 394, // "hooks-libraries"
- TOKEN_LIBRARY = 395, // "library"
- TOKEN_PARAMETERS = 396, // "parameters"
- TOKEN_EXPIRED_LEASES_PROCESSING = 397, // "expired-leases-processing"
- TOKEN_RECLAIM_TIMER_WAIT_TIME = 398, // "reclaim-timer-wait-time"
- TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 399, // "flush-reclaimed-timer-wait-time"
- TOKEN_HOLD_RECLAIMED_TIME = 400, // "hold-reclaimed-time"
- TOKEN_MAX_RECLAIM_LEASES = 401, // "max-reclaim-leases"
- TOKEN_MAX_RECLAIM_TIME = 402, // "max-reclaim-time"
- TOKEN_UNWARNED_RECLAIM_CYCLES = 403, // "unwarned-reclaim-cycles"
- TOKEN_SERVER_ID = 404, // "server-id"
- TOKEN_LLT = 405, // "LLT"
- TOKEN_EN = 406, // "EN"
- TOKEN_LL = 407, // "LL"
- TOKEN_IDENTIFIER = 408, // "identifier"
- TOKEN_HTYPE = 409, // "htype"
- TOKEN_TIME = 410, // "time"
- TOKEN_ENTERPRISE_ID = 411, // "enterprise-id"
- TOKEN_DHCP4O6_PORT = 412, // "dhcp4o6-port"
- TOKEN_DHCP_MULTI_THREADING = 413, // "multi-threading"
- TOKEN_ENABLE_MULTI_THREADING = 414, // "enable-multi-threading"
- TOKEN_THREAD_POOL_SIZE = 415, // "thread-pool-size"
- TOKEN_PACKET_QUEUE_SIZE = 416, // "packet-queue-size"
- TOKEN_CONTROL_SOCKET = 417, // "control-socket"
- TOKEN_SOCKET_TYPE = 418, // "socket-type"
- TOKEN_SOCKET_NAME = 419, // "socket-name"
- TOKEN_DHCP_QUEUE_CONTROL = 420, // "dhcp-queue-control"
- TOKEN_ENABLE_QUEUE = 421, // "enable-queue"
- TOKEN_QUEUE_TYPE = 422, // "queue-type"
- TOKEN_CAPACITY = 423, // "capacity"
- TOKEN_DHCP_DDNS = 424, // "dhcp-ddns"
- TOKEN_ENABLE_UPDATES = 425, // "enable-updates"
- TOKEN_QUALIFYING_SUFFIX = 426, // "qualifying-suffix"
- TOKEN_SERVER_IP = 427, // "server-ip"
- TOKEN_SERVER_PORT = 428, // "server-port"
- TOKEN_SENDER_IP = 429, // "sender-ip"
- TOKEN_SENDER_PORT = 430, // "sender-port"
- TOKEN_MAX_QUEUE_SIZE = 431, // "max-queue-size"
- TOKEN_NCR_PROTOCOL = 432, // "ncr-protocol"
- TOKEN_NCR_FORMAT = 433, // "ncr-format"
- TOKEN_OVERRIDE_NO_UPDATE = 434, // "override-no-update"
- TOKEN_OVERRIDE_CLIENT_UPDATE = 435, // "override-client-update"
- TOKEN_REPLACE_CLIENT_NAME = 436, // "replace-client-name"
- TOKEN_GENERATED_PREFIX = 437, // "generated-prefix"
- TOKEN_UDP = 438, // "UDP"
- TOKEN_TCP = 439, // "TCP"
- TOKEN_JSON = 440, // "JSON"
- TOKEN_WHEN_PRESENT = 441, // "when-present"
- TOKEN_NEVER = 442, // "never"
- TOKEN_ALWAYS = 443, // "always"
- TOKEN_WHEN_NOT_PRESENT = 444, // "when-not-present"
- TOKEN_HOSTNAME_CHAR_SET = 445, // "hostname-char-set"
- TOKEN_HOSTNAME_CHAR_REPLACEMENT = 446, // "hostname-char-replacement"
- TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 447, // "early-global-reservations-lookup"
- TOKEN_IP_RESERVATIONS_UNIQUE = 448, // "ip-reservations-unique"
- TOKEN_RESERVATIONS_LOOKUP_FIRST = 449, // "reservations-lookup-first"
- TOKEN_LOGGERS = 450, // "loggers"
- TOKEN_OUTPUT_OPTIONS = 451, // "output_options"
- TOKEN_OUTPUT = 452, // "output"
- TOKEN_DEBUGLEVEL = 453, // "debuglevel"
- TOKEN_SEVERITY = 454, // "severity"
- TOKEN_FLUSH = 455, // "flush"
- TOKEN_MAXSIZE = 456, // "maxsize"
- TOKEN_MAXVER = 457, // "maxver"
- TOKEN_PATTERN = 458, // "pattern"
- TOKEN_COMPATIBILITY = 459, // "compatibility"
- TOKEN_LENIENT_OPTION_PARSING = 460, // "lenient-option-parsing"
- TOKEN_TOPLEVEL_JSON = 461, // TOPLEVEL_JSON
- TOKEN_TOPLEVEL_DHCP6 = 462, // TOPLEVEL_DHCP6
- TOKEN_SUB_DHCP6 = 463, // SUB_DHCP6
- TOKEN_SUB_INTERFACES6 = 464, // SUB_INTERFACES6
- TOKEN_SUB_SUBNET6 = 465, // SUB_SUBNET6
- TOKEN_SUB_POOL6 = 466, // SUB_POOL6
- TOKEN_SUB_PD_POOL = 467, // SUB_PD_POOL
- TOKEN_SUB_RESERVATION = 468, // SUB_RESERVATION
- TOKEN_SUB_OPTION_DEFS = 469, // SUB_OPTION_DEFS
- TOKEN_SUB_OPTION_DEF = 470, // SUB_OPTION_DEF
- TOKEN_SUB_OPTION_DATA = 471, // SUB_OPTION_DATA
- TOKEN_SUB_HOOKS_LIBRARY = 472, // SUB_HOOKS_LIBRARY
- TOKEN_SUB_DHCP_DDNS = 473, // SUB_DHCP_DDNS
- TOKEN_SUB_CONFIG_CONTROL = 474, // SUB_CONFIG_CONTROL
- TOKEN_STRING = 475, // "constant string"
- TOKEN_INTEGER = 476, // "integer"
- TOKEN_FLOAT = 477, // "floating point"
- TOKEN_BOOLEAN = 478 // "boolean"
+ TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 348, // "ddns-conflict-resolution-mode"
+ TOKEN_CHECK_WITH_DHCID = 349, // "check-with-dhcid"
+ TOKEN_NO_CHECK_WITH_DHCID = 350, // "no-check-with-dhcid"
+ TOKEN_CHECK_EXISTS_WITH_DHCID = 351, // "check-exists-with-dhcid"
+ TOKEN_NO_CHECK_WITHOUT_DHCID = 352, // "no-check-without-dhcid"
+ TOKEN_SHARED_NETWORKS = 353, // "shared-networks"
+ TOKEN_POOLS = 354, // "pools"
+ TOKEN_POOL = 355, // "pool"
+ TOKEN_PD_POOLS = 356, // "pd-pools"
+ TOKEN_PREFIX = 357, // "prefix"
+ TOKEN_PREFIX_LEN = 358, // "prefix-len"
+ TOKEN_EXCLUDED_PREFIX = 359, // "excluded-prefix"
+ TOKEN_EXCLUDED_PREFIX_LEN = 360, // "excluded-prefix-len"
+ TOKEN_DELEGATED_LEN = 361, // "delegated-len"
+ TOKEN_USER_CONTEXT = 362, // "user-context"
+ TOKEN_COMMENT = 363, // "comment"
+ TOKEN_SUBNET = 364, // "subnet"
+ TOKEN_INTERFACE = 365, // "interface"
+ TOKEN_INTERFACE_ID = 366, // "interface-id"
+ TOKEN_ID = 367, // "id"
+ TOKEN_RAPID_COMMIT = 368, // "rapid-commit"
+ TOKEN_RESERVATION_MODE = 369, // "reservation-mode"
+ TOKEN_DISABLED = 370, // "disabled"
+ TOKEN_OUT_OF_POOL = 371, // "out-of-pool"
+ TOKEN_GLOBAL = 372, // "global"
+ TOKEN_ALL = 373, // "all"
+ TOKEN_RESERVATIONS_GLOBAL = 374, // "reservations-global"
+ TOKEN_RESERVATIONS_IN_SUBNET = 375, // "reservations-in-subnet"
+ TOKEN_RESERVATIONS_OUT_OF_POOL = 376, // "reservations-out-of-pool"
+ TOKEN_MAC_SOURCES = 377, // "mac-sources"
+ TOKEN_RELAY_SUPPLIED_OPTIONS = 378, // "relay-supplied-options"
+ TOKEN_HOST_RESERVATION_IDENTIFIERS = 379, // "host-reservation-identifiers"
+ TOKEN_SANITY_CHECKS = 380, // "sanity-checks"
+ TOKEN_LEASE_CHECKS = 381, // "lease-checks"
+ TOKEN_EXTENDED_INFO_CHECKS = 382, // "extended-info-checks"
+ TOKEN_CLIENT_CLASSES = 383, // "client-classes"
+ TOKEN_REQUIRE_CLIENT_CLASSES = 384, // "require-client-classes"
+ TOKEN_TEST = 385, // "test"
+ TOKEN_TEMPLATE_TEST = 386, // "template-test"
+ TOKEN_ONLY_IF_REQUIRED = 387, // "only-if-required"
+ TOKEN_CLIENT_CLASS = 388, // "client-class"
+ TOKEN_POOL_ID = 389, // "pool-id"
+ TOKEN_RESERVATIONS = 390, // "reservations"
+ TOKEN_IP_ADDRESSES = 391, // "ip-addresses"
+ TOKEN_PREFIXES = 392, // "prefixes"
+ TOKEN_DUID = 393, // "duid"
+ TOKEN_HW_ADDRESS = 394, // "hw-address"
+ TOKEN_HOSTNAME = 395, // "hostname"
+ TOKEN_FLEX_ID = 396, // "flex-id"
+ TOKEN_RELAY = 397, // "relay"
+ TOKEN_IP_ADDRESS = 398, // "ip-address"
+ TOKEN_HOOKS_LIBRARIES = 399, // "hooks-libraries"
+ TOKEN_LIBRARY = 400, // "library"
+ TOKEN_PARAMETERS = 401, // "parameters"
+ TOKEN_EXPIRED_LEASES_PROCESSING = 402, // "expired-leases-processing"
+ TOKEN_RECLAIM_TIMER_WAIT_TIME = 403, // "reclaim-timer-wait-time"
+ TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 404, // "flush-reclaimed-timer-wait-time"
+ TOKEN_HOLD_RECLAIMED_TIME = 405, // "hold-reclaimed-time"
+ TOKEN_MAX_RECLAIM_LEASES = 406, // "max-reclaim-leases"
+ TOKEN_MAX_RECLAIM_TIME = 407, // "max-reclaim-time"
+ TOKEN_UNWARNED_RECLAIM_CYCLES = 408, // "unwarned-reclaim-cycles"
+ TOKEN_SERVER_ID = 409, // "server-id"
+ TOKEN_LLT = 410, // "LLT"
+ TOKEN_EN = 411, // "EN"
+ TOKEN_LL = 412, // "LL"
+ TOKEN_IDENTIFIER = 413, // "identifier"
+ TOKEN_HTYPE = 414, // "htype"
+ TOKEN_TIME = 415, // "time"
+ TOKEN_ENTERPRISE_ID = 416, // "enterprise-id"
+ TOKEN_DHCP4O6_PORT = 417, // "dhcp4o6-port"
+ TOKEN_DHCP_MULTI_THREADING = 418, // "multi-threading"
+ TOKEN_ENABLE_MULTI_THREADING = 419, // "enable-multi-threading"
+ TOKEN_THREAD_POOL_SIZE = 420, // "thread-pool-size"
+ TOKEN_PACKET_QUEUE_SIZE = 421, // "packet-queue-size"
+ TOKEN_CONTROL_SOCKET = 422, // "control-socket"
+ TOKEN_SOCKET_TYPE = 423, // "socket-type"
+ TOKEN_SOCKET_NAME = 424, // "socket-name"
+ TOKEN_DHCP_QUEUE_CONTROL = 425, // "dhcp-queue-control"
+ TOKEN_ENABLE_QUEUE = 426, // "enable-queue"
+ TOKEN_QUEUE_TYPE = 427, // "queue-type"
+ TOKEN_CAPACITY = 428, // "capacity"
+ TOKEN_DHCP_DDNS = 429, // "dhcp-ddns"
+ TOKEN_ENABLE_UPDATES = 430, // "enable-updates"
+ TOKEN_QUALIFYING_SUFFIX = 431, // "qualifying-suffix"
+ TOKEN_SERVER_IP = 432, // "server-ip"
+ TOKEN_SERVER_PORT = 433, // "server-port"
+ TOKEN_SENDER_IP = 434, // "sender-ip"
+ TOKEN_SENDER_PORT = 435, // "sender-port"
+ TOKEN_MAX_QUEUE_SIZE = 436, // "max-queue-size"
+ TOKEN_NCR_PROTOCOL = 437, // "ncr-protocol"
+ TOKEN_NCR_FORMAT = 438, // "ncr-format"
+ TOKEN_OVERRIDE_NO_UPDATE = 439, // "override-no-update"
+ TOKEN_OVERRIDE_CLIENT_UPDATE = 440, // "override-client-update"
+ TOKEN_REPLACE_CLIENT_NAME = 441, // "replace-client-name"
+ TOKEN_GENERATED_PREFIX = 442, // "generated-prefix"
+ TOKEN_UDP = 443, // "UDP"
+ TOKEN_TCP = 444, // "TCP"
+ TOKEN_JSON = 445, // "JSON"
+ TOKEN_WHEN_PRESENT = 446, // "when-present"
+ TOKEN_NEVER = 447, // "never"
+ TOKEN_ALWAYS = 448, // "always"
+ TOKEN_WHEN_NOT_PRESENT = 449, // "when-not-present"
+ TOKEN_HOSTNAME_CHAR_SET = 450, // "hostname-char-set"
+ TOKEN_HOSTNAME_CHAR_REPLACEMENT = 451, // "hostname-char-replacement"
+ TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 452, // "early-global-reservations-lookup"
+ TOKEN_IP_RESERVATIONS_UNIQUE = 453, // "ip-reservations-unique"
+ TOKEN_RESERVATIONS_LOOKUP_FIRST = 454, // "reservations-lookup-first"
+ TOKEN_LOGGERS = 455, // "loggers"
+ TOKEN_OUTPUT_OPTIONS = 456, // "output_options"
+ TOKEN_OUTPUT = 457, // "output"
+ TOKEN_DEBUGLEVEL = 458, // "debuglevel"
+ TOKEN_SEVERITY = 459, // "severity"
+ TOKEN_FLUSH = 460, // "flush"
+ TOKEN_MAXSIZE = 461, // "maxsize"
+ TOKEN_MAXVER = 462, // "maxver"
+ TOKEN_PATTERN = 463, // "pattern"
+ TOKEN_COMPATIBILITY = 464, // "compatibility"
+ TOKEN_LENIENT_OPTION_PARSING = 465, // "lenient-option-parsing"
+ TOKEN_TOPLEVEL_JSON = 466, // TOPLEVEL_JSON
+ TOKEN_TOPLEVEL_DHCP6 = 467, // TOPLEVEL_DHCP6
+ TOKEN_SUB_DHCP6 = 468, // SUB_DHCP6
+ TOKEN_SUB_INTERFACES6 = 469, // SUB_INTERFACES6
+ TOKEN_SUB_SUBNET6 = 470, // SUB_SUBNET6
+ TOKEN_SUB_POOL6 = 471, // SUB_POOL6
+ TOKEN_SUB_PD_POOL = 472, // SUB_PD_POOL
+ TOKEN_SUB_RESERVATION = 473, // SUB_RESERVATION
+ TOKEN_SUB_OPTION_DEFS = 474, // SUB_OPTION_DEFS
+ TOKEN_SUB_OPTION_DEF = 475, // SUB_OPTION_DEF
+ TOKEN_SUB_OPTION_DATA = 476, // SUB_OPTION_DATA
+ TOKEN_SUB_HOOKS_LIBRARY = 477, // SUB_HOOKS_LIBRARY
+ TOKEN_SUB_DHCP_DDNS = 478, // SUB_DHCP_DDNS
+ TOKEN_SUB_CONFIG_CONTROL = 479, // SUB_CONFIG_CONTROL
+ TOKEN_STRING = 480, // "constant string"
+ TOKEN_INTEGER = 481, // "integer"
+ TOKEN_FLOAT = 482, // "floating point"
+ TOKEN_BOOLEAN = 483 // "boolean"
};
/// Backward compatibility alias (Bison 3.6).
typedef token_kind_type yytokentype;
};
/// Token kind, as returned by yylex.
- typedef token::token_kind_type token_kind_type;
+ typedef token::yytokentype token_kind_type;
/// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type;
{
enum symbol_kind_type
{
- YYNTOKENS = 224, ///< Number of tokens.
+ YYNTOKENS = 229, ///< Number of tokens.
S_YYEMPTY = -2,
S_YYEOF = 0, // "end of file"
S_YYerror = 1, // error
S_PARKED_PACKET_LIMIT = 90, // "parked-packet-limit"
S_ALLOCATOR = 91, // "allocator"
S_PD_ALLOCATOR = 92, // "pd-allocator"
- S_SHARED_NETWORKS = 93, // "shared-networks"
- S_POOLS = 94, // "pools"
- S_POOL = 95, // "pool"
- S_PD_POOLS = 96, // "pd-pools"
- S_PREFIX = 97, // "prefix"
- S_PREFIX_LEN = 98, // "prefix-len"
- S_EXCLUDED_PREFIX = 99, // "excluded-prefix"
- S_EXCLUDED_PREFIX_LEN = 100, // "excluded-prefix-len"
- S_DELEGATED_LEN = 101, // "delegated-len"
- S_USER_CONTEXT = 102, // "user-context"
- S_COMMENT = 103, // "comment"
- S_SUBNET = 104, // "subnet"
- S_INTERFACE = 105, // "interface"
- S_INTERFACE_ID = 106, // "interface-id"
- S_ID = 107, // "id"
- S_RAPID_COMMIT = 108, // "rapid-commit"
- S_RESERVATION_MODE = 109, // "reservation-mode"
- S_DISABLED = 110, // "disabled"
- S_OUT_OF_POOL = 111, // "out-of-pool"
- S_GLOBAL = 112, // "global"
- S_ALL = 113, // "all"
- S_RESERVATIONS_GLOBAL = 114, // "reservations-global"
- S_RESERVATIONS_IN_SUBNET = 115, // "reservations-in-subnet"
- S_RESERVATIONS_OUT_OF_POOL = 116, // "reservations-out-of-pool"
- S_MAC_SOURCES = 117, // "mac-sources"
- S_RELAY_SUPPLIED_OPTIONS = 118, // "relay-supplied-options"
- S_HOST_RESERVATION_IDENTIFIERS = 119, // "host-reservation-identifiers"
- S_SANITY_CHECKS = 120, // "sanity-checks"
- S_LEASE_CHECKS = 121, // "lease-checks"
- S_EXTENDED_INFO_CHECKS = 122, // "extended-info-checks"
- S_CLIENT_CLASSES = 123, // "client-classes"
- S_REQUIRE_CLIENT_CLASSES = 124, // "require-client-classes"
- S_TEST = 125, // "test"
- S_TEMPLATE_TEST = 126, // "template-test"
- S_ONLY_IF_REQUIRED = 127, // "only-if-required"
- S_CLIENT_CLASS = 128, // "client-class"
- S_POOL_ID = 129, // "pool-id"
- S_RESERVATIONS = 130, // "reservations"
- S_IP_ADDRESSES = 131, // "ip-addresses"
- S_PREFIXES = 132, // "prefixes"
- S_DUID = 133, // "duid"
- S_HW_ADDRESS = 134, // "hw-address"
- S_HOSTNAME = 135, // "hostname"
- S_FLEX_ID = 136, // "flex-id"
- S_RELAY = 137, // "relay"
- S_IP_ADDRESS = 138, // "ip-address"
- S_HOOKS_LIBRARIES = 139, // "hooks-libraries"
- S_LIBRARY = 140, // "library"
- S_PARAMETERS = 141, // "parameters"
- S_EXPIRED_LEASES_PROCESSING = 142, // "expired-leases-processing"
- S_RECLAIM_TIMER_WAIT_TIME = 143, // "reclaim-timer-wait-time"
- S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 144, // "flush-reclaimed-timer-wait-time"
- S_HOLD_RECLAIMED_TIME = 145, // "hold-reclaimed-time"
- S_MAX_RECLAIM_LEASES = 146, // "max-reclaim-leases"
- S_MAX_RECLAIM_TIME = 147, // "max-reclaim-time"
- S_UNWARNED_RECLAIM_CYCLES = 148, // "unwarned-reclaim-cycles"
- S_SERVER_ID = 149, // "server-id"
- S_LLT = 150, // "LLT"
- S_EN = 151, // "EN"
- S_LL = 152, // "LL"
- S_IDENTIFIER = 153, // "identifier"
- S_HTYPE = 154, // "htype"
- S_TIME = 155, // "time"
- S_ENTERPRISE_ID = 156, // "enterprise-id"
- S_DHCP4O6_PORT = 157, // "dhcp4o6-port"
- S_DHCP_MULTI_THREADING = 158, // "multi-threading"
- S_ENABLE_MULTI_THREADING = 159, // "enable-multi-threading"
- S_THREAD_POOL_SIZE = 160, // "thread-pool-size"
- S_PACKET_QUEUE_SIZE = 161, // "packet-queue-size"
- S_CONTROL_SOCKET = 162, // "control-socket"
- S_SOCKET_TYPE = 163, // "socket-type"
- S_SOCKET_NAME = 164, // "socket-name"
- S_DHCP_QUEUE_CONTROL = 165, // "dhcp-queue-control"
- S_ENABLE_QUEUE = 166, // "enable-queue"
- S_QUEUE_TYPE = 167, // "queue-type"
- S_CAPACITY = 168, // "capacity"
- S_DHCP_DDNS = 169, // "dhcp-ddns"
- S_ENABLE_UPDATES = 170, // "enable-updates"
- S_QUALIFYING_SUFFIX = 171, // "qualifying-suffix"
- S_SERVER_IP = 172, // "server-ip"
- S_SERVER_PORT = 173, // "server-port"
- S_SENDER_IP = 174, // "sender-ip"
- S_SENDER_PORT = 175, // "sender-port"
- S_MAX_QUEUE_SIZE = 176, // "max-queue-size"
- S_NCR_PROTOCOL = 177, // "ncr-protocol"
- S_NCR_FORMAT = 178, // "ncr-format"
- S_OVERRIDE_NO_UPDATE = 179, // "override-no-update"
- S_OVERRIDE_CLIENT_UPDATE = 180, // "override-client-update"
- S_REPLACE_CLIENT_NAME = 181, // "replace-client-name"
- S_GENERATED_PREFIX = 182, // "generated-prefix"
- S_UDP = 183, // "UDP"
- S_TCP = 184, // "TCP"
- S_JSON = 185, // "JSON"
- S_WHEN_PRESENT = 186, // "when-present"
- S_NEVER = 187, // "never"
- S_ALWAYS = 188, // "always"
- S_WHEN_NOT_PRESENT = 189, // "when-not-present"
- S_HOSTNAME_CHAR_SET = 190, // "hostname-char-set"
- S_HOSTNAME_CHAR_REPLACEMENT = 191, // "hostname-char-replacement"
- S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 192, // "early-global-reservations-lookup"
- S_IP_RESERVATIONS_UNIQUE = 193, // "ip-reservations-unique"
- S_RESERVATIONS_LOOKUP_FIRST = 194, // "reservations-lookup-first"
- S_LOGGERS = 195, // "loggers"
- S_OUTPUT_OPTIONS = 196, // "output_options"
- S_OUTPUT = 197, // "output"
- S_DEBUGLEVEL = 198, // "debuglevel"
- S_SEVERITY = 199, // "severity"
- S_FLUSH = 200, // "flush"
- S_MAXSIZE = 201, // "maxsize"
- S_MAXVER = 202, // "maxver"
- S_PATTERN = 203, // "pattern"
- S_COMPATIBILITY = 204, // "compatibility"
- S_LENIENT_OPTION_PARSING = 205, // "lenient-option-parsing"
- S_TOPLEVEL_JSON = 206, // TOPLEVEL_JSON
- S_TOPLEVEL_DHCP6 = 207, // TOPLEVEL_DHCP6
- S_SUB_DHCP6 = 208, // SUB_DHCP6
- S_SUB_INTERFACES6 = 209, // SUB_INTERFACES6
- S_SUB_SUBNET6 = 210, // SUB_SUBNET6
- S_SUB_POOL6 = 211, // SUB_POOL6
- S_SUB_PD_POOL = 212, // SUB_PD_POOL
- S_SUB_RESERVATION = 213, // SUB_RESERVATION
- S_SUB_OPTION_DEFS = 214, // SUB_OPTION_DEFS
- S_SUB_OPTION_DEF = 215, // SUB_OPTION_DEF
- S_SUB_OPTION_DATA = 216, // SUB_OPTION_DATA
- S_SUB_HOOKS_LIBRARY = 217, // SUB_HOOKS_LIBRARY
- S_SUB_DHCP_DDNS = 218, // SUB_DHCP_DDNS
- S_SUB_CONFIG_CONTROL = 219, // SUB_CONFIG_CONTROL
- S_STRING = 220, // "constant string"
- S_INTEGER = 221, // "integer"
- S_FLOAT = 222, // "floating point"
- S_BOOLEAN = 223, // "boolean"
- S_YYACCEPT = 224, // $accept
- S_start = 225, // start
- S_226_1 = 226, // $@1
- S_227_2 = 227, // $@2
- S_228_3 = 228, // $@3
- S_229_4 = 229, // $@4
- S_230_5 = 230, // $@5
- S_231_6 = 231, // $@6
- S_232_7 = 232, // $@7
- S_233_8 = 233, // $@8
- S_234_9 = 234, // $@9
- S_235_10 = 235, // $@10
- S_236_11 = 236, // $@11
- S_237_12 = 237, // $@12
- S_238_13 = 238, // $@13
- S_239_14 = 239, // $@14
- S_value = 240, // value
- S_sub_json = 241, // sub_json
- S_map2 = 242, // map2
- S_243_15 = 243, // $@15
- S_map_value = 244, // map_value
- S_map_content = 245, // map_content
- S_not_empty_map = 246, // not_empty_map
- S_list_generic = 247, // list_generic
- S_248_16 = 248, // $@16
- S_list_content = 249, // list_content
- S_not_empty_list = 250, // not_empty_list
- S_list_strings = 251, // list_strings
- S_252_17 = 252, // $@17
- S_list_strings_content = 253, // list_strings_content
- S_not_empty_list_strings = 254, // not_empty_list_strings
- S_unknown_map_entry = 255, // unknown_map_entry
- S_syntax_map = 256, // syntax_map
- S_257_18 = 257, // $@18
- S_global_object = 258, // global_object
- S_259_19 = 259, // $@19
- S_global_object_comma = 260, // global_object_comma
- S_sub_dhcp6 = 261, // sub_dhcp6
- S_262_20 = 262, // $@20
- S_global_params = 263, // global_params
- S_global_param = 264, // global_param
- S_data_directory = 265, // data_directory
- S_266_21 = 266, // $@21
- S_preferred_lifetime = 267, // preferred_lifetime
- S_min_preferred_lifetime = 268, // min_preferred_lifetime
- S_max_preferred_lifetime = 269, // max_preferred_lifetime
- S_valid_lifetime = 270, // valid_lifetime
- S_min_valid_lifetime = 271, // min_valid_lifetime
- S_max_valid_lifetime = 272, // max_valid_lifetime
- S_renew_timer = 273, // renew_timer
- S_rebind_timer = 274, // rebind_timer
- S_calculate_tee_times = 275, // calculate_tee_times
- S_t1_percent = 276, // t1_percent
- S_t2_percent = 277, // t2_percent
- S_cache_threshold = 278, // cache_threshold
- S_cache_max_age = 279, // cache_max_age
- S_decline_probation_period = 280, // decline_probation_period
- S_ddns_send_updates = 281, // ddns_send_updates
- S_ddns_override_no_update = 282, // ddns_override_no_update
- S_ddns_override_client_update = 283, // ddns_override_client_update
- S_ddns_replace_client_name = 284, // ddns_replace_client_name
- S_285_22 = 285, // $@22
- S_ddns_replace_client_name_value = 286, // ddns_replace_client_name_value
- S_ddns_generated_prefix = 287, // ddns_generated_prefix
- S_288_23 = 288, // $@23
- S_ddns_qualifying_suffix = 289, // ddns_qualifying_suffix
- S_290_24 = 290, // $@24
- S_ddns_update_on_renew = 291, // ddns_update_on_renew
- S_ddns_use_conflict_resolution = 292, // ddns_use_conflict_resolution
- S_ddns_ttl_percent = 293, // ddns_ttl_percent
- S_hostname_char_set = 294, // hostname_char_set
- S_295_25 = 295, // $@25
- S_hostname_char_replacement = 296, // hostname_char_replacement
- S_297_26 = 297, // $@26
- S_store_extended_info = 298, // store_extended_info
- S_statistic_default_sample_count = 299, // statistic_default_sample_count
- S_statistic_default_sample_age = 300, // statistic_default_sample_age
- S_server_tag = 301, // server_tag
- S_302_27 = 302, // $@27
- S_parked_packet_limit = 303, // parked_packet_limit
- S_allocator = 304, // allocator
- S_305_28 = 305, // $@28
- S_pd_allocator = 306, // pd_allocator
- S_307_29 = 307, // $@29
- S_early_global_reservations_lookup = 308, // early_global_reservations_lookup
- S_ip_reservations_unique = 309, // ip_reservations_unique
- S_reservations_lookup_first = 310, // reservations_lookup_first
- S_interfaces_config = 311, // interfaces_config
- S_312_30 = 312, // $@30
- S_sub_interfaces6 = 313, // sub_interfaces6
- S_314_31 = 314, // $@31
- S_interfaces_config_params = 315, // interfaces_config_params
- S_interfaces_config_param = 316, // interfaces_config_param
- S_interfaces_list = 317, // interfaces_list
- S_318_32 = 318, // $@32
- S_re_detect = 319, // re_detect
- S_service_sockets_require_all = 320, // service_sockets_require_all
- S_service_sockets_retry_wait_time = 321, // service_sockets_retry_wait_time
- S_service_sockets_max_retries = 322, // service_sockets_max_retries
- S_lease_database = 323, // lease_database
- S_324_33 = 324, // $@33
- S_hosts_database = 325, // hosts_database
- S_326_34 = 326, // $@34
- S_hosts_databases = 327, // hosts_databases
- S_328_35 = 328, // $@35
- S_database_list = 329, // database_list
- S_not_empty_database_list = 330, // not_empty_database_list
- S_database = 331, // database
- S_332_36 = 332, // $@36
- S_database_map_params = 333, // database_map_params
- S_database_map_param = 334, // database_map_param
- S_database_type = 335, // database_type
- S_336_37 = 336, // $@37
- S_db_type = 337, // db_type
- S_user = 338, // user
- S_339_38 = 339, // $@38
- S_password = 340, // password
- S_341_39 = 341, // $@39
- S_host = 342, // host
- S_343_40 = 343, // $@40
- S_port = 344, // port
- S_name = 345, // name
- S_346_41 = 346, // $@41
- S_persist = 347, // persist
- S_lfc_interval = 348, // lfc_interval
- S_readonly = 349, // readonly
- S_connect_timeout = 350, // connect_timeout
- S_read_timeout = 351, // read_timeout
- S_write_timeout = 352, // write_timeout
- S_tcp_user_timeout = 353, // tcp_user_timeout
- S_reconnect_wait_time = 354, // reconnect_wait_time
- S_on_fail = 355, // on_fail
- S_356_42 = 356, // $@42
- S_on_fail_mode = 357, // on_fail_mode
- S_max_row_errors = 358, // max_row_errors
- S_max_reconnect_tries = 359, // max_reconnect_tries
- S_trust_anchor = 360, // trust_anchor
- S_361_43 = 361, // $@43
- S_cert_file = 362, // cert_file
- S_363_44 = 363, // $@44
- S_key_file = 364, // key_file
- S_365_45 = 365, // $@45
- S_cipher_list = 366, // cipher_list
- S_367_46 = 367, // $@46
- S_sanity_checks = 368, // sanity_checks
- S_369_47 = 369, // $@47
- S_sanity_checks_params = 370, // sanity_checks_params
- S_sanity_checks_param = 371, // sanity_checks_param
- S_lease_checks = 372, // lease_checks
- S_373_48 = 373, // $@48
- S_extended_info_checks = 374, // extended_info_checks
- S_375_49 = 375, // $@49
- S_mac_sources = 376, // mac_sources
- S_377_50 = 377, // $@50
- S_mac_sources_list = 378, // mac_sources_list
- S_mac_sources_value = 379, // mac_sources_value
- S_duid_id = 380, // duid_id
- S_string_id = 381, // string_id
- S_host_reservation_identifiers = 382, // host_reservation_identifiers
- S_383_51 = 383, // $@51
- S_host_reservation_identifiers_list = 384, // host_reservation_identifiers_list
- S_host_reservation_identifier = 385, // host_reservation_identifier
- S_hw_address_id = 386, // hw_address_id
- S_flex_id = 387, // flex_id
- S_relay_supplied_options = 388, // relay_supplied_options
- S_389_52 = 389, // $@52
- S_dhcp_multi_threading = 390, // dhcp_multi_threading
- S_391_53 = 391, // $@53
- S_multi_threading_params = 392, // multi_threading_params
- S_multi_threading_param = 393, // multi_threading_param
- S_enable_multi_threading = 394, // enable_multi_threading
- S_thread_pool_size = 395, // thread_pool_size
- S_packet_queue_size = 396, // packet_queue_size
- S_hooks_libraries = 397, // hooks_libraries
- S_398_54 = 398, // $@54
- S_hooks_libraries_list = 399, // hooks_libraries_list
- S_not_empty_hooks_libraries_list = 400, // not_empty_hooks_libraries_list
- S_hooks_library = 401, // hooks_library
- S_402_55 = 402, // $@55
- S_sub_hooks_library = 403, // sub_hooks_library
- S_404_56 = 404, // $@56
- S_hooks_params = 405, // hooks_params
- S_hooks_param = 406, // hooks_param
- S_library = 407, // library
- S_408_57 = 408, // $@57
- S_parameters = 409, // parameters
- S_410_58 = 410, // $@58
- S_expired_leases_processing = 411, // expired_leases_processing
- S_412_59 = 412, // $@59
- S_expired_leases_params = 413, // expired_leases_params
- S_expired_leases_param = 414, // expired_leases_param
- S_reclaim_timer_wait_time = 415, // reclaim_timer_wait_time
- S_flush_reclaimed_timer_wait_time = 416, // flush_reclaimed_timer_wait_time
- S_hold_reclaimed_time = 417, // hold_reclaimed_time
- S_max_reclaim_leases = 418, // max_reclaim_leases
- S_max_reclaim_time = 419, // max_reclaim_time
- S_unwarned_reclaim_cycles = 420, // unwarned_reclaim_cycles
- S_subnet6_list = 421, // subnet6_list
- S_422_60 = 422, // $@60
- S_subnet6_list_content = 423, // subnet6_list_content
- S_not_empty_subnet6_list = 424, // not_empty_subnet6_list
- S_subnet6 = 425, // subnet6
- S_426_61 = 426, // $@61
- S_sub_subnet6 = 427, // sub_subnet6
- S_428_62 = 428, // $@62
- S_subnet6_params = 429, // subnet6_params
- S_subnet6_param = 430, // subnet6_param
- S_subnet = 431, // subnet
- S_432_63 = 432, // $@63
- S_interface = 433, // interface
- S_434_64 = 434, // $@64
- S_interface_id = 435, // interface_id
- S_436_65 = 436, // $@65
- S_client_class = 437, // client_class
- S_438_66 = 438, // $@66
- S_require_client_classes = 439, // require_client_classes
- S_440_67 = 440, // $@67
- S_reservations_global = 441, // reservations_global
- S_reservations_in_subnet = 442, // reservations_in_subnet
- S_reservations_out_of_pool = 443, // reservations_out_of_pool
- S_reservation_mode = 444, // reservation_mode
- S_445_68 = 445, // $@68
- S_hr_mode = 446, // hr_mode
- S_id = 447, // id
- S_rapid_commit = 448, // rapid_commit
- S_shared_networks = 449, // shared_networks
- S_450_69 = 450, // $@69
- S_shared_networks_content = 451, // shared_networks_content
- S_shared_networks_list = 452, // shared_networks_list
- S_shared_network = 453, // shared_network
- S_454_70 = 454, // $@70
- S_shared_network_params = 455, // shared_network_params
- S_shared_network_param = 456, // shared_network_param
- S_option_def_list = 457, // option_def_list
- S_458_71 = 458, // $@71
- S_sub_option_def_list = 459, // sub_option_def_list
- S_460_72 = 460, // $@72
- S_option_def_list_content = 461, // option_def_list_content
- S_not_empty_option_def_list = 462, // not_empty_option_def_list
- S_option_def_entry = 463, // option_def_entry
- S_464_73 = 464, // $@73
- S_sub_option_def = 465, // sub_option_def
- S_466_74 = 466, // $@74
- S_option_def_params = 467, // option_def_params
- S_not_empty_option_def_params = 468, // not_empty_option_def_params
- S_option_def_param = 469, // option_def_param
- S_option_def_name = 470, // option_def_name
- S_code = 471, // code
- S_option_def_code = 472, // option_def_code
- S_option_def_type = 473, // option_def_type
+ S_DDNS_CONFLICT_RESOLUTION_MODE = 93, // "ddns-conflict-resolution-mode"
+ S_CHECK_WITH_DHCID = 94, // "check-with-dhcid"
+ S_NO_CHECK_WITH_DHCID = 95, // "no-check-with-dhcid"
+ S_CHECK_EXISTS_WITH_DHCID = 96, // "check-exists-with-dhcid"
+ S_NO_CHECK_WITHOUT_DHCID = 97, // "no-check-without-dhcid"
+ S_SHARED_NETWORKS = 98, // "shared-networks"
+ S_POOLS = 99, // "pools"
+ S_POOL = 100, // "pool"
+ S_PD_POOLS = 101, // "pd-pools"
+ S_PREFIX = 102, // "prefix"
+ S_PREFIX_LEN = 103, // "prefix-len"
+ S_EXCLUDED_PREFIX = 104, // "excluded-prefix"
+ S_EXCLUDED_PREFIX_LEN = 105, // "excluded-prefix-len"
+ S_DELEGATED_LEN = 106, // "delegated-len"
+ S_USER_CONTEXT = 107, // "user-context"
+ S_COMMENT = 108, // "comment"
+ S_SUBNET = 109, // "subnet"
+ S_INTERFACE = 110, // "interface"
+ S_INTERFACE_ID = 111, // "interface-id"
+ S_ID = 112, // "id"
+ S_RAPID_COMMIT = 113, // "rapid-commit"
+ S_RESERVATION_MODE = 114, // "reservation-mode"
+ S_DISABLED = 115, // "disabled"
+ S_OUT_OF_POOL = 116, // "out-of-pool"
+ S_GLOBAL = 117, // "global"
+ S_ALL = 118, // "all"
+ S_RESERVATIONS_GLOBAL = 119, // "reservations-global"
+ S_RESERVATIONS_IN_SUBNET = 120, // "reservations-in-subnet"
+ S_RESERVATIONS_OUT_OF_POOL = 121, // "reservations-out-of-pool"
+ S_MAC_SOURCES = 122, // "mac-sources"
+ S_RELAY_SUPPLIED_OPTIONS = 123, // "relay-supplied-options"
+ S_HOST_RESERVATION_IDENTIFIERS = 124, // "host-reservation-identifiers"
+ S_SANITY_CHECKS = 125, // "sanity-checks"
+ S_LEASE_CHECKS = 126, // "lease-checks"
+ S_EXTENDED_INFO_CHECKS = 127, // "extended-info-checks"
+ S_CLIENT_CLASSES = 128, // "client-classes"
+ S_REQUIRE_CLIENT_CLASSES = 129, // "require-client-classes"
+ S_TEST = 130, // "test"
+ S_TEMPLATE_TEST = 131, // "template-test"
+ S_ONLY_IF_REQUIRED = 132, // "only-if-required"
+ S_CLIENT_CLASS = 133, // "client-class"
+ S_POOL_ID = 134, // "pool-id"
+ S_RESERVATIONS = 135, // "reservations"
+ S_IP_ADDRESSES = 136, // "ip-addresses"
+ S_PREFIXES = 137, // "prefixes"
+ S_DUID = 138, // "duid"
+ S_HW_ADDRESS = 139, // "hw-address"
+ S_HOSTNAME = 140, // "hostname"
+ S_FLEX_ID = 141, // "flex-id"
+ S_RELAY = 142, // "relay"
+ S_IP_ADDRESS = 143, // "ip-address"
+ S_HOOKS_LIBRARIES = 144, // "hooks-libraries"
+ S_LIBRARY = 145, // "library"
+ S_PARAMETERS = 146, // "parameters"
+ S_EXPIRED_LEASES_PROCESSING = 147, // "expired-leases-processing"
+ S_RECLAIM_TIMER_WAIT_TIME = 148, // "reclaim-timer-wait-time"
+ S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 149, // "flush-reclaimed-timer-wait-time"
+ S_HOLD_RECLAIMED_TIME = 150, // "hold-reclaimed-time"
+ S_MAX_RECLAIM_LEASES = 151, // "max-reclaim-leases"
+ S_MAX_RECLAIM_TIME = 152, // "max-reclaim-time"
+ S_UNWARNED_RECLAIM_CYCLES = 153, // "unwarned-reclaim-cycles"
+ S_SERVER_ID = 154, // "server-id"
+ S_LLT = 155, // "LLT"
+ S_EN = 156, // "EN"
+ S_LL = 157, // "LL"
+ S_IDENTIFIER = 158, // "identifier"
+ S_HTYPE = 159, // "htype"
+ S_TIME = 160, // "time"
+ S_ENTERPRISE_ID = 161, // "enterprise-id"
+ S_DHCP4O6_PORT = 162, // "dhcp4o6-port"
+ S_DHCP_MULTI_THREADING = 163, // "multi-threading"
+ S_ENABLE_MULTI_THREADING = 164, // "enable-multi-threading"
+ S_THREAD_POOL_SIZE = 165, // "thread-pool-size"
+ S_PACKET_QUEUE_SIZE = 166, // "packet-queue-size"
+ S_CONTROL_SOCKET = 167, // "control-socket"
+ S_SOCKET_TYPE = 168, // "socket-type"
+ S_SOCKET_NAME = 169, // "socket-name"
+ S_DHCP_QUEUE_CONTROL = 170, // "dhcp-queue-control"
+ S_ENABLE_QUEUE = 171, // "enable-queue"
+ S_QUEUE_TYPE = 172, // "queue-type"
+ S_CAPACITY = 173, // "capacity"
+ S_DHCP_DDNS = 174, // "dhcp-ddns"
+ S_ENABLE_UPDATES = 175, // "enable-updates"
+ S_QUALIFYING_SUFFIX = 176, // "qualifying-suffix"
+ S_SERVER_IP = 177, // "server-ip"
+ S_SERVER_PORT = 178, // "server-port"
+ S_SENDER_IP = 179, // "sender-ip"
+ S_SENDER_PORT = 180, // "sender-port"
+ S_MAX_QUEUE_SIZE = 181, // "max-queue-size"
+ S_NCR_PROTOCOL = 182, // "ncr-protocol"
+ S_NCR_FORMAT = 183, // "ncr-format"
+ S_OVERRIDE_NO_UPDATE = 184, // "override-no-update"
+ S_OVERRIDE_CLIENT_UPDATE = 185, // "override-client-update"
+ S_REPLACE_CLIENT_NAME = 186, // "replace-client-name"
+ S_GENERATED_PREFIX = 187, // "generated-prefix"
+ S_UDP = 188, // "UDP"
+ S_TCP = 189, // "TCP"
+ S_JSON = 190, // "JSON"
+ S_WHEN_PRESENT = 191, // "when-present"
+ S_NEVER = 192, // "never"
+ S_ALWAYS = 193, // "always"
+ S_WHEN_NOT_PRESENT = 194, // "when-not-present"
+ S_HOSTNAME_CHAR_SET = 195, // "hostname-char-set"
+ S_HOSTNAME_CHAR_REPLACEMENT = 196, // "hostname-char-replacement"
+ S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 197, // "early-global-reservations-lookup"
+ S_IP_RESERVATIONS_UNIQUE = 198, // "ip-reservations-unique"
+ S_RESERVATIONS_LOOKUP_FIRST = 199, // "reservations-lookup-first"
+ S_LOGGERS = 200, // "loggers"
+ S_OUTPUT_OPTIONS = 201, // "output_options"
+ S_OUTPUT = 202, // "output"
+ S_DEBUGLEVEL = 203, // "debuglevel"
+ S_SEVERITY = 204, // "severity"
+ S_FLUSH = 205, // "flush"
+ S_MAXSIZE = 206, // "maxsize"
+ S_MAXVER = 207, // "maxver"
+ S_PATTERN = 208, // "pattern"
+ S_COMPATIBILITY = 209, // "compatibility"
+ S_LENIENT_OPTION_PARSING = 210, // "lenient-option-parsing"
+ S_TOPLEVEL_JSON = 211, // TOPLEVEL_JSON
+ S_TOPLEVEL_DHCP6 = 212, // TOPLEVEL_DHCP6
+ S_SUB_DHCP6 = 213, // SUB_DHCP6
+ S_SUB_INTERFACES6 = 214, // SUB_INTERFACES6
+ S_SUB_SUBNET6 = 215, // SUB_SUBNET6
+ S_SUB_POOL6 = 216, // SUB_POOL6
+ S_SUB_PD_POOL = 217, // SUB_PD_POOL
+ S_SUB_RESERVATION = 218, // SUB_RESERVATION
+ S_SUB_OPTION_DEFS = 219, // SUB_OPTION_DEFS
+ S_SUB_OPTION_DEF = 220, // SUB_OPTION_DEF
+ S_SUB_OPTION_DATA = 221, // SUB_OPTION_DATA
+ S_SUB_HOOKS_LIBRARY = 222, // SUB_HOOKS_LIBRARY
+ S_SUB_DHCP_DDNS = 223, // SUB_DHCP_DDNS
+ S_SUB_CONFIG_CONTROL = 224, // SUB_CONFIG_CONTROL
+ S_STRING = 225, // "constant string"
+ S_INTEGER = 226, // "integer"
+ S_FLOAT = 227, // "floating point"
+ S_BOOLEAN = 228, // "boolean"
+ S_YYACCEPT = 229, // $accept
+ S_start = 230, // start
+ S_231_1 = 231, // $@1
+ S_232_2 = 232, // $@2
+ S_233_3 = 233, // $@3
+ S_234_4 = 234, // $@4
+ S_235_5 = 235, // $@5
+ S_236_6 = 236, // $@6
+ S_237_7 = 237, // $@7
+ S_238_8 = 238, // $@8
+ S_239_9 = 239, // $@9
+ S_240_10 = 240, // $@10
+ S_241_11 = 241, // $@11
+ S_242_12 = 242, // $@12
+ S_243_13 = 243, // $@13
+ S_244_14 = 244, // $@14
+ S_value = 245, // value
+ S_sub_json = 246, // sub_json
+ S_map2 = 247, // map2
+ S_248_15 = 248, // $@15
+ S_map_value = 249, // map_value
+ S_map_content = 250, // map_content
+ S_not_empty_map = 251, // not_empty_map
+ S_list_generic = 252, // list_generic
+ S_253_16 = 253, // $@16
+ S_list_content = 254, // list_content
+ S_not_empty_list = 255, // not_empty_list
+ S_list_strings = 256, // list_strings
+ S_257_17 = 257, // $@17
+ S_list_strings_content = 258, // list_strings_content
+ S_not_empty_list_strings = 259, // not_empty_list_strings
+ S_unknown_map_entry = 260, // unknown_map_entry
+ S_syntax_map = 261, // syntax_map
+ S_262_18 = 262, // $@18
+ S_global_object = 263, // global_object
+ S_264_19 = 264, // $@19
+ S_global_object_comma = 265, // global_object_comma
+ S_sub_dhcp6 = 266, // sub_dhcp6
+ S_267_20 = 267, // $@20
+ S_global_params = 268, // global_params
+ S_global_param = 269, // global_param
+ S_data_directory = 270, // data_directory
+ S_271_21 = 271, // $@21
+ S_preferred_lifetime = 272, // preferred_lifetime
+ S_min_preferred_lifetime = 273, // min_preferred_lifetime
+ S_max_preferred_lifetime = 274, // max_preferred_lifetime
+ S_valid_lifetime = 275, // valid_lifetime
+ S_min_valid_lifetime = 276, // min_valid_lifetime
+ S_max_valid_lifetime = 277, // max_valid_lifetime
+ S_renew_timer = 278, // renew_timer
+ S_rebind_timer = 279, // rebind_timer
+ S_calculate_tee_times = 280, // calculate_tee_times
+ S_t1_percent = 281, // t1_percent
+ S_t2_percent = 282, // t2_percent
+ S_cache_threshold = 283, // cache_threshold
+ S_cache_max_age = 284, // cache_max_age
+ S_decline_probation_period = 285, // decline_probation_period
+ S_ddns_send_updates = 286, // ddns_send_updates
+ S_ddns_override_no_update = 287, // ddns_override_no_update
+ S_ddns_override_client_update = 288, // ddns_override_client_update
+ S_ddns_replace_client_name = 289, // ddns_replace_client_name
+ S_290_22 = 290, // $@22
+ S_ddns_replace_client_name_value = 291, // ddns_replace_client_name_value
+ S_ddns_generated_prefix = 292, // ddns_generated_prefix
+ S_293_23 = 293, // $@23
+ S_ddns_qualifying_suffix = 294, // ddns_qualifying_suffix
+ S_295_24 = 295, // $@24
+ S_ddns_update_on_renew = 296, // ddns_update_on_renew
+ S_ddns_use_conflict_resolution = 297, // ddns_use_conflict_resolution
+ S_ddns_conflict_resolution_mode = 298, // ddns_conflict_resolution_mode
+ S_299_25 = 299, // $@25
+ S_ddns_conflict_resolution_mode_value = 300, // ddns_conflict_resolution_mode_value
+ S_ddns_ttl_percent = 301, // ddns_ttl_percent
+ S_hostname_char_set = 302, // hostname_char_set
+ S_303_26 = 303, // $@26
+ S_hostname_char_replacement = 304, // hostname_char_replacement
+ S_305_27 = 305, // $@27
+ S_store_extended_info = 306, // store_extended_info
+ S_statistic_default_sample_count = 307, // statistic_default_sample_count
+ S_statistic_default_sample_age = 308, // statistic_default_sample_age
+ S_server_tag = 309, // server_tag
+ S_310_28 = 310, // $@28
+ S_parked_packet_limit = 311, // parked_packet_limit
+ S_allocator = 312, // allocator
+ S_313_29 = 313, // $@29
+ S_pd_allocator = 314, // pd_allocator
+ S_315_30 = 315, // $@30
+ S_early_global_reservations_lookup = 316, // early_global_reservations_lookup
+ S_ip_reservations_unique = 317, // ip_reservations_unique
+ S_reservations_lookup_first = 318, // reservations_lookup_first
+ S_interfaces_config = 319, // interfaces_config
+ S_320_31 = 320, // $@31
+ S_sub_interfaces6 = 321, // sub_interfaces6
+ S_322_32 = 322, // $@32
+ S_interfaces_config_params = 323, // interfaces_config_params
+ S_interfaces_config_param = 324, // interfaces_config_param
+ S_interfaces_list = 325, // interfaces_list
+ S_326_33 = 326, // $@33
+ S_re_detect = 327, // re_detect
+ S_service_sockets_require_all = 328, // service_sockets_require_all
+ S_service_sockets_retry_wait_time = 329, // service_sockets_retry_wait_time
+ S_service_sockets_max_retries = 330, // service_sockets_max_retries
+ S_lease_database = 331, // lease_database
+ S_332_34 = 332, // $@34
+ S_hosts_database = 333, // hosts_database
+ S_334_35 = 334, // $@35
+ S_hosts_databases = 335, // hosts_databases
+ S_336_36 = 336, // $@36
+ S_database_list = 337, // database_list
+ S_not_empty_database_list = 338, // not_empty_database_list
+ S_database = 339, // database
+ S_340_37 = 340, // $@37
+ S_database_map_params = 341, // database_map_params
+ S_database_map_param = 342, // database_map_param
+ S_database_type = 343, // database_type
+ S_344_38 = 344, // $@38
+ S_db_type = 345, // db_type
+ S_user = 346, // user
+ S_347_39 = 347, // $@39
+ S_password = 348, // password
+ S_349_40 = 349, // $@40
+ S_host = 350, // host
+ S_351_41 = 351, // $@41
+ S_port = 352, // port
+ S_name = 353, // name
+ S_354_42 = 354, // $@42
+ S_persist = 355, // persist
+ S_lfc_interval = 356, // lfc_interval
+ S_readonly = 357, // readonly
+ S_connect_timeout = 358, // connect_timeout
+ S_read_timeout = 359, // read_timeout
+ S_write_timeout = 360, // write_timeout
+ S_tcp_user_timeout = 361, // tcp_user_timeout
+ S_reconnect_wait_time = 362, // reconnect_wait_time
+ S_on_fail = 363, // on_fail
+ S_364_43 = 364, // $@43
+ S_on_fail_mode = 365, // on_fail_mode
+ S_max_row_errors = 366, // max_row_errors
+ S_max_reconnect_tries = 367, // max_reconnect_tries
+ S_trust_anchor = 368, // trust_anchor
+ S_369_44 = 369, // $@44
+ S_cert_file = 370, // cert_file
+ S_371_45 = 371, // $@45
+ S_key_file = 372, // key_file
+ S_373_46 = 373, // $@46
+ S_cipher_list = 374, // cipher_list
+ S_375_47 = 375, // $@47
+ S_sanity_checks = 376, // sanity_checks
+ S_377_48 = 377, // $@48
+ S_sanity_checks_params = 378, // sanity_checks_params
+ S_sanity_checks_param = 379, // sanity_checks_param
+ S_lease_checks = 380, // lease_checks
+ S_381_49 = 381, // $@49
+ S_extended_info_checks = 382, // extended_info_checks
+ S_383_50 = 383, // $@50
+ S_mac_sources = 384, // mac_sources
+ S_385_51 = 385, // $@51
+ S_mac_sources_list = 386, // mac_sources_list
+ S_mac_sources_value = 387, // mac_sources_value
+ S_duid_id = 388, // duid_id
+ S_string_id = 389, // string_id
+ S_host_reservation_identifiers = 390, // host_reservation_identifiers
+ S_391_52 = 391, // $@52
+ S_host_reservation_identifiers_list = 392, // host_reservation_identifiers_list
+ S_host_reservation_identifier = 393, // host_reservation_identifier
+ S_hw_address_id = 394, // hw_address_id
+ S_flex_id = 395, // flex_id
+ S_relay_supplied_options = 396, // relay_supplied_options
+ S_397_53 = 397, // $@53
+ S_dhcp_multi_threading = 398, // dhcp_multi_threading
+ S_399_54 = 399, // $@54
+ S_multi_threading_params = 400, // multi_threading_params
+ S_multi_threading_param = 401, // multi_threading_param
+ S_enable_multi_threading = 402, // enable_multi_threading
+ S_thread_pool_size = 403, // thread_pool_size
+ S_packet_queue_size = 404, // packet_queue_size
+ S_hooks_libraries = 405, // hooks_libraries
+ S_406_55 = 406, // $@55
+ S_hooks_libraries_list = 407, // hooks_libraries_list
+ S_not_empty_hooks_libraries_list = 408, // not_empty_hooks_libraries_list
+ S_hooks_library = 409, // hooks_library
+ S_410_56 = 410, // $@56
+ S_sub_hooks_library = 411, // sub_hooks_library
+ S_412_57 = 412, // $@57
+ S_hooks_params = 413, // hooks_params
+ S_hooks_param = 414, // hooks_param
+ S_library = 415, // library
+ S_416_58 = 416, // $@58
+ S_parameters = 417, // parameters
+ S_418_59 = 418, // $@59
+ S_expired_leases_processing = 419, // expired_leases_processing
+ S_420_60 = 420, // $@60
+ S_expired_leases_params = 421, // expired_leases_params
+ S_expired_leases_param = 422, // expired_leases_param
+ S_reclaim_timer_wait_time = 423, // reclaim_timer_wait_time
+ S_flush_reclaimed_timer_wait_time = 424, // flush_reclaimed_timer_wait_time
+ S_hold_reclaimed_time = 425, // hold_reclaimed_time
+ S_max_reclaim_leases = 426, // max_reclaim_leases
+ S_max_reclaim_time = 427, // max_reclaim_time
+ S_unwarned_reclaim_cycles = 428, // unwarned_reclaim_cycles
+ S_subnet6_list = 429, // subnet6_list
+ S_430_61 = 430, // $@61
+ S_subnet6_list_content = 431, // subnet6_list_content
+ S_not_empty_subnet6_list = 432, // not_empty_subnet6_list
+ S_subnet6 = 433, // subnet6
+ S_434_62 = 434, // $@62
+ S_sub_subnet6 = 435, // sub_subnet6
+ S_436_63 = 436, // $@63
+ S_subnet6_params = 437, // subnet6_params
+ S_subnet6_param = 438, // subnet6_param
+ S_subnet = 439, // subnet
+ S_440_64 = 440, // $@64
+ S_interface = 441, // interface
+ S_442_65 = 442, // $@65
+ S_interface_id = 443, // interface_id
+ S_444_66 = 444, // $@66
+ S_client_class = 445, // client_class
+ S_446_67 = 446, // $@67
+ S_require_client_classes = 447, // require_client_classes
+ S_448_68 = 448, // $@68
+ S_reservations_global = 449, // reservations_global
+ S_reservations_in_subnet = 450, // reservations_in_subnet
+ S_reservations_out_of_pool = 451, // reservations_out_of_pool
+ S_reservation_mode = 452, // reservation_mode
+ S_453_69 = 453, // $@69
+ S_hr_mode = 454, // hr_mode
+ S_id = 455, // id
+ S_rapid_commit = 456, // rapid_commit
+ S_shared_networks = 457, // shared_networks
+ S_458_70 = 458, // $@70
+ S_shared_networks_content = 459, // shared_networks_content
+ S_shared_networks_list = 460, // shared_networks_list
+ S_shared_network = 461, // shared_network
+ S_462_71 = 462, // $@71
+ S_shared_network_params = 463, // shared_network_params
+ S_shared_network_param = 464, // shared_network_param
+ S_option_def_list = 465, // option_def_list
+ S_466_72 = 466, // $@72
+ S_sub_option_def_list = 467, // sub_option_def_list
+ S_468_73 = 468, // $@73
+ S_option_def_list_content = 469, // option_def_list_content
+ S_not_empty_option_def_list = 470, // not_empty_option_def_list
+ S_option_def_entry = 471, // option_def_entry
+ S_472_74 = 472, // $@74
+ S_sub_option_def = 473, // sub_option_def
S_474_75 = 474, // $@75
- S_option_def_record_types = 475, // option_def_record_types
- S_476_76 = 476, // $@76
- S_space = 477, // space
- S_478_77 = 478, // $@77
- S_option_def_space = 479, // option_def_space
- S_option_def_encapsulate = 480, // option_def_encapsulate
- S_481_78 = 481, // $@78
- S_option_def_array = 482, // option_def_array
- S_option_data_list = 483, // option_data_list
- S_484_79 = 484, // $@79
- S_option_data_list_content = 485, // option_data_list_content
- S_not_empty_option_data_list = 486, // not_empty_option_data_list
- S_option_data_entry = 487, // option_data_entry
- S_488_80 = 488, // $@80
- S_sub_option_data = 489, // sub_option_data
- S_490_81 = 490, // $@81
- S_option_data_params = 491, // option_data_params
- S_not_empty_option_data_params = 492, // not_empty_option_data_params
- S_option_data_param = 493, // option_data_param
- S_option_data_name = 494, // option_data_name
- S_option_data_data = 495, // option_data_data
- S_496_82 = 496, // $@82
- S_option_data_code = 497, // option_data_code
- S_option_data_space = 498, // option_data_space
- S_option_data_csv_format = 499, // option_data_csv_format
- S_option_data_always_send = 500, // option_data_always_send
- S_option_data_never_send = 501, // option_data_never_send
- S_pools_list = 502, // pools_list
- S_503_83 = 503, // $@83
- S_pools_list_content = 504, // pools_list_content
- S_not_empty_pools_list = 505, // not_empty_pools_list
- S_pool_list_entry = 506, // pool_list_entry
- S_507_84 = 507, // $@84
- S_sub_pool6 = 508, // sub_pool6
- S_509_85 = 509, // $@85
- S_pool_params = 510, // pool_params
- S_pool_param = 511, // pool_param
- S_pool_entry = 512, // pool_entry
- S_513_86 = 513, // $@86
- S_pool_id = 514, // pool_id
- S_user_context = 515, // user_context
- S_516_87 = 516, // $@87
- S_comment = 517, // comment
- S_518_88 = 518, // $@88
- S_pd_pools_list = 519, // pd_pools_list
- S_520_89 = 520, // $@89
- S_pd_pools_list_content = 521, // pd_pools_list_content
- S_not_empty_pd_pools_list = 522, // not_empty_pd_pools_list
- S_pd_pool_entry = 523, // pd_pool_entry
- S_524_90 = 524, // $@90
- S_sub_pd_pool = 525, // sub_pd_pool
- S_526_91 = 526, // $@91
- S_pd_pool_params = 527, // pd_pool_params
- S_pd_pool_param = 528, // pd_pool_param
- S_pd_prefix = 529, // pd_prefix
- S_530_92 = 530, // $@92
- S_pd_prefix_len = 531, // pd_prefix_len
- S_excluded_prefix = 532, // excluded_prefix
- S_533_93 = 533, // $@93
- S_excluded_prefix_len = 534, // excluded_prefix_len
- S_pd_delegated_len = 535, // pd_delegated_len
- S_reservations = 536, // reservations
- S_537_94 = 537, // $@94
- S_reservations_list = 538, // reservations_list
- S_not_empty_reservations_list = 539, // not_empty_reservations_list
- S_reservation = 540, // reservation
- S_541_95 = 541, // $@95
- S_sub_reservation = 542, // sub_reservation
- S_543_96 = 543, // $@96
- S_reservation_params = 544, // reservation_params
- S_not_empty_reservation_params = 545, // not_empty_reservation_params
- S_reservation_param = 546, // reservation_param
- S_ip_addresses = 547, // ip_addresses
- S_548_97 = 548, // $@97
- S_prefixes = 549, // prefixes
- S_550_98 = 550, // $@98
- S_duid = 551, // duid
- S_552_99 = 552, // $@99
- S_hw_address = 553, // hw_address
- S_554_100 = 554, // $@100
- S_hostname = 555, // hostname
- S_556_101 = 556, // $@101
- S_flex_id_value = 557, // flex_id_value
- S_558_102 = 558, // $@102
- S_reservation_client_classes = 559, // reservation_client_classes
- S_560_103 = 560, // $@103
- S_relay = 561, // relay
- S_562_104 = 562, // $@104
- S_relay_map = 563, // relay_map
- S_ip_address = 564, // ip_address
- S_565_105 = 565, // $@105
- S_client_classes = 566, // client_classes
- S_567_106 = 567, // $@106
- S_client_classes_list = 568, // client_classes_list
- S_client_class_entry = 569, // client_class_entry
- S_570_107 = 570, // $@107
- S_client_class_params = 571, // client_class_params
- S_not_empty_client_class_params = 572, // not_empty_client_class_params
- S_client_class_param = 573, // client_class_param
- S_client_class_name = 574, // client_class_name
- S_client_class_test = 575, // client_class_test
- S_576_108 = 576, // $@108
- S_client_class_template_test = 577, // client_class_template_test
- S_578_109 = 578, // $@109
- S_only_if_required = 579, // only_if_required
- S_server_id = 580, // server_id
- S_581_110 = 581, // $@110
- S_server_id_params = 582, // server_id_params
- S_server_id_param = 583, // server_id_param
- S_server_id_type = 584, // server_id_type
- S_585_111 = 585, // $@111
- S_duid_type = 586, // duid_type
- S_htype = 587, // htype
- S_identifier = 588, // identifier
- S_589_112 = 589, // $@112
- S_time = 590, // time
- S_enterprise_id = 591, // enterprise_id
- S_dhcp4o6_port = 592, // dhcp4o6_port
- S_control_socket = 593, // control_socket
- S_594_113 = 594, // $@113
- S_control_socket_params = 595, // control_socket_params
- S_control_socket_param = 596, // control_socket_param
- S_socket_type = 597, // socket_type
- S_598_114 = 598, // $@114
- S_socket_name = 599, // socket_name
- S_600_115 = 600, // $@115
- S_dhcp_queue_control = 601, // dhcp_queue_control
- S_602_116 = 602, // $@116
- S_queue_control_params = 603, // queue_control_params
- S_queue_control_param = 604, // queue_control_param
- S_enable_queue = 605, // enable_queue
- S_queue_type = 606, // queue_type
- S_607_117 = 607, // $@117
- S_capacity = 608, // capacity
- S_arbitrary_map_entry = 609, // arbitrary_map_entry
- S_610_118 = 610, // $@118
- S_dhcp_ddns = 611, // dhcp_ddns
- S_612_119 = 612, // $@119
- S_sub_dhcp_ddns = 613, // sub_dhcp_ddns
- S_614_120 = 614, // $@120
- S_dhcp_ddns_params = 615, // dhcp_ddns_params
- S_dhcp_ddns_param = 616, // dhcp_ddns_param
- S_enable_updates = 617, // enable_updates
- S_dep_qualifying_suffix = 618, // dep_qualifying_suffix
- S_619_121 = 619, // $@121
- S_server_ip = 620, // server_ip
- S_621_122 = 621, // $@122
- S_server_port = 622, // server_port
- S_sender_ip = 623, // sender_ip
- S_624_123 = 624, // $@123
- S_sender_port = 625, // sender_port
- S_max_queue_size = 626, // max_queue_size
- S_ncr_protocol = 627, // ncr_protocol
- S_628_124 = 628, // $@124
- S_ncr_protocol_value = 629, // ncr_protocol_value
- S_ncr_format = 630, // ncr_format
- S_631_125 = 631, // $@125
- S_dep_override_no_update = 632, // dep_override_no_update
- S_dep_override_client_update = 633, // dep_override_client_update
- S_dep_replace_client_name = 634, // dep_replace_client_name
- S_635_126 = 635, // $@126
- S_dep_generated_prefix = 636, // dep_generated_prefix
- S_637_127 = 637, // $@127
- S_dep_hostname_char_set = 638, // dep_hostname_char_set
- S_639_128 = 639, // $@128
- S_dep_hostname_char_replacement = 640, // dep_hostname_char_replacement
- S_641_129 = 641, // $@129
- S_config_control = 642, // config_control
- S_643_130 = 643, // $@130
- S_sub_config_control = 644, // sub_config_control
- S_645_131 = 645, // $@131
- S_config_control_params = 646, // config_control_params
- S_config_control_param = 647, // config_control_param
- S_config_databases = 648, // config_databases
- S_649_132 = 649, // $@132
- S_config_fetch_wait_time = 650, // config_fetch_wait_time
- S_loggers = 651, // loggers
- S_652_133 = 652, // $@133
- S_loggers_entries = 653, // loggers_entries
- S_logger_entry = 654, // logger_entry
- S_655_134 = 655, // $@134
- S_logger_params = 656, // logger_params
- S_logger_param = 657, // logger_param
- S_debuglevel = 658, // debuglevel
- S_severity = 659, // severity
- S_660_135 = 660, // $@135
- S_output_options_list = 661, // output_options_list
- S_662_136 = 662, // $@136
- S_output_options_list_content = 663, // output_options_list_content
- S_output_entry = 664, // output_entry
- S_665_137 = 665, // $@137
- S_output_params_list = 666, // output_params_list
- S_output_params = 667, // output_params
- S_output = 668, // output
- S_669_138 = 669, // $@138
- S_flush = 670, // flush
- S_maxsize = 671, // maxsize
- S_maxver = 672, // maxver
- S_pattern = 673, // pattern
- S_674_139 = 674, // $@139
- S_compatibility = 675, // compatibility
- S_676_140 = 676, // $@140
- S_compatibility_params = 677, // compatibility_params
- S_compatibility_param = 678, // compatibility_param
- S_lenient_option_parsing = 679 // lenient_option_parsing
+ S_option_def_params = 475, // option_def_params
+ S_not_empty_option_def_params = 476, // not_empty_option_def_params
+ S_option_def_param = 477, // option_def_param
+ S_option_def_name = 478, // option_def_name
+ S_code = 479, // code
+ S_option_def_code = 480, // option_def_code
+ S_option_def_type = 481, // option_def_type
+ S_482_76 = 482, // $@76
+ S_option_def_record_types = 483, // option_def_record_types
+ S_484_77 = 484, // $@77
+ S_space = 485, // space
+ S_486_78 = 486, // $@78
+ S_option_def_space = 487, // option_def_space
+ S_option_def_encapsulate = 488, // option_def_encapsulate
+ S_489_79 = 489, // $@79
+ S_option_def_array = 490, // option_def_array
+ S_option_data_list = 491, // option_data_list
+ S_492_80 = 492, // $@80
+ S_option_data_list_content = 493, // option_data_list_content
+ S_not_empty_option_data_list = 494, // not_empty_option_data_list
+ S_option_data_entry = 495, // option_data_entry
+ S_496_81 = 496, // $@81
+ S_sub_option_data = 497, // sub_option_data
+ S_498_82 = 498, // $@82
+ S_option_data_params = 499, // option_data_params
+ S_not_empty_option_data_params = 500, // not_empty_option_data_params
+ S_option_data_param = 501, // option_data_param
+ S_option_data_name = 502, // option_data_name
+ S_option_data_data = 503, // option_data_data
+ S_504_83 = 504, // $@83
+ S_option_data_code = 505, // option_data_code
+ S_option_data_space = 506, // option_data_space
+ S_option_data_csv_format = 507, // option_data_csv_format
+ S_option_data_always_send = 508, // option_data_always_send
+ S_option_data_never_send = 509, // option_data_never_send
+ S_pools_list = 510, // pools_list
+ S_511_84 = 511, // $@84
+ S_pools_list_content = 512, // pools_list_content
+ S_not_empty_pools_list = 513, // not_empty_pools_list
+ S_pool_list_entry = 514, // pool_list_entry
+ S_515_85 = 515, // $@85
+ S_sub_pool6 = 516, // sub_pool6
+ S_517_86 = 517, // $@86
+ S_pool_params = 518, // pool_params
+ S_pool_param = 519, // pool_param
+ S_pool_entry = 520, // pool_entry
+ S_521_87 = 521, // $@87
+ S_pool_id = 522, // pool_id
+ S_user_context = 523, // user_context
+ S_524_88 = 524, // $@88
+ S_comment = 525, // comment
+ S_526_89 = 526, // $@89
+ S_pd_pools_list = 527, // pd_pools_list
+ S_528_90 = 528, // $@90
+ S_pd_pools_list_content = 529, // pd_pools_list_content
+ S_not_empty_pd_pools_list = 530, // not_empty_pd_pools_list
+ S_pd_pool_entry = 531, // pd_pool_entry
+ S_532_91 = 532, // $@91
+ S_sub_pd_pool = 533, // sub_pd_pool
+ S_534_92 = 534, // $@92
+ S_pd_pool_params = 535, // pd_pool_params
+ S_pd_pool_param = 536, // pd_pool_param
+ S_pd_prefix = 537, // pd_prefix
+ S_538_93 = 538, // $@93
+ S_pd_prefix_len = 539, // pd_prefix_len
+ S_excluded_prefix = 540, // excluded_prefix
+ S_541_94 = 541, // $@94
+ S_excluded_prefix_len = 542, // excluded_prefix_len
+ S_pd_delegated_len = 543, // pd_delegated_len
+ S_reservations = 544, // reservations
+ S_545_95 = 545, // $@95
+ S_reservations_list = 546, // reservations_list
+ S_not_empty_reservations_list = 547, // not_empty_reservations_list
+ S_reservation = 548, // reservation
+ S_549_96 = 549, // $@96
+ S_sub_reservation = 550, // sub_reservation
+ S_551_97 = 551, // $@97
+ S_reservation_params = 552, // reservation_params
+ S_not_empty_reservation_params = 553, // not_empty_reservation_params
+ S_reservation_param = 554, // reservation_param
+ S_ip_addresses = 555, // ip_addresses
+ S_556_98 = 556, // $@98
+ S_prefixes = 557, // prefixes
+ S_558_99 = 558, // $@99
+ S_duid = 559, // duid
+ S_560_100 = 560, // $@100
+ S_hw_address = 561, // hw_address
+ S_562_101 = 562, // $@101
+ S_hostname = 563, // hostname
+ S_564_102 = 564, // $@102
+ S_flex_id_value = 565, // flex_id_value
+ S_566_103 = 566, // $@103
+ S_reservation_client_classes = 567, // reservation_client_classes
+ S_568_104 = 568, // $@104
+ S_relay = 569, // relay
+ S_570_105 = 570, // $@105
+ S_relay_map = 571, // relay_map
+ S_ip_address = 572, // ip_address
+ S_573_106 = 573, // $@106
+ S_client_classes = 574, // client_classes
+ S_575_107 = 575, // $@107
+ S_client_classes_list = 576, // client_classes_list
+ S_client_class_entry = 577, // client_class_entry
+ S_578_108 = 578, // $@108
+ S_client_class_params = 579, // client_class_params
+ S_not_empty_client_class_params = 580, // not_empty_client_class_params
+ S_client_class_param = 581, // client_class_param
+ S_client_class_name = 582, // client_class_name
+ S_client_class_test = 583, // client_class_test
+ S_584_109 = 584, // $@109
+ S_client_class_template_test = 585, // client_class_template_test
+ S_586_110 = 586, // $@110
+ S_only_if_required = 587, // only_if_required
+ S_server_id = 588, // server_id
+ S_589_111 = 589, // $@111
+ S_server_id_params = 590, // server_id_params
+ S_server_id_param = 591, // server_id_param
+ S_server_id_type = 592, // server_id_type
+ S_593_112 = 593, // $@112
+ S_duid_type = 594, // duid_type
+ S_htype = 595, // htype
+ S_identifier = 596, // identifier
+ S_597_113 = 597, // $@113
+ S_time = 598, // time
+ S_enterprise_id = 599, // enterprise_id
+ S_dhcp4o6_port = 600, // dhcp4o6_port
+ S_control_socket = 601, // control_socket
+ S_602_114 = 602, // $@114
+ S_control_socket_params = 603, // control_socket_params
+ S_control_socket_param = 604, // control_socket_param
+ S_socket_type = 605, // socket_type
+ S_606_115 = 606, // $@115
+ S_socket_name = 607, // socket_name
+ S_608_116 = 608, // $@116
+ S_dhcp_queue_control = 609, // dhcp_queue_control
+ S_610_117 = 610, // $@117
+ S_queue_control_params = 611, // queue_control_params
+ S_queue_control_param = 612, // queue_control_param
+ S_enable_queue = 613, // enable_queue
+ S_queue_type = 614, // queue_type
+ S_615_118 = 615, // $@118
+ S_capacity = 616, // capacity
+ S_arbitrary_map_entry = 617, // arbitrary_map_entry
+ S_618_119 = 618, // $@119
+ S_dhcp_ddns = 619, // dhcp_ddns
+ S_620_120 = 620, // $@120
+ S_sub_dhcp_ddns = 621, // sub_dhcp_ddns
+ S_622_121 = 622, // $@121
+ S_dhcp_ddns_params = 623, // dhcp_ddns_params
+ S_dhcp_ddns_param = 624, // dhcp_ddns_param
+ S_enable_updates = 625, // enable_updates
+ S_dep_qualifying_suffix = 626, // dep_qualifying_suffix
+ S_627_122 = 627, // $@122
+ S_server_ip = 628, // server_ip
+ S_629_123 = 629, // $@123
+ S_server_port = 630, // server_port
+ S_sender_ip = 631, // sender_ip
+ S_632_124 = 632, // $@124
+ S_sender_port = 633, // sender_port
+ S_max_queue_size = 634, // max_queue_size
+ S_ncr_protocol = 635, // ncr_protocol
+ S_636_125 = 636, // $@125
+ S_ncr_protocol_value = 637, // ncr_protocol_value
+ S_ncr_format = 638, // ncr_format
+ S_639_126 = 639, // $@126
+ S_dep_override_no_update = 640, // dep_override_no_update
+ S_dep_override_client_update = 641, // dep_override_client_update
+ S_dep_replace_client_name = 642, // dep_replace_client_name
+ S_643_127 = 643, // $@127
+ S_dep_generated_prefix = 644, // dep_generated_prefix
+ S_645_128 = 645, // $@128
+ S_dep_hostname_char_set = 646, // dep_hostname_char_set
+ S_647_129 = 647, // $@129
+ S_dep_hostname_char_replacement = 648, // dep_hostname_char_replacement
+ S_649_130 = 649, // $@130
+ S_config_control = 650, // config_control
+ S_651_131 = 651, // $@131
+ S_sub_config_control = 652, // sub_config_control
+ S_653_132 = 653, // $@132
+ S_config_control_params = 654, // config_control_params
+ S_config_control_param = 655, // config_control_param
+ S_config_databases = 656, // config_databases
+ S_657_133 = 657, // $@133
+ S_config_fetch_wait_time = 658, // config_fetch_wait_time
+ S_loggers = 659, // loggers
+ S_660_134 = 660, // $@134
+ S_loggers_entries = 661, // loggers_entries
+ S_logger_entry = 662, // logger_entry
+ S_663_135 = 663, // $@135
+ S_logger_params = 664, // logger_params
+ S_logger_param = 665, // logger_param
+ S_debuglevel = 666, // debuglevel
+ S_severity = 667, // severity
+ S_668_136 = 668, // $@136
+ S_output_options_list = 669, // output_options_list
+ S_670_137 = 670, // $@137
+ S_output_options_list_content = 671, // output_options_list_content
+ S_output_entry = 672, // output_entry
+ S_673_138 = 673, // $@138
+ S_output_params_list = 674, // output_params_list
+ S_output_params = 675, // output_params
+ S_output = 676, // output
+ S_677_139 = 677, // $@139
+ S_flush = 678, // flush
+ S_maxsize = 679, // maxsize
+ S_maxver = 680, // maxver
+ S_pattern = 681, // pattern
+ S_682_140 = 682, // $@140
+ S_compatibility = 683, // compatibility
+ S_684_141 = 684, // $@141
+ S_compatibility_params = 685, // compatibility_params
+ S_compatibility_param = 686, // compatibility_param
+ S_lenient_option_parsing = 687 // lenient_option_parsing
};
};
typedef Base super_type;
/// Default constructor.
- basic_symbol () YY_NOEXCEPT
+ basic_symbol ()
: value ()
, location ()
{}
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
/// 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)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
: Base (t)
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
: Base (t)
clear ();
}
-
-
/// Destroy contents, and record that is empty.
- void clear () YY_NOEXCEPT
+ void clear ()
{
// User destructor.
symbol_kind_type yykind = 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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
void move (basic_symbol& s);
/// The semantic value.
- value_type value;
+ semantic_type value;
/// The location.
location_type location;
/// Type access provider for token (enum) based symbols.
struct by_kind
{
- /// The symbol kind as needed by the constructor.
- typedef token_kind_type kind_type;
-
/// Default constructor.
- by_kind () YY_NOEXCEPT;
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_kind (by_kind&& that) YY_NOEXCEPT;
+ by_kind (by_kind&& 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_kind (const by_kind& that);
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
+ /// Constructor from (external) token numbers.
+ by_kind (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);
typedef basic_symbol<by_kind> 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_PARSER6_error || tok == token::TOKEN_PARSER6_UNDEF || 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_SERVICE_SOCKETS_REQUIRE_ALL || tok == token::TOKEN_SERVICE_SOCKETS_RETRY_WAIT_TIME || tok == token::TOKEN_SERVICE_SOCKETS_MAX_RETRIES || 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_READ_TIMEOUT || tok == token::TOKEN_WRITE_TIMEOUT || tok == token::TOKEN_TCP_USER_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_DDNS_TTL_PERCENT || 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_NEVER_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_ALLOCATOR || tok == token::TOKEN_PD_ALLOCATOR || tok == token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE || tok == token::TOKEN_CHECK_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITH_DHCID || tok == token::TOKEN_CHECK_EXISTS_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITHOUT_DHCID || 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_EXTENDED_INFO_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_TEMPLATE_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_POOL_ID || 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_PARSER6_error || tok == token::TOKEN_PARSER6_UNDEF || 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_SERVICE_SOCKETS_REQUIRE_ALL || tok == token::TOKEN_SERVICE_SOCKETS_RETRY_WAIT_TIME || tok == token::TOKEN_SERVICE_SOCKETS_MAX_RETRIES || 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_READ_TIMEOUT || tok == token::TOKEN_WRITE_TIMEOUT || tok == token::TOKEN_TCP_USER_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_DDNS_TTL_PERCENT || 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_NEVER_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_ALLOCATOR || tok == token::TOKEN_PD_ALLOCATOR || tok == token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE || tok == token::TOKEN_CHECK_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITH_DHCID || tok == token::TOKEN_CHECK_EXISTS_WITH_DHCID || tok == token::TOKEN_NO_CHECK_WITHOUT_DHCID || 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_EXTENDED_INFO_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_TEMPLATE_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_POOL_ID || 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.
/// 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
return symbol_type (token::TOKEN_PD_ALLOCATOR, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_DDNS_CONFLICT_RESOLUTION_MODE (location_type l)
+ {
+ return symbol_type (token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_DDNS_CONFLICT_RESOLUTION_MODE (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_DDNS_CONFLICT_RESOLUTION_MODE, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_CHECK_WITH_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_CHECK_WITH_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_CHECK_WITH_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_CHECK_WITH_DHCID, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_NO_CHECK_WITH_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITH_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_NO_CHECK_WITH_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITH_DHCID, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_CHECK_EXISTS_WITH_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_CHECK_EXISTS_WITH_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_CHECK_EXISTS_WITH_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_CHECK_EXISTS_WITH_DHCID, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_NO_CHECK_WITHOUT_DHCID (location_type l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITHOUT_DHCID, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_NO_CHECK_WITHOUT_DHCID (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_NO_CHECK_WITHOUT_DHCID, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
{
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; }
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { 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
/// 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;
+ /// are valid, yet not members of the token_type enum.
+ static symbol_kind_type yytranslate_ (int t);
/// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *yystr);
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_[];
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)
{}
class slice
{
public:
- slice (const stack& stack, index_type range) YY_NOEXCEPT
+ slice (const stack& stack, index_type range)
: stack_ (stack)
, range_ (range)
{}
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);
/// Constants.
enum
{
- yylast_ = 1380, ///< Last index in yytable_.
- yynnts_ = 456, ///< Number of nonterminal symbols.
+ yylast_ = 1395, ///< Last index in yytable_.
+ yynnts_ = 459, ///< Number of nonterminal symbols.
yyfinal_ = 30 ///< Termination state number.
};
inline
Dhcp6Parser::symbol_kind_type
- Dhcp6Parser::yytranslate_ (int t) YY_NOEXCEPT
+ Dhcp6Parser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
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, 219, 220, 221, 222, 223
+ 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
+ 225, 226, 227, 228
};
// Last valid token kind.
- const int code_max = 478;
+ const int code_max = 483;
if (t <= 0)
return symbol_kind::S_YYEOF;
else if (t <= code_max)
- return static_cast <symbol_kind_type> (translate_table[t]);
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
return symbol_kind::S_YYUNDEF;
}
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
-
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
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_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_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
// by_kind.
inline
- Dhcp6Parser::by_kind::by_kind () YY_NOEXCEPT
+ Dhcp6Parser::by_kind::by_kind ()
: kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- Dhcp6Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
+ Dhcp6Parser::by_kind::by_kind (by_kind&& that)
: kind_ (that.kind_)
{
that.clear ();
#endif
inline
- Dhcp6Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
+ Dhcp6Parser::by_kind::by_kind (const by_kind& that)
: kind_ (that.kind_)
{}
inline
- Dhcp6Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
+ Dhcp6Parser::by_kind::by_kind (token_kind_type t)
: kind_ (yytranslate_ (t))
{}
-
-
inline
void
- Dhcp6Parser::by_kind::clear () YY_NOEXCEPT
+ Dhcp6Parser::by_kind::clear ()
{
kind_ = symbol_kind::S_YYEMPTY;
}
return kind_;
}
-
inline
Dhcp6Parser::symbol_kind_type
Dhcp6Parser::by_kind::type_get () const YY_NOEXCEPT
return this->kind ();
}
-
#line 14 "dhcp6_parser.yy"
} } // isc::dhcp
-#line 5757 "dhcp6_parser.h"
+#line 5828 "dhcp6_parser.h"
PARKED_PACKET_LIMIT "parked-packet-limit"
ALLOCATOR "allocator"
PD_ALLOCATOR "pd-allocator"
+ DDNS_CONFLICT_RESOLUTION_MODE "ddns-conflict-resolution-mode"
+ CHECK_WITH_DHCID "check-with-dhcid"
+ NO_CHECK_WITH_DHCID "no-check-with-dhcid"
+ CHECK_EXISTS_WITH_DHCID "check-exists-with-dhcid"
+ NO_CHECK_WITHOUT_DHCID "no-check-without-dhcid"
SHARED_NETWORKS "shared-networks"
%type <ElementPtr> duid_type
%type <ElementPtr> ncr_protocol_value
%type <ElementPtr> ddns_replace_client_name_value
+%type <ElementPtr> ddns_conflict_resolution_mode_value
%printer { yyoutput << $$; } <*>;
| ddns_qualifying_suffix
| ddns_update_on_renew
| ddns_use_conflict_resolution
+ | ddns_conflict_resolution_mode
| ddns_ttl_percent
| store_extended_info
| statistic_default_sample_count
ctx.stack_.back()->set("ddns-use-conflict-resolution", b);
};
+ddns_conflict_resolution_mode: DDNS_CONFLICT_RESOLUTION_MODE {
+ ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(@1));
+ ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE);
+} COLON ddns_conflict_resolution_mode_value {
+ ctx.stack_.back()->set("ddns-conflict-resolution-mode", $4);
+ ctx.leave();
+};
+
+ddns_conflict_resolution_mode_value:
+ CHECK_WITH_DHCID {
+ $$ = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(@1)));
+ }
+ | NO_CHECK_WITH_DHCID {
+ $$ = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(@1)));
+ }
+ | CHECK_EXISTS_WITH_DHCID {
+ $$ = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(@1)));
+ }
+ | NO_CHECK_WITHOUT_DHCID {
+ $$ = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(@1)));
+ }
+ ;
+
ddns_ttl_percent: DDNS_TTL_PERCENT COLON FLOAT {
ctx.unique("ddns-ttl-percent", ctx.loc2pos(@1));
ElementPtr ttl(new DoubleElement($3, ctx.loc2pos(@3)));
| ddns_qualifying_suffix
| ddns_update_on_renew
| ddns_use_conflict_resolution
+ | ddns_conflict_resolution_mode
| ddns_ttl_percent
| store_extended_info
| allocator
| ddns_qualifying_suffix
| ddns_update_on_renew
| ddns_use_conflict_resolution
+ | ddns_conflict_resolution_mode
| ddns_ttl_percent
| store_extended_info
| allocator
// holds a fully qualified domain-name already (not partial).
// Get the IP address from the lease.
NameChangeRequestPtr ncr;
+ auto cr_mode = StringToConflictResolutionMode(ctx.getDdnsParams()->getConflictResolutionMode());
ncr.reset(new NameChangeRequest(isc::dhcp_ddns::CHG_ADD,
do_fwd, do_rev,
opt_fqdn->getDomainName(),
dhcid, 0,
calculateDdnsTtl(iaaddr->getValid(),
ctx.getDdnsParams()->getTtlPercent()),
- ctx.getDdnsParams()->getUseConflictResolution()));
+ cr_mode));
LOG_DEBUG(ddns6_logger, DBG_DHCP6_DETAIL,
DHCP6_DDNS_CREATE_ADD_NAME_CHANGE_REQUEST).arg(ncr->toText());
(config_pair.first == "ddns-qualifying-suffix") ||
(config_pair.first == "ddns-update-on-renew") ||
(config_pair.first == "ddns-use-conflict-resolution") ||
+ (config_pair.first == "ddns-conflict-resolution-mode") ||
(config_pair.first == "ddns-ttl-percent") ||
(config_pair.first == "store-extended-info") ||
(config_pair.first == "statistic-default-sample-count") ||
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
// 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
// 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
-// Copyright (C) 2015-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2023 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
/// Used while parsing compatibility parameters
COMPATIBILITY,
+ /// Used while parsing Dhcp6/ddns-conflict-resolution-mode.
+ DDNS_CONFLICT_RESOLUTION_MODE,
} ParserContext;
/// @brief File name
// ddns-send-updates should be global default
checkGlobal("ddns-send-updates", true);
+ checkGlobal("ddns-conflict-resolution-mode", "check-with-dhcid");
// The following, deprecated dhcp-ddns parameters,
// should all have global default values.
EXPECT_TRUE(class_def->getValid().unspecified());
}
+// This test checks that ddns-conflict-resolution-mode value can be specified at
+// global and subnet levels.
+TEST_F(Dhcp6ParserTest, storeDdnsConflictResolutionMode) {
+ std::string config = "{ " + genIfaceConfig() + "," +
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ "
+ "{ "
+ " \"pools\": [ { \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"check-with-dhcid\","
+ " \"subnet\": \"2001:db8:1::/64\""
+ "},"
+ "{ "
+ " \"pools\": [ { \"pool\": \"2001:db8:2::1 - 2001:db8:2::ffff\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"check-exists-with-dhcid\","
+ " \"subnet\": \"2001:db8:2::/64\""
+ "},"
+ "{"
+ " \"pools\": [ { \"pool\": \"2001:db8:3::1 - 2001:db8:3::ffff\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"no-check-without-dhcid\","
+ " \"subnet\": \"2001:db8:3::/64\""
+ "},"
+ "{"
+ " \"pools\": [ { \"pool\": \"2001:db8:4::1 - 2001:db8:4::ffff\" } ],"
+ " \"ddns-conflict-resolution-mode\": \"no-check-with-dhcid\","
+ " \"subnet\": \"2001:db8:4::/64\""
+ "},"
+ "{"
+ " \"pools\": [ { \"pool\": \"2001:db8:5::1 - 2001:db8:5::ffff\" } ],"
+ " \"subnet\": \"2001:db8:5::/64\""
+ "} ],"
+ "\"valid-lifetime\": 4000,"
+ "\"ddns-conflict-resolution-mode\": \"no-check-with-dhcid\" }";
+
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ extractConfig(config);
+
+ ConstElementPtr status;
+ ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+ checkResult(status, 0);
+
+ // Check global value.
+ checkGlobal("ddns-conflict-resolution-mode", "no-check-with-dhcid");
+
+ // Check values for all the subnets.
+ std::string expectedValues[] = {
+ "check-with-dhcid",
+ "check-exists-with-dhcid",
+ "no-check-without-dhcid",
+ "no-check-with-dhcid",
+ "no-check-with-dhcid"
+ };
+ CfgSubnets6Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets6();
+ char addr[20];
+ Subnet6Ptr subnet1;
+ for (int i = 0; i < 5; i++) {
+ snprintf(addr, sizeof(addr), "2001:db8:%d::1", i+1);
+ subnet1 = cfg->selectSubnet(IOAddress(addr));
+ ASSERT_TRUE(subnet1);
+ // Reset the fetch global function to staging (vs current) config.
+ subnet1->setFetchGlobalsFn([]() -> ConstCfgGlobalsPtr {
+ return (CfgMgr::instance().getStagingCfg()->getConfiguredGlobals());
+ });
+ EXPECT_EQ(expectedValues[i], subnet1->getDdnsConflictResolutionMode().get());
+ }
+}
+
} // namespace
" \"lease-expires-on\" : \"20140121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\" "
"}";
return (dhcp_ddns::NameChangeRequest::fromJSON(stream.str()));
subnet_->setDdnsQualifyingSuffix("example.com");
subnet_->setHostnameCharSet("[^A-Za-z0-9-]");
subnet_->setHostnameCharReplacement("x");
- subnet_->setDdnsUseConflictResolution(true);
+ subnet_->setDdnsConflictResolutionMode("check-with-dhcid");
ASSERT_NO_THROW(srv_->startD2());
}
/// NameChangeRequest.
/// @param fqdn The expected string value of the FQDN, if blank the
/// check is skipped
- /// @param exp_use_cr expected value of NCR::conflict_resolution_
+ /// @param exp_cr_mode expected value of NCR::conflict_resolution_mode_
/// @param ddns_ttl_percent expected value of ddns_ttl_percent used for
/// the NCR
void verifyNameChangeRequest(const isc::dhcp_ddns::NameChangeType type,
const uint64_t expires,
const uint16_t valid_lft,
const std::string& fqdn = "",
- const bool exp_use_cr = true,
+ const ConflictResolutionMode exp_cr_mode = CHECK_WITH_DHCID,
util::Optional<double> exp_ddns_ttl_percent
= util::Optional<double>()) {
NameChangeRequestPtr ncr;
EXPECT_EQ(fqdn, ncr->getFqdn());
}
- EXPECT_EQ(exp_use_cr, ncr->useConflictResolution());
+ EXPECT_EQ(exp_cr_mode, ncr->getConflictResolutionMode());
// Process the message off the queue
ASSERT_NO_THROW(d2_mgr_.runReadyIO());
// Create NameChangeRequest for the first allocated address.
AllocEngine::ClientContext6 ctx;
- subnet_->setDdnsUseConflictResolution(false);
+ subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid");
ctx.subnet_ = subnet_;
ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true;
ASSERT_NO_THROW(srv_->createNameChangeRequests(answer, ctx));
"2001:db8:1::1",
"000201415AA33D1187D148275136FA30300478"
"FAAAA3EBD29826B5C907B2C9268A6F52",
- 0, 500, "", false);
+ 0, 500, "", NO_CHECK_WITH_DHCID);
}
// Checks that NameChangeRequests to add entries are not
// Create NameChangeRequest for the first allocated address.
AllocEngine::ClientContext6 ctx;
- subnet_->setDdnsUseConflictResolution(false);
+ subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid");
subnet_->setDdnsTtlPercent(Optional<double>(0.10));
ctx.subnet_ = subnet_;
ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true;
"2001:db8:1::1",
"000201415AA33D1187D148275136FA30300478"
"FAAAA3EBD29826B5C907B2C9268A6F52",
- 0, 500, "", false, subnet_->getDdnsTtlPercent());
+ 0, 500, "", NO_CHECK_WITH_DHCID, subnet_->getDdnsTtlPercent());
}
} // end of anonymous namespace
-// Copyright (C) 2017-2023 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2017-2022 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
///@{
/// @brief extracted configurations
const char* EXTRACTED_CONFIGS[] = {
- // CONFIGURATION 0
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [ ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 1
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"max-preferred-lifetime\": 4000,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-preferred-lifetime\": 2000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 2
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1024,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 100,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:3::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 34,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:4::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 3
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 3,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:3::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 4,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:4::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 4
-"{\n"
-" \"compatibility\": {\n"
-" \"lenient-option-parsing\": true\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 5
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"max-preferred-lifetime\": 4000,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-preferred-lifetime\": 2000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 4,\n"
-" \"max-valid-lifetime\": 5,\n"
-" \"min-preferred-lifetime\": 2,\n"
-" \"min-valid-lifetime\": 3,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3,\n"
-" \"rebind-timer\": 2,\n"
-" \"renew-timer\": 1,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 6
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"interface\": \"eth0\",\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 7
-"{\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"interface-id\": \"foobar\",\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 8
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/96\"\n"
-" },\n"
-" {\n"
-" \"pool\": \"2001:db8:1:0:abcd::/112\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:2::1 - 2001:db8:2::ff\"\n"
-" },\n"
-" {\n"
-" \"pool\": \"2001:db8:2::300 - 2001:db8:2::3ff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 9
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 10
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 128,\n"
-" \"prefix\": \"2001:db8:1::\",\n"
-" \"prefix-len\": 64\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 11
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"excluded-prefix\": \"3000:0:0:0:1000::\",\n"
-" \"excluded-prefix-len\": 72,\n"
-" \"prefix\": \"3000::\",\n"
-" \"prefix-len\": 48\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 12
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 80,\n"
-" \"prefix\": \"2001:db8:1:01::\",\n"
-" \"prefix-len\": 72\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 88,\n"
-" \"prefix\": \"2001:db8:1:02::\",\n"
-" \"prefix-len\": 72\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 96,\n"
-" \"prefix\": \"3000:1:03::\",\n"
-" \"prefix-len\": 72\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1:04::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/40\",\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 13
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8:1::\",\n"
-" \"prefix-len\": 64\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 14
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv6-address\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 15
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"uint16, ipv4-address, ipv6-address, string\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"record\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 16
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 101,\n"
-" \"name\": \"foo-2\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 17
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": true,\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 18
-"{\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"sub-opts-space\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 19
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\"\n"
-" },\n"
-" {\n"
-" \"data\": \"01\",\n"
-" \"name\": \"preference\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 20
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\"\n"
-" },\n"
-" {\n"
-" \"data\": \"01\",\n"
-" \"name\": \"preference\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 21
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\"\n"
-" },\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 38,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 22
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 110,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 111,\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 23
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"11\",\n"
-" \"name\": \"base-option\"\n"
-" },\n"
-" {\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"isc\",\n"
-" \"name\": \"base-option\",\n"
-" \"space\": \"dhcp6\",\n"
-" \"type\": \"uint8\"\n"
-" },\n"
-" {\n"
-" \"code\": 110,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"code\": 111,\n"
-" \"name\": \"foo2\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 24
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"0102030405060708090A\",\n"
-" \"name\": \"subscriber-id\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"FFFEFDFCFB\",\n"
-" \"name\": \"user-class\"\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 25
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"112233445566\",\n"
-" \"name\": \"subscriber-id\"\n"
-" }\n"
-" ],\n"
-" \"prefix\": \"3000::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"aabbccddee\",\n"
-" \"name\": \"user-class\"\n"
-" }\n"
-" ],\n"
-" \"prefix\": \"3001::\",\n"
-" \"prefix-len\": 48\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"0102030405060708090A\",\n"
-" \"name\": \"subscriber-id\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"2001:db8:1::10 - 2001:db8:1::100\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"FFFEFDFCFB\",\n"
-" \"name\": \"user-class\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"2001:db8:1::300 - 2001:db8:1::400\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 26
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"option-one\",\n"
-" \"space\": \"vendor-4491\"\n"
-" },\n"
-" {\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"option-two\",\n"
-" \"space\": \"vendor-1234\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 27
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"data\": \"this is a string vendor-opt\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-4491\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"vendor-4491\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 28
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"eth0\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 29
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"eth0\", \"eth1\", \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 30
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-address\": \"2001:db8:1::abcd\"\n"
-" },\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 31
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ \"2001:db9::abcd\", \"2001:db9::abce\" ]\n"
-" },\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 32
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"id\": 3,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:3::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 4,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:4::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 33
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" },\n"
-" {\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:0::/40\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 34
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8:1::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8:2::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8:3::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8:4::\",\n"
-" \"prefix-len\": 48\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 35
-"{\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"3001::2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"3001::1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 36
-"{\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"generated-prefix\": \"test.prefix\",\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"override-client-update\": true,\n"
-" \"override-no-update\": true,\n"
-" \"qualifying-suffix\": \"test.suffix.\",\n"
-" \"replace-client-name\": \"when-present\",\n"
-" \"sender-ip\": \"3001::2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"3001::1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 37
-"{\n"
-" \"ddns-generated-prefix\": \"global.prefix\",\n"
-" \"ddns-override-client-update\": true,\n"
-" \"ddns-override-no-update\": true,\n"
-" \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
-" \"ddns-replace-client-name\": \"always\",\n"
-" \"ddns-send-updates\": false,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"generated-prefix\": \"d2.prefix\",\n"
-" \"hostname-char-replacement\": \"z\",\n"
-" \"hostname-char-set\": \"[^0-9]\",\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"override-client-update\": false,\n"
-" \"override-no-update\": false,\n"
-" \"qualifying-suffix\": \"d2.suffix.\",\n"
-" \"replace-client-name\": \"when-present\",\n"
-" \"sender-ip\": \"3001::2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"3001::1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 38
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 123,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"reservations\": [ ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 234,\n"
-" \"pools\": [ ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"2001:db8:2::1111\",\n"
-" \"name\": \"dns-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"11\",\n"
-" \"name\": \"preference\"\n"
-" }\n"
-" ]\n"
-" },\n"
-" {\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::abcd\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"2001:db8:2::abbc\",\n"
-" \"name\": \"dns-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"25\",\n"
-" \"name\": \"preference\"\n"
-" }\n"
-" ]\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 542,\n"
-" \"pools\": [ ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"0A:09:08:07:06:05:04:03:02:01\",\n"
-" \"hostname\": \"\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"2001:db8:3::3333\",\n"
-" \"name\": \"dns-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"33\",\n"
-" \"name\": \"preference\"\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ \"2001:db8:3:2::/96\" ]\n"
-" },\n"
-" {\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"06:05:04:03:02:01\",\n"
-" \"prefixes\": [ \"2001:db8:3:1::/96\" ]\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:3::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 39
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 234,\n"
-" \"pools\": [ ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"11\",\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ]\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 40
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"mac-sources\": [ \"rfc6939\", \"rfc4649\", \"rfc4580\" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [ ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 41
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"mac-sources\": [ \"client-link-addr-option\", \"remote-id\", \"subscriber-id\" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [ ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 42
-"{\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"subnet\": \"2001:db8:1::/48\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:2::/64\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"subnet\": \"2001:db8:2::/48\"\n"
-" },\n"
-" {\n"
-" \"id\": 3,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:3::/64\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"subnet\": \"2001:db8:3::/48\"\n"
-" },\n"
-" {\n"
-" \"id\": 4,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:4::/64\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"subnet\": \"2001:db8:4::/48\"\n"
-" },\n"
-" {\n"
-" \"id\": 5,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:5::/64\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:5::/48\"\n"
-" },\n"
-" {\n"
-" \"id\": 6,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:6::/64\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"subnet\": \"2001:db8:6::/48\"\n"
-" },\n"
-" {\n"
-" \"id\": 7,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:7::/64\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"subnet\": \"2001:db8:7::/48\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 43
-"{\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"subnet\": \"2001:db8:1::/48\"\n"
-" },\n"
-" {\n"
-" \"id\": 2,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:2::/64\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:2::/48\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 44
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"dns-servers\", \"remote-id\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [ ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 45
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet6\": [ ]\n"
-" }\n",
- // CONFIGURATION 46
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet6\": [ ]\n"
-" }\n",
- // CONFIGURATION 47
-"{\n"
-" \"decline-probation-period\": 12345,\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet6\": [ ]\n"
-" }\n",
- // CONFIGURATION 48
-"{\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 35,\n"
-" \"hold-reclaimed-time\": 1800,\n"
-" \"max-reclaim-leases\": 50,\n"
-" \"max-reclaim-time\": 100,\n"
-" \"reclaim-timer-wait-time\": 20,\n"
-" \"unwarned-reclaim-cycles\": 10\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet6\": [ ]\n"
-" }\n",
- // CONFIGURATION 49
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"name\": \"one\"\n"
-" },\n"
-" {\n"
-" \"name\": \"two\"\n"
-" },\n"
-" {\n"
-" \"name\": \"three\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 50
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8::/64\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/32\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 51
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8::/64\",\n"
-" \"user-context\": { }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/32\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 52
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8::/64\",\n"
-" \"user-context\": {\n"
-" \"lw4over6-bind-prefix-len\": 56,\n"
-" \"lw4over6-sharing-ratio\": 64,\n"
-" \"lw4over6-sysports-exclude\": true,\n"
-" \"lw4over6-v4-pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/32\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 53
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:: - 2001:db8::ffff:ffff:ffff:ffff\",\n"
-" \"user-context\": {\n"
-" \"lw4over6-bind-prefix-len\": 56,\n"
-" \"lw4over6-sharing-ratio\": 64,\n"
-" \"lw4over6-sysports-exclude\": true,\n"
-" \"lw4over6-v4-pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/32\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 54
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8::\",\n"
-" \"prefix-len\": 56\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/32\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 55
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8::\",\n"
-" \"prefix-len\": 56,\n"
-" \"user-context\": { }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/32\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 56
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db8::\",\n"
-" \"prefix-len\": 56,\n"
-" \"user-context\": {\n"
-" \"lw4over6-bind-prefix-len\": 56,\n"
-" \"lw4over6-sharing-ratio\": 64,\n"
-" \"lw4over6-sysports-exclude\": true,\n"
-" \"lw4over6-v4-pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8::/32\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 57
-"{\n"
-" \"hosts-databases\": [\n"
-" {\n"
-" \"name\": \"keatest1\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" },\n"
-" {\n"
-" \"name\": \"keatest2\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 58
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"name\": \"all\",\n"
-" \"test\": \"'' == ''\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"match all\"\n"
-" }\n"
-" },\n"
-" {\n"
-" \"name\": \"none\"\n"
-" },\n"
-" {\n"
-" \"name\": \"both\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"a comment\",\n"
-" \"version\": 1\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"control-socket\": {\n"
-" \"socket-name\": \"/tmp/kea6-ctrl-socket\",\n"
-" \"socket-type\": \"unix\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Indirect comment\"\n"
-" }\n"
-" },\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"user-context\": {\n"
-" \"comment\": \"No dynamic DNS\"\n"
-" }\n"
-" },\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false,\n"
-" \"user-context\": {\n"
-" \"comment\": \"Use wildcard\"\n"
-" }\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Set option value\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"code\": 100,\n"
-" \"name\": \"foo\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv6-address\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option definition\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"server-id\": {\n"
-" \"type\": \"LL\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"DHCPv6 specific\"\n"
-" }\n"
-" },\n"
-" \"shared-networks\": [\n"
-" {\n"
-" \"name\": \"foo\",\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 100,\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"prefix\": \"2001:db2::\",\n"
-" \"prefix-len\": 48,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A prefix pool\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db1::/64\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"A pool\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"reservations\": [\n"
-" {\n"
-" \"hostname\": \"foo.example.com\",\n"
-" \"hw-address\": \"AA:BB:CC:DD:EE:FF\",\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"example.com\",\n"
-" \"name\": \"domain-search\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option in a reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"A host reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db1::/48\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"A subnet\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"A shared network\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"A DHCPv6 server\"\n"
-" }\n"
-" }\n",
- // CONFIGURATION 59
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0A\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"2001:db8:2::1111\",\n"
-" \"name\": \"dns-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"11\",\n"
-" \"name\": \"preference\"\n"
-" }\n"
-" ]\n"
-" },\n"
-" {\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::abcd\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"data\": \"2001:db8:2::abbc\",\n"
-" \"name\": \"dns-servers\"\n"
-" },\n"
-" {\n"
-" \"data\": \"25\",\n"
-" \"name\": \"preference\"\n"
-" }\n"
-" ]\n"
-" }\n"
-" ],\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 123,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"reservations\": [ ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 234,\n"
-" \"pools\": [ ],\n"
-" \"subnet\": \"2001:db8:2::/64\"\n"
-" },\n"
-" {\n"
-" \"id\": 542,\n"
-" \"pools\": [ ],\n"
-" \"subnet\": \"2001:db8:3::/64\"\n"
-" }\n"
-" ],\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 60
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"renew-timer\": 1000,\n"
-" \"statistic-default-sample-age\": 5,\n"
-" \"statistic-default-sample-count\": 10,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 61
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet6\": [ ]\n"
-" }\n",
- // CONFIGURATION 62
-"{\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 1024,\n"
-" \"thread-pool-size\": 48\n"
-" },\n"
-" \"subnet6\": [ ]\n"
-" }\n",
- // CONFIGURATION 63
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"max-preferred-lifetime\": 6000,\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-preferred-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"preferred-lifetime\": 5000,\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"name\": \"two\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ]\n"
-" }\n",
- // CONFIGURATION 64
-"{\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"max-preferred-lifetime\": 6000,\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-preferred-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"preferred-lifetime\": 5000,\n"
-" \"template-test\": \"''\",\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"name\": \"two\",\n"
-" \"template-test\": \"''\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"id\": 1,\n"
-" \"pools\": [\n"
-" {\n"
-" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"subnet\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ]\n"
-" }\n"
+ // "to be replaced"
};
/// @brief unparsed configurations
const char* UNPARSED_CONFIGS[] = {
- // CONFIGURATION 0
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 1
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"max-preferred-lifetime\": 4000,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-preferred-lifetime\": 2000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 4000,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-preferred-lifetime\": 2000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 2
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:3::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 34,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:4::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 100,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1024,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 3
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 2,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 3,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:3::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 4,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:4::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 4
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"compatibility\": {\n"
-" \"lenient-option-parsing\": true\n"
-" },\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 5
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"max-preferred-lifetime\": 4000,\n"
-" \"max-valid-lifetime\": 5000,\n"
-" \"min-preferred-lifetime\": 2000,\n"
-" \"min-valid-lifetime\": 3000,\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 4,\n"
-" \"max-valid-lifetime\": 5,\n"
-" \"min-preferred-lifetime\": 2,\n"
-" \"min-valid-lifetime\": 3,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 6
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"interface\": \"eth0\",\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 7
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"interface-id\": \"foobar\",\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 8
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/96\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1:0:abcd::/112\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 2,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::1-2001:db8:2::ff\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::300/120\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 9
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 10
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 128,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:1::\",\n"
-" \"prefix-len\": 64\n"
-" }\n"
-" ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 11
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"excluded-prefix\": \"3000::1000:0:0:0\",\n"
-" \"excluded-prefix-len\": 72,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"3000::\",\n"
-" \"prefix-len\": 48\n"
-" }\n"
-" ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 12
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 80,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:1:1::\",\n"
-" \"prefix-len\": 72\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 88,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:1:2::\",\n"
-" \"prefix-len\": 72\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 96,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"3000:1:3::\",\n"
-" \"prefix-len\": 72\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/40\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 13
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:1::\",\n"
-" \"prefix-len\": 64\n"
-" }\n"
-" ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 14
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv6-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 15
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"uint16, ipv4-address, ipv6-address, string\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"record\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 16
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 101,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo-2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 17
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": true,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 18
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"sub-opts-space\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 19
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 7,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"preference\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 20
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 7,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"01\",\n"
-" \"name\": \"preference\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 21
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 38,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 22
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 110,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 111,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 110,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 111,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 23
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"11\",\n"
-" \"name\": \"base-option\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 110,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"1234\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 111,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"192.168.2.1\",\n"
-" \"name\": \"foo2\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"isc\",\n"
-" \"name\": \"base-option\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"dhcp6\",\n"
-" \"type\": \"uint8\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 110,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" },\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 111,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo2\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv4-address\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 24
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"0102030405060708090A\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 2,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 15,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"FFFEFDFCFB\",\n"
-" \"name\": \"user-class\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 25
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"112233445566\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"prefix\": \"3000::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 15,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"AABBCCDDEE\",\n"
-" \"name\": \"user-class\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"prefix\": \"3001::\",\n"
-" \"prefix-len\": 48\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"0102030405060708090A\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"2001:db8:1::10-2001:db8:1::100\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 15,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"FFFEFDFCFB\",\n"
-" \"name\": \"user-class\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"pool\": \"2001:db8:1::300-2001:db8:1::400\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 26
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"1234\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-1234\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-4491\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 27
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"this is a string vendor-opt\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"vendor-4491\"\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"vendor-4491\",\n"
-" \"type\": \"string\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 28
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"eth0\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 29
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\", \"eth0\", \"eth1\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 30
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ \"2001:db8:1::abcd\" ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 31
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ \"2001:db9::abcd\", \"2001:db9::abce\" ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 32
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"client-class\": \"alpha\",\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"client-class\": \"beta\",\n"
-" \"id\": 2,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"client-class\": \"gamma\",\n"
-" \"id\": 3,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:3::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 4,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:4::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 33
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::/80\"\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:3::/80\"\n"
-" },\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:4::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/40\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 34
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"client-class\": \"alpha\",\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:1::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"client-class\": \"beta\",\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:2::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"client-class\": \"gamma\",\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:3::\",\n"
-" \"prefix-len\": 48\n"
-" },\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8:4::\",\n"
-" \"prefix-len\": 48\n"
-" }\n"
-" ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 35
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"3001::2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"3001::1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 36
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"test.prefix\",\n"
-" \"ddns-override-client-update\": true,\n"
-" \"ddns-override-no-update\": true,\n"
-" \"ddns-qualifying-suffix\": \"test.suffix.\",\n"
-" \"ddns-replace-client-name\": \"when-present\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"3001::2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"3001::1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 37
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"global.prefix\",\n"
-" \"ddns-override-client-update\": true,\n"
-" \"ddns-override-no-update\": true,\n"
-" \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
-" \"ddns-replace-client-name\": \"always\",\n"
-" \"ddns-send-updates\": false,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": true,\n"
-" \"max-queue-size\": 2048,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"3001::2\",\n"
-" \"sender-port\": 778,\n"
-" \"server-ip\": \"3001::1\",\n"
-" \"server-port\": 777\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"x\",\n"
-" \"hostname-char-set\": \"[^A-Z]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 38
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 123,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 234,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::abcd\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"2001:db8:2::abbc\",\n"
-" \"name\": \"dns-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 7,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"25\",\n"
-" \"name\": \"preference\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ ]\n"
-" },\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"2001:db8:2::1111\",\n"
-" \"name\": \"dns-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 7,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"11\",\n"
-" \"name\": \"preference\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ ]\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 542,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"06:05:04:03:02:01\",\n"
-" \"ip-addresses\": [ ],\n"
-" \"option-data\": [ ],\n"
-" \"prefixes\": [ \"2001:db8:3:1::/96\" ]\n"
-" },\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"0a:09:08:07:06:05:04:03:02:01\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-addresses\": [ ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"2001:db8:3::3333\",\n"
-" \"name\": \"dns-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 7,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"33\",\n"
-" \"name\": \"preference\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ \"2001:db8:3:2::/96\" ]\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:3::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 39
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"uint32\"\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 234,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 100,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"11\",\n"
-" \"name\": \"foo\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"isc\"\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ ]\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 40
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"client-link-addr-option\", \"remote-id\", \"subscriber-id\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 41
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"client-link-addr-option\", \"remote-id\", \"subscriber-id\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 42
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 2,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 3,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:3::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:3::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 4,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:4::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:4::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 5,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:5::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:5::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 6,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:6::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:6::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 7,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:7::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": true,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:7::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 43
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": true,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 2,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:2::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 44
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"23\", \"37\", \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 45
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 46
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 47
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 12345,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 48
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 35,\n"
-" \"hold-reclaimed-time\": 1800,\n"
-" \"max-reclaim-leases\": 50,\n"
-" \"max-reclaim-time\": 100,\n"
-" \"reclaim-timer-wait-time\": 20,\n"
-" \"unwarned-reclaim-cycles\": 10\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 49
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"name\": \"one\",\n"
-" \"option-data\": [ ]\n"
-" },\n"
-" {\n"
-" \"name\": \"two\",\n"
-" \"option-data\": [ ]\n"
-" },\n"
-" {\n"
-" \"name\": \"three\",\n"
-" \"option-data\": [ ]\n"
-" }\n"
-" ],\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 50
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8::/64\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/32\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 51
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8::/64\",\n"
-" \"user-context\": { }\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/32\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 52
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8::/64\",\n"
-" \"user-context\": {\n"
-" \"lw4over6-bind-prefix-len\": 56,\n"
-" \"lw4over6-sharing-ratio\": 64,\n"
-" \"lw4over6-sysports-exclude\": true,\n"
-" \"lw4over6-v4-pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/32\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 53
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8::/64\",\n"
-" \"user-context\": {\n"
-" \"lw4over6-bind-prefix-len\": 56,\n"
-" \"lw4over6-sharing-ratio\": 64,\n"
-" \"lw4over6-sysports-exclude\": true,\n"
-" \"lw4over6-v4-pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/32\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 54
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8::\",\n"
-" \"prefix-len\": 56\n"
-" }\n"
-" ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/32\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 55
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8::\",\n"
-" \"prefix-len\": 56,\n"
-" \"user-context\": { }\n"
-" }\n"
-" ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/32\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 56
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db8::\",\n"
-" \"prefix-len\": 56,\n"
-" \"user-context\": {\n"
-" \"lw4over6-bind-prefix-len\": 56,\n"
-" \"lw4over6-sharing-ratio\": 64,\n"
-" \"lw4over6-sysports-exclude\": true,\n"
-" \"lw4over6-v4-pool\": \"192.0.2.0/24\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8::/32\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 57
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"hosts-databases\": [\n"
-" {\n"
-" \"name\": \"keatest1\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" },\n"
-" {\n"
-" \"name\": \"keatest2\",\n"
-" \"password\": \"keatest\",\n"
-" \"type\": \"mysql\",\n"
-" \"user\": \"keatest\"\n"
-" }\n"
-" ],\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 58
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"name\": \"all\",\n"
-" \"option-data\": [ ],\n"
-" \"test\": \"'' == ''\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"match all\"\n"
-" }\n"
-" },\n"
-" {\n"
-" \"name\": \"none\",\n"
-" \"option-data\": [ ]\n"
-" },\n"
-" {\n"
-" \"name\": \"both\",\n"
-" \"option-data\": [ ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"a comment\",\n"
-" \"version\": 1\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"control-socket\": {\n"
-" \"socket-name\": \"/tmp/kea6-ctrl-socket\",\n"
-" \"socket-type\": \"unix\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Indirect comment\"\n"
-" }\n"
-" },\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001,\n"
-" \"user-context\": {\n"
-" \"comment\": \"No dynamic DNS\"\n"
-" }\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false,\n"
-" \"user-context\": {\n"
-" \"comment\": \"Use wildcard\"\n"
-" }\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 38,\n"
-" \"csv-format\": false,\n"
-" \"data\": \"ABCDEF0105\",\n"
-" \"name\": \"subscriber-id\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"Set option value\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"option-def\": [\n"
-" {\n"
-" \"array\": false,\n"
-" \"code\": 100,\n"
-" \"encapsulate\": \"\",\n"
-" \"name\": \"foo\",\n"
-" \"record-types\": \"\",\n"
-" \"space\": \"isc\",\n"
-" \"type\": \"ipv6-address\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option definition\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LL\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"DHCPv6 specific\"\n"
-" }\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"name\": \"foo\",\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"rapid-commit\": false,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 100,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [\n"
-" {\n"
-" \"delegated-len\": 64,\n"
-" \"option-data\": [ ],\n"
-" \"prefix\": \"2001:db2::\",\n"
-" \"prefix-len\": 48,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A prefix pool\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db1::/64\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"A pool\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"foo.example.com\",\n"
-" \"hw-address\": \"aa:bb:cc:dd:ee:ff\",\n"
-" \"ip-addresses\": [ ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 24,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"example.com\",\n"
-" \"name\": \"domain-search\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\",\n"
-" \"user-context\": {\n"
-" \"comment\": \"An option in a reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ ],\n"
-" \"user-context\": {\n"
-" \"comment\": \"A host reservation\"\n"
-" }\n"
-" }\n"
-" ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db1::/48\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A subnet\"\n"
-" },\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A shared network\"\n"
-" },\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"user-context\": {\n"
-" \"comment\": \"A DHCPv6 server\"\n"
-" },\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 59
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"hostname\": \"\",\n"
-" \"hw-address\": \"01:02:03:04:05:06\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::abcd\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"2001:db8:2::abbc\",\n"
-" \"name\": \"dns-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 7,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"25\",\n"
-" \"name\": \"preference\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ ]\n"
-" },\n"
-" {\n"
-" \"client-classes\": [ ],\n"
-" \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
-" \"hostname\": \"\",\n"
-" \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
-" \"option-data\": [\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 23,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"2001:db8:2::1111\",\n"
-" \"name\": \"dns-servers\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" },\n"
-" {\n"
-" \"always-send\": false,\n"
-" \"code\": 7,\n"
-" \"csv-format\": true,\n"
-" \"data\": \"11\",\n"
-" \"name\": \"preference\",\n"
-" \"never-send\": false,\n"
-" \"space\": \"dhcp6\"\n"
-" }\n"
-" ],\n"
-" \"prefixes\": [ ]\n"
-" }\n"
-" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 123,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::/80\"\n"
-" }\n"
-" ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 234,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:2::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" },\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 542,\n"
-" \"max-preferred-lifetime\": 3000,\n"
-" \"max-valid-lifetime\": 4000,\n"
-" \"min-preferred-lifetime\": 3000,\n"
-" \"min-valid-lifetime\": 4000,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [ ],\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rapid-commit\": false,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:3::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 60
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"preferred-lifetime\": 3000,\n"
-" \"rebind-timer\": 2000,\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"renew-timer\": 1000,\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 5,\n"
-" \"statistic-default-sample-count\": 10,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 4000\n"
-" }\n",
- // CONFIGURATION 61
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 62
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 1024,\n"
-" \"thread-pool-size\": 48\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [ ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 63
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"max-preferred-lifetime\": 6000,\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-preferred-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"option-data\": [ ],\n"
-" \"preferred-lifetime\": 5000,\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"name\": \"two\",\n"
-" \"option-data\": [ ]\n"
-" }\n"
-" ],\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"rapid-commit\": false,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n",
- // CONFIGURATION 64
-"{\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"client-classes\": [\n"
-" {\n"
-" \"max-preferred-lifetime\": 6000,\n"
-" \"max-valid-lifetime\": 3000,\n"
-" \"min-preferred-lifetime\": 4000,\n"
-" \"min-valid-lifetime\": 1000,\n"
-" \"name\": \"one\",\n"
-" \"option-data\": [ ],\n"
-" \"preferred-lifetime\": 5000,\n"
-" \"template-test\": \"''\",\n"
-" \"valid-lifetime\": 2000\n"
-" },\n"
-" {\n"
-" \"name\": \"two\",\n"
-" \"option-data\": [ ],\n"
-" \"template-test\": \"''\"\n"
-" }\n"
-" ],\n"
-" \"ddns-generated-prefix\": \"myhost\",\n"
-" \"ddns-override-client-update\": false,\n"
-" \"ddns-override-no-update\": false,\n"
-" \"ddns-qualifying-suffix\": \"\",\n"
-" \"ddns-replace-client-name\": \"never\",\n"
-" \"ddns-send-updates\": true,\n"
-" \"ddns-update-on-renew\": false,\n"
-" \"ddns-use-conflict-resolution\": true,\n"
-" \"decline-probation-period\": 86400,\n"
-" \"dhcp-ddns\": {\n"
-" \"enable-updates\": false,\n"
-" \"max-queue-size\": 1024,\n"
-" \"ncr-format\": \"JSON\",\n"
-" \"ncr-protocol\": \"UDP\",\n"
-" \"sender-ip\": \"0.0.0.0\",\n"
-" \"sender-port\": 0,\n"
-" \"server-ip\": \"127.0.0.1\",\n"
-" \"server-port\": 53001\n"
-" },\n"
-" \"dhcp-queue-control\": {\n"
-" \"capacity\": 64,\n"
-" \"enable-queue\": false,\n"
-" \"queue-type\": \"kea-ring6\"\n"
-" },\n"
-" \"dhcp4o6-port\": 0,\n"
-" \"early-global-reservations-lookup\": false,\n"
-" \"expired-leases-processing\": {\n"
-" \"flush-reclaimed-timer-wait-time\": 25,\n"
-" \"hold-reclaimed-time\": 3600,\n"
-" \"max-reclaim-leases\": 100,\n"
-" \"max-reclaim-time\": 250,\n"
-" \"reclaim-timer-wait-time\": 10,\n"
-" \"unwarned-reclaim-cycles\": 5\n"
-" },\n"
-" \"hooks-libraries\": [ ],\n"
-" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-" \"hostname-char-replacement\": \"\",\n"
-" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-" \"interfaces-config\": {\n"
-" \"interfaces\": [ \"*\" ],\n"
-" \"re-detect\": false\n"
-" },\n"
-" \"ip-reservations-unique\": true,\n"
-" \"lease-database\": {\n"
-" \"type\": \"memfile\"\n"
-" },\n"
-" \"mac-sources\": [ \"any\" ],\n"
-" \"multi-threading\": {\n"
-" \"enable-multi-threading\": true,\n"
-" \"packet-queue-size\": 64,\n"
-" \"thread-pool-size\": 0\n"
-" },\n"
-" \"option-data\": [ ],\n"
-" \"option-def\": [ ],\n"
-" \"parked-packet-limit\": 256,\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"relay-supplied-options\": [ \"65\" ],\n"
-" \"reservations-global\": false,\n"
-" \"reservations-in-subnet\": true,\n"
-" \"reservations-lookup-first\": false,\n"
-" \"reservations-out-of-pool\": false,\n"
-" \"sanity-checks\": {\n"
-" \"extended-info-checks\": \"fix\",\n"
-" \"lease-checks\": \"warn\"\n"
-" },\n"
-" \"server-id\": {\n"
-" \"enterprise-id\": 0,\n"
-" \"htype\": 0,\n"
-" \"identifier\": \"\",\n"
-" \"persist\": true,\n"
-" \"time\": 0,\n"
-" \"type\": \"LLT\"\n"
-" },\n"
-" \"server-tag\": \"\",\n"
-" \"shared-networks\": [ ],\n"
-" \"statistic-default-sample-age\": 0,\n"
-" \"statistic-default-sample-count\": 20,\n"
-" \"store-extended-info\": false,\n"
-" \"subnet6\": [\n"
-" {\n"
-" \"allocator\": \"iterative\",\n"
-" \"calculate-tee-times\": true,\n"
-" \"id\": 1,\n"
-" \"max-valid-lifetime\": 7200,\n"
-" \"min-valid-lifetime\": 7200,\n"
-" \"option-data\": [ ],\n"
-" \"pd-allocator\": \"iterative\",\n"
-" \"pd-pools\": [ ],\n"
-" \"pools\": [\n"
-" {\n"
-" \"option-data\": [ ],\n"
-" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
-" }\n"
-" ],\n"
-" \"rapid-commit\": false,\n"
-" \"relay\": {\n"
-" \"ip-addresses\": [ ]\n"
-" },\n"
-" \"reservations\": [ ],\n"
-" \"store-extended-info\": false,\n"
-" \"subnet\": \"2001:db8:1::/64\",\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
-" ],\n"
-" \"t1-percent\": 0.5,\n"
-" \"t2-percent\": 0.8,\n"
-" \"valid-lifetime\": 7200\n"
-" }\n"
+ // "to be replaced"
};
/// @brief the number of configurations
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
" \"dhcid\" : \"0102030405060708\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
// Create NameChangeRequest from JSON string.
" \"dhcid\" : \"0102030405060708\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
// Create NameChangeRequest from JSON string.
<< " at " << file << ":" << line;
}
+// Verifies that the contents of the given transaction's DNS update request
+// is correct for replacing a forward DNS entry when using the
+// "check-exists-with-dhcid" conflict resolution mode.
+void
+checkExistsReplaceFwdAddressRequest(NameChangeTransaction& tran) {
+ const D2UpdateMessagePtr& request = tran.getDnsUpdateRequest();
+ ASSERT_TRUE(request);
+
+ // Safety check.
+ dhcp_ddns::NameChangeRequestPtr ncr = tran.getNcr();
+ ASSERT_TRUE(ncr);
+
+ std::string exp_zone_name = tran.getForwardDomain()->getName();
+ std::string exp_fqdn = ncr->getFqdn();
+ const dns::RRType& exp_ip_rr_type = tran.getAddressRRType();
+
+ // Verify the zone section.
+ checkZone(request, exp_zone_name);
+
+ // Verify the PREREQUISITE SECTION
+ // Should test for DHCID exists but doesnt check actual value.
+ dns::RRsetPtr rrset;
+ checkRRCount(request, D2UpdateMessage::SECTION_PREREQUISITE, 1);
+
+ // Verify the DHCID test RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_PREREQUISITE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::ANY(), dns::RRType::DHCID(), 0, ncr);
+
+ // Verify the UPDATE SECTION
+ // Should be 4
+ // 1. delete of the FQDN/IP RR
+ // 2. delete of the DHCID RR
+ // 3. add of the FQDN/IP RR
+ // 4. add of the DHCID RR
+ checkRRCount(request, D2UpdateMessage::SECTION_UPDATE, 4);
+
+ // Fetch ttl.
+ uint32_t ttl = ncr->getLeaseLength();
+
+ // Verify the FQDN delete RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::ANY(), exp_ip_rr_type, 0, ncr);
+
+ // Verify the DHCID delete RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 1));
+ checkRR(rrset, exp_fqdn, dns::RRClass::ANY(), dns::RRType::DHCID(), 0, ncr);
+
+ // Verify the FQDN/IP add RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 2));
+ checkRR(rrset, exp_fqdn, dns::RRClass::IN(), exp_ip_rr_type, ttl, ncr);
+
+ // Verify the DHCID add RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 3));
+ checkRR(rrset, exp_fqdn, dns::RRClass::IN(), dns::RRType::DHCID(),
+ ttl, ncr);
+
+ // Verify there are no RRs in the ADDITIONAL Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_ADDITIONAL, 0);
+
+ // Verify that it will render toWire without throwing.
+ dns::MessageRenderer renderer;
+ ASSERT_NO_THROW(request->toWire(renderer));
+}
+
+// Verifies that the contents of the given transaction's DNS update request
+// is correct for removing a forward DNS entry when using the
+// "check-exists-with-dhcid" conflict resolution mode.
+void
+checkExistsRemoveFwdAddressRequest(NameChangeTransaction& tran) {
+ const D2UpdateMessagePtr& request = tran.getDnsUpdateRequest();
+ ASSERT_TRUE(request);
+
+ // Safety check.
+ dhcp_ddns::NameChangeRequestPtr ncr = tran.getNcr();
+ ASSERT_TRUE(ncr);
+
+ std::string exp_zone_name = tran.getForwardDomain()->getName();
+ std::string exp_fqdn = ncr->getFqdn();
+
+ // Verify the zone section.
+ checkZone(request, exp_zone_name);
+
+ // Verify there is 1 RR in the PREREQUISITE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_PREREQUISITE, 1);
+
+ // Verify the DHCID exists assertion RR.
+ dns::RRsetPtr rrset;
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_PREREQUISITE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::ANY(), dns::RRType::DHCID(),
+ 0, ncr);
+
+ // Verify there is 1 RR in the UPDATE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_UPDATE, 1);
+
+ // Verify the FQDN/IP delete RR.
+ const dns::RRType& exp_ip_rr_type = tran.getAddressRRType();
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::NONE(), exp_ip_rr_type,
+ 0, ncr);
+
+ // Verify that it will render toWire without throwing.
+ dns::MessageRenderer renderer;
+ ASSERT_NO_THROW(request->toWire(renderer));
+}
+
+// Verifies that the contents of the given transaction's DNS update request
+// is correct for removing a forward DNS RRs when using the
+// "check-exists-with-dhcid" conflict resolution mode.
+void
+checkExistsRemoveFwdRRsRequest(NameChangeTransaction& tran) {
+ const D2UpdateMessagePtr& request = tran.getDnsUpdateRequest();
+ ASSERT_TRUE(request);
+
+ // Safety check.
+ dhcp_ddns::NameChangeRequestPtr ncr = tran.getNcr();
+ ASSERT_TRUE(ncr);
+
+ std::string exp_zone_name = tran.getForwardDomain()->getName();
+ std::string exp_fqdn = ncr->getFqdn();
+
+ // Verify the zone section.
+ checkZone(request, exp_zone_name);
+
+ // Verify there are 2 RRs in the PREREQUISITE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_PREREQUISITE, 2);
+
+ // Verify the NO A RRs assertion.
+ dns::RRsetPtr rrset;
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_PREREQUISITE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::NONE(), dns::RRType::A(),
+ 0, ncr, NO_RDATA);
+
+ // Verify the NO AAAA RRs assertion.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_PREREQUISITE, 1));
+ checkRR(rrset, exp_fqdn, dns::RRClass::NONE(), dns::RRType::AAAA(),
+ 0, ncr, NO_RDATA);
+
+ // Verify there is 1 RR in the UPDATE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_UPDATE, 1);
+
+ // Verify the DHCID delete RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::ANY(), dns::RRType::DHCID(),
+ 0, ncr);
+
+ // Verify that it will render toWire without throwing.
+ dns::MessageRenderer renderer;
+ ASSERT_NO_THROW(request->toWire(renderer));
+}
+
+// Verifies that the contents of the given transaction's DNS update request
+// is correct for replacing a forward DNS entry when using the
+// "no-check-without-dhcid" conflict resolution mode.
+void
+checkSimpleReplaceFwdAddressWithoutDHCIDRequest(NameChangeTransaction& tran) {
+ const D2UpdateMessagePtr& request = tran.getDnsUpdateRequest();
+ ASSERT_TRUE(request);
+
+ // Safety check.
+ dhcp_ddns::NameChangeRequestPtr ncr = tran.getNcr();
+ ASSERT_TRUE(ncr);
+
+ std::string exp_zone_name = tran.getForwardDomain()->getName();
+ std::string exp_fqdn = ncr->getFqdn();
+ const dns::RRType& exp_ip_rr_type = tran.getAddressRRType();
+
+ // Verify the zone section.
+ checkZone(request, exp_zone_name);
+
+ // Verify the PREREQUISITE SECTION
+ // There should be no prerequisites.
+ dns::RRsetPtr rrset;
+ checkRRCount(request, D2UpdateMessage::SECTION_PREREQUISITE, 0);
+
+ // Verify the UPDATE SECTION
+ // Should be 2
+ // 1. delete of the FQDN/IP RR
+ // 2. add of the FQDN/IP RR
+ checkRRCount(request, D2UpdateMessage::SECTION_UPDATE, 2);
+
+ // Fetch ttl.
+ uint32_t ttl = ncr->getLeaseLength();
+
+ // Verify the FQDN delete RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::ANY(), exp_ip_rr_type, 0, ncr);
+
+ // Verify the FQDN/IP add RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 1));
+ checkRR(rrset, exp_fqdn, dns::RRClass::IN(), exp_ip_rr_type, ttl, ncr);
+
+ // Verify there are no RRs in the ADDITIONAL Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_ADDITIONAL, 0);
+
+ // Verify that it will render toWire without throwing.
+ dns::MessageRenderer renderer;
+ ASSERT_NO_THROW(request->toWire(renderer));
+}
+
+// Verifies that the contents of the given transaction's DNS update request
+// is correct for removing a forward DNS entry when using the
+// "no-check-without-dhcid" conflict resolution mode.
+void
+checkSimpleRemoveFwdRRsWithoutDHCIDRequest(NameChangeTransaction& tran) {
+ const D2UpdateMessagePtr& request = tran.getDnsUpdateRequest();
+ ASSERT_TRUE(request);
+
+ // Safety check.
+ dhcp_ddns::NameChangeRequestPtr ncr = tran.getNcr();
+ ASSERT_TRUE(ncr);
+
+ std::string exp_zone_name = tran.getForwardDomain()->getName();
+ std::string exp_fqdn = ncr->getFqdn();
+ const dns::RRType& exp_ip_rr_type = tran.getAddressRRType();
+
+ // Verify the zone section.
+ checkZone(request, exp_zone_name);
+
+ // Verify there no prerequisites.
+ checkRRCount(request, D2UpdateMessage::SECTION_PREREQUISITE, 0);
+
+ // Verify there is 1 RR in the UPDATE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_UPDATE, 1);
+
+ // Verify the FQDN delete RR.
+ dns::RRsetPtr rrset;
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 0));
+ checkRR(rrset, exp_fqdn, dns::RRClass::ANY(), exp_ip_rr_type, 0, ncr);
+
+ // Verify that it will render toWire without throwing.
+ dns::MessageRenderer renderer;
+ ASSERT_NO_THROW(request->toWire(renderer));
+}
+
+// Verifies that the contents of the given transaction's DNS update request
+// is correct for replacing a reverse DNS entry when using the
+// "no-check-without-dhcid" conflict resolution mode.
+void
+checkSimpleReplaceRevPtrsWithoutDHCIDRequest(NameChangeTransaction& tran) {
+ const D2UpdateMessagePtr& request = tran.getDnsUpdateRequest();
+ ASSERT_TRUE(request);
+
+ // Safety check.
+ dhcp_ddns::NameChangeRequestPtr ncr = tran.getNcr();
+ ASSERT_TRUE(ncr);
+
+ std::string exp_zone_name = tran.getReverseDomain()->getName();
+ std::string exp_rev_addr = D2CfgMgr::reverseIpAddress(ncr->getIpAddress());
+
+ // Verify the zone section.
+ checkZone(request, exp_zone_name);
+
+ // Verify there are no RRs in the PREREQUISITE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_PREREQUISITE, 0);
+
+ // Fetch ttl.
+ uint32_t ttl = ncr->getLeaseLength();
+
+ // Verify the UPDATE Section.
+ // It should contain 2 RRs:
+ // 1. A delete all PTR RRs for the given IP
+ // 2. An add of the new PTR RR
+ dns::RRsetPtr rrset;
+ checkRRCount(request, D2UpdateMessage::SECTION_UPDATE, 2);
+
+ // Verify the PTR delete RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 0));
+ checkRR(rrset, exp_rev_addr, dns::RRClass::ANY(), dns::RRType::PTR(),
+ 0, ncr);
+
+ // Verify the PTR add RR.
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 1));
+ checkRR(rrset, exp_rev_addr, dns::RRClass::IN(), dns::RRType::PTR(),
+ ttl, ncr);
+
+ // Verify there are no RRs in the ADDITIONAL Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_ADDITIONAL, 0);
+
+ // Verify that it will render toWire without throwing.
+ dns::MessageRenderer renderer;
+ ASSERT_NO_THROW(request->toWire(renderer));
+}
+
+// Verifies that the contents of the given transaction's DNS update request
+// is correct for removing a reverse DNS entry when using the
+// "no-check-without-dhcid" conflict resolution mode.
+void
+checkSimpleRemoveRevPtrsWithoutDHCIDRequest(NameChangeTransaction& tran) {
+ const D2UpdateMessagePtr& request = tran.getDnsUpdateRequest();
+ ASSERT_TRUE(request);
+
+ // Safety check.
+ dhcp_ddns::NameChangeRequestPtr ncr = tran.getNcr();
+ ASSERT_TRUE(ncr);
+
+ std::string exp_zone_name = tran.getReverseDomain()->getName();
+ std::string exp_rev_addr = D2CfgMgr::reverseIpAddress(ncr->getIpAddress());
+
+ // Verify the zone section.
+ checkZone(request, exp_zone_name);
+
+ // Verify there are no RRs in the PREREQUISITE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_PREREQUISITE, 0);
+
+ // Verify there is 1 RR in the UPDATE Section.
+ checkRRCount(request, D2UpdateMessage::SECTION_UPDATE, 1);
+
+ // Verify the FQDN delete RR.
+ dns::RRsetPtr rrset;
+ ASSERT_TRUE(rrset = getRRFromSection(request, D2UpdateMessage::
+ SECTION_UPDATE, 0));
+ checkRR(rrset, exp_rev_addr, dns::RRClass::ANY(), dns::RRType::PTR(), 0, ncr);
+
+ // Verify that it will render toWire without throwing.
+ dns::MessageRenderer renderer;
+ ASSERT_NO_THROW(request->toWire(renderer));
+}
+
} // namespace isc::d2
} // namespace isc
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
/// @brief Macro for calling checkContext() that supplies invocation location
#define CHECK_CONTEXT(a,b,c) checkContext(a,b,c,__FILE__,__LINE__)
+/// @brief Verifies a forward mapping replacement DNS update request
+/// with the "check-exists-with-dhcid" conflict resolution mode.
+///
+/// Tests that the DNS Update request for a given transaction, is correct for
+/// replacing a forward DNS mapping with the "check-exists-with-dhcid"
+/// conflict resolution mode.
+///
+/// @param tran Transaction containing the request to be verified.
+extern void checkExistsReplaceFwdAddressRequest(NameChangeTransaction& tran);
+/// @brief Verifies a forward mapping removal DNS update request
+/// with the "check-exists-with-dhcid" conflict resolution mode.
+///
+/// Tests that the DNS Update request for a given transaction, is correct for
+/// removing a forward DNS mapping with the "check-exists-with-dhcid"
+/// conflict resolution mode.
+///
+/// @param tran Transaction containing the request to be verified.
+extern void checkExistsRemoveFwdAddressRequest(NameChangeTransaction& tran);
+
+/// @brief Verifies a forward RR removal DNS update request
+/// with the "check-exists-with-dhcid" conflict resolution mode.
+///
+/// Tests that the DNS Update request for a given transaction, is correct for
+/// removing a forward RR DNS entries with the "check-exists-with-dhcid"
+/// conflict resolution mode.
+///
+/// @param tran Transaction containing the request to be verified.
+extern void checkExistsRemoveFwdRRsRequest(NameChangeTransaction& tran);
+
+/// @brief Verifies a simple forward mapping replacement DNS update request
+/// with the "no-check-without-dhcid" conflict resolution mode.
+///
+/// Tests that the DNS Update request for a given transaction, is correct for
+/// replacing a forward DNS mapping with the "no-check-without-dhcid"
+/// conflict resolution mode.
+///
+/// @param tran Transaction containing the request to be verified.
+extern void checkSimpleReplaceFwdAddressWithoutDHCIDRequest(NameChangeTransaction& tran);
+
+/// @brief Verifies a simple forward RR removal DNS update request
+/// with the "no-check-without-dhcid" conflict resolution mode.
+///
+/// Tests that the DNS Update request for a given transaction, is correct for
+/// removing forward RR DNS entries with the "no-check-without-dhcid"
+/// conflict resolution mode.
+///
+/// @param tran Transaction containing the request to be verified.
+extern void checkSimpleRemoveFwdRRsWithoutDHCIDRequest(NameChangeTransaction& tran);
+
+/// @brief Verifies a reverse mapping replacement DNS update request
+/// with the "no-check-without-dhcid" conflict resolution mode.
+///
+/// Tests that the DNS Update request for a given transaction, is correct for
+/// replacing a reverse DNS mapping with the "no-check-without-dhcid"
+/// conflict resolution mode.
+///
+/// @param tran Transaction containing the request to be verified.
+extern void checkSimpleReplaceRevPtrsWithoutDHCIDRequest(NameChangeTransaction& tran);
+
+/// @brief Verifies a simple reverse RR removal DNS update request
+/// with the "no-check-without-dhcid" conflict resolution mode.
+///
+/// Tests that the DNS Update request for a given transaction, is correct for
+/// removing reverse RR DNS entries with the "no-check-without-dhcid"
+/// conflict resolution mode.
+///
+/// @param tran Transaction containing the request to be verified.
+extern void checkSimpleRemoveRevPtrsWithoutDHCIDRequest(NameChangeTransaction& tran);
+
} // namespace isc::d2
} // namespace isc
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
return (stream.str());
}
+ConflictResolutionMode StringToConflictResolutionMode(const std::string& mode_str) {
+ if (mode_str == "check-with-dhcid") {
+ return (CHECK_WITH_DHCID);
+ }
+
+ if (mode_str == "no-check-with-dhcid") {
+ return (NO_CHECK_WITH_DHCID);
+ }
+
+ if (mode_str == "check-exists-with-dhcid") {
+ return (CHECK_EXISTS_WITH_DHCID);
+ }
+
+ if (mode_str == "no-check-without-dhcid") {
+ return (NO_CHECK_WITHOUT_DHCID);
+ }
+
+ isc_throw(BadValue, "Invalid ConflictResolutionMode: " << mode_str);
+}
+
+std::string
+ConflictResolutionModeToString(const ConflictResolutionMode& mode) {
+ switch (mode) {
+ case CHECK_WITH_DHCID:
+ return ("check-with-dhcid");
+ case NO_CHECK_WITH_DHCID:
+ return ("no-check-with-dhcid");
+ case CHECK_EXISTS_WITH_DHCID:
+ return ("check-exists-with-dhcid");
+ case NO_CHECK_WITHOUT_DHCID:
+ return ("no-check-without-dhcid");
+ default:
+ break;
+ }
+
+ std::ostringstream stream;
+ stream << "unknown(" << mode << ")";
+ return (stream.str());
+}
+
/********************************* D2Dhcid ************************************/
namespace {
NameChangeRequest::NameChangeRequest()
: change_type_(CHG_ADD), forward_change_(false),
reverse_change_(false), fqdn_(""), ip_io_address_("0.0.0.0"),
- dhcid_(), lease_expires_on_(), lease_length_(0), conflict_resolution_(true),
+ dhcid_(), lease_expires_on_(), lease_length_(0),
+ conflict_resolution_mode_(CHECK_WITH_DHCID),
status_(ST_NEW) {
}
const D2Dhcid& dhcid,
const uint64_t lease_expires_on,
const uint32_t lease_length,
- const bool conflict_resolution)
+ const ConflictResolutionMode conflict_resolution_mode)
: change_type_(change_type), forward_change_(forward_change),
reverse_change_(reverse_change), fqdn_(fqdn), ip_io_address_("0.0.0.0"),
dhcid_(dhcid), lease_expires_on_(lease_expires_on),
- lease_length_(lease_length), conflict_resolution_(conflict_resolution),
+ lease_length_(lease_length),
+ conflict_resolution_mode_(conflict_resolution_mode),
status_(ST_NEW) {
// User setter to validate fqdn.
element = ncr->getElement("lease-length", element_map);
ncr->setLeaseLength(element);
- // For backward compatibility use-conflict-resolution is optional
- // and defaults to true.
- auto found = element_map.find("use-conflict-resolution");
+ // conflict-resolution-mode supercedes use-conflict-resolution.
+ // Both are optional for backward compatibility. The default
+ // mode is CHECK_WITH_DHCID.
+ auto found = element_map.find("conflict-resolution-mode");
if (found != element_map.end()) {
- ncr->setConflictResolution(found->second);
+ ncr->setConflictResolutionMode(found->second);
} else {
- ncr->setConflictResolution(true);
+ found = element_map.find("use-conflict-resolution");
+ if (found != element_map.end()) {
+ ncr->translateUseConflictResolution(found->second);
+ } else {
+ ncr->setConflictResolutionMode(CHECK_WITH_DHCID);
+ }
}
// All members were in the Element set and were correct lexically. Now
<< "\"dhcid\":\"" << getDhcid().toStr() << "\","
<< "\"lease-expires-on\":\"" << getLeaseExpiresOnStr() << "\","
<< "\"lease-length\":" << getLeaseLength() << ","
- << "\"use-conflict-resolution\":"
- << (useConflictResolution() ? "true" : "false") << "}";
+ << "\"conflict-resolution-mode\":"
+ << "\"" <<ConflictResolutionModeToString(getConflictResolutionMode()) << "\""
+ << "}";
return (stream.str());
}
}
void
-NameChangeRequest::setConflictResolution(const bool value) {
- conflict_resolution_ = value;
+NameChangeRequest::translateUseConflictResolution(isc::data::ConstElementPtr element) {
+ try {
+ bool value = element->boolValue();
+ setConflictResolutionMode(value ? CHECK_WITH_DHCID : NO_CHECK_WITH_DHCID);
+ } catch (const isc::data::TypeError& ex) {
+ // We expect a boolean Element type, don't have one.
+ isc_throw(NcrMessageError, "Wrong data type for use-conflict-resolution: "
+ << ex.what());
+ }
}
void
-NameChangeRequest::setConflictResolution(isc::data::ConstElementPtr element) {
- bool value;
+NameChangeRequest::setConflictResolutionMode(const ConflictResolutionMode value) {
+ conflict_resolution_mode_ = value;
+}
+
+void
+NameChangeRequest::setConflictResolutionMode(isc::data::ConstElementPtr element) {
try {
- // Get the element's boolean value.
- value = element->boolValue();
+ // Get the element's string value.
+ auto value = StringToConflictResolutionMode(element->stringValue());
+ setConflictResolutionMode(value);
} catch (const isc::data::TypeError& ex) {
- // We expect a boolean Element type, don't have one.
- isc_throw(NcrMessageError,
- "Wrong data type for use-conflict-resolution: " << ex.what());
+ // We expect a string Element type, don't have one.
+ isc_throw(NcrMessageError, "Wrong data type for conflict-resolution-mode: "
+ << ex.what());
}
-
- // Good to go, make the assignment.
- setConflictResolution(value);
}
void
<< "DHCID: [" << dhcid_.toStr() << "]" << std::endl
<< "Lease Expires On: " << getLeaseExpiresOnStr() << std::endl
<< "Lease Length: " << lease_length_ << std::endl
- << "Conflict Resolution: " << (conflict_resolution_ ? "yes" : "no")
+ << "Conflict Resolution Mode: "
+ << ConflictResolutionModeToString(getConflictResolutionMode())
<< std::endl;
return (stream.str());
(dhcid_ == other.dhcid_) &&
(lease_expires_on_ == other.lease_expires_on_) &&
(lease_length_ == other.lease_length_) &&
- (conflict_resolution_ == other.conflict_resolution_));
+ (conflict_resolution_mode_ == other.conflict_resolution_mode_));
}
bool
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
FMT_JSON
};
+// DDNS Conflict resolution modes
+enum ConflictResolutionMode {
+ CHECK_WITH_DHCID,
+ NO_CHECK_WITH_DHCID,
+ CHECK_EXISTS_WITH_DHCID,
+ NO_CHECK_WITHOUT_DHCID
+};
+
/// @brief Function which converts labels to NameChangeFormat enum values.
///
/// @param fmt_str text to convert to an enum.
/// "UNKNOWN" if not.
extern std::string ncrFormatToString(NameChangeFormat format);
+/// @brief Function which converts string to ConflictResolutionMode enum values.
+///
+/// @param fmt_str text to convert to an enum.
+/// Valid string values: "check-with-dhcid", "no-check-with-dhcid",
+/// "check-exists-with-dhcid", "no-check-without-dhcid"
+///
+/// @return ConflictResolutionMode value which maps to the given string.
+///
+/// @throw isc::BadValue if given a string value which does not map to an
+/// enum value.
+ConflictResolutionMode StringToConflictResolutionMode(const std::string& mode_str);
+
+/// @brief Function which converts ConflictResolutionMode enums to text labels.
+///
+/// @param format enum value to convert to label
+///
+/// @return std:string containing the text label if the value is valid, or
+/// "unknown" if not.
+std::string ConflictResolutionModeToString(const ConflictResolutionMode& mode);
+
/// @brief Container class for handling the DHCID value within a
/// NameChangeRequest. It provides conversion to and from string for JSON
/// formatting, but stores the data internally as unsigned bytes.
/// expires.
/// @param lease_length the amount of time in seconds for which the
/// lease is valid (TTL).
- /// @param conflict_resolution indicates whether or not conflict resolution
+ /// @param conflict_resolution_mode conflict resolution mode to use, defaults
+ /// to CHECK_WITH_DHCID.
/// (per RFC 4703) is enabled.
NameChangeRequest(const NameChangeType change_type,
const bool forward_change, const bool reverse_change,
const D2Dhcid& dhcid,
const uint64_t lease_expires_on,
const uint32_t lease_length,
- const bool conflict_resolution = true);
+ const ConflictResolutionMode
+ conflict_resolution_mode = CHECK_WITH_DHCID);
/// @brief Static method for creating a NameChangeRequest from a
/// buffer containing a marshalled request in a given format.
/// Element
void setLeaseLength(isc::data::ConstElementPtr element);
- /// @brief Checks if conflict resolution is enabled
+ /// @brief Fetches the conflict resolution mode
///
/// @return a true if the conflict resolution is enabled.
- bool useConflictResolution() const {
- return (conflict_resolution_);
+ ConflictResolutionMode getConflictResolutionMode() const {
+ return (conflict_resolution_mode_);
}
- /// @brief Sets the conflict resolution flag to the given value.
+ /// @brief Sets the conflict resolution mode to the given value.
///
/// @param value contains the new value to assign to the conflict
- /// resolution flag
- void setConflictResolution(const bool value);
+ /// resolution mode
+ void setConflictResolutionMode(const ConflictResolutionMode value);
- /// @brief Sets the conflict resolution flag to the value of the given Element.
+ /// @brief Sets the conflict resolution mode to the value of the given Element.
+ ///
+ /// @param element is a enum Element containing the conflict resolution mode
+ /// value.
+ ///
+ /// @throw NcrMessageError if the element is not an enum Element.
+ void setConflictResolutionMode(isc::data::ConstElementPtr element);
+
+ /// @brief Sets the conflict resolution mode based on the value of
+ /// the given boolean Element.
+ ///
+ /// This function is used to translate use-conflict-resolution sent by
+ /// older versions of Kea.
///
/// @param element is a boolean Element containing the conflict resolution flag
/// value.
///
/// @throw NcrMessageError if the element is not a boolean
/// Element
- void setConflictResolution(isc::data::ConstElementPtr element);
+ void translateUseConflictResolution(isc::data::ConstElementPtr element);
/// @brief Fetches the request status.
///
/// @brief The amount of time in seconds for which the lease is valid (TTL).
uint32_t lease_length_;
- /// @brief Indicates if conflict resolution is enabled.
- bool conflict_resolution_;
+ /// @brief Indicates the conflict resolution mode.
+ ConflictResolutionMode conflict_resolution_mode_;
/// @brief The processing status of the request. Used internally.
NameChangeStatus status_;
-// Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 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
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Valid Remove.
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": false"
+ " \"conflict-resolution-mode\": \"no-check-with-dhcid\""
"}",
// Valid Add with IPv6 address
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}"
};
EXPECT_EQ(NameChangeListener::SUCCESS, result_);
// Verify the received request matches the sent request.
- EXPECT_TRUE(checkSendVsReceived(sent_ncr_, received_ncr_));
+ EXPECT_TRUE(checkSendVsReceived(sent_ncr_, received_ncr_))
+ << "sent_ncr_" << (sent_ncr_ ? sent_ncr_->toText() : "<null>")
+ << "recv_ncr_ " << (received_ncr_ ? received_ncr_->toText() : "<null>");
}
// Verify we can gracefully stop listening.
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Valid Remove.
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Valid Add with IPv6 address
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
- // Missing use-conflict-resolution
+ // Missing conflict-resolution-mode
"{"
" \"change-type\" : 0 , "
" \"forward-change\" : true , "
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300 "
+ "}",
+ // Has use-conflict-resolution instead of mode
+ "{"
+ " \"change-type\" : 0 , "
+ " \"forward-change\" : true , "
+ " \"reverse-change\" : false , "
+ " \"fqdn\" : \"walah.walah.com\" , "
+ " \"ip-address\" : \"192.168.2.1\" , "
+ " \"dhcid\" : \"010203040A7F8E3D\" , "
+ " \"lease-expires-on\" : \"20130121132405\" , "
+ " \"lease-length\" : 1300, "
+ " \"use-conflict-resolutione\": true"
"}"
};
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Invalid forward change.
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Invalid reverse change.
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Forward and reverse change both false.
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Blank FQDN
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Malformed FQDN
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Bad IP address
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300 "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Blank DHCID
"{"
" \"dhcid\" : \"\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Odd number of digits in DHCID
"{"
" \"dhcid\" : \"010203040A7F8E3\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Text in DHCID
"{"
" \"dhcid\" : \"THIS IS BOGUS!!!\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Invalid lease expiration string
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"Wed Jun 26 13:46:46 EDT 2013\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
// Non-integer for lease length.
"{"
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : \"BOGUS\", "
- " \"use-conflict-resolution\": true"
+ " \"conflict-resolution-mode\": \"check-with-dhcid\""
"}",
+ // Invalid conflict-resolution-mode
+ "{"
+ " \"change-type\" : 0 , "
+ " \"forward-change\" : true , "
+ " \"reverse-change\" : false , "
+ " \"fqdn\" : \"walah.walah.com\" , "
+ " \"ip-address\" : \"192.168.2.1\" , "
+ " \"dhcid\" : \"010203040A7F8E3D\" , "
+ " \"lease-expires-on\" : \"20130121132405\" , "
+ " \"lease-length\" : 1300, "
+ " \"conflict-resolution-mode\": \"bogus\""
+ "}"
// Invalid use-conflict-resolution
"{"
" \"change-type\" : 0 , "
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20130121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\": 777"
+ " \"use-conflict-resolution\": \"bogus\""
"}"
};
"\"dhcid\":\"010203040A7F8E3D\","
"\"lease-expires-on\":\"20130121132405\","
"\"lease-length\":1300,"
- "\"use-conflict-resolution\":true"
+ "\"conflict-resolution-mode\":\"check-with-dhcid\""
"}";
// Verify that a NameChangeRequests can be instantiated from the
"\"dhcid\":\"010203040A7F8E3D\","
"\"lease-expires-on\":\"20130121132405\","
"\"lease-length\":1300,"
- "\"use-conflict-resolution\":true"
+ "\"conflict-resolution-mode\":\"check-with-dhcid\""
"}";
// Create a request from JSON directly.
NameChangeRequestPtr ncr;
ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_true));
ASSERT_TRUE(ncr);
- EXPECT_TRUE(ncr->useConflictResolution());
+ EXPECT_EQ(CHECK_WITH_DHCID, ncr->getConflictResolutionMode());
std::string its_false(base_json + ",\"use-conflict-resolution\": false}");
ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_false));
ASSERT_TRUE(ncr);
- EXPECT_FALSE(ncr->useConflictResolution());
+ EXPECT_EQ(NO_CHECK_WITH_DHCID, ncr->getConflictResolutionMode());
std::string its_missing(base_json + "}");
ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_true));
ASSERT_TRUE(ncr);
- EXPECT_TRUE(ncr->useConflictResolution());
+ EXPECT_EQ(CHECK_WITH_DHCID, ncr->getConflictResolutionMode());
+}
+
+TEST(NameChangeRequestTest, ConflictResolutionModeParsing) {
+ std::string base_json =
+ "{"
+ " \"change-type\" : 0 , "
+ " \"forward-change\" : true , "
+ " \"reverse-change\" : false , "
+ " \"fqdn\" : \"walah.walah.com\" , "
+ " \"ip-address\" : \"192.168.2.1\" , "
+ " \"dhcid\" : \"010203040A7F8E3D\" , "
+ " \"lease-expires-on\" : \"20130121132405\" , "
+ " \"lease-length\" : 1300 ";
+
+ std::string its_check_with_dhcid(base_json + ",\"conflict-resolution-mode\": \"check-with-dhcid\"}");
+ NameChangeRequestPtr ncr;
+ ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_check_with_dhcid));
+ ASSERT_TRUE(ncr);
+ EXPECT_EQ(ncr->getConflictResolutionMode(), CHECK_WITH_DHCID);
+
+ std::string its_no_check_with_dhcid(base_json + ",\"conflict-resolution-mode\": \"no-check-with-dhcid\"}");
+ ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_no_check_with_dhcid));
+ ASSERT_TRUE(ncr);
+ EXPECT_EQ(ncr->getConflictResolutionMode(), NO_CHECK_WITH_DHCID);
+
+ std::string its_check_exists_with_dhcid(base_json + ",\"conflict-resolution-mode\": \"check-exists-with-dhcid\"}");
+ ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_check_exists_with_dhcid));
+ ASSERT_TRUE(ncr);
+ EXPECT_EQ(ncr->getConflictResolutionMode(), CHECK_EXISTS_WITH_DHCID);
+
+ std::string its_no_check_without_dhcid(base_json + ",\"conflict-resolution-mode\": \"no-check-without-dhcid\"}");
+ ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_no_check_without_dhcid));
+ ASSERT_TRUE(ncr);
+ EXPECT_EQ(ncr->getConflictResolutionMode(), NO_CHECK_WITHOUT_DHCID);
+
+ std::string its_missing(base_json + "}");
+ ASSERT_NO_THROW_LOG(ncr = NameChangeRequest::fromJSON(its_missing));
+ ASSERT_TRUE(ncr);
+ EXPECT_EQ(ncr->getConflictResolutionMode(), CHECK_WITH_DHCID);
}
} // end of anonymous namespace
{ "parked-packet-limit", PARKED_PACKET_LIMIT },
{ "allocator", ALLOCATOR },
{ "ddns-ttl-percent", DDNS_TTL_PERCENT },
+ { "ddns-conflict-resolution-mode", DDNS_CONFLICT_RESOLUTION_MODE },
// DHCPv4 specific parameters.
{ "echo-client-id", ECHO_CLIENT_ID },
PARKED_PACKET_LIMIT,
ALLOCATOR,
DDNS_TTL_PERCENT,
+ DDNS_CONFLICT_RESOLUTION_MODE,
// DHCPv4 specific parameters.
ECHO_CLIENT_ID,
return;
}
- bool use_conflict_resolution = true;
- util::Optional<double> ddns_ttl_percent;
- if (subnet) {
- use_conflict_resolution = subnet->getDdnsUseConflictResolution();
- ddns_ttl_percent = subnet->getDdnsTtlPercent();
- }
+ ConflictResolutionMode conflict_resolution_mode = CHECK_WITH_DHCID;
+ util::Optional<double> ddns_ttl_percent;
+ if (subnet) {
+ auto mode = subnet->getDdnsConflictResolutionMode();
+ if (!mode.empty()) {
+ conflict_resolution_mode = StringToConflictResolutionMode(mode);
+ }
+
+ ddns_ttl_percent = subnet->getDdnsTtlPercent();
+ }
try {
// Create DHCID
(new NameChangeRequest(chg_type, lease->fqdn_fwd_, lease->fqdn_rev_,
lease->hostname_, lease->addr_.toText(),
dhcid, lease->cltt_ + ttl,
- ttl, use_conflict_resolution));
+ ttl, conflict_resolution_mode));
LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL_DATA, DHCPSRV_QUEUE_NCR)
.arg(label)
map->set("ddns-update-on-renew", Element::create(ddns_update_on_renew_));
}
- if (!ddns_use_conflict_resolution_.unspecified()) {
- map->set("ddns-use-conflict-resolution", Element::create(ddns_use_conflict_resolution_));
+ if (!ddns_conflict_resolution_mode_.unspecified()) {
+ map->set("ddns-conflict-resolution-mode", Element::create(ddns_conflict_resolution_mode_));
}
if (!allocator_type_.unspecified()) {
ddns_replace_client_name_mode_(), ddns_generated_prefix_(), ddns_qualifying_suffix_(),
hostname_char_set_(), hostname_char_replacement_(), store_extended_info_(),
cache_threshold_(), cache_max_age_(), ddns_update_on_renew_(),
- ddns_use_conflict_resolution_(), ddns_ttl_percent_(), allocator_type_(),
+ ddns_conflict_resolution_mode_(), ddns_ttl_percent_(), allocator_type_(),
default_allocator_type_() {
}
ddns_update_on_renew_ = ddns_update_on_renew;
}
- /// @brief Returns ddns-use-conflict-resolution
+
+ /// @brief Returns ib-ddns-conflict-resolution-mode
///
/// @param inheritance inheritance mode to be used.
- util::Optional<bool>
- getDdnsUseConflictResolution(const Inheritance& inheritance = Inheritance::ALL) const {
- return (getProperty<Network>(&Network::getDdnsUseConflictResolution,
- ddns_use_conflict_resolution_,
+ util::Optional<std::string>
+ getDdnsConflictResolutionMode(const Inheritance& inheritance = Inheritance::ALL) const {
+ return (getProperty<Network>(&Network::getDdnsConflictResolutionMode,
+ ddns_conflict_resolution_mode_,
inheritance,
- CfgGlobals::DDNS_USE_CONFLICT_RESOLUTION));
+ CfgGlobals::DDNS_CONFLICT_RESOLUTION_MODE));
}
- /// @brief Sets new ddns-use-conflict-resolution
+ /// @brief Sets new ib-ddns-conflict-resolution-mode
///
/// @param ddns_use_conflict_resolution New value to use.
- void setDdnsUseConflictResolution(const util::Optional<bool>& ddns_use_conflict_resolution) {
- ddns_use_conflict_resolution_ = ddns_use_conflict_resolution;
+ void setDdnsConflictResolutionMode(const util::Optional<std::string>& ddns_conflict_resolution_mode) {
+ ddns_conflict_resolution_mode_ = ddns_conflict_resolution_mode;
}
/// @brief Returns allocator type.
/// @brief Should Kea perform updates when leases are extended
util::Optional<bool> ddns_update_on_renew_;
- /// @brief Used to to tell kea-dhcp-ddns whether or not to use conflict resolution.
- util::Optional<bool> ddns_use_conflict_resolution_;
+ /// @brief DDNS conflict resolution mode
+ util::Optional<std::string> ddns_conflict_resolution_mode_;
/// @brief Percentage of the lease lifetime to use for DNS TTL.
util::Optional<double> ddns_ttl_percent_;
network->setDdnsUpdateOnRenew(getBoolean(network_data, "ddns-update-on-renew"));
}
- if (network_data->contains("ddns-use-conflict-resolution")) {
- network->setDdnsUseConflictResolution(getBoolean(network_data, "ddns-use-conflict-resolution"));
- }
-
if (network_data->contains("ddns-ttl-percent")) {
network->setDdnsTtlPercent(getDouble(network_data, "ddns-ttl-percent"));
}
+
+ if (network_data->contains("ddns-conflict-resolution-mode")) {
+ network->setDdnsConflictResolutionMode(getString(network_data,
+ "ddns-conflict-resolution-mode"));
+ } else {
+ // For backward compatibility, look for ddns-use-conflict-resolution.
+ // We might consider emitting a debug log?
+ if (network_data->contains("ddns-use-conflict-resolution")) {
+ auto value = getBoolean(network_data, "ddns-use-conflict-resolution");
+ network->setDdnsConflictResolutionMode(value ? "check-with-dhcid"
+ : "no-check_with-dhcid");
+ }
+ }
}
void
/// - ddns-replace-client-name
/// - ddns-generated-prefix
/// - ddns-qualifying-suffix
- /// - ddns-use-conflict-resolution
+ /// - ddns-use-conflict-resolution (retained for backward compatibility)
/// - ddns-update-on-renew
/// - ddns-ttl-percent
+ /// - ddns-conflict-resolution-mode
///
/// @param network_data Data element holding shared network
/// configuration to be parsed.
{ "ip-reservations-unique", Element::boolean },
{ "reservations-lookup-first", Element::boolean },
{ "ddns-update-on-renew", Element::boolean },
- { "ddns-use-conflict-resolution", Element::boolean },
+ { "ddns-use-conflict-resolution", Element::boolean }, // deprecated
{ "compatibility", Element::map },
{ "parked-packet-limit", Element::integer },
{ "allocator", Element::string },
{ "offer-lifetime", Element::integer },
{ "ddns-ttl-percent", Element::real },
+ { "ddns-conflict-resolution-mode", Element::string },
};
/// @brief This table defines default global values for DHCPv4
{ "ip-reservations-unique", Element::boolean, "true" },
{ "reservations-lookup-first", Element::boolean, "false" },
{ "ddns-update-on-renew", Element::boolean, "false" },
- { "ddns-use-conflict-resolution", Element::boolean, "true" },
{ "parked-packet-limit", Element::integer, "256" },
{ "allocator", Element::string, "iterative" },
+ { "ddns-conflict-resolution-mode", Element::string, "check-with-dhcid" },
};
/// @brief This table defines all option definition parameters.
{ "cache-threshold", Element::real },
{ "cache-max-age", Element::integer },
{ "ddns-update-on-renew", Element::boolean },
- { "ddns-use-conflict-resolution", Element::boolean },
+ { "ddns-use-conflict-resolution", Element::boolean }, // deprecated
{ "allocator", Element::string },
{ "offer-lifetime", Element::integer },
{ "ddns-ttl-percent", Element::real },
+ { "ddns-conflict-resolution-mode", Element::string },
};
/// @brief This table defines default values for each IPv4 subnet.
{ "cache-threshold", Element::real },
{ "cache-max-age", Element::integer },
{ "ddns-update-on-renew", Element::boolean },
- { "ddns-use-conflict-resolution", Element::boolean },
+ { "ddns-use-conflict-resolution", Element::boolean }, // deprecated
{ "allocator", Element::string },
{ "offer-lifetime", Element::integer },
{ "ddns-ttl-percent", Element::real },
+ { "ddns-conflict-resolution-mode", Element::string },
};
/// @brief This table defines default values for interfaces for DHCPv4.
{ "ip-reservations-unique", Element::boolean },
{ "reservations-lookup-first", Element::boolean },
{ "ddns-update-on-renew", Element::boolean },
- { "ddns-use-conflict-resolution", Element::boolean },
+ { "ddns-use-conflict-resolution", Element::boolean }, // deprecated
{ "compatibility", Element::map },
{ "parked-packet-limit", Element::integer },
{ "allocator", Element::string },
{ "pd-allocator", Element::string },
{ "ddns-ttl-percent", Element::real },
+ { "ddns-conflict-resolution-mode", Element::string },
};
/// @brief This table defines default global values for DHCPv6
{ "ip-reservations-unique", Element::boolean, "true" },
{ "reservations-lookup-first", Element::boolean, "false" },
{ "ddns-update-on-renew", Element::boolean, "false" },
- { "ddns-use-conflict-resolution", Element::boolean, "true" },
{ "parked-packet-limit", Element::integer, "256" },
{ "allocator", Element::string, "iterative" },
{ "pd-allocator", Element::string, "iterative" },
+ { "ddns-conflict-resolution-mode", Element::string, "check-with-dhcid" },
};
/// @brief This table defines all option definition parameters.
{ "cache-threshold", Element::real },
{ "cache-max-age", Element::integer },
{ "ddns-update-on-renew", Element::boolean },
- { "ddns-use-conflict-resolution", Element::boolean },
+ { "ddns-use-conflict-resolution", Element::boolean }, // deprecated
{ "allocator", Element::string },
{ "pd-allocator", Element::string },
{ "ddns-ttl-percent", Element::real },
+ { "ddns-conflict-resolution-mode", Element::string },
};
/// @brief This table defines default values for each IPv6 subnet.
{ "cache-threshold", Element::real },
{ "cache-max-age", Element::integer },
{ "ddns-update-on-renew", Element::boolean },
- { "ddns-use-conflict-resolution", Element::boolean },
+ { "ddns-use-conflict-resolution", Element::boolean }, // deprecated
{ "allocator", Element::string },
{ "pd-allocator", Element::string },
{ "ddns-ttl-percent", Element::real },
+ { "ddns-conflict-resolution-mode", Element::string },
};
/// @brief This table defines default values for interfaces for DHCPv6.
return (subnet_->getDdnsUpdateOnRenew().get());
}
-bool
-DdnsParams::getUseConflictResolution() const {
+util::Optional<double>
+DdnsParams::getTtlPercent() const {
if (!subnet_) {
- return (true);
+ return (util::Optional<double>());
}
- return (subnet_->getDdnsUseConflictResolution().get());
+ return (subnet_->getDdnsTtlPercent());
}
-util::Optional<double>
-DdnsParams::getTtlPercent() const {
+std::string
+DdnsParams::getConflictResolutionMode() const {
if (!subnet_) {
- return (util::Optional<double>());
+ return ("check-with-dhcid");
}
- return (subnet_->getDdnsTtlPercent());
+ return (subnet_->getDdnsConflictResolutionMode().get());
}
} // namespace dhcp
/// @return True if updates should always be performed.
bool getUpdateOnRenew() const;
- /// @brief Returns whether or not keah-dhcp-ddns should use conflict resolution
- ///
- /// This value is communicated to D2 via the NCR. When true, D2 should follow
- /// follow conflict resolution steps described in RFC 4703. If not, it should
- /// simple add or remove entries.
- ///
- /// @return True if conflict resolution should be used.
- bool getUseConflictResolution() const;
-
/// @brief Returns percent of lease lifetime to use for TTL
///
/// This value, if greater than zero, is used to calculate the lease lifetime
/// @return TTL percent as an Optional.
util::Optional<double> getTtlPercent() const;
+ /// @brief Returns the DDNS config resolution mode for kea-dhcp-ddns
+ ///
+ /// This value is communicated to D2 via the NCR.
+ ///
+ /// @return the DDNS conflict resolution mode
+ std::string getConflictResolutionMode() const;
+
/// @brief Returns the subnet-id of the subnet associated with these parameters
///
/// @return value of subnet-id (or 0 if no subnet is associated)
-// Copyright (C) 2014-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2023 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
" \"dhcid\" : \"010203040A7F8E3D\" , "
" \"lease-expires-on\" : \"20140121132405\" , "
" \"lease-length\" : 1300, "
- " \"use-conflict-resolution\" : true "
+ " \"conflict-resolution-mode\" : \"check-with-dhcid\""
"}";
return (dhcp_ddns::NameChangeRequest::fromJSON(ncr_str));
EXPECT_TRUE(subnet->getDdnsUpdateOnRenew().unspecified());
EXPECT_FALSE(subnet->getDdnsUpdateOnRenew().get());
- EXPECT_TRUE(subnet->getDdnsUseConflictResolution().unspecified());
- EXPECT_FALSE(subnet->getDdnsUseConflictResolution().get());
+ EXPECT_TRUE(subnet->getDdnsConflictResolutionMode().unspecified());
+ EXPECT_EQ("", subnet->getDdnsConflictResolutionMode().get());
EXPECT_TRUE(subnet->getAllocationState(Lease::TYPE_V4));
EXPECT_TRUE(subnet->getAllocator(Lease::TYPE_V4));
EXPECT_TRUE(subnet->getDdnsUpdateOnRenew().unspecified());
EXPECT_FALSE(subnet->getDdnsUpdateOnRenew().get());
- EXPECT_TRUE(subnet->getDdnsUseConflictResolution().unspecified());
- EXPECT_FALSE(subnet->getDdnsUseConflictResolution().get());
+ EXPECT_TRUE(subnet->getDdnsConflictResolutionMode().unspecified());
+ EXPECT_EQ("", subnet->getDdnsConflictResolutionMode().get());
EXPECT_TRUE(subnet->getAllocationState(Lease::TYPE_NA));
EXPECT_TRUE(subnet->getAllocationState(Lease::TYPE_TA));
EXPECT_TRUE(network->getDdnsUpdateOnRenew().unspecified());
EXPECT_FALSE(network->getDdnsUpdateOnRenew().get());
- EXPECT_TRUE(network->getDdnsUseConflictResolution().unspecified());
- EXPECT_FALSE(network->getDdnsUseConflictResolution().get());
+ EXPECT_TRUE(network->getDdnsConflictResolutionMode().unspecified());
+ EXPECT_EQ("", network->getDdnsConflictResolutionMode().get());
EXPECT_TRUE(network->getAllocatorType().unspecified());
EXPECT_TRUE(network->getAllocatorType().get().empty());
EXPECT_TRUE(network->getDdnsUpdateOnRenew().unspecified());
EXPECT_FALSE(network->getDdnsUpdateOnRenew().get());
- EXPECT_TRUE(network->getDdnsUseConflictResolution().unspecified());
- EXPECT_FALSE(network->getDdnsUseConflictResolution().get());
+ EXPECT_TRUE(network->getDdnsConflictResolutionMode().unspecified());
+ EXPECT_EQ("", network->getDdnsConflictResolutionMode().get());
EXPECT_TRUE(network->getAllocatorType().unspecified());
EXPECT_TRUE(network->getAllocatorType().get().empty());
/// NameChangeRequest.
/// @param fqdn The expected string value of the FQDN, if blank the
/// check is skipped
+ /// @param conflict_resolution_mode expected value of conflict resolution
+ /// mode.
void verifyNameChangeRequest(const isc::dhcp_ddns::NameChangeType type,
const bool reverse, const bool forward,
const std::string& addr,
const uint64_t expires,
const uint16_t len,
const std::string& fqdn="",
- const bool use_conflict_resolution = true) {
+ const ConflictResolutionMode
+ conflict_resolution_mode = CHECK_WITH_DHCID) {
NameChangeRequestPtr ncr;
ASSERT_NO_THROW(ncr = CfgMgr::instance().getD2ClientMgr().peekAt(0));
ASSERT_TRUE(ncr);
EXPECT_EQ(expires, ncr->getLeaseExpiresOn());
EXPECT_EQ(len, ncr->getLeaseLength());
EXPECT_EQ(isc::dhcp_ddns::ST_NEW, ncr->getStatus());
- EXPECT_EQ(use_conflict_resolution, ncr->useConflictResolution());
+ EXPECT_EQ(conflict_resolution_mode, ncr->getConflictResolutionMode());
if (!fqdn.empty()) {
EXPECT_EQ(fqdn, ncr->getFqdn());
/// @param rev Perform reverse update.
/// @param fqdn Hostname.
/// @param exp_dhcid Expected DHCID.
- /// @param exp_use_cr expected value of conflict resolution flag
+ /// @param exp_cr_mode expected value of conflict resolution mode.
+ /// @param ttl_percent expected value of TTL percent.
void testNCR(const NameChangeType chg_type, const bool fwd, const bool rev,
const std::string& fqdn, const std::string exp_dhcid,
- const bool exp_use_cr = true,
+ const ConflictResolutionMode exp_cr_mode = CHECK_WITH_DHCID,
const Optional<double> ttl_percent = Optional<double>()) {
// Queue NCR.
ASSERT_NO_FATAL_FAILURE(sendNCR(chg_type, fwd, rev, fqdn));
// Check the details of the NCR.
verifyNameChangeRequest(chg_type, rev, fwd, lease_->addr_.toText(), exp_dhcid,
- lease_->cltt_ + ttl, ttl, fqdn, exp_use_cr);
+ lease_->cltt_ + ttl, ttl, fqdn, exp_cr_mode);
}
/// @brief Test that calling queueNCR for NULL lease doesn't cause
virtual void initLease() {
Subnet6Ptr subnet(new Subnet6(IOAddress("2001:db8:1::"), 64, 100, 200, 300, 400, SubnetID(1)));
// Normally, this would be set via defaults
- subnet->setDdnsUseConflictResolution(true);
+ subnet->setDdnsConflictResolutionMode("check-with-dhcid");
Pool6Ptr pool(new Pool6(Lease::TYPE_NA, IOAddress("2001:db8:1::1"),
IOAddress("2001:db8:1::200")));
}
}
-// Verify that conflict resolution is set correctly by v6 queueNCR()
-TEST_F(NCRGenerator6Test, useConflictResolution) {
+// Verify that conflict resolution mode is set correctly by v6 queueNCR()
+TEST_F(NCRGenerator6Test, conflictResolutionMode) {
{
- SCOPED_TRACE("Subnet flag is false");
- subnet_->setDdnsUseConflictResolution(false);
+ SCOPED_TRACE("Subnet mode is check-with-dhcid");
+ subnet_->setDdnsConflictResolutionMode("check-with-dhcid");
testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
"000201BE0D7A66F8AB6C4082E7F8B81E2656667A102E3D0ECCEA5E0DD71730F392119A",
- false);
+ CHECK_WITH_DHCID);
}
{
- SCOPED_TRACE("Subnet flag is true");
- subnet_->setDdnsUseConflictResolution(true);
+ SCOPED_TRACE("Subnet mode is no-check-with-dhcid");
+ subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid");
testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
"000201BE0D7A66F8AB6C4082E7F8B81E2656667A102E3D0ECCEA5E0DD71730F392119A",
- true);
+ NO_CHECK_WITH_DHCID);
+ }
+ {
+ SCOPED_TRACE("Subnet mode is check-exists-with-dhcid");
+ subnet_->setDdnsConflictResolutionMode("check-exists-with-dhcid");
+ testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
+ "000201BE0D7A66F8AB6C4082E7F8B81E2656667A102E3D0ECCEA5E0DD71730F392119A",
+ CHECK_EXISTS_WITH_DHCID);
+ }
+ {
+ SCOPED_TRACE("Subnet mode is no-check-without-dhcid");
+ subnet_->setDdnsConflictResolutionMode("no-check-without-dhcid");
+ testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
+ "000201BE0D7A66F8AB6C4082E7F8B81E2656667A102E3D0ECCEA5E0DD71730F392119A",
+ NO_CHECK_WITHOUT_DHCID);
}
}
Subnet4Ptr subnet(new Subnet4(IOAddress("192.0.2.0"), 24, 1, 2, 3, SubnetID(1)));
// Normally, this would be set via defaults
- subnet->setDdnsUseConflictResolution(true);
+ subnet->setDdnsConflictResolutionMode("check-with-dhcid");
Pool4Ptr pool(new Pool4(IOAddress("192.0.2.100"),
IOAddress("192.0.2.200")));
}
}
-// Verify that conflict resolution is set correctly by v4 queueNCR()
-TEST_F(NCRGenerator4Test, useConflictResolution) {
+// Verify that conflict resolution mode is set correctly by v4 queueNCR()
+TEST_F(NCRGenerator4Test, conflictResolutionMode) {
+ {
+ SCOPED_TRACE("Subnet mode is check-with-dhcid");
+ subnet_->setDdnsConflictResolutionMode("check-with-dhcid");
+ testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
+ "000001E356D43E5F0A496D65BCA24D982D646140813E3"
+ "B03AB370BFF46BFA309AE7BFD",
+ CHECK_WITH_DHCID);
+ }
+ {
+ SCOPED_TRACE("Subnet mode is no-check-with-dhcid");
+ subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid");
+ testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
+ "000001E356D43E5F0A496D65BCA24D982D646140813E3"
+ "B03AB370BFF46BFA309AE7BFD",
+ NO_CHECK_WITH_DHCID);
+ }
{
- SCOPED_TRACE("Subnet flag is false");
- subnet_->setDdnsUseConflictResolution(false);
+ SCOPED_TRACE("Subnet mode is check-exists-with-dhcid");
+ subnet_->setDdnsConflictResolutionMode("check-exists-with-dhcid");
testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
"000001E356D43E5F0A496D65BCA24D982D646140813E3"
- "B03AB370BFF46BFA309AE7BFD", false);
+ "B03AB370BFF46BFA309AE7BFD",
+ CHECK_EXISTS_WITH_DHCID);
}
{
- SCOPED_TRACE("Subnet flag is true");
- subnet_->setDdnsUseConflictResolution(true);
+ SCOPED_TRACE("Subnet mode is no-check-without-dhcid");
+ subnet_->setDdnsConflictResolutionMode("no-check-without-dhcid");
testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
"000001E356D43E5F0A496D65BCA24D982D646140813E3"
- "B03AB370BFF46BFA309AE7BFD", true);
+ "B03AB370BFF46BFA309AE7BFD",
+ NO_CHECK_WITHOUT_DHCID);
}
}
subnet_->setDdnsTtlPercent(ttl_percent);
testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
"000001E356D43E5F0A496D65BCA24D982D646140813E3"
- "B03AB370BFF46BFA309AE7BFD", true, ttl_percent);
+ "B03AB370BFF46BFA309AE7BFD", CHECK_WITH_DHCID, ttl_percent);
}
{
SCOPED_TRACE("Ttl percent of 1.5");
subnet_->setDdnsTtlPercent(ttl_percent);
testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.",
"000001E356D43E5F0A496D65BCA24D982D646140813E3"
- "B03AB370BFF46BFA309AE7BFD", true, ttl_percent);
+ "B03AB370BFF46BFA309AE7BFD", CHECK_WITH_DHCID, ttl_percent);
}
}
globals_->set("cache-threshold", Element::create(.25));
globals_->set("cache-max-age", Element::create(20));
globals_->set("ddns-update-on-renew", Element::create(true));
- globals_->set("ddns-use-conflict-resolution", Element::create(true));
+ globals_->set("ddns-conflict-resolution-mode", Element::create("check-with-dhcid"));
globals_->set("allocator", Element::create("random"));
globals_->set("offer-lifetime", Element::create(45));
globals_->set("ddns-ttl-percent", Element::create(0.75));
false, true);
}
{
- SCOPED_TRACE("ddns-use-conflict-resolution");
- testNetworkInheritance<TestNetwork4>(&Network4::getDdnsUseConflictResolution,
- &Network4::setDdnsUseConflictResolution,
- false, true);
+ SCOPED_TRACE("ddns-conflict-resolution-mode");
+ testNetworkInheritance<TestNetwork4>(&Network4::getDdnsConflictResolutionMode,
+ &Network4::setDdnsConflictResolutionMode,
+ "no-check-with-dhcid", "check-with-dhcid");
}
{
SCOPED_TRACE("allocator");
globals_->set("hostname-char-replacement", Element::create("gr"));
globals_->set("store-extended-info", Element::create(true));
globals_->set("ddns-update-on-renew", Element::create(true));
- globals_->set("ddns-use-conflict-resolution", Element::create(true));
globals_->set("allocator", Element::create("random"));
globals_->set("pd-allocator", Element::create("random"));
globals_->set("ddns-ttl-percent", Element::create(0.55));
+ globals_->set("ddns-conflict-resolution-mode", Element::create("check-with-dhcid"));
// For each parameter for which inheritance is supported run
// the test that checks if the values are inherited properly.
false, true);
}
{
- SCOPED_TRACE("ddns-use-conflict-resolution");
- testNetworkInheritance<TestNetwork6>(&Network6::getDdnsUseConflictResolution,
- &Network6::setDdnsUseConflictResolution,
- false, true);
+ SCOPED_TRACE("ddns-conflict-resolution-mode");
+ testNetworkInheritance<TestNetwork6>(&Network6::getDdnsConflictResolutionMode,
+ &Network6::setDdnsConflictResolutionMode,
+ "no-check-with-dhcid", "check-with-dhcid");
}
{
SCOPED_TRACE("allocator");
#include <gtest/gtest.h>
using namespace isc::asiolink;
+using namespace isc::dhcp_ddns;
using namespace isc::dhcp;
using namespace isc::data;
using namespace isc::process;
// Configure global host sanitizing.
conf.addConfiguredGlobal("hostname-char-set", Element::create("[^A-Z]"));
conf.addConfiguredGlobal("hostname-char-replacement", Element::create("x"));
- // Enable conflict resolution globally.
- conf.addConfiguredGlobal("ddns-use-conflict-resolution", Element::create(true));
+ // Specify conflict resolution mode globally.
+ conf.addConfiguredGlobal("ddns-conflict-resolution-mode", Element::create("check-with-dhcid"));
// Configure TTL percent globally.
conf.addConfiguredGlobal("ddns-ttl-percent", Element::create(20.0));
subnet2->setDdnsQualifyingSuffix("example.com.");
subnet2->setHostnameCharSet("");
subnet2->setDdnsUpdateOnRenew(true);
- subnet2->setDdnsUseConflictResolution(false);
+ subnet2->setDdnsConflictResolutionMode("no-check-with-dhcid");
subnet2->setDdnsTtlPercent(Optional<double>(40.0));
// Get DDNS params for subnet1.
EXPECT_EQ("[^A-Z]", params->getHostnameCharSet());
EXPECT_EQ("x", params->getHostnameCharReplacement());
EXPECT_FALSE(params->getUpdateOnRenew());
- EXPECT_TRUE(params->getUseConflictResolution());
+ EXPECT_EQ("check-with-dhcid", params->getConflictResolutionMode());
EXPECT_FALSE(params->getTtlPercent().unspecified());
EXPECT_EQ(20.0, params->getTtlPercent().get());
EXPECT_EQ("", params->getHostnameCharSet());
EXPECT_EQ("x", params->getHostnameCharReplacement());
EXPECT_TRUE(params->getUpdateOnRenew());
- EXPECT_FALSE(params->getUseConflictResolution());
+ EXPECT_EQ("no-check-with-dhcid", params->getConflictResolutionMode());
EXPECT_FALSE(params->getTtlPercent().unspecified());
EXPECT_EQ(40.0, params->getTtlPercent().get());
conf.addConfiguredGlobal("hostname-char-set", Element::create("[^A-Z]"));
conf.addConfiguredGlobal("hostname-char-replacement", Element::create("x"));
conf.addConfiguredGlobal("ddns-update-on-renew", Element::create(true));
- conf.addConfiguredGlobal("ddns-use-conflict-resolution", Element::create(false));
+ conf.addConfiguredGlobal("ddns-conflict-resolution-mode",
+ Element::create("no-check-with-dhcid"));
conf.addConfiguredGlobal("ddns-ttl-percent", Element::create(77.0));
// Get DDNS params for no subnet.
EXPECT_TRUE(params->getHostnameCharSet().empty());
EXPECT_TRUE(params->getHostnameCharReplacement().empty());
EXPECT_FALSE(params->getUpdateOnRenew());
- EXPECT_TRUE(params->getUseConflictResolution());
+ EXPECT_EQ("check-with-dhcid", params->getConflictResolutionMode());
EXPECT_TRUE(params->getTtlPercent().unspecified());
}
// Configure global host sanitizing.
conf.addConfiguredGlobal("hostname-char-set", Element::create("[^A-Z]"));
conf.addConfiguredGlobal("hostname-char-replacement", Element::create("x"));
- // Enable conflict resolution globally.
- conf.addConfiguredGlobal("ddns-use-conflict-resolution", Element::create(true));
+ // Specify conflict resolution mode globally.
+ conf.addConfiguredGlobal("ddns-conflict-resolution-mode",
+ Element::create("check-with-dhcid"));
+
// Configure TTL percent globally.
conf.addConfiguredGlobal("ddns-ttl-percent", Element::create(25.0));
subnet2->setDdnsQualifyingSuffix("example.com.");
subnet2->setHostnameCharSet("");
subnet2->setDdnsUpdateOnRenew(true);
- subnet2->setDdnsUseConflictResolution(false);
+ subnet2->setDdnsConflictResolutionMode("no-check-with-dhcid");
subnet2->setDdnsTtlPercent(Optional<double>(45.0));
// Get DDNS params for subnet1.
EXPECT_EQ("[^A-Z]", params->getHostnameCharSet());
EXPECT_EQ("x", params->getHostnameCharReplacement());
EXPECT_FALSE(params->getUpdateOnRenew());
- EXPECT_TRUE(params->getUseConflictResolution());
+ EXPECT_EQ("check-with-dhcid", params->getConflictResolutionMode());
EXPECT_FALSE(params->getTtlPercent().unspecified());
EXPECT_EQ(25.0, params->getTtlPercent().get());
EXPECT_EQ("", params->getHostnameCharSet());
EXPECT_EQ("x", params->getHostnameCharReplacement());
EXPECT_TRUE(params->getUpdateOnRenew());
- EXPECT_FALSE(params->getUseConflictResolution());
+ EXPECT_EQ("no-check-with-dhcid", params->getConflictResolutionMode());
EXPECT_FALSE(params->getTtlPercent().unspecified());
EXPECT_EQ(45.0, params->getTtlPercent().get());
EXPECT_TRUE(params->getHostnameCharSet().empty());
EXPECT_TRUE(params->getHostnameCharReplacement().empty());
EXPECT_FALSE(params->getUpdateOnRenew());
- EXPECT_TRUE(params->getUseConflictResolution());
+ EXPECT_EQ("check-with-dhcid", params->getConflictResolutionMode());
EXPECT_TRUE(params->getTtlPercent().unspecified());
}
}
}
+#if 0
+// Verifies the conflict resolution mode if the older configuration item
+// is specified
+TEST_F(SrvConfigTest, getDdnsConflictResolutionMode) {
+ DdnsParamsPtr params;
+
+ CfgMgr::instance().setFamily(AF_INET);
+ SrvConfig conf(32);
+
+ // Enable conflict resolution globally.
+ conf.addConfiguredGlobal("ddns-use-conflict-resolution", Element::create(true));
+
+ // Add a plain subnet
+ Triplet<uint32_t> def_triplet;
+ Subnet4Ptr subnet1(new Subnet4(IOAddress("192.0.1.0"), 24,
+ def_triplet, def_triplet, 4000, SubnetID(1)));
+ /// TKM - does this make sense?
+ subnet1->setDdnsUseConflictResolution(false);
+
+ // In order to take advantage of the dynamic inheritance of global
+ // parameters to a subnet we need to set a callback function for each
+ // subnet to allow for fetching global parameters.
+ subnet1->setFetchGlobalsFn([conf]() -> ConstCfgGlobalsPtr {
+ return (conf.getConfiguredGlobals());
+ });
+
+ conf.getCfgSubnets4()->add(subnet1);
+
+ // Get DDNS params for subnet1.
+ ASSERT_NO_THROW(params = conf_.getDdnsParams(subnet1));
+
+ // Verify subnet1 values are right.
+ EXPECT_FALSE(params->getUseConflictResolution());
+ EXPECT_EQ("no-check-with-dhcid", params->getConflictResolutionMode());
+}
+#endif
+
} // end of anonymous namespace