summaryrefslogtreecommitdiffstats
path: root/src/lib/config_backend/base_config_backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/config_backend/base_config_backend.h')
-rw-r--r--src/lib/config_backend/base_config_backend.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/lib/config_backend/base_config_backend.h b/src/lib/config_backend/base_config_backend.h
new file mode 100644
index 0000000..9e38919
--- /dev/null
+++ b/src/lib/config_backend/base_config_backend.h
@@ -0,0 +1,87 @@
+// Copyright (C) 2018-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
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#ifndef BASE_CONFIG_BACKEND_H
+#define BASE_CONFIG_BACKEND_H
+
+#include <database/database_connection.h>
+
+#include <boost/shared_ptr.hpp>
+#include <cstdint>
+#include <set>
+#include <string>
+
+namespace isc {
+namespace cb {
+
+/// @brief Interface for Kea server specific configuration backend
+/// implementations.
+///
+/// Each Kea server (e.g. DHCPv4 server) needs to implement its own
+/// interface to store and fetch its configuration from the databases.
+/// This is because each Kea server uses a different set of
+/// configuration information. This is a base interface which should
+/// be implemented (and extended) by respective Kea servers to provide
+/// API to store and fetch configuration information from a database.
+/// Such implementation is called configuration backend. Each
+/// configuration backend facilitates a single database type, e.g. MySQL
+/// database. In order to support multiple database types, i.e. MySQL,
+/// PostgreSQL, each Kea server will have to implement 2 separate configuration
+/// backends, one for each database type.
+class BaseConfigBackend {
+public:
+
+ /// @brief Virtual destructor.
+ virtual ~BaseConfigBackend() { }
+
+ /// @brief Returns backend type in the textual format.
+ ///
+ /// @return Name of the storage for configurations, e.g. "mysql",
+ /// "postgresql" and so forth.
+ virtual std::string getType() const = 0;
+
+ /// @brief Returns backend host.
+ ///
+ /// This is used by the @c BaseConfigBackendPool to select backend
+ /// when @c BackendSelector is specified.
+ ///
+ /// @return host on which the database is located.
+ virtual std::string getHost() const = 0;
+
+ /// @brief Returns backend port number.
+ ///
+ /// This is used by the @c BaseConfigBackendPool to select backend
+ /// when @c BackendSelector is specified.
+ ///
+ /// @return Port number on which database service is available.
+ virtual uint16_t getPort() const = 0;
+
+ /// @brief Flag which indicates if the config backend has an unusable
+ /// connection.
+ ///
+ /// @return true if there is at least one unusable connection, false
+ /// otherwise.
+ virtual bool isUnusable() {
+ return (false);
+ }
+
+ /// @brief Return backend parameters.
+ ///
+ /// Returns the backend parameters.
+ ///
+ /// @return Parameters of the backend.
+ virtual isc::db::DatabaseConnection::ParameterMap getParameters() const {
+ return (isc::db::DatabaseConnection::ParameterMap());
+ }
+};
+
+/// @brief Shared pointer to the @c BaseConfigBackend.
+typedef boost::shared_ptr<BaseConfigBackend> BaseConfigBackendPtr;
+
+} // end of namespace isc::cb
+} // end of namespace isc
+
+#endif // BASE_CONFIG_BACKEND_H