From 14b17e299221f6df1c7fbd2948b34c8cdbcd41f0 Mon Sep 17 00:00:00 2001 From: Thomas Markwalder Date: Mon, 10 Feb 2014 16:01:49 -0500 Subject: [PATCH] [3329] Moved dhcp::D2ClientMgr into its own header and source. d2_client.h and .cc was split into four files: D2ClientConfig class is now in d2_client_cfg.h/cc D2ClientMgr class is now in d2_client_mgr.h/cc --- src/lib/dhcpsrv/Makefile.am | 3 +- src/lib/dhcpsrv/cfgmgr.h | 2 +- src/lib/dhcpsrv/d2_client_cfg.cc | 141 ++++++++++++ src/lib/dhcpsrv/d2_client_cfg.h | 217 ++++++++++++++++++ .../{d2_client.cc => d2_client_mgr.cc} | 123 +--------- .../dhcpsrv/{d2_client.h => d2_client_mgr.h} | 192 +--------------- src/lib/dhcpsrv/dhcp_parsers.h | 2 +- src/lib/dhcpsrv/tests/d2_client_unittest.cc | 2 +- src/lib/dhcpsrv/tests/d2_udp_unittest.cc | 2 +- 9 files changed, 373 insertions(+), 311 deletions(-) create mode 100644 src/lib/dhcpsrv/d2_client_cfg.cc create mode 100644 src/lib/dhcpsrv/d2_client_cfg.h rename src/lib/dhcpsrv/{d2_client.cc => d2_client_mgr.cc} (70%) rename src/lib/dhcpsrv/{d2_client.h => d2_client_mgr.h} (69%) diff --git a/src/lib/dhcpsrv/Makefile.am b/src/lib/dhcpsrv/Makefile.am index 69b14b2ee0..1c8a18ae10 100644 --- a/src/lib/dhcpsrv/Makefile.am +++ b/src/lib/dhcpsrv/Makefile.am @@ -39,7 +39,8 @@ libb10_dhcpsrv_la_SOURCES = libb10_dhcpsrv_la_SOURCES += addr_utilities.cc addr_utilities.h libb10_dhcpsrv_la_SOURCES += alloc_engine.cc alloc_engine.h libb10_dhcpsrv_la_SOURCES += callout_handle_store.h -libb10_dhcpsrv_la_SOURCES += d2_client.cc d2_client.h +libb10_dhcpsrv_la_SOURCES += d2_client_cfg.cc d2_client_cfg.h +libb10_dhcpsrv_la_SOURCES += d2_client_mgr.cc d2_client_mgr.h libb10_dhcpsrv_la_SOURCES += dbaccess_parser.cc dbaccess_parser.h libb10_dhcpsrv_la_SOURCES += dhcpsrv_log.cc dhcpsrv_log.h libb10_dhcpsrv_la_SOURCES += cfgmgr.cc cfgmgr.h diff --git a/src/lib/dhcpsrv/cfgmgr.h b/src/lib/dhcpsrv/cfgmgr.h index 20c162dbb9..ca854d66ed 100644 --- a/src/lib/dhcpsrv/cfgmgr.h +++ b/src/lib/dhcpsrv/cfgmgr.h @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/lib/dhcpsrv/d2_client_cfg.cc b/src/lib/dhcpsrv/d2_client_cfg.cc new file mode 100644 index 0000000000..cb04eb1377 --- /dev/null +++ b/src/lib/dhcpsrv/d2_client_cfg.cc @@ -0,0 +1,141 @@ +// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC") +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +// PERFORMANCE OF THIS SOFTWARE. + +#include +#include +#include + +#include + +using namespace std; + +namespace isc { +namespace dhcp { + +D2ClientConfig::D2ClientConfig(const bool enable_updates, + const isc::asiolink::IOAddress& server_ip, + const size_t server_port, + const dhcp_ddns:: + NameChangeProtocol& ncr_protocol, + const dhcp_ddns:: + NameChangeFormat& ncr_format, + const bool always_include_fqdn, + const bool override_no_update, + const bool override_client_update, + const bool replace_client_name, + const std::string& generated_prefix, + const std::string& qualifying_suffix) + : enable_updates_(enable_updates), + server_ip_(server_ip), + server_port_(server_port), + ncr_protocol_(ncr_protocol), + ncr_format_(ncr_format), + always_include_fqdn_(always_include_fqdn), + override_no_update_(override_no_update), + override_client_update_(override_client_update), + replace_client_name_(replace_client_name), + generated_prefix_(generated_prefix), + qualifying_suffix_(qualifying_suffix) { + validateContents(); +} + +D2ClientConfig::D2ClientConfig() + : enable_updates_(false), + server_ip_(isc::asiolink::IOAddress("0.0.0.0")), + server_port_(0), + ncr_protocol_(dhcp_ddns::NCR_UDP), + ncr_format_(dhcp_ddns::FMT_JSON), + always_include_fqdn_(false), + override_no_update_(false), + override_client_update_(false), + replace_client_name_(false), + generated_prefix_("myhost"), + qualifying_suffix_("example.com") { + validateContents(); +} + +D2ClientConfig::~D2ClientConfig(){}; + +void +D2ClientConfig::validateContents() { + if (ncr_format_ != dhcp_ddns::FMT_JSON) { + isc_throw(D2ClientError, "D2ClientConfig: NCR Format:" + << dhcp_ddns::ncrFormatToString(ncr_format_) + << " is not yet supported"); + } + + if (ncr_protocol_ != dhcp_ddns::NCR_UDP) { + isc_throw(D2ClientError, "D2ClientConfig: NCR Protocol:" + << dhcp_ddns::ncrProtocolToString(ncr_protocol_) + << " is not yet supported"); + } + + /// @todo perhaps more validation we should do yet? + /// Are there any invalid combinations of options we need to test against? +} + +bool +D2ClientConfig::operator == (const D2ClientConfig& other) const { + return ((enable_updates_ == other.enable_updates_) && + (server_ip_ == other.server_ip_) && + (server_port_ == other.server_port_) && + (ncr_protocol_ == other.ncr_protocol_) && + (ncr_format_ == other.ncr_format_) && + (always_include_fqdn_ == other.always_include_fqdn_) && + (override_no_update_ == other.override_no_update_) && + (override_client_update_ == other.override_client_update_) && + (replace_client_name_ == other.replace_client_name_) && + (generated_prefix_ == other.generated_prefix_) && + (qualifying_suffix_ == other.qualifying_suffix_)); +} + +bool +D2ClientConfig::operator != (const D2ClientConfig& other) const { + return (!(*this == other)); +} + +std::string +D2ClientConfig::toText() const { + std::ostringstream stream; + + stream << "enable_updates: " << (enable_updates_ ? "yes" : "no"); + if (enable_updates_) { + stream << ", server_ip: " << server_ip_.toText() + << ", server_port: " << server_port_ + << ", ncr_protocol: " << ncr_protocol_ + << ", ncr_format: " << ncr_format_ + << ", always_include_fqdn: " << (always_include_fqdn_ ? + "yes" : "no") + << ", override_no_update: " << (override_no_update_ ? + "yes" : "no") + << ", override_client_update: " << (override_client_update_ ? + "yes" : "no") + << ", replace_client_name: " << (replace_client_name_ ? + "yes" : "no") + << ", generated_prefix: [" << generated_prefix_ << "]" + << ", qualifying_suffix: [" << qualifying_suffix_ << "]"; + } + + return (stream.str()); +} + +std::ostream& +operator<<(std::ostream& os, const D2ClientConfig& config) { + os << config.toText(); + return (os); +} + +}; // namespace dhcp + +}; // namespace isc diff --git a/src/lib/dhcpsrv/d2_client_cfg.h b/src/lib/dhcpsrv/d2_client_cfg.h new file mode 100644 index 0000000000..fd9d242960 --- /dev/null +++ b/src/lib/dhcpsrv/d2_client_cfg.h @@ -0,0 +1,217 @@ +// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC") +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +// PERFORMANCE OF THIS SOFTWARE. + +#ifndef D2_CLIENT_CFG_H +#define D2_CLIENT_CFG_H + +/// @file d2_client_cfg.h Defines the D2ClientConfig class. +/// This file defines the classes Kea uses to manage configuration needed to +/// act as a client of the b10-dhcp-ddns module (aka D2). +/// +#include +#include +#include + +#include + +#include +#include +#include + +namespace isc { +namespace dhcp { + + +/// An exception that is thrown if an error occurs while configuring +/// the D2 DHCP DDNS client. +class D2ClientError : public isc::Exception { +public: + + /// @brief constructor + /// + /// @param file name of the file, where exception occurred + /// @param line line of the file, where exception occurred + /// @param what text description of the issue that caused exception + D2ClientError(const char* file, size_t line, const char* what) + : isc::Exception(file, line, what) {} +}; + +/// @brief Acts as a storage vault for D2 client configuration +/// +/// A simple container class for storing and retrieving the configuration +/// parameters associated with DHCP-DDNS and acting as a client of D2. +/// Instances of this class may be constructed through configuration parsing. +/// +class D2ClientConfig { +public: + /// @brief Constructor + /// + /// @param enable_updates Enables DHCP-DDNS updates + /// @param server_ip IP address of the b10-dhcp-ddns server (IPv4 or IPv6) + /// @param server_port IP port of the b10-dhcp-ddns server + /// @param ncr_protocol Socket protocol to use with b10-dhcp-ddns + /// Currently only UDP is supported. + /// @param ncr_format Format of the b10-dhcp-ddns requests. + /// Currently only JSON format is supported. + /// @param always_include_fqdn Enables always including the FQDN option in + /// DHCP responses. + /// @param override_no_update Enables updates, even if clients request no + /// updates. + /// @param override_client_update Perform updates, even if client requested + /// delegation. + /// @param replace_client_name enables replacement of the domain-name + /// supplied by the client with a generated name. + /// @param generated_prefix Prefix to use when generating domain-names. + /// @param qualifying_suffix Suffix to use to qualify partial domain-names. + /// + /// @throw D2ClientError if given an invalid protocol or format. + D2ClientConfig(const bool enable_updates, + const isc::asiolink::IOAddress& server_ip, + const size_t server_port, + const dhcp_ddns::NameChangeProtocol& ncr_protocol, + const dhcp_ddns::NameChangeFormat& ncr_format, + const bool always_include_fqdn, + const bool override_no_update, + const bool override_client_update, + const bool replace_client_name, + const std::string& generated_prefix, + const std::string& qualifying_suffix); + + /// @brief Default constructor + /// The default constructor creates an instance that has updates disabled. + D2ClientConfig(); + + /// @brief Destructor + virtual ~D2ClientConfig(); + + /// @brief Return whether or not DHCP-DDNS updating is enabled. + bool getEnableUpdates() const { + return(enable_updates_); + } + + /// @brief Return the IP address of b10-dhcp-ddns (IPv4 or IPv6). + const isc::asiolink::IOAddress& getServerIp() const { + return(server_ip_); + } + + /// @brief Return the IP port of b10-dhcp-ddns. + size_t getServerPort() const { + return(server_port_); + } + + /// @brief Return the socket protocol to use with b10-dhcp-ddns. + const dhcp_ddns::NameChangeProtocol& getNcrProtocol() const { + return(ncr_protocol_); + } + + /// @brief Return the b10-dhcp-ddns request format. + const dhcp_ddns::NameChangeFormat& getNcrFormat() const { + return(ncr_format_); + } + + /// @brief Return whether or not FQDN is always included in DHCP responses. + bool getAlwaysIncludeFqdn() const { + return(always_include_fqdn_); + } + + /// @brief Return if updates are done even if clients request no updates. + bool getOverrideNoUpdate() const { + return(override_no_update_); + } + + /// @brief Return if updates are done even when clients request delegation. + bool getOverrideClientUpdate() const { + return(override_client_update_); + } + + /// @brief Return whether or not client's domain-name is always replaced. + bool getReplaceClientName() const { + return(replace_client_name_); + } + + /// @brief Return the prefix to use when generating domain-names. + const std::string& getGeneratedPrefix() const { + return(generated_prefix_); + } + + /// @brief Return the suffix to use to qualify partial domain-names. + const std::string& getQualifyingSuffix() const { + return(qualifying_suffix_); + } + + /// @brief Compares two D2ClientConfigs for equality + bool operator == (const D2ClientConfig& other) const; + + /// @brief Compares two D2ClientConfigs for inequality + bool operator != (const D2ClientConfig& other) const; + + /// @brief Generates a string representation of the class contents. + std::string toText() const; + +protected: + /// @brief Validates member values. + /// + /// Method is used by the constructor to validate member contents. + /// + /// @throw D2ClientError if given an invalid protocol or format. + virtual void validateContents(); + +private: + /// @brief Indicates whether or not DHCP DDNS updating is enabled. + bool enable_updates_; + + /// @brief IP address of the b10-dhcp-ddns server (IPv4 or IPv6). + isc::asiolink::IOAddress server_ip_; + + /// @brief IP port of the b10-dhcp-ddns server. + size_t server_port_; + + /// @brief The socket protocol to use with b10-dhcp-ddns. + /// Currently only UDP is supported. + dhcp_ddns::NameChangeProtocol ncr_protocol_; + + /// @brief Format of the b10-dhcp-ddns requests. + /// Currently only JSON format is supported. + dhcp_ddns::NameChangeFormat ncr_format_; + + /// @brief Should Kea always include the FQDN option in its response. + bool always_include_fqdn_; + + /// @brief Should Kea perform updates, even if client requested no updates. + /// Overrides the client request for no updates via the N flag. + bool override_no_update_; + + /// @brief Should Kea perform updates, even if client requested delegation. + bool override_client_update_; + + /// @brief Should Kea replace the domain-name supplied by the client. + bool replace_client_name_; + + /// @brief Prefix Kea should use when generating domain-names. + std::string generated_prefix_; + + /// @brief Suffix Kea should use when to qualify partial domain-names. + std::string qualifying_suffix_; +}; + +std::ostream& +operator<<(std::ostream& os, const D2ClientConfig& config); + +/// @brief Defines a pointer for D2ClientConfig instances. +typedef boost::shared_ptr D2ClientConfigPtr; + +} // namespace isc +} // namespace dhcp + +#endif diff --git a/src/lib/dhcpsrv/d2_client.cc b/src/lib/dhcpsrv/d2_client_mgr.cc similarity index 70% rename from src/lib/dhcpsrv/d2_client.cc rename to src/lib/dhcpsrv/d2_client_mgr.cc index f38d332920..4c8b34ef87 100644 --- a/src/lib/dhcpsrv/d2_client.cc +++ b/src/lib/dhcpsrv/d2_client_mgr.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -13,7 +13,7 @@ // PERFORMANCE OF THIS SOFTWARE. #include -#include +#include #include #include @@ -23,125 +23,6 @@ using namespace std; namespace isc { namespace dhcp { -//***************************** D2ClientConfig ******************************** - -D2ClientConfig::D2ClientConfig(const bool enable_updates, - const isc::asiolink::IOAddress& server_ip, - const size_t server_port, - const dhcp_ddns:: - NameChangeProtocol& ncr_protocol, - const dhcp_ddns:: - NameChangeFormat& ncr_format, - const bool always_include_fqdn, - const bool override_no_update, - const bool override_client_update, - const bool replace_client_name, - const std::string& generated_prefix, - const std::string& qualifying_suffix) - : enable_updates_(enable_updates), - server_ip_(server_ip), - server_port_(server_port), - ncr_protocol_(ncr_protocol), - ncr_format_(ncr_format), - always_include_fqdn_(always_include_fqdn), - override_no_update_(override_no_update), - override_client_update_(override_client_update), - replace_client_name_(replace_client_name), - generated_prefix_(generated_prefix), - qualifying_suffix_(qualifying_suffix) { - validateContents(); -} - -D2ClientConfig::D2ClientConfig() - : enable_updates_(false), - server_ip_(isc::asiolink::IOAddress("0.0.0.0")), - server_port_(0), - ncr_protocol_(dhcp_ddns::NCR_UDP), - ncr_format_(dhcp_ddns::FMT_JSON), - always_include_fqdn_(false), - override_no_update_(false), - override_client_update_(false), - replace_client_name_(false), - generated_prefix_("myhost"), - qualifying_suffix_("example.com") { - validateContents(); -} - -D2ClientConfig::~D2ClientConfig(){}; - -void -D2ClientConfig::validateContents() { - if (ncr_format_ != dhcp_ddns::FMT_JSON) { - isc_throw(D2ClientError, "D2ClientConfig: NCR Format:" - << dhcp_ddns::ncrFormatToString(ncr_format_) - << " is not yet supported"); - } - - if (ncr_protocol_ != dhcp_ddns::NCR_UDP) { - isc_throw(D2ClientError, "D2ClientConfig: NCR Protocol:" - << dhcp_ddns::ncrProtocolToString(ncr_protocol_) - << " is not yet supported"); - } - - /// @todo perhaps more validation we should do yet? - /// Are there any invalid combinations of options we need to test against? -} - -bool -D2ClientConfig::operator == (const D2ClientConfig& other) const { - return ((enable_updates_ == other.enable_updates_) && - (server_ip_ == other.server_ip_) && - (server_port_ == other.server_port_) && - (ncr_protocol_ == other.ncr_protocol_) && - (ncr_format_ == other.ncr_format_) && - (always_include_fqdn_ == other.always_include_fqdn_) && - (override_no_update_ == other.override_no_update_) && - (override_client_update_ == other.override_client_update_) && - (replace_client_name_ == other.replace_client_name_) && - (generated_prefix_ == other.generated_prefix_) && - (qualifying_suffix_ == other.qualifying_suffix_)); -} - -bool -D2ClientConfig::operator != (const D2ClientConfig& other) const { - return (!(*this == other)); -} - -std::string -D2ClientConfig::toText() const { - std::ostringstream stream; - - stream << "enable_updates: " << (enable_updates_ ? "yes" : "no"); - if (enable_updates_) { - stream << ", server_ip: " << server_ip_.toText() - << ", server_port: " << server_port_ - << ", ncr_protocol: " << ncr_protocol_ - << ", ncr_format: " << ncr_format_ - << ", always_include_fqdn: " << (always_include_fqdn_ ? - "yes" : "no") - << ", override_no_update: " << (override_no_update_ ? - "yes" : "no") - << ", override_client_update: " << (override_client_update_ ? - "yes" : "no") - << ", replace_client_name: " << (replace_client_name_ ? - "yes" : "no") - << ", generated_prefix: [" << generated_prefix_ << "]" - << ", qualifying_suffix: [" << qualifying_suffix_ << "]"; - } - - return (stream.str()); -} - -std::ostream& -operator<<(std::ostream& os, const D2ClientConfig& config) { - os << config.toText(); - return (os); -} - - -//******************************** D2ClientMgr ******************************** - - D2ClientMgr::D2ClientMgr() : d2_client_config_(new D2ClientConfig()), name_change_sender_(), private_io_service_(), sender_io_service_(NULL) { // Default constructor initializes with a disabled configuration. diff --git a/src/lib/dhcpsrv/d2_client.h b/src/lib/dhcpsrv/d2_client_mgr.h similarity index 69% rename from src/lib/dhcpsrv/d2_client.h rename to src/lib/dhcpsrv/d2_client_mgr.h index 639747a9d8..f46007159d 100644 --- a/src/lib/dhcpsrv/d2_client.h +++ b/src/lib/dhcpsrv/d2_client_mgr.h @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -12,15 +12,16 @@ // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR // PERFORMANCE OF THIS SOFTWARE. -#ifndef D2_CLIENT_H -#define D2_CLIENT_H +#ifndef D2_CLIENT_MGR_H +#define D2_CLIENT_MGR_H -/// @file d2_client.h Defines the D2ClientConfig and D2ClientMgr classes. -/// This file defines the classes Kea uses to act as a client of the b10- -/// dhcp-ddns module (aka D2). +/// @file d2_client_mgr.h Defines the D2ClientMgr class. +/// This file defines the class Kea uses to act as a client of the +/// b10-dhcp-ddns module (aka D2). /// #include #include +#include #include #include @@ -32,185 +33,6 @@ namespace isc { namespace dhcp { - -/// An exception that is thrown if an error occurs while configuring -/// the D2 DHCP DDNS client. -class D2ClientError : public isc::Exception { -public: - - /// @brief constructor - /// - /// @param file name of the file, where exception occurred - /// @param line line of the file, where exception occurred - /// @param what text description of the issue that caused exception - D2ClientError(const char* file, size_t line, const char* what) - : isc::Exception(file, line, what) {} -}; - -/// @brief Acts as a storage vault for D2 client configuration -/// -/// A simple container class for storing and retrieving the configuration -/// parameters associated with DHCP-DDNS and acting as a client of D2. -/// Instances of this class may be constructed through configuration parsing. -/// -class D2ClientConfig { -public: - /// @brief Constructor - /// - /// @param enable_updates Enables DHCP-DDNS updates - /// @param server_ip IP address of the b10-dhcp-ddns server (IPv4 or IPv6) - /// @param server_port IP port of the b10-dhcp-ddns server - /// @param ncr_protocol Socket protocol to use with b10-dhcp-ddns - /// Currently only UDP is supported. - /// @param ncr_format Format of the b10-dhcp-ddns requests. - /// Currently only JSON format is supported. - /// @param always_include_fqdn Enables always including the FQDN option in - /// DHCP responses. - /// @param override_no_update Enables updates, even if clients request no - /// updates. - /// @param override_client_update Perform updates, even if client requested - /// delegation. - /// @param replace_client_name enables replacement of the domain-name - /// supplied by the client with a generated name. - /// @param generated_prefix Prefix to use when generating domain-names. - /// @param qualifying_suffix Suffix to use to qualify partial domain-names. - /// - /// @throw D2ClientError if given an invalid protocol or format. - D2ClientConfig(const bool enable_updates, - const isc::asiolink::IOAddress& server_ip, - const size_t server_port, - const dhcp_ddns::NameChangeProtocol& ncr_protocol, - const dhcp_ddns::NameChangeFormat& ncr_format, - const bool always_include_fqdn, - const bool override_no_update, - const bool override_client_update, - const bool replace_client_name, - const std::string& generated_prefix, - const std::string& qualifying_suffix); - - /// @brief Default constructor - /// The default constructor creates an instance that has updates disabled. - D2ClientConfig(); - - /// @brief Destructor - virtual ~D2ClientConfig(); - - /// @brief Return whether or not DHCP-DDNS updating is enabled. - bool getEnableUpdates() const { - return(enable_updates_); - } - - /// @brief Return the IP address of b10-dhcp-ddns (IPv4 or IPv6). - const isc::asiolink::IOAddress& getServerIp() const { - return(server_ip_); - } - - /// @brief Return the IP port of b10-dhcp-ddns. - size_t getServerPort() const { - return(server_port_); - } - - /// @brief Return the socket protocol to use with b10-dhcp-ddns. - const dhcp_ddns::NameChangeProtocol& getNcrProtocol() const { - return(ncr_protocol_); - } - - /// @brief Return the b10-dhcp-ddns request format. - const dhcp_ddns::NameChangeFormat& getNcrFormat() const { - return(ncr_format_); - } - - /// @brief Return whether or not FQDN is always included in DHCP responses. - bool getAlwaysIncludeFqdn() const { - return(always_include_fqdn_); - } - - /// @brief Return if updates are done even if clients request no updates. - bool getOverrideNoUpdate() const { - return(override_no_update_); - } - - /// @brief Return if updates are done even when clients request delegation. - bool getOverrideClientUpdate() const { - return(override_client_update_); - } - - /// @brief Return whether or not client's domain-name is always replaced. - bool getReplaceClientName() const { - return(replace_client_name_); - } - - /// @brief Return the prefix to use when generating domain-names. - const std::string& getGeneratedPrefix() const { - return(generated_prefix_); - } - - /// @brief Return the suffix to use to qualify partial domain-names. - const std::string& getQualifyingSuffix() const { - return(qualifying_suffix_); - } - - /// @brief Compares two D2ClientConfigs for equality - bool operator == (const D2ClientConfig& other) const; - - /// @brief Compares two D2ClientConfigs for inequality - bool operator != (const D2ClientConfig& other) const; - - /// @brief Generates a string representation of the class contents. - std::string toText() const; - -protected: - /// @brief Validates member values. - /// - /// Method is used by the constructor to validate member contents. - /// - /// @throw D2ClientError if given an invalid protocol or format. - virtual void validateContents(); - -private: - /// @brief Indicates whether or not DHCP DDNS updating is enabled. - bool enable_updates_; - - /// @brief IP address of the b10-dhcp-ddns server (IPv4 or IPv6). - isc::asiolink::IOAddress server_ip_; - - /// @brief IP port of the b10-dhcp-ddns server. - size_t server_port_; - - /// @brief The socket protocol to use with b10-dhcp-ddns. - /// Currently only UDP is supported. - dhcp_ddns::NameChangeProtocol ncr_protocol_; - - /// @brief Format of the b10-dhcp-ddns requests. - /// Currently only JSON format is supported. - dhcp_ddns::NameChangeFormat ncr_format_; - - /// @brief Should Kea always include the FQDN option in its response. - bool always_include_fqdn_; - - /// @brief Should Kea perform updates, even if client requested no updates. - /// Overrides the client request for no updates via the N flag. - bool override_no_update_; - - /// @brief Should Kea perform updates, even if client requested delegation. - bool override_client_update_; - - /// @brief Should Kea replace the domain-name supplied by the client. - bool replace_client_name_; - - /// @brief Prefix Kea should use when generating domain-names. - std::string generated_prefix_; - - /// @brief Suffix Kea should use when to qualify partial domain-names. - std::string qualifying_suffix_; -}; - -std::ostream& -operator<<(std::ostream& os, const D2ClientConfig& config); - -/// @brief Defines a pointer for D2ClientConfig instances. -typedef boost::shared_ptr D2ClientConfigPtr; - /// @brief Defines the type for D2 IO error handler. /// This callback is invoked when a send to b10-dhcp-ddns completes with a /// failed status. This provides the application layer (Kea) with a means to diff --git a/src/lib/dhcpsrv/dhcp_parsers.h b/src/lib/dhcpsrv/dhcp_parsers.h index 0f8f8f96d2..eefc76e8e8 100644 --- a/src/lib/dhcpsrv/dhcp_parsers.h +++ b/src/lib/dhcpsrv/dhcp_parsers.h @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/lib/dhcpsrv/tests/d2_client_unittest.cc b/src/lib/dhcpsrv/tests/d2_client_unittest.cc index 8a8550fbe2..cefb31e169 100644 --- a/src/lib/dhcpsrv/tests/d2_client_unittest.cc +++ b/src/lib/dhcpsrv/tests/d2_client_unittest.cc @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/lib/dhcpsrv/tests/d2_udp_unittest.cc b/src/lib/dhcpsrv/tests/d2_udp_unittest.cc index 66d21254ac..1bc6091aa4 100644 --- a/src/lib/dhcpsrv/tests/d2_udp_unittest.cc +++ b/src/lib/dhcpsrv/tests/d2_udp_unittest.cc @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include