Kea 3.2.0-git
bin/netconf/simple_parser.cc
Go to the documentation of this file.
1// Copyright (C) 2018-2026 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#include <config.h>
8
10#include <cc/data.h>
12#include <hooks/hooks_manager.h>
13#include <hooks/hooks_parser.h>
16
17using namespace isc::data;
18using namespace isc::asiolink;
19
20namespace isc {
21namespace netconf {
36
41 { "boot-update", Element::boolean, "true" },
42 { "subscribe-changes", Element::boolean, "true" },
43 { "validate-changes", Element::boolean, "true" }
44};
45
48 { "socket-type", Element::string, "" },
49 { "socket-name", Element::string, "" },
50 { "socket-url" , Element::string, "http://127.0.0.1:8000/" }
51};
52
55 { "model", Element::string, "kea-dhcp4-server" }
56};
57
60 { "model", Element::string, "kea-dhcp6-server" }
61};
62
65 { "model", Element::string, "kea-dhcp-ddns" }
66};
67
75 "boot-update",
76 "subscribe-changes",
77 "validate-changes"
78};
79
81
85
87 size_t cnt = 0;
88
89 // Set global defaults first.
90 cnt = setDefaults(global, NETCONF_DEFAULTS);
91
92 ConstElementPtr servers = global->get("managed-servers");
93 if (servers) {
94 ElementPtr mutable_servers(copy(servers, 0));
95 for (auto const& it : mutable_servers->mapValue()) {
96 ElementPtr server(copy(it.second, 0));
97 cnt += setServerDefaults(it.first, server);
98 mutable_servers->set(it.first, server);
99 }
100 global->set("managed-servers", mutable_servers);
101 }
102
103 return (cnt);
104}
105
107 size_t cnt = 0;
108
109 // Now derive global parameters into managed-servers.
110 ConstElementPtr servers = global->get("managed-servers");
111 if (servers) {
112 ElementPtr mutable_servers(copy(servers, 0));
113 for (auto const& it : mutable_servers->mapValue()) {
114 ElementPtr mutable_server = copy(it.second, 0);
115 cnt += SimpleParser::deriveParams(global,
116 mutable_server,
118 mutable_servers->set(it.first, mutable_server);
119 }
120 global->set("managed-servers", mutable_servers);
121 }
122
123 return (cnt);
124}
125
126size_t
128 ElementPtr server) {
129 size_t cnt = 0;
130
131 if (name == "dhcp4") {
132 cnt += setDefaults(server, DHCP4_DEFAULTS);
133 } else if (name == "dhcp6") {
134 cnt += setDefaults(server, DHCP6_DEFAULTS);
135 } else if (name == "d2") {
136 cnt += setDefaults(server, D2_DEFAULTS);
137 }
138
139 ConstElementPtr ctrl_sock = server->get("control-socket");
140 if (!ctrl_sock) {
141 return (cnt);
142 }
143 ElementPtr mutable_ctrl_sock(copy(ctrl_sock, 0));
144 cnt += setDefaults(mutable_ctrl_sock, CTRL_SOCK_DEFAULTS);
145 server->set("control-socket", mutable_ctrl_sock);
146
147 return (cnt);
148}
149
150void
152 const ElementPtr& config,
153 bool check_only) {
154
155 // User context can be done at anytime.
156 ConstElementPtr user_context = config->get("user-context");
157 if (user_context) {
158 ctx->setContext(user_context);
159 }
160
161 // get managed servers.
162 ConstElementPtr servers = config->get("managed-servers");
163 if (servers) {
164 for (auto const& it : servers->mapValue()) {
165 ServerConfigParser server_parser;
166 CfgServerPtr server = server_parser.parse(it.second, it.first);
167 ctx->getCfgServersMap()->insert(make_pair(it.first, server));
168 }
169 }
170
171 // Finally, let's get the hook libs!
172 using namespace isc::hooks;
173 HooksConfig& libraries = ctx->getHooksConfig();
174 ConstElementPtr hooks = config->get("hooks-libraries");
175 if (hooks) {
176 HooksLibrariesParser hooks_parser;
177 hooks_parser.parse(libraries, hooks);
178 libraries.verifyLibraries(hooks->getPosition(), false);
179 }
180
181 if (!check_only) {
182 // This occurs last as if it succeeds, there is no easy way
183 // revert it. As a result, the failure to commit a subsequent
184 // change causes problems when trying to roll back.
186 static_cast<void>(HooksManager::unloadLibraries());
188 libraries.loadLibraries(false);
189 }
190}
191
192} // namespace netconf
193} // namespace isc
@ boolean
Definition data.h:155
@ string
Definition data.h:157
static size_t deriveParams(isc::data::ConstElementPtr parent, isc::data::ElementPtr child, const ParamsList &params)
Derives (inherits) parameters from parent scope to a child.
static size_t setDefaults(isc::data::ElementPtr scope, const SimpleDefaults &default_values)
Sets the default values.
Wrapper class that holds hooks libraries configuration.
void verifyLibraries(const isc::data::Element::Position &position, bool multi_threading_enabled) const
Verifies that libraries stored in libraries_ are valid.
void loadLibraries(bool multi_threading_enabled) const
Commits hooks libraries configuration.
Parser for hooks library list.
void parse(HooksConfig &libraries, isc::data::ConstElementPtr value)
Parses parameters value.
static bool unloadLibraries()
Unload libraries.
static void prepareUnloadLibraries()
Prepare the unloading of libraries.
static const isc::data::SimpleDefaults NETCONF_DEFAULTS
This table defines default values for global options.
static const isc::data::SimpleDefaults DHCP6_DEFAULTS
Supplies defaults for dhcp6 managed server.
static const isc::data::SimpleDefaults DHCP4_DEFAULTS
Supplies defaults for dhcp4 managed server.
static size_t setAllDefaults(const isc::data::ElementPtr &global)
Sets all defaults for Netconf configuration.
static size_t deriveParameters(isc::data::ElementPtr global)
Derives (inherits) all parameters from global to more specific scopes.
static const isc::data::ParamsList INHERIT_TO_SERVERS
List of parameters that can be inherited to managed-servers scope.
void parse(const NetconfConfigPtr &ctx, const isc::data::ElementPtr &config, bool check_only)
Parses the netconf configuration.
static const isc::data::SimpleDefaults CTRL_SOCK_DEFAULTS
Supplies defaults for control-socket elements.
static const isc::data::SimpleDefaults D2_DEFAULTS
Supplies defaults for d2 managed server.
static size_t setServerDefaults(const std::string name, isc::data::ElementPtr server)
Adds default values to a Managed server entry.
CfgServerPtr parse(data::ConstElementPtr server_config, const std::string &service="")
Performs the actual parsing of the given value from the "managed-servers" map.
std::vector< std::string > ParamsList
This defines a list of all parameters that are derived (or inherited) between contexts.
ElementPtr copy(ConstElementPtr from, unsigned level)
Copy the data up to a nesting level.
Definition data.cc:1522
boost::shared_ptr< const Element > ConstElementPtr
Definition data.h:30
std::vector< SimpleDefault > SimpleDefaults
This specifies all default values in a given scope (e.g. a subnet).
boost::shared_ptr< Element > ElementPtr
Definition data.h:29
boost::shared_ptr< NetconfConfig > NetconfConfigPtr
Pointer to a configuration context.
std::shared_ptr< CfgServer > CfgServerPtr
Defines a pointer for CfgServer instances.
Defines the logger used by the top-level component of kea-lfc.
A collection of classes for housing and parsing the application configuration necessary for the Netco...