Kea 2.5.8
cb_ctl_dhcp.h
Go to the documentation of this file.
1// Copyright (C) 2019-2024 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef CB_CTL_DHCP_H
8#define CB_CTL_DHCP_H
9
10#include <cc/stamped_value.h>
11#include <process/cb_ctl_base.h>
12#include <dhcpsrv/srv_config.h>
13
14namespace isc {
15namespace dhcp {
16
26template<typename ConfigBackendMgrType>
27class CBControlDHCP : public process::CBControlBase<ConfigBackendMgrType> {
28public:
29
32 : process::CBControlBase<ConfigBackendMgrType>() {
33 }
34
46 static bool translateName(std::string const& name, std::string& param_name,
47 std::string& sub_param_name) {
48 param_name = name;
49 sub_param_name = std::string();
50 auto pos = param_name.find('.');
51 if (pos != std::string::npos) {
52 sub_param_name = param_name.substr(pos + 1);
53 param_name = param_name.substr(0, pos);
54 return (true);
55 }
56 return (false);
57 }
58
59protected:
60
73 data::StampedValueCollection& cb_globals) const {
74 auto const& index = cb_globals.get<data::StampedValueNameIndexTag>();
75 for (auto const& cb_global : index) {
76
77 if (cb_global->amNull()) {
78 continue;
79 }
80
81 std::string param_name;
82 std::string sub_param_name;
83 if (translateName(cb_global->getName(), param_name, sub_param_name)) {
84 data::ElementPtr sub_param = boost::const_pointer_cast<data::Element>(external_cfg->getConfiguredGlobal(param_name));
85 if (!sub_param) {
86 sub_param = data::Element::createMap();
87 }
88 sub_param->set(sub_param_name, cb_global->getElementValue());
89 external_cfg->addConfiguredGlobal(param_name, sub_param);
90 } else {
91 // Reuse name and value.
92 external_cfg->addConfiguredGlobal(param_name, cb_global->getElementValue());
93 }
94 }
95 }
96};
97
98} // end of namespace isc::dhcp
99} // end of namespace isc
100
101#endif // CB_CTL_DHCP_H
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement type ElementPtr.
Definition: data.cc:304
Base class for implementing mechanisms to control the use of the Configuration Backends by DHCPv4 and...
Definition: cb_ctl_dhcp.h:27
static bool translateName(std::string const &name, std::string &param_name, std::string &sub_param_name)
It translates the top level map parameters from flat naming format (e.g.
Definition: cb_ctl_dhcp.h:46
CBControlDHCP()
Constructor.
Definition: cb_ctl_dhcp.h:31
void translateAndAddGlobalsToConfig(SrvConfigPtr external_cfg, data::StampedValueCollection &cb_globals) const
It translates the top level map parameters from flat naming format (e.g.
Definition: cb_ctl_dhcp.h:72
Base class for implementing server specific mechanisms to control the use of the Configuration Backen...
Definition: cb_ctl_base.h:82
CBControlBase()
Constructor.
Definition: cb_ctl_base.h:99
boost::multi_index_container< StampedValuePtr, boost::multi_index::indexed_by< boost::multi_index::hashed_non_unique< boost::multi_index::tag< StampedValueNameIndexTag >, boost::multi_index::const_mem_fun< StampedValue, std::string, &StampedValue::getName > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< StampedValueModificationTimeIndexTag >, boost::multi_index::const_mem_fun< BaseStampedElement, boost::posix_time::ptime, &BaseStampedElement::getModificationTime > > > > StampedValueCollection
Multi index container for StampedValue.
boost::shared_ptr< Element > ElementPtr
Definition: data.h:28
boost::shared_ptr< SrvConfig > SrvConfigPtr
Non-const pointer to the SrvConfig.
Definition: srv_config.h:1267
Defines the logger used by the top-level component of kea-lfc.
Tag for the index for access by value name.