Kea: shared_network_parser.cc Source File

| Kea 3.2.0-git

shared_network_parser.cc
Go to the documentation of this file.
1// Copyright (C) 2017-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
9#include <asiolink/io_address.h>
10#include <cc/data.h>
11#include <dhcpsrv/cfgmgr.h>
12#include <dhcpsrv/cfg_option.h>
13#include <dhcpsrv/parsers/option_data_parser.h>
14#include <dhcpsrv/parsers/shared_network_parser.h>
15#include <dhcpsrv/parsers/simple_parser4.h>
16#include <dhcpsrv/parsers/simple_parser6.h>
17#include <dhcpsrv/shared_network.h>
18#include <boost/make_shared.hpp>
19#include <boost/pointer_cast.hpp>
20#include <string>
21
22using namespace isc::asiolink;
23using namespace isc::data;
24using namespace isc::util;
25namespace ph = std::placeholders;
26
27namespace isc {
28namespace dhcp {
29
30SharedNetwork4Parser::SharedNetwork4Parser(bool check_iface)
31 : check_iface_(check_iface) {
32}
33
34 SharedNetwork4Ptr
35SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data,
36 bool encapsulate_options) {
37 SharedNetwork4Ptr shared_network;
38 try {
39
40 // Check parameters.
41 checkKeywords(SimpleParser4::SHARED_NETWORK4_PARAMETERS,
42 shared_network_data);
43
44 // Make sure that the network name has been specified. The name is required
45 // to create a SharedNetwork4 object.
46 std::string name = getString(shared_network_data, "name");
47 shared_network.reset(new SharedNetwork4(name));
48
49 ElementPtr mutable_params;
50 mutable_params = boost::const_pointer_cast<Element>(shared_network_data);
51
52 // Parse parameters common to all Network derivations.
53 NetworkPtr network = boost::dynamic_pointer_cast<Network>(shared_network);
54 parseCommon(mutable_params, network);
55
56 // interface is an optional parameter
57 if (shared_network_data->contains("interface")) {
58 std::string iface = getString(shared_network_data, "interface");
59 if (!iface.empty()) {
60 if (check_iface_ && !IfaceMgr::instance().getIface(iface)) {
61 ConstElementPtr error =
62 shared_network_data->get("interface");
63 isc_throw(DhcpConfigError,
64 "Specified network interface name " << iface
65 << " for shared network " << name
66 << " is not present in the system ("
67 << error->getPosition() << ")");
68 }
69 shared_network->setIface(iface);
70 }
71 }
72
73 if (shared_network_data->contains("option-data")) {
74 auto json = shared_network_data->get("option-data");
75 // Create parser instance for option-data.
76 CfgOptionPtr cfg_option = shared_network->getCfgOption();
77 auto parser = createOptionDataListParser();
78 parser->parse(cfg_option, json, encapsulate_options);
79 }
80
81 if (shared_network_data->contains("subnet4")) {
82 auto json = shared_network_data->get("subnet4");
83
84 // Create parser instance of subnet4.
85 auto parser = createSubnetsListParser();
86 Subnet4Collection subnets;
87 parser->parse(subnets, json);
88
89 // Add all returned subnets into shared network.
90 for (auto const& subnet : subnets) {
91 shared_network->add(subnet);
92 }
93 }
94
95 if (shared_network_data->contains("match-client-id")) {
96 shared_network->setMatchClientId(getBoolean(shared_network_data,
97 "match-client-id"));
98 }
99
100 if (shared_network_data->contains("authoritative")) {
101 shared_network->setAuthoritative(getBoolean(shared_network_data,
102 "authoritative"));
103 }
104
105 // Set next-server
106 if (shared_network_data->contains("next-server")) {
107 std::string next_server;
108 try {
109 next_server = getString(shared_network_data, "next-server");
110 if (!next_server.empty()) {
111 shared_network->setSiaddr(IOAddress(next_server));
112 }
113 } catch (...) {
114 ConstElementPtr next = shared_network_data->get("next-server");
115 std::string pos;
116 if (next) {
117 pos = next->getPosition().str();
118 } else {
119 pos = shared_network_data->getPosition().str();
120 }
121 isc_throw(DhcpConfigError, "invalid parameter next-server : "
122 << next_server << "(" << pos << ")");
123 }
124 }
125
126 // Set server-hostname.
127 if (shared_network_data->contains("server-hostname")) {
128 std::string sname = getString(shared_network_data, "server-hostname");
129 if (!sname.empty()) {
130 if (sname.length() >= Pkt4::MAX_SNAME_LEN) {
131 ConstElementPtr error = shared_network_data->get("server-hostname");
132 isc_throw(DhcpConfigError, "server-hostname must be at most "
133 << Pkt4::MAX_SNAME_LEN - 1 << " bytes long, it is "
134 << sname.length() << " ("
135 << error->getPosition() << ")");
136 }
137 shared_network->setSname(sname);
138 }
139 }
140
141 // Set boot-file-name.
142 if (shared_network_data->contains("boot-file-name")) {
143 std::string filename = getString(shared_network_data, "boot-file-name");
144 if (!filename.empty()) {
145 if (filename.length() > Pkt4::MAX_FILE_LEN) {
146 ConstElementPtr error = shared_network_data->get("boot-file-name");
147 isc_throw(DhcpConfigError, "boot-file-name must be at most "
148 << Pkt4::MAX_FILE_LEN - 1 << " bytes long, it is "
149 << filename.length() << " ("
150 << error->getPosition() << ")");
151 }
152 shared_network->setFilename(filename);
153 }
154 }
155
156 ConstElementPtr user_context = shared_network_data->get("user-context");
157 if (user_context) {
158 shared_network->setContext(user_context);
159 }
160
161 // Setup additional class list.
162 getClientClassesElem(shared_network_data,
163 std::bind(&Network::allowClientClass,
164 boost::dynamic_pointer_cast<Network>(shared_network), ph::_1));
165
166 // Setup additional class list.
167 getAdditionalClassesElem(shared_network_data,
168 std::bind(&Network::addAdditionalClass,
169 boost::dynamic_pointer_cast<Network>(shared_network), ph::_1));
170
171 if (shared_network_data->contains("relay")) {
172 auto relay_parms = shared_network_data->get("relay");
173 if (relay_parms) {
174 RelayInfoParser parser(Option::V4);
175 Network::RelayInfoPtr relay_info(new Network::RelayInfo());
176 parser.parse(relay_info, relay_parms);
177 shared_network->setRelayInfo(*relay_info);
178 }
179 }
180
181 parseTeePercents(shared_network_data, network);
182
183 // Parse DDNS parameters
184 parseDdnsParams(shared_network_data, network);
185
186 // Parse lease cache parameters
187 parseCacheParams(shared_network_data, network);
188
189 // Parse allocator params.
190 parseAllocatorParams(shared_network_data, network);
191
192 // Parse adaptive lease time parameter.
193 parseAdaptiveLeaseTimeParam(shared_network_data, network);
194
195 // Parse offer-lifetime parameter.
196 Network4Ptr network4 = boost::dynamic_pointer_cast<Network4>(shared_network);
197 parseOfferLft(shared_network_data, network4);
198
199 } catch (const std::exception& ex) {
200 isc_throw(DhcpConfigError, ex.what() << " ("
201 << shared_network_data->getPosition() << ")");
202 }
203
204 // In order to take advantage of the dynamic inheritance of global
205 // parameters to a shared network we need to set a callback function
206 // for each shared network to allow for fetching global parameters.
207 shared_network->setFetchGlobalsFn([]() -> ConstCfgGlobalsPtr {
208 return (CfgMgr::instance().getCurrentCfg()->getConfiguredGlobals());
209 });
210
211 return (shared_network);
212}
213
214boost::shared_ptr<OptionDataListParser>
215SharedNetwork4Parser::createOptionDataListParser() const {
216 auto parser = boost::make_shared<OptionDataListParser>(AF_INET);
217 return (parser);
218}
219
220boost::shared_ptr<Subnets4ListConfigParser>
221SharedNetwork4Parser::createSubnetsListParser() const {
222 auto parser = boost::make_shared<Subnets4ListConfigParser>(check_iface_);
223 return (parser);
224}
225
226SharedNetwork6Parser::SharedNetwork6Parser(bool check_iface)
227 : check_iface_(check_iface) {
228}
229
230 SharedNetwork6Ptr
231SharedNetwork6Parser::parse(const data::ConstElementPtr& shared_network_data,
232 bool encapsulate_options) {
233 SharedNetwork6Ptr shared_network;
234 std::string name;
235 try {
236 // Check parameters.
237 checkKeywords(SimpleParser6::SHARED_NETWORK6_PARAMETERS,
238 shared_network_data);
239
240 // Make sure that the network name has been specified. The name is required
241 // to create a SharedNetwork6 object.
242 name = getString(shared_network_data, "name");
243 shared_network.reset(new SharedNetwork6(name));
244
245 ElementPtr mutable_params;
246 mutable_params = boost::const_pointer_cast<Element>(shared_network_data);
247
248 // Parse parameters common to all Network derivations.
249 NetworkPtr network = boost::dynamic_pointer_cast<Network>(shared_network);
250 parseCommon(mutable_params, network);
251
252 // preferred-lifetime
253 shared_network->setPreferred(parseIntTriplet(shared_network_data,
254 "preferred-lifetime"));
255
256 // Get interface-id option content. For now we support string
257 // representation only
258 Optional<std::string> ifaceid;
259 if (shared_network_data->contains("interface-id")) {
260 ifaceid = getString(shared_network_data, "interface-id");
261 }
262
263 // Interface is an optional parameter
264 Optional<std::string> iface;
265 if (shared_network_data->contains("interface")) {
266 iface = getString(shared_network_data, "interface");
267 }
268
269 // Specifying both interface for locally reachable subnets and
270 // interface id for relays is mutually exclusive. Need to test for
271 // this condition.
272 if (!ifaceid.unspecified() && !iface.unspecified() && !ifaceid.empty() &&
273 !iface.empty()) {
274 isc_throw(isc::dhcp::DhcpConfigError,
275 "parser error: interface (defined for locally reachable "
276 "subnets) and interface-id (defined for subnets reachable"
277 " via relays) cannot be defined at the same time for "
278 "shared network " << name << "("
279 << shared_network_data->getPosition() << ")");
280 }
281
282 // Configure interface-id for remote interfaces, if defined
283 if (!ifaceid.unspecified() && !ifaceid.empty()) {
284 std::string ifaceid_value = ifaceid.get();
285 OptionBuffer tmp(ifaceid_value.begin(), ifaceid_value.end());
286 OptionPtr opt(new Option(Option::V6, D6O_INTERFACE_ID, tmp));
287 shared_network->setInterfaceId(opt);
288 }
289
290 // Set interface name. If it is defined, then subnets are available
291 // directly over specified network interface.
292 if (!iface.unspecified() && !iface.empty()) {
293 if (check_iface_ && !IfaceMgr::instance().getIface(iface)) {
294 ConstElementPtr error = shared_network_data->get("interface");
295 isc_throw(DhcpConfigError,
296 "Specified network interface name " << iface
297 << " for shared network " << name
298 << " is not present in the system ("
299 << error->getPosition() << ")");
300 }
301 shared_network->setIface(iface);
302 }
303
304 if (shared_network_data->contains("rapid-commit")) {
305 shared_network->setRapidCommit(getBoolean(shared_network_data,
306 "rapid-commit"));
307 }
308
309 if (shared_network_data->contains("option-data")) {
310 auto json = shared_network_data->get("option-data");
311 // Create parser instance for option-data.
312 CfgOptionPtr cfg_option = shared_network->getCfgOption();
313 auto parser = createOptionDataListParser();
314 parser->parse(cfg_option, json, encapsulate_options);
315 }
316
317 ConstElementPtr user_context = shared_network_data->get("user-context");
318 if (user_context) {
319 shared_network->setContext(user_context);
320 }
321
322 // Setup additional class list.
323 getClientClassesElem(shared_network_data,
324 std::bind(&Network::allowClientClass,
325 boost::dynamic_pointer_cast<Network>(shared_network), ph::_1));
326
327 // Setup additional class list.
328 getAdditionalClassesElem(shared_network_data,
329 std::bind(&Network::addAdditionalClass,
330 boost::dynamic_pointer_cast<Network>(shared_network), ph::_1));
331
332 if (shared_network_data->contains("subnet6")) {
333 auto json = shared_network_data->get("subnet6");
334
335 // Create parser instance of subnet6.
336 auto parser = createSubnetsListParser();
337 Subnet6Collection subnets;
338 parser->parse(subnets, json);
339
340 // Add all returned subnets into shared network.
341 for (auto const& subnet : subnets) {
342 shared_network->add(subnet);
343 }
344 }
345
346 if (shared_network_data->contains("relay")) {
347 auto relay_parms = shared_network_data->get("relay");
348 if (relay_parms) {
349 RelayInfoParser parser(Option::V6);
350 Network::RelayInfoPtr relay_info(new Network::RelayInfo());
351 parser.parse(relay_info, relay_parms);
352 shared_network->setRelayInfo(*relay_info);
353 }
354 }
355
356 parseTeePercents(shared_network_data, network);
357
358 // Parse DDNS parameters
359 parseDdnsParams(shared_network_data, network);
360
361 // Parse lease cache parameters
362 parseCacheParams(shared_network_data, network);
363
364 // Parse allocator params.
365 parseAllocatorParams(shared_network_data, network);
366 if (network->getAllocatorType() == "flq") {
367 isc_throw(BadValue, "Free Lease Queue allocator is not supported for IPv6 address pools");
368 }
369
370 // Parse prefix delegation allocator params.
371 auto network6 = boost::dynamic_pointer_cast<Network6>(shared_network);
372 parsePdAllocatorParams(shared_network_data, network6);
373
374 // Parse adaptive lease time parameter.
375 parseAdaptiveLeaseTimeParam(shared_network_data, network);
376
377 } catch (const std::exception& ex) {
378 isc_throw(DhcpConfigError, ex.what() << " ("
379 << shared_network_data->getPosition() << ")");
380 }
381
382 // In order to take advantage of the dynamic inheritance of global
383 // parameters to a shared network we need to set a callback function
384 // for each shared network which can be used to fetch global parameters.
385 shared_network->setFetchGlobalsFn([]() -> ConstCfgGlobalsPtr {
386 return (CfgMgr::instance().getCurrentCfg()->getConfiguredGlobals());
387 });
388
389 return (shared_network);
390}
391
392boost::shared_ptr<OptionDataListParser>
393SharedNetwork6Parser::createOptionDataListParser() const {
394 auto parser = boost::make_shared<OptionDataListParser>(AF_INET6);
395 return (parser);
396}
397
398boost::shared_ptr<Subnets6ListConfigParser>
399SharedNetwork6Parser::createSubnetsListParser() const {
400 auto parser = boost::make_shared<Subnets6ListConfigParser>(check_iface_);
401 return (parser);
402}
403
404} // end of namespace isc::dhcp
405} // end of namespace isc
cfg_option.h
cfgmgr.h
isc::BadValue
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
Definition exceptions/exceptions.h:132
isc::asiolink::IOAddress
The IOAddress class represents an IP addresses (version agnostic).
Definition io_address.h:53
isc::data::SimpleParser::checkKeywords
static void checkKeywords(const SimpleKeywords &keywords, isc::data::ConstElementPtr scope)
Checks acceptable keywords with their expected type.
Definition lib/cc/simple_parser.cc:35
isc::data::SimpleParser::getString
static std::string getString(isc::data::ConstElementPtr scope, const std::string &name)
Returns a string parameter from a scope.
Definition lib/cc/simple_parser.cc:60
isc::data::SimpleParser::parseIntTriplet
const isc::util::Triplet< uint32_t > parseIntTriplet(const data::ConstElementPtr &scope, const std::string &name)
Parses an integer triplet.
Definition lib/cc/simple_parser.cc:286
isc::data::SimpleParser::getBoolean
static bool getBoolean(isc::data::ConstElementPtr scope, const std::string &name)
Returns a boolean parameter from a scope.
Definition lib/cc/simple_parser.cc:108
isc::dhcp::BaseNetworkParser::parseCacheParams
void parseCacheParams(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters related to lease cache settings.
Definition base_network_parser.cc:123
isc::dhcp::BaseNetworkParser::parseAllocatorParams
void parseAllocatorParams(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters pertaining to allocator selection.
Definition base_network_parser.cc:146
isc::dhcp::BaseNetworkParser::getClientClassesElem
static void getClientClassesElem(data::ConstElementPtr params, ClassAdderFunc adder_func)
Fetches the element for either 'client-classes' or deprecated 'client-class'.
Definition base_network_parser.cc:239
isc::dhcp::BaseNetworkParser::parseDdnsParams
void parseDdnsParams(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters pertaining to DDNS behavior.
Definition base_network_parser.cc:140
isc::dhcp::BaseNetworkParser::parseCommon
void parseCommon(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses common parameters.
Definition base_network_parser.cc:21
isc::dhcp::BaseNetworkParser::parseAdaptiveLeaseTimeParam
void parseAdaptiveLeaseTimeParam(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameter related to adaptive lease time.
Definition base_network_parser.cc:176
isc::dhcp::BaseNetworkParser::getAdditionalClassesElem
static void getAdditionalClassesElem(data::ConstElementPtr params, ClassAdderFunc adder_func)
Fetches the element for either 'evaluate-additional-classes' or deprecated 'require-client-classes'.
Definition base_network_parser.cc:209
isc::dhcp::BaseNetworkParser::parseTeePercents
void parseTeePercents(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters related to "percent" timers settings.
Definition base_network_parser.cc:80
isc::dhcp::BaseNetworkParser::parsePdAllocatorParams
void parsePdAllocatorParams(const data::ConstElementPtr &network_data, Network6Ptr &network)
Parses parameters pertaining to prefix delegation allocator selection.
Definition base_network_parser.cc:161
isc::dhcp::BaseNetworkParser::parseOfferLft
void parseOfferLft(const data::ConstElementPtr &network_data, Network4Ptr &network)
Parses offer-lifetime parameter (v4 only).
Definition base_network_parser.cc:194
isc::dhcp::CfgMgr::instance
static CfgMgr & instance()
returns a single instance of Configuration Manager
Definition cfgmgr.cc:29
isc::dhcp::DhcpConfigError
To be removed. Please use ConfigError instead.
Definition dhcp_config_error.h:58
isc::dhcp::IfaceMgr::instance
static IfaceMgr & instance()
IfaceMgr is a singleton class.
Definition iface_mgr.cc:52
isc::dhcp::Network::RelayInfo
Holds optional information about relay.
Definition network.h:162
isc::dhcp::Network::RelayInfoPtr
boost::shared_ptr< Network::RelayInfo > RelayInfoPtr
Pointer to the RelayInfo structure.
Definition network.h:210
isc::dhcp::Network::allowClientClass
void allowClientClass(const isc::dhcp::ClientClass &class_name)
Adds class clas_name to the allowed client classes list.
Definition network.cc:79
isc::dhcp::Network::addAdditionalClass
void addAdditionalClass(const isc::dhcp::ClientClass &class_name)
Adds class class_name to the additional classes list.
Definition network.cc:86
isc::dhcp::Option
Definition option.h:81
isc::dhcp::Option::V6
@ V6
Definition option.h:90
isc::dhcp::Option::V4
@ V4
Definition option.h:90
isc::dhcp::Pkt4::MAX_SNAME_LEN
static const size_t MAX_SNAME_LEN
length of the SNAME field in DHCPv4 message
Definition pkt4.h:44
isc::dhcp::Pkt4::MAX_FILE_LEN
static const size_t MAX_FILE_LEN
length of the FILE field in DHCPv4 message
Definition pkt4.h:47
isc::dhcp::RelayInfoParser
parser for additional relay information
Definition dhcp_parsers.h:449
isc::dhcp::RelayInfoParser::parse
void parse(const isc::dhcp::Network::RelayInfoPtr &relay_info, isc::data::ConstElementPtr relay_elem)
parses the actual relay parameters
Definition dhcp_parsers.cc:314
isc::dhcp::SharedNetwork4Parser::createSubnetsListParser
virtual boost::shared_ptr< Subnets4ListConfigParser > createSubnetsListParser() const
Returns an instance of the Subnets4ListConfigParser to be used for parsing the subnets within the sha...
Definition shared_network_parser.cc:221
isc::dhcp::SharedNetwork4Parser::SharedNetwork4Parser
SharedNetwork4Parser(bool check_iface=true)
Constructor.
Definition shared_network_parser.cc:30
isc::dhcp::SharedNetwork4Parser::createOptionDataListParser
virtual boost::shared_ptr< OptionDataListParser > createOptionDataListParser() const
Returns an instance of the OptionDataListParser to be used in parsing the option-data structure.
Definition shared_network_parser.cc:215
isc::dhcp::SharedNetwork4Parser::check_iface_
bool check_iface_
Check if the specified interface exists in the system.
Definition shared_network_parser.h:70
isc::dhcp::SharedNetwork4Parser::parse
SharedNetwork4Ptr parse(const data::ConstElementPtr &shared_network_data, bool encapsulate_options=true)
Parses shared configuration information for IPv4 shared network.
Definition shared_network_parser.cc:35
isc::dhcp::SharedNetwork4
Shared network holding IPv4 subnets.
Definition shared_network.h:52
isc::dhcp::SharedNetwork6Parser::SharedNetwork6Parser
SharedNetwork6Parser(bool check_iface=true)
Constructor.
Definition shared_network_parser.cc:226
isc::dhcp::SharedNetwork6Parser::createSubnetsListParser
virtual boost::shared_ptr< Subnets6ListConfigParser > createSubnetsListParser() const
Returns an instance of the Subnets6ListConfigParser to be used for parsing the subnets within the sha...
Definition shared_network_parser.cc:399
isc::dhcp::SharedNetwork6Parser::check_iface_
bool check_iface_
Check if the specified interface exists in the system.
Definition shared_network_parser.h:120
isc::dhcp::SharedNetwork6Parser::createOptionDataListParser
virtual boost::shared_ptr< OptionDataListParser > createOptionDataListParser() const
Returns an instance of the OptionDataListParser to be used in parsing the option-data structure.
Definition shared_network_parser.cc:393
isc::dhcp::SharedNetwork6Parser::parse
SharedNetwork6Ptr parse(const data::ConstElementPtr &shared_network_data, bool encapsulate_options=true)
Parses shared configuration information for IPv6 shared network.
Definition shared_network_parser.cc:231
isc::dhcp::SharedNetwork6
Shared network holding IPv6 subnets.
Definition shared_network.h:273
isc::dhcp::SimpleParser4::SHARED_NETWORK4_PARAMETERS
static const isc::data::SimpleKeywords SHARED_NETWORK4_PARAMETERS
This table defines all shared network parameters for DHCPv4.
Definition simple_parser4.h:60
isc::dhcp::SimpleParser6::SHARED_NETWORK6_PARAMETERS
static const isc::data::SimpleKeywords SHARED_NETWORK6_PARAMETERS
This table defines all shared network parameters for DHCPv6.
Definition simple_parser6.h:61
isc::util::Optional
A template representing an optional value.
Definition optional.h:37
isc::util::Optional::get
T get() const
Retrieves the encapsulated value.
Definition optional.h:123
isc::util::Optional::empty
bool empty() const
Checks if the encapsulated value is empty.
Definition optional.h:162
isc::util::Optional::unspecified
void unspecified(bool unspecified)
Modifies the flag that indicates whether the value is specified or unspecified.
Definition optional.h:145
data.h
D6O_INTERFACE_ID
@ D6O_INTERFACE_ID
Definition dhcp6.h:38
isc_throw
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
Definition exceptions/exceptions.h:210
io_address.h
isc::asiolink
Definition addr_utilities.cc:170
isc::data
Definition base_stamped_element.cc:12
isc::data::ConstElementPtr
boost::shared_ptr< const Element > ConstElementPtr
Definition data.h:30
isc::data::ElementPtr
boost::shared_ptr< Element > ElementPtr
Definition data.h:29
isc::db::error
@ error
Definition db_log.h:124
isc::dhcp
Definition dhcp4/client_handler.cc:20
isc::dhcp::ConstCfgGlobalsPtr
boost::shared_ptr< const CfgGlobals > ConstCfgGlobalsPtr
Const shared pointer to a CfgGlobals instance.
Definition cfg_globals.h:176
isc::dhcp::Network4Ptr
boost::shared_ptr< Network4 > Network4Ptr
Pointer to the Network4 object.
Definition network.h:1503
isc::dhcp::CfgOptionPtr
boost::shared_ptr< CfgOption > CfgOptionPtr
Non-const pointer.
Definition cfg_option.h:973
isc::dhcp::Subnet6Collection
boost::multi_index_container< Subnet6Ptr, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetSubnetIdIndexTag >, boost::multi_index::const_mem_fun< Subnet, SubnetID, &Subnet::getID > >, boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetPrefixIndexTag >, boost::multi_index::const_mem_fun< Subnet, std::string, &Subnet::toText > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetModificationTimeIndexTag >, boost::multi_index::const_mem_fun< data::BaseStampedElement, boost::posix_time::ptime, &data::BaseStampedElement::getModificationTime > > > > Subnet6Collection
A collection of Subnet6 objects.
Definition subnet.h:934
isc::dhcp::SharedNetwork6Ptr
boost::shared_ptr< SharedNetwork6 > SharedNetwork6Ptr
Pointer to SharedNetwork6 object.
Definition shared_network.h:267
isc::dhcp::Subnet4Collection
boost::multi_index_container< Subnet4Ptr, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetSubnetIdIndexTag >, boost::multi_index::const_mem_fun< Subnet, SubnetID, &Subnet::getID > >, boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetPrefixIndexTag >, boost::multi_index::const_mem_fun< Subnet, std::string, &Subnet::toText > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetServerIdIndexTag >, boost::multi_index::const_mem_fun< Network4, asiolink::IOAddress, &Network4::getServerId > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetModificationTimeIndexTag >, boost::multi_index::const_mem_fun< data::BaseStampedElement, boost::posix_time::ptime, &data::BaseStampedElement::getModificationTime > > > > Subnet4Collection
A collection of Subnet4 objects.
Definition subnet.h:863
isc::dhcp::NetworkPtr
boost::shared_ptr< Network > NetworkPtr
Pointer to the Network object.
Definition network.h:73
isc::dhcp::OptionBuffer
std::vector< uint8_t > OptionBuffer
buffer types used in DHCP code.
Definition option.h:24
isc::dhcp::SharedNetwork4Ptr
boost::shared_ptr< SharedNetwork4 > SharedNetwork4Ptr
Pointer to SharedNetwork4 object.
Definition shared_network.h:46
isc::dhcp::OptionPtr
boost::shared_ptr< Option > OptionPtr
Definition option.h:37
isc::util
Definition time_utils.cc:43
isc
Defines the logger used by the top-level component of kea-lfc.
Definition check_exists_add.cc:18
option_data_parser.h
shared_network.h
shared_network_parser.h
simple_parser4.h
simple_parser6.h