#include <dhcpsrv/parsers/host_reservation_parser.h>
#include <dhcpsrv/parsers/host_reservations_list_parser.h>
#include <dhcpsrv/parsers/option_data_parser.h>
+#include <dhcpsrv/parsers/simple_parser4.h>
+#include <dhcpsrv/parsers/simple_parser6.h>
#include <dhcpsrv/cfg_mac_source.h>
#include <util/encode/hex.h>
#include <util/strutil.h>
// ******************************** OptionDefParser ****************************
-const SimpleKeywords
-OptionDefParser::OPTION_DEF_PARAMETERS = {
- { "name", Element::string },
- { "code", Element::integer },
- { "type", Element::string },
- { "record-types", Element::string },
- { "space", Element::string },
- { "encapsulate", Element::string },
- { "array", Element::boolean, },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "metadata", Element::map }
-};
-
OptionDefParser::OptionDefParser(const uint16_t address_family)
: address_family_(address_family) {
}
OptionDefParser::parse(ConstElementPtr option_def) {
// Check parameters.
- checkKeywords(OPTION_DEF_PARAMETERS, option_def);
+ if (address_family_ == AF_INET) {
+ checkKeywords(SimpleParser4::OPTION4_DEF_PARAMETERS, option_def);
+ } else {
+ checkKeywords(SimpleParser6::OPTION6_DEF_PARAMETERS, option_def);
+ }
// Get mandatory parameters.
std::string name = getString(option_def, "name");
//****************************** PoolParser ********************************
-const SimpleKeywords
-PoolParser::POOL_PARAMETERS = {
- { "pool", Element::string },
- { "option-data", Element::list },
- { "client-class", Element::string },
- { "require-client-classes", Element::list },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "metadata", Element::map }
-};
-
void
PoolParser::parse(PoolStoragePtr pools,
ConstElementPtr pool_structure,
const uint16_t address_family) {
- checkKeywords(POOL_PARAMETERS, pool_structure);
+ if (address_family == AF_INET) {
+ checkKeywords(SimpleParser4::POOL4_PARAMETERS, pool_structure);
+ } else {
+ checkKeywords(SimpleParser6::POOL6_PARAMETERS, pool_structure);
+ }
ConstElementPtr text_pool = pool_structure->get("pool");
//****************************** Subnet4ConfigParser *************************
-const SimpleKeywords
-Subnet4ConfigParser::SUBNET4_PARAMETERS = {
- { "valid-lifetime", Element::integer },
- { "renew-timer", Element::integer },
- { "rebind-timer", Element::integer },
- { "option-data", Element::list },
- { "pools", Element::list },
- { "subnet", Element::string },
- { "interface", Element::string },
- { "id", Element::integer },
- { "client-class", Element::string },
- { "require-client-classes", Element::list },
- { "reservations", Element::list },
- { "reservation-mode", Element::string },
- { "relay", Element::map },
- { "match-client-id", Element::boolean },
- { "authoritative", Element::boolean },
- { "next-server", Element::string },
- { "server-hostname", Element::string },
- { "boot-file-name", Element::string },
- { "4o6-interface", Element::string },
- { "4o6-interface-id", Element::string },
- { "4o6-subnet", Element::string },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "calculate-tee-times", Element::boolean },
- { "t1-percent", Element::real },
- { "t2-percent", Element::real },
- { "metadata", Element::map }
-};
-
Subnet4ConfigParser::Subnet4ConfigParser()
:SubnetConfigParser(AF_INET) {
}
Subnet4Ptr
Subnet4ConfigParser::parse(ConstElementPtr subnet) {
// Check parameters.
- checkKeywords(SUBNET4_PARAMETERS, subnet);
+ checkKeywords(SimpleParser4::SUBNET4_PARAMETERS, subnet);
/// Parse Pools first.
ConstElementPtr pools = subnet->get("pools");
//**************************** PdPoolParser ******************************
-const SimpleKeywords
-PdPoolParser::PD_POOL_PARAMETERS = {
- { "prefix", Element::string },
- { "prefix-len", Element::integer },
- { "delegated-len", Element::integer },
- { "option-data", Element::list },
- { "client-class", Element::string },
- { "require-client-classes", Element::list },
- { "excluded-prefix", Element::string },
- { "excluded-prefix-len", Element::integer },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "metadata", Element::map }
-};
-
PdPoolParser::PdPoolParser() : options_(new CfgOption()) {
}
void
PdPoolParser::parse(PoolStoragePtr pools, ConstElementPtr pd_pool_) {
- checkKeywords(PD_POOL_PARAMETERS, pd_pool_);
+ checkKeywords(SimpleParser6::PD_POOL6_PARAMETERS, pd_pool_);
std::string addr_str = getString(pd_pool_, "prefix");
//**************************** Subnet6ConfigParser ***********************
-const SimpleKeywords
-Subnet6ConfigParser::SUBNET6_PARAMETERS = {
- { "preferred-lifetime", Element::integer },
- { "valid-lifetime", Element::integer },
- { "renew-timer", Element::integer },
- { "rebind-timer", Element::integer },
- { "option-data", Element::list },
- { "pools", Element::list },
- { "pd-pools", Element::list },
- { "subnet", Element::string },
- { "interface", Element::string },
- { "interface-id", Element::string },
- { "id", Element::integer },
- { "rapid-commit", Element::boolean },
- { "client-class", Element::string },
- { "require-client-classes", Element::list },
- { "reservations", Element::list },
- { "reservation-mode", Element::string },
- { "relay", Element::map },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "calculate-tee-times", Element::boolean },
- { "t1-percent", Element::real },
- { "t2-percent", Element::real },
- { "metadata", Element::map }
-};
-
Subnet6ConfigParser::Subnet6ConfigParser()
: SubnetConfigParser(AF_INET6) {
}
Subnet6Ptr
Subnet6ConfigParser::parse(ConstElementPtr subnet) {
// Check parameters.
- checkKeywords(SUBNET6_PARAMETERS, subnet);
+ checkKeywords(SimpleParser6::SUBNET6_PARAMETERS, subnet);
/// Parse all pools first.
ConstElementPtr pools = subnet->get("pools");
OptionDefinitionTuple
parse(isc::data::ConstElementPtr option_def);
- /// @brief This table defines all option definition parameters.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows option_def_param rules in bison grammar.
- static const isc::data::SimpleKeywords OPTION_DEF_PARAMETERS;
-
private:
/// @brief Address family: @c AF_INET or @c AF_INET6.
uint16_t address_family_;
isc::data::ConstElementPtr pool_structure,
const uint16_t address_family);
- /// @brief This table defines all pool parameters.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows pool_param rules in bison grammar.
- static const isc::data::SimpleKeywords POOL_PARAMETERS;
-
protected:
/// @brief Creates a Pool object given a IPv4 prefix and the prefix length.
///
/// @return a pointer to created Subnet4 object
Subnet4Ptr parse(data::ConstElementPtr subnet);
- /// @brief This table defines all subnet parameters for DHCPv4.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows subnet4_param rule in bison grammar.
- static const isc::data::SimpleKeywords SUBNET4_PARAMETERS;
-
protected:
/// @brief Instantiates the IPv4 Subnet based on a given IPv4 address
/// @throw DhcpConfigError if configuration parsing fails.
void parse(PoolStoragePtr pools, data::ConstElementPtr pd_pool_);
- /// @brief This table defines all prefix delegation pool parameters.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows pd_pool_param rules in bison grammar.
- static const isc::data::SimpleKeywords PD_POOL_PARAMETERS;
-
private:
/// Pointer to the created pool object.
/// @return a pointer to created Subnet6 object
Subnet6Ptr parse(data::ConstElementPtr subnet);
- /// @brief This table defines all subnet parameters for DHCPv6.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows subnet6_param rule in bison grammar.
- static const isc::data::SimpleKeywords SUBNET6_PARAMETERS;
-
protected:
/// @brief Issues a DHCP6 server specific warning regarding duplicate subnet
/// options.
-// Copyright (C) 2015-2018 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2019 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
namespace isc {
namespace dhcp {
-data::ElementPtr
+data::ElementPtr
DHCPQueueControlParser::parse(const isc::data::ConstElementPtr& control_elem) {
// All we really do here is verify that it is a map that
- // contains at least queue-type. All other content depends
+ // contains at least queue-type. All other content depends
// on the packet queue implementation of that type.
if (control_elem->getType() != Element::map) {
isc_throw(DhcpConfigError, "dhcp-queue-control must be a map");
-// Copyright (C) 2015,2017 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2019 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
param = "max-reclaim-leases";
if (expiration_config->contains(param)) {
cfg->setMaxReclaimLeases(getInteger(expiration_config, param));
- }
+ }
param = "max-reclaim-time";
if (expiration_config->contains(param)) {
-// Copyright (C) 2015-2018 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2019 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
IfacesConfigParser::parse(const CfgIfacePtr& cfg,
const isc::data::ConstElementPtr& ifaces_config) {
- // Check for re-detect before calling parseInterfacesList()
+ // Check for re-detect before calling parseInterfacesList()
bool re_detect = getBoolean(ifaces_config, "re-detect");
cfg->setReDetect(re_detect);
if (re_detect) {
#include <dhcp/option_space.h>
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/parsers/option_data_parser.h>
+#include <dhcpsrv/parsers/simple_parser4.h>
+#include <dhcpsrv/parsers/simple_parser6.h>
#include <util/encode/hex.h>
#include <util/strutil.h>
#include <boost/foreach.hpp>
// **************************** OptionDataParser *************************
-const SimpleKeywords
-OptionDataParser::OPTION_PARAMETERS = {
- { "name", Element::string },
- { "data", Element::string },
- { "code", Element::integer },
- { "space", Element::string },
- { "csv-format", Element::boolean },
- { "always-send", Element::boolean },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "metadata", Element::map }
-};
-
OptionDataParser::OptionDataParser(const uint16_t address_family,
CfgOptionDefPtr cfg_option_def)
: address_family_(address_family), cfg_option_def_(cfg_option_def) {
OptionDataParser::parse(isc::data::ConstElementPtr single_option) {
// Check parameters.
- checkKeywords(OPTION_PARAMETERS, single_option);
+ if (address_family_ == AF_INET) {
+ checkKeywords(SimpleParser4::OPTION4_PARAMETERS, single_option);
+ } else {
+ checkKeywords(SimpleParser6::OPTION6_PARAMETERS, single_option);
+ }
// Try to create the option instance.
std::pair<OptionDescriptor, std::string> opt = createOption(single_option);
std::pair<OptionDescriptor, std::string>
parse(isc::data::ConstElementPtr single_option);
- /// @brief This table defines all option parameters.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows option_param rules in bison grammar.
- static const isc::data::SimpleKeywords OPTION_PARAMETERS;
-
private:
/// @brief Finds an option definition within an option space
#include <dhcpsrv/parsers/dhcp_parsers.h>
#include <dhcpsrv/parsers/option_data_parser.h>
#include <dhcpsrv/parsers/shared_network_parser.h>
+#include <dhcpsrv/parsers/simple_parser4.h>
+#include <dhcpsrv/parsers/simple_parser6.h>
#include <dhcpsrv/shared_network.h>
#include <boost/pointer_cast.hpp>
#include <string>
namespace isc {
namespace dhcp {
-const SimpleKeywords
-SharedNetwork4Parser::SHARED_NETWORK4_PARAMETERS = {
- { "name", Element::string },
- { "subnet4", Element::list },
- { "interface", Element::string },
- { "renew-timer", Element::integer },
- { "rebind-timer", Element::integer },
- { "option-data", Element::list },
- { "match-client-id", Element::boolean },
- { "authoritative", Element::boolean },
- { "next-server", Element::string },
- { "server-hostname", Element::string },
- { "boot-file-name", Element::string },
- { "relay", Element::map },
- { "reservation-mode", Element::string },
- { "client-class", Element::string },
- { "require-client-classes", Element::list },
- { "valid-lifetime", Element::integer },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "calculate-tee-times", Element::boolean },
- { "t1-percent", Element::real },
- { "t2-percent", Element::real },
- { "metadata", Element::map }
-};
-
SharedNetwork4Ptr
SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) {
SharedNetwork4Ptr shared_network;
try {
// Check parameters.
- checkKeywords(SHARED_NETWORK4_PARAMETERS, shared_network_data);
+ checkKeywords(SimpleParser4::SHARED_NETWORK4_PARAMETERS,
+ shared_network_data);
// Make sure that the network name has been specified. The name is required
// to create a SharedNetwork4 object.
return (shared_network);
}
-const SimpleKeywords
-SharedNetwork6Parser::SHARED_NETWORK6_PARAMETERS = {
- { "name", Element::string },
- { "subnet6", Element::list },
- { "interface", Element::string },
- { "interface-id", Element::string },
- { "renew-timer", Element::integer },
- { "rebind-timer", Element::integer },
- { "option-data", Element::list },
- { "relay", Element::map },
- { "reservation-mode", Element::string },
- { "client-class", Element::string },
- { "require-client-classes", Element::list },
- { "preferred-lifetime", Element::integer },
- { "rapid-commit", Element::boolean },
- { "valid-lifetime", Element::integer },
- { "user-context", Element::map },
- { "comment", Element::string },
- { "calculate-tee-times", Element::boolean },
- { "t1-percent", Element::real },
- { "t2-percent", Element::real },
- { "metadata", Element::map }
-};
-
SharedNetwork6Ptr
SharedNetwork6Parser::parse(const data::ConstElementPtr& shared_network_data) {
SharedNetwork6Ptr shared_network;
std::string name;
try {
// Check parameters.
- checkKeywords(SHARED_NETWORK6_PARAMETERS, shared_network_data);
+ checkKeywords(SimpleParser6::SHARED_NETWORK6_PARAMETERS,
+ shared_network_data);
// Make sure that the network name has been specified. The name is required
// to create a SharedNetwork6 object.
} // end of namespace isc::dhcp
} // end of namespace isc
-
class SharedNetwork4Parser : public BaseNetworkParser {
public:
- /// @brief This table defines all shared network parameters for DHCPv4.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows shared_network_param rule in bison grammar.
- static const isc::data::SimpleKeywords SHARED_NETWORK4_PARAMETERS;
-
/// @brief Parses shared configuration information for IPv4 shared network.
///
/// @param shared_network_data Data element holding shared network
/// @brief Implements parser for IPv6 shared networks.
class SharedNetwork6Parser : public BaseNetworkParser {
public:
-
- /// @brief This table defines all shared network parameters for DHCPv6.
- ///
- /// Boolean, integer, real and string types are for scalar parameters,
- /// list and map types for entries.
- /// Order follows shared_network_param rule in bison grammar.
- static const isc::data::SimpleKeywords SHARED_NETWORK6_PARAMETERS;
-
/// @brief Parses shared configuration information for IPv6 shared network.
///
/// @param shared_network_data Data element holding shared network
{ "hostname-char-replacement", Element::string }
};
+/// @brief This table defines default global values for DHCPv4
+///
+/// Some of the global parameters defined in the global scope (i.e. directly
+/// in Dhcp4) are optional. If not defined, the following values will be
+/// used.
+const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = {
+ { "valid-lifetime", Element::integer, "7200" },
+ { "decline-probation-period", Element::integer, "86400" }, // 24h
+ { "dhcp4o6-port", Element::integer, "0" },
+ { "echo-client-id", Element::boolean, "true" },
+ { "match-client-id", Element::boolean, "true" },
+ { "authoritative", Element::boolean, "false" },
+ { "next-server", Element::string, "0.0.0.0" },
+ { "server-hostname", Element::string, "" },
+ { "boot-file-name", Element::string, "" },
+ { "server-tag", Element::string, "" },
+ { "reservation-mode", Element::string, "all" },
+ { "calculate-tee-times", Element::boolean, "false" },
+ { "t1-percent", Element::real, ".50" },
+ { "t2-percent", Element::real, ".875" }
+};
+
+/// @brief This table defines all option definition parameters.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows option_def_param rules in bison grammar.
+const SimpleKeywords SimpleParser4::OPTION4_DEF_PARAMETERS = {
+ { "name", Element::string },
+ { "code", Element::integer },
+ { "type", Element::string },
+ { "record-types", Element::string },
+ { "space", Element::string },
+ { "encapsulate", Element::string },
+ { "array", Element::boolean, },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "metadata", Element::map }
+};
+
/// @brief This table defines default values for option definitions in DHCPv4.
///
/// Dhcp4 may contain an array called option-def that enumerates new option
{ "encapsulate", Element::string, "" }
};
+/// @brief This table defines all option parameters.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows option_param rules in bison grammar.
+const SimpleKeywords SimpleParser4::OPTION4_PARAMETERS = {
+ { "name", Element::string },
+ { "data", Element::string },
+ { "code", Element::integer },
+ { "space", Element::string },
+ { "csv-format", Element::boolean },
+ { "always-send", Element::boolean },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "metadata", Element::map }
+};
+
/// @brief This table defines default values for options in DHCPv4.
///
/// Dhcp4 usually contains option values (option-data) defined in global,
{ "always-send", Element::boolean, "false"}
};
-/// @brief This table defines default global values for DHCPv4
+/// @brief This table defines all subnet parameters for DHCPv4.
///
-/// Some of the global parameters defined in the global scope (i.e. directly
-/// in Dhcp4) are optional. If not defined, the following values will be
-/// used.
-const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = {
- { "valid-lifetime", Element::integer, "7200" },
- { "decline-probation-period", Element::integer, "86400" }, // 24h
- { "dhcp4o6-port", Element::integer, "0" },
- { "echo-client-id", Element::boolean, "true" },
- { "match-client-id", Element::boolean, "true" },
- { "authoritative", Element::boolean, "false" },
- { "next-server", Element::string, "0.0.0.0" },
- { "server-hostname", Element::string, "" },
- { "boot-file-name", Element::string, "" },
- { "server-tag", Element::string, "" },
- { "reservation-mode", Element::string, "all" },
- { "calculate-tee-times", Element::boolean, "false" },
- { "t1-percent", Element::real, ".50" },
- { "t2-percent", Element::real, ".875" }
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows subnet4_param rule in bison grammar.
+const SimpleKeywords SimpleParser4::SUBNET4_PARAMETERS = {
+ { "valid-lifetime", Element::integer },
+ { "renew-timer", Element::integer },
+ { "rebind-timer", Element::integer },
+ { "option-data", Element::list },
+ { "pools", Element::list },
+ { "subnet", Element::string },
+ { "interface", Element::string },
+ { "id", Element::integer },
+ { "client-class", Element::string },
+ { "require-client-classes", Element::list },
+ { "reservations", Element::list },
+ { "reservation-mode", Element::string },
+ { "relay", Element::map },
+ { "match-client-id", Element::boolean },
+ { "authoritative", Element::boolean },
+ { "next-server", Element::string },
+ { "server-hostname", Element::string },
+ { "boot-file-name", Element::string },
+ { "4o6-interface", Element::string },
+ { "4o6-interface-id", Element::string },
+ { "4o6-subnet", Element::string },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "calculate-tee-times", Element::boolean },
+ { "t1-percent", Element::real },
+ { "t2-percent", Element::real },
+ { "metadata", Element::map }
};
/// @brief This table defines default values for each IPv4 subnet.
{ "4o6-subnet", Element::string, "" },
};
-/// @brief This table defines default values for each IPv4 shared network.
-const SimpleDefaults SimpleParser4::SHARED_NETWORK4_DEFAULTS = {
- { "client-class", Element::string, "" },
- { "interface", Element::string, "" }
-};
-
-/// @brief This table defines default values for interfaces for DHCPv4.
-const SimpleDefaults SimpleParser4::IFACE4_DEFAULTS = {
- { "re-detect", Element::boolean, "true" }
-};
-
-/// @brief This table defines default values for dhcp-queue-control in DHCPv4.
-const SimpleDefaults SimpleParser4::DHCP_QUEUE_CONTROL4_DEFAULTS = {
- { "enable-queue", Element::boolean, "false"},
- { "queue-type", Element::string, "kea-ring4"},
- { "capacity", Element::integer, "500"}
-};
-
-/// @brief This defines default values for sanity checking for DHCPv4.
-const SimpleDefaults SimpleParser4::SANITY_CHECKS4_DEFAULTS = {
- { "lease-checks", Element::string, "warn" }
-};
-
/// @brief List of parameters that can be inherited to subnet4 scope.
///
/// Some parameters may be defined on both global (directly in Dhcp4) and
"t2-percent"
};
+/// @brief This table defines all pool parameters.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows pool_param rules in bison grammar.
+const SimpleKeywords SimpleParser4::POOL4_PARAMETERS = {
+ { "pool", Element::string },
+ { "option-data", Element::list },
+ { "client-class", Element::string },
+ { "require-client-classes", Element::list },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "metadata", Element::map }
+};
+
+/// @brief This table defines all shared network parameters for DHCPv4.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows shared_network_param rule in bison grammar.
+const SimpleKeywords SimpleParser4::SHARED_NETWORK4_PARAMETERS = {
+ { "name", Element::string },
+ { "subnet4", Element::list },
+ { "interface", Element::string },
+ { "renew-timer", Element::integer },
+ { "rebind-timer", Element::integer },
+ { "option-data", Element::list },
+ { "match-client-id", Element::boolean },
+ { "authoritative", Element::boolean },
+ { "next-server", Element::string },
+ { "server-hostname", Element::string },
+ { "boot-file-name", Element::string },
+ { "relay", Element::map },
+ { "reservation-mode", Element::string },
+ { "client-class", Element::string },
+ { "require-client-classes", Element::list },
+ { "valid-lifetime", Element::integer },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "calculate-tee-times", Element::boolean },
+ { "t1-percent", Element::real },
+ { "t2-percent", Element::real },
+ { "metadata", Element::map }
+};
+
+/// @brief This table defines default values for each IPv4 shared network.
+const SimpleDefaults SimpleParser4::SHARED_NETWORK4_DEFAULTS = {
+ { "client-class", Element::string, "" },
+ { "interface", Element::string, "" }
+};
+
+/// @brief This table defines default values for interfaces for DHCPv4.
+const SimpleDefaults SimpleParser4::IFACE4_DEFAULTS = {
+ { "re-detect", Element::boolean, "true" }
+};
+
+/// @brief This table defines default values for dhcp-queue-control in DHCPv4.
+const SimpleDefaults SimpleParser4::DHCP_QUEUE_CONTROL4_DEFAULTS = {
+ { "enable-queue", Element::boolean, "false"},
+ { "queue-type", Element::string, "kea-ring4"},
+ { "capacity", Element::integer, "500"}
+};
+
+/// @brief This defines default values for sanity checking for DHCPv4.
+const SimpleDefaults SimpleParser4::SANITY_CHECKS4_DEFAULTS = {
+ { "lease-checks", Element::string, "warn" }
+};
+
/// @}
/// ---------------------------------------------------------------------------
/// --- end of default values -------------------------------------------------
/// ---------------------------------------------------------------------------
-size_t SimpleParser4::setAllDefaults(isc::data::ElementPtr global) {
+size_t SimpleParser4::setAllDefaults(ElementPtr global) {
size_t cnt = 0;
// Set global defaults first.
return (cnt);
}
-size_t SimpleParser4::deriveParameters(isc::data::ElementPtr global) {
+size_t SimpleParser4::deriveParameters(ElementPtr global) {
size_t cnt = 0;
// Now derive global parameters into subnets.
// see simple_parser4.cc for comments for those parameters
static const isc::data::SimpleKeywords GLOBAL4_PARAMETERS;
+ static const isc::data::SimpleDefaults GLOBAL4_DEFAULTS;
+
+ static const isc::data::SimpleKeywords OPTION4_DEF_PARAMETERS;
static const isc::data::SimpleDefaults OPTION4_DEF_DEFAULTS;
+
+ static const isc::data::SimpleKeywords OPTION4_PARAMETERS;
static const isc::data::SimpleDefaults OPTION4_DEFAULTS;
- static const isc::data::SimpleDefaults GLOBAL4_DEFAULTS;
+
+ static const isc::data::SimpleKeywords SUBNET4_PARAMETERS;
static const isc::data::SimpleDefaults SUBNET4_DEFAULTS;
static const isc::data::SimpleDefaults SHARED_SUBNET4_DEFAULTS;
+ static const isc::data::ParamsList INHERIT_TO_SUBNET4;
+
+ static const isc::data::SimpleKeywords POOL4_PARAMETERS;
+
+ static const isc::data::SimpleKeywords SHARED_NETWORK4_PARAMETERS;
static const isc::data::SimpleDefaults SHARED_NETWORK4_DEFAULTS;
+
static const isc::data::SimpleDefaults IFACE4_DEFAULTS;
static const isc::data::SimpleDefaults DHCP_QUEUE_CONTROL4_DEFAULTS;
static const isc::data::SimpleDefaults SANITY_CHECKS4_DEFAULTS;
- static const isc::data::ParamsList INHERIT_TO_SUBNET4;
};
};
{ "hostname-char-replacement", Element::string }
};
+/// @brief This table defines default global values for DHCPv6
+///
+/// Some of the global parameters defined in the global scope (i.e. directly
+/// in Dhcp6) are optional. If not defined, the following values will be
+/// used.
+const SimpleDefaults SimpleParser6::GLOBAL6_DEFAULTS = {
+ { "preferred-lifetime", Element::integer, "3600" },
+ { "valid-lifetime", Element::integer, "7200" },
+ { "decline-probation-period", Element::integer, "86400" }, // 24h
+ { "dhcp4o6-port", Element::integer, "0" },
+ { "server-tag", Element::string, "" },
+ { "reservation-mode", Element::string, "all" },
+ { "calculate-tee-times", Element::boolean, "true" },
+ { "t1-percent", Element::real, ".50" },
+ { "t2-percent", Element::real, ".80" }
+};
+
+/// @brief This table defines all option definition parameters.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows option_def_param rules in bison grammar.
+const SimpleKeywords SimpleParser6::OPTION6_DEF_PARAMETERS = {
+ { "name", Element::string },
+ { "code", Element::integer },
+ { "type", Element::string },
+ { "record-types", Element::string },
+ { "space", Element::string },
+ { "encapsulate", Element::string },
+ { "array", Element::boolean, },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "metadata", Element::map }
+};
+
/// @brief This table defines default values for option definitions in DHCPv6.
///
/// Dhcp6 may contain an array called option-def that enumerates new option
{ "encapsulate", Element::string, "" }
};
+/// @brief This table defines all option parameters.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows option_param rules in bison grammar.
+const SimpleKeywords SimpleParser6::OPTION6_PARAMETERS = {
+ { "name", Element::string },
+ { "data", Element::string },
+ { "code", Element::integer },
+ { "space", Element::string },
+ { "csv-format", Element::boolean },
+ { "always-send", Element::boolean },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "metadata", Element::map }
+};
+
/// @brief This table defines default values for options in DHCPv6.
///
/// Dhcp6 usually contains option values (option-data) defined in global,
{ "always-send", Element::boolean, "false"}
};
-/// @brief This table defines default global values for DHCPv6
+/// @brief This table defines all subnet parameters for DHCPv6.
///
-/// Some of the global parameters defined in the global scope (i.e. directly
-/// in Dhcp6) are optional. If not defined, the following values will be
-/// used.
-const SimpleDefaults SimpleParser6::GLOBAL6_DEFAULTS = {
- { "preferred-lifetime", Element::integer, "3600" },
- { "valid-lifetime", Element::integer, "7200" },
- { "decline-probation-period", Element::integer, "86400" }, // 24h
- { "dhcp4o6-port", Element::integer, "0" },
- { "server-tag", Element::string, "" },
- { "reservation-mode", Element::string, "all" },
- { "calculate-tee-times", Element::boolean, "true" },
- { "t1-percent", Element::real, ".50" },
- { "t2-percent", Element::real, ".80" }
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows subnet6_param rule in bison grammar.
+const SimpleKeywords SimpleParser6::SUBNET6_PARAMETERS = {
+ { "preferred-lifetime", Element::integer },
+ { "valid-lifetime", Element::integer },
+ { "renew-timer", Element::integer },
+ { "rebind-timer", Element::integer },
+ { "option-data", Element::list },
+ { "pools", Element::list },
+ { "pd-pools", Element::list },
+ { "subnet", Element::string },
+ { "interface", Element::string },
+ { "interface-id", Element::string },
+ { "id", Element::integer },
+ { "rapid-commit", Element::boolean },
+ { "client-class", Element::string },
+ { "require-client-classes", Element::list },
+ { "reservations", Element::list },
+ { "reservation-mode", Element::string },
+ { "relay", Element::map },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "calculate-tee-times", Element::boolean },
+ { "t1-percent", Element::real },
+ { "t2-percent", Element::real },
+ { "metadata", Element::map }
};
/// @brief This table defines default values for each IPv6 subnet.
{ "interface-id", Element::string, "" }
};
-/// @brief This table defines default values for each IPv6 subnet.
-const SimpleDefaults SimpleParser6::SHARED_SUBNET6_DEFAULTS = {
- { "id", Element::integer, "0" } // 0 means autogenerate
-};
-
/// @brief This table defines default values for each IPv6 shared network.
const SimpleDefaults SimpleParser6::SHARED_NETWORK6_DEFAULTS = {
{ "client-class", Element::string, "" },
{ "rapid-commit", Element::boolean, "false" } // rapid-commit disabled by default
};
-
-/// @brief This table defines default values for interfaces for DHCPv6.
-const SimpleDefaults SimpleParser6::IFACE6_DEFAULTS = {
- { "re-detect", Element::boolean, "true" }
-};
-
-/// @brief This table defines default values for dhcp-queue-control in DHCPv4.
-const SimpleDefaults SimpleParser6::DHCP_QUEUE_CONTROL6_DEFAULTS = {
- { "enable-queue", Element::boolean, "false"},
- { "queue-type", Element::string, "kea-ring6"},
- { "capacity", Element::integer, "500"}
-};
-
-/// @brief This defines default values for sanity checking for DHCPv6.
-const SimpleDefaults SimpleParser6::SANITY_CHECKS6_DEFAULTS = {
- { "lease-checks", Element::string, "warn" }
-};
-
/// @brief List of parameters that can be inherited from the global to subnet6 scope.
///
/// Some parameters may be defined on both global (directly in Dhcp6) and
"t2-percent"
};
+/// @brief This table defines all pool parameters.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows pool_param rules in bison grammar.
+const SimpleKeywords SimpleParser6::POOL6_PARAMETERS = {
+ { "pool", Element::string },
+ { "option-data", Element::list },
+ { "client-class", Element::string },
+ { "require-client-classes", Element::list },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "metadata", Element::map }
+};
+
+/// @brief This table defines all prefix delegation pool parameters.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows pd_pool_param rules in bison grammar.
+const SimpleKeywords SimpleParser6::PD_POOL6_PARAMETERS = {
+ { "prefix", Element::string },
+ { "prefix-len", Element::integer },
+ { "delegated-len", Element::integer },
+ { "option-data", Element::list },
+ { "client-class", Element::string },
+ { "require-client-classes", Element::list },
+ { "excluded-prefix", Element::string },
+ { "excluded-prefix-len", Element::integer },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "metadata", Element::map }
+};
+
+/// @brief This table defines all shared network parameters for DHCPv6.
+///
+/// Boolean, integer, real and string types are for scalar parameters,
+/// list and map types for entries.
+/// Order follows shared_network_param rule in bison grammar.
+const SimpleKeywords SimpleParser6::SHARED_NETWORK6_PARAMETERS = {
+ { "name", Element::string },
+ { "subnet6", Element::list },
+ { "interface", Element::string },
+ { "interface-id", Element::string },
+ { "renew-timer", Element::integer },
+ { "rebind-timer", Element::integer },
+ { "option-data", Element::list },
+ { "relay", Element::map },
+ { "reservation-mode", Element::string },
+ { "client-class", Element::string },
+ { "require-client-classes", Element::list },
+ { "preferred-lifetime", Element::integer },
+ { "rapid-commit", Element::boolean },
+ { "valid-lifetime", Element::integer },
+ { "user-context", Element::map },
+ { "comment", Element::string },
+ { "calculate-tee-times", Element::boolean },
+ { "t1-percent", Element::real },
+ { "t2-percent", Element::real },
+ { "metadata", Element::map }
+};
+
+/// @brief This table defines default values for each IPv6 subnet.
+const SimpleDefaults SimpleParser6::SHARED_SUBNET6_DEFAULTS = {
+ { "id", Element::integer, "0" } // 0 means autogenerate
+};
+
+/// @brief This table defines default values for interfaces for DHCPv6.
+const SimpleDefaults SimpleParser6::IFACE6_DEFAULTS = {
+ { "re-detect", Element::boolean, "true" }
+};
+
+/// @brief This table defines default values for dhcp-queue-control in DHCPv4.
+const SimpleDefaults SimpleParser6::DHCP_QUEUE_CONTROL6_DEFAULTS = {
+ { "enable-queue", Element::boolean, "false"},
+ { "queue-type", Element::string, "kea-ring6"},
+ { "capacity", Element::integer, "500"}
+};
+
+/// @brief This defines default values for sanity checking for DHCPv6.
+const SimpleDefaults SimpleParser6::SANITY_CHECKS6_DEFAULTS = {
+ { "lease-checks", Element::string, "warn" }
+};
+
/// @}
/// ---------------------------------------------------------------------------
/// --- end of default values -------------------------------------------------
/// ---------------------------------------------------------------------------
-size_t SimpleParser6::setAllDefaults(isc::data::ElementPtr global) {
+size_t SimpleParser6::setAllDefaults(ElementPtr global) {
size_t cnt = 0;
// Set global defaults first.
return (cnt);
}
-size_t SimpleParser6::deriveParameters(isc::data::ElementPtr global) {
+size_t SimpleParser6::deriveParameters(ElementPtr global) {
size_t cnt = 0;
// Now derive global parameters into subnets.
ConstElementPtr subnets = global->get("subnet6");
// see simple_parser6.cc for comments for those parameters
static const isc::data::SimpleKeywords GLOBAL6_PARAMETERS;
+ static const isc::data::SimpleDefaults GLOBAL6_DEFAULTS;
+
+ static const isc::data::SimpleKeywords OPTION6_DEF_PARAMETERS;
static const isc::data::SimpleDefaults OPTION6_DEF_DEFAULTS;
+
+ static const isc::data::SimpleKeywords OPTION6_PARAMETERS;
static const isc::data::SimpleDefaults OPTION6_DEFAULTS;
- static const isc::data::SimpleDefaults GLOBAL6_DEFAULTS;
+
+ static const isc::data::SimpleKeywords SUBNET6_PARAMETERS;
static const isc::data::SimpleDefaults SUBNET6_DEFAULTS;
static const isc::data::SimpleDefaults SHARED_SUBNET6_DEFAULTS;
+ static const isc::data::ParamsList INHERIT_TO_SUBNET6;
+
+ static const isc::data::SimpleKeywords POOL6_PARAMETERS;
+ static const isc::data::SimpleKeywords PD_POOL6_PARAMETERS;
+
+ static const isc::data::SimpleKeywords SHARED_NETWORK6_PARAMETERS;
static const isc::data::SimpleDefaults SHARED_NETWORK6_DEFAULTS;
+
static const isc::data::SimpleDefaults IFACE6_DEFAULTS;
static const isc::data::SimpleDefaults DHCP_QUEUE_CONTROL6_DEFAULTS;
static const isc::data::SimpleDefaults SANITY_CHECKS6_DEFAULTS;
- static const isc::data::ParamsList INHERIT_TO_SUBNET6;
};
};