diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index d9c381e33c..8b6a719254 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include diff --git a/src/lib/dhcp/Makefile.am b/src/lib/dhcp/Makefile.am index b892192b9c..1e1719925b 100644 --- a/src/lib/dhcp/Makefile.am +++ b/src/lib/dhcp/Makefile.am @@ -43,6 +43,7 @@ libkea_dhcp___la_SOURCES += option_data_types.cc option_data_types.h libkea_dhcp___la_SOURCES += option_definition.cc option_definition.h libkea_dhcp___la_SOURCES += option_opaque_data_tuples.cc option_opaque_data_tuples.h libkea_dhcp___la_SOURCES += option_space.cc option_space.h +libkea_dhcp___la_SOURCES += option_space_container.h libkea_dhcp___la_SOURCES += option_string.cc option_string.h libkea_dhcp___la_SOURCES += protocol_util.cc protocol_util.h libkea_dhcp___la_SOURCES += pkt.cc pkt.h diff --git a/src/lib/dhcp/libdhcp++.cc b/src/lib/dhcp/libdhcp++.cc index 069f09a04a..a537417f2f 100644 --- a/src/lib/dhcp/libdhcp++.cc +++ b/src/lib/dhcp/libdhcp++.cc @@ -52,6 +52,10 @@ VendorOptionDefContainers LibDHCP::vendor4_defs_; VendorOptionDefContainers LibDHCP::vendor6_defs_; +// Static container with option definitions created in runtime. +OptionDefSpaceContainer LibDHCP::runtime_option_defs_; + + // Those two vendor classes are used for cable modems: /// DOCSIS3.0 compatible cable modem @@ -194,6 +198,17 @@ LibDHCP::getVendorOptionDef(const Option::Universe u, const uint32_t vendor_id, return (OptionDefinitionPtr()); } +void +LibDHCP::setRuntimeOptionDefs(const OptionDefSpaceContainer& defs) { + +} + +void +LibDHCP::clearRuntimeOptionDefs() { + runtime_option_defs_.clearItems(); +} + + bool LibDHCP::isStandardOption(const Option::Universe u, const uint16_t code) { if (u == Option::V6) { diff --git a/src/lib/dhcp/libdhcp++.h b/src/lib/dhcp/libdhcp++.h index 57fac075bf..45fda662e4 100644 --- a/src/lib/dhcp/libdhcp++.h +++ b/src/lib/dhcp/libdhcp++.h @@ -16,6 +16,7 @@ #define LIBDHCP_H #include +#include #include #include @@ -256,6 +257,21 @@ public: const OptionBuffer& buf, isc::dhcp::OptionCollection& options); + + /// @brief Copies option definitions created at runtime. + /// + /// Copied option definitions will be used as "runtime" option definitions. + /// A typical use case is to set option definitions specified by the user + /// in the server configuration. These option definitions should be removed + /// or replaced with new option definitions upon reconfiguration. + /// + /// @param defs Const reference to a container holding option definitions + /// grouped by option spaces. + static void setRuntimeOptionDefs(const OptionDefSpaceContainer& defs); + + /// @brief Removes runtime option definitions. + static void clearRuntimeOptionDefs(); + private: /// Initialize standard DHCPv4 option definitions. @@ -301,6 +317,9 @@ private: /// Container for v6 vendor option definitions static VendorOptionDefContainers vendor6_defs_; + + /// Container for additional option defnitions created in runtime. + static OptionDefSpaceContainer runtime_option_defs_; }; } diff --git a/src/lib/dhcp/option_definition.h b/src/lib/dhcp/option_definition.h index 04a9693b54..d1e548e72b 100644 --- a/src/lib/dhcp/option_definition.h +++ b/src/lib/dhcp/option_definition.h @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -766,6 +767,10 @@ typedef OptionDefContainer::nth_index<2>::type OptionDefContainerNameIndex; typedef std::pair OptionDefContainerNameRange; +typedef OptionSpaceContainer< + OptionDefContainer, OptionDefinitionPtr, std::string +> OptionDefSpaceContainer; + } // namespace isc::dhcp } // namespace isc diff --git a/src/lib/dhcpsrv/option_space_container.h b/src/lib/dhcp/option_space_container.h similarity index 100% rename from src/lib/dhcpsrv/option_space_container.h rename to src/lib/dhcp/option_space_container.h diff --git a/src/lib/dhcpsrv/Makefile.am b/src/lib/dhcpsrv/Makefile.am index 151fb574c5..b140c7e48f 100644 --- a/src/lib/dhcpsrv/Makefile.am +++ b/src/lib/dhcpsrv/Makefile.am @@ -128,7 +128,6 @@ libkea_dhcpsrv_la_SOURCES += ncr_generator.cc ncr_generator.h if HAVE_PGSQL libkea_dhcpsrv_la_SOURCES += pgsql_lease_mgr.cc pgsql_lease_mgr.h endif -libkea_dhcpsrv_la_SOURCES += option_space_container.h libkea_dhcpsrv_la_SOURCES += pool.cc pool.h libkea_dhcpsrv_la_SOURCES += srv_config.cc srv_config.h libkea_dhcpsrv_la_SOURCES += subnet.cc subnet.h diff --git a/src/lib/dhcpsrv/cfg_option.h b/src/lib/dhcpsrv/cfg_option.h index 4dad5b4ca3..0b599aacea 100644 --- a/src/lib/dhcpsrv/cfg_option.h +++ b/src/lib/dhcpsrv/cfg_option.h @@ -16,8 +16,8 @@ #define CFG_OPTION_H #include +#include #include -#include #include #include #include diff --git a/src/lib/dhcpsrv/cfg_option_def.h b/src/lib/dhcpsrv/cfg_option_def.h index 81850e8738..413cf9365c 100644 --- a/src/lib/dhcpsrv/cfg_option_def.h +++ b/src/lib/dhcpsrv/cfg_option_def.h @@ -16,7 +16,7 @@ #define CFG_OPTION_DEF_H #include -#include +#include #include namespace isc { diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.h b/src/lib/dhcpsrv/parsers/dhcp_parsers.h index 5513d72503..f48a0cce74 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.h +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.h @@ -18,10 +18,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -36,12 +36,6 @@ namespace isc { namespace dhcp { -/// @brief Storage for option definitions. -typedef OptionSpaceContainer OptionDefStorage; -/// @brief Shared pointer to option definitions storage. -typedef boost::shared_ptr OptionDefStoragePtr; - /// Collection of containers holding option spaces. Each container within /// a particular option space holds so-called option descriptors. typedef OptionSpaceContainer #include #include +#include #include -#include #include #include #include