summaryrefslogtreecommitdiffstats
path: root/src/lib/dhcpsrv/cfg_globals.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/dhcpsrv/cfg_globals.h')
-rw-r--r--src/lib/dhcpsrv/cfg_globals.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/lib/dhcpsrv/cfg_globals.h b/src/lib/dhcpsrv/cfg_globals.h
new file mode 100644
index 0000000..af15edc
--- /dev/null
+++ b/src/lib/dhcpsrv/cfg_globals.h
@@ -0,0 +1,164 @@
+// Copyright (C) 2021-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 CFG_GLOBALS_H
+#define CFG_GLOBALS_H
+
+#include <cc/cfg_to_element.h>
+#include <cc/data.h>
+#include <boost/shared_ptr.hpp>
+#include <map>
+#include <string>
+#include <vector>
+
+namespace isc {
+namespace dhcp {
+
+/// @brief Class to store configured global parameters.
+///
+/// This class provides a direct access to a global parameter value
+/// using a vector as soon as the parameter name is known at compile
+/// time so in constant time vs in logarithm time using a map.
+class CfgGlobals : public isc::data::CfgToElement {
+public:
+
+ /// Class members.
+
+ /// @brief Enumeration of global parameters.
+ ///
+ /// The C++ compiler is required to start with 0 and to increment by 1
+ /// so gives an index.
+ ///
+ /// Names taken from @c SimpleParser4::GLOBAL4_PARAMETERS and
+ /// @c SimpleParser6::GLOBAL6_PARAMETERS, first part with common
+ /// parameters followed by DHCPv4 and DHCPv6 specific parameters.
+ /// Keep the order, enum element names is uppercase with - replaced by _.
+ enum Index : int {
+ // Common parameters.
+ VALID_LIFETIME,
+ MIN_VALID_LIFETIME,
+ MAX_VALID_LIFETIME,
+ RENEW_TIMER,
+ REBIND_TIMER,
+ DECLINE_PROBATION_PERIOD,
+ DHCP4O6_PORT,
+ COMMENT,
+ SERVER_TAG,
+ RESERVATION_MODE,
+ RESERVATIONS_GLOBAL,
+ RESERVATIONS_IN_SUBNET,
+ RESERVATIONS_OUT_OF_POOL,
+ CALCULATE_TEE_TIMES,
+ T1_PERCENT,
+ T2_PERCENT,
+ HOSTNAME_CHAR_SET,
+ HOSTNAME_CHAR_REPLACEMENT,
+ DDNS_SEND_UPDATES,
+ DDNS_OVERRIDE_NO_UPDATE,
+ DDNS_OVERRIDE_CLIENT_UPDATE,
+ DDNS_REPLACE_CLIENT_NAME,
+ DDNS_GENERATED_PREFIX,
+ DDNS_QUALIFYING_SUFFIX,
+ STORE_EXTENDED_INFO,
+ STATISTIC_DEFAULT_SAMPLE_COUNT,
+ STATISTIC_DEFAULT_SAMPLE_AGE,
+ CACHE_THRESHOLD,
+ CACHE_MAX_AGE,
+ EARLY_GLOBAL_RESERVATIONS_LOOKUP,
+ IP_RESERVATIONS_UNIQUE,
+ RESERVATIONS_LOOKUP_FIRST,
+ DDNS_UPDATE_ON_RENEW,
+ DDNS_USE_CONFLICT_RESOLUTION,
+ PARKED_PACKET_LIMIT,
+
+ // DHCPv4 specific parameters.
+ ECHO_CLIENT_ID,
+ MATCH_CLIENT_ID,
+ AUTHORITATIVE,
+ NEXT_SERVER,
+ SERVER_HOSTNAME,
+ BOOT_FILE_NAME,
+
+ // DHCPv6 specific parameters.
+ DATA_DIRECTORY,
+ PREFERRED_LIFETIME,
+ MIN_PREFERRED_LIFETIME,
+ MAX_PREFERRED_LIFETIME,
+
+ // Size sentinel.
+ SIZE
+ };
+
+ /// @brief Name to index map.
+ static const std::map<std::string, int> nameToIndex;
+
+ /// Instance members.
+
+ /// Constructor.
+ ///
+ /// Create a vector of null values.
+ CfgGlobals();
+
+ /// @brief Get a configured parameter value by name.
+ ///
+ /// @param name Name of the global parameter.
+ /// @return The value of the global parameter with the given name.
+ /// @throw NotFound if no global parameter has the given name.
+ isc::data::ConstElementPtr get(const std::string& name) const;
+
+ /// @brief Get a configured parameter value by index.
+ ///
+ /// @param index Index of the global parameter.
+ /// @return The value of the global parameter with the index.
+ /// @throw OutOfRange if the index is out of bounds.
+ isc::data::ConstElementPtr get(int index) const;
+
+ /// @brief Set a configured parameter value by name.
+ ///
+ /// @param name Name of the global parameter.
+ /// @param value Value of the configured parameter to set.
+ /// @throw NotFound if no global parameter has the given name.
+ void set(const std::string& name, isc::data::ConstElementPtr value);
+
+ /// @brief Set a configured parameter value by index.
+ ///
+ /// @param index Index of the global parameter.
+ /// @param value Value of the configured parameter to set.
+ /// @throw OutOfRange if the index is out of bounds.
+ void set(int index, isc::data::ConstElementPtr value);
+
+ /// @brief Clear configured parameter values.
+ void clear();
+
+ /// @brief Type of name and value map.
+ typedef std::map<std::string, isc::data::ConstElementPtr> MapType;
+
+ /// @brief Returns configured parameters as a map.
+ ///
+ /// @note: the map includes only set global parameters i.e.
+ /// ConstElementPtr values are never null.
+ const MapType valuesMap() const;
+
+ /// @brief Unparse configured global parameters.
+ ///
+ /// @return a pointer to unparsed global parameters.
+ isc::data::ElementPtr toElement() const;
+
+protected:
+ /// @brief Vectors of values.
+ std::vector<isc::data::ConstElementPtr> values_;
+};
+
+/// @brief Non-const shared pointer to a CfgGlobals instance.
+typedef boost::shared_ptr<CfgGlobals> CfgGlobalsPtr;
+
+/// @brief Const shared pointer to a CfgGlobals instance.
+typedef boost::shared_ptr<const CfgGlobals> ConstCfgGlobalsPtr;
+
+} // namespace isc::dhcp
+} // namespace isc
+
+#endif // CFG_GLOBALS_H