|
@@ -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
|
|
// Permission to use, copy, modify, and/or distribute this software for any
|
|
// purpose with or without fee is hereby granted, provided that the above
|
|
// 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
|
|
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
// PERFORMANCE OF THIS SOFTWARE.
|
|
// 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 <asiolink/io_address.h>
|
|
#include <asiolink/io_address.h>
|
|
#include <dhcp_ddns/ncr_io.h>
|
|
#include <dhcp_ddns/ncr_io.h>
|
|
|
|
+#include <dhcpsrv/d2_client_cfg.h>
|
|
#include <exceptions/exceptions.h>
|
|
#include <exceptions/exceptions.h>
|
|
|
|
|
|
#include <boost/shared_ptr.hpp>
|
|
#include <boost/shared_ptr.hpp>
|
|
@@ -32,185 +33,6 @@
|
|
namespace isc {
|
|
namespace isc {
|
|
namespace dhcp {
|
|
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<D2ClientConfig> D2ClientConfigPtr;
|
|
|
|
-
|
|
|
|
/// @brief Defines the type for D2 IO error handler.
|
|
/// @brief Defines the type for D2 IO error handler.
|
|
/// This callback is invoked when a send to b10-dhcp-ddns completes with a
|
|
/// 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
|
|
/// failed status. This provides the application layer (Kea) with a means to
|