Kea 1.5.0
dhcp_parsers.h
Go to the documentation of this file.
1// Copyright (C) 2013-2018 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 DHCP_PARSERS_H
8#define DHCP_PARSERS_H
9
10#include <asiolink/io_address.h>
11#include <cc/data.h>
15#include <dhcpsrv/cfg_iface.h>
16#include <dhcpsrv/cfg_option.h>
17#include <dhcpsrv/network.h>
18#include <dhcpsrv/subnet.h>
21#include <dhcpsrv/srv_config.h>
22#include <cc/simple_parser.h>
24#include <util/optional_value.h>
25
26#include <boost/shared_ptr.hpp>
27
28#include <stdint.h>
29#include <string>
30#include <vector>
31
32namespace isc {
33namespace dhcp {
34
37typedef OptionSpaceContainer<OptionContainer, OptionDescriptor,
38 std::string> OptionStorage;
40typedef boost::shared_ptr<OptionStorage> OptionStoragePtr;
41
53template<typename ValueType>
55public:
67 void setParam(const std::string& name, const ValueType& value,
68 const data::Element::Position& position) {
69 values_[name] = value;
70 positions_[name] = position;
71 }
72
81 ValueType getParam(const std::string& name) const {
82 typename std::map<std::string, ValueType>::const_iterator param
83 = values_.find(name);
84
85 if (param == values_.end()) {
86 isc_throw(DhcpConfigError, "Missing parameter '"
87 << name << "'");
88 }
89
90 return (param->second);
91 }
92
107 getPosition(const std::string& name, const data::ConstElementPtr parent =
108 data::ConstElementPtr()) const {
109 typename std::map<std::string, data::Element::Position>::const_iterator
110 pos = positions_.find(name);
111 if (pos == positions_.end()) {
112 return (parent ? parent->getPosition() :
114 }
115
116 return (pos->second);
117 }
118
129 ValueType getOptionalParam(const std::string& name,
130 const ValueType& default_value) const {
131 typename std::map<std::string, ValueType>::const_iterator param
132 = values_.find(name);
133
134 if (param == values_.end()) {
135 return (default_value);
136 }
137
138 return (param->second);
139 }
140
147 void delParam(const std::string& name) {
148 values_.erase(name);
149 positions_.erase(name);
150 }
151
154 void clear() {
155 values_.clear();
156 positions_.clear();
157 }
158
159private:
161 std::map<std::string, ValueType> values_;
162
168 std::map<std::string, data::Element::Position> positions_;
169
170};
171
173typedef std::pair<std::string, isc::data::ConstElementPtr> ConfigPair;
174
177typedef boost::shared_ptr<Uint32Storage> Uint32StoragePtr;
178
181typedef boost::shared_ptr<StringStorage> StringStoragePtr;
182
185typedef boost::shared_ptr<BooleanStorage> BooleanStoragePtr;
186
194public:
202 void parse(CfgMACSource& mac_sources, isc::data::ConstElementPtr value);
203};
204
210public:
220 void parse(SrvConfig& srv_cfg, isc::data::ConstElementPtr value);
221};
222
223typedef std::pair<isc::dhcp::OptionDefinitionPtr, std::string> OptionDefinitionTuple;
224
229public:
238};
239
247public:
257};
258
263typedef std::vector<PoolPtr> PoolStorage;
264typedef boost::shared_ptr<PoolStorage> PoolStoragePtr;
265
274public:
275
277 virtual ~PoolParser() {
278 }
279
289 virtual void parse(PoolStoragePtr pools,
290 isc::data::ConstElementPtr pool_structure,
291 const uint16_t address_family);
292
293protected:
300 virtual PoolPtr poolMaker(isc::asiolink::IOAddress &addr, uint32_t len,
301 int32_t ptype = 0) = 0;
302
311 int32_t ptype = 0) = 0;
312};
313
322class Pool4Parser : public PoolParser {
323protected:
331 PoolPtr poolMaker (asiolink::IOAddress &addr, uint32_t len,
332 int32_t ignored);
333
342 int32_t ignored);
343};
344
351public:
352
355 }
356
364 virtual void parse(PoolStoragePtr pools,
365 isc::data::ConstElementPtr pools_list) = 0;
366};
367
370public:
371
379 void parse(PoolStoragePtr pools, data::ConstElementPtr pools_list);
380};
381
390public:
391
394 explicit RelayInfoParser(const isc::dhcp::Option::Universe& family);
395
410 void parse(const isc::dhcp::Network::RelayInfoPtr& relay_info,
411 isc::data::ConstElementPtr relay_elem);
412
423 void addAddress(const std::string& name, const std::string& address_str,
425 const isc::dhcp::Network::RelayInfoPtr& relay_info);
426private:
427
429 Option::Universe family_;
430};
431
452
454public:
455
459 explicit SubnetConfigParser(uint16_t family);
460
463
464protected:
475
483 isc::asiolink::IOAddress addr, uint8_t len) = 0;
484
495 static Network::HRMode hrModeFromText(const std::string& txt);
496
497private:
498
504 void createSubnet(isc::data::ConstElementPtr data);
505
506protected:
507
510
513
516
519
522};
523
531public:
536
543
544protected:
545
553 asiolink::IOAddress addr, uint8_t len);
554};
555
562public:
563
573 size_t parse(SrvConfigPtr cfg, data::ConstElementPtr subnets_list);
574
580 size_t parse(Subnet4Collection& subnets,
581 data::ConstElementPtr subnets_list);
582};
583
592class Pool6Parser : public PoolParser {
593protected:
602 PoolPtr poolMaker (asiolink::IOAddress &addr, uint32_t len, int32_t ptype);
603
613 int32_t ptype);
614};
615
618public:
619
627 void parse(PoolStoragePtr pools, data::ConstElementPtr pools_list);
628};
629
648public:
649
652 PdPoolParser();
653
664 void parse(PoolStoragePtr pools, data::ConstElementPtr pd_pool_);
665
666private:
667
670
672 CfgOptionPtr options_;
673
677 isc::data::ConstElementPtr user_context_;
678
682 isc::data::ConstElementPtr client_class_;
683};
684
691public:
692
703 void parse(PoolStoragePtr pools, data::ConstElementPtr pd_pool_list);
704};
705
713public:
714
719
726
727protected:
735 virtual void duplicate_option_warning(uint32_t code,
736 asiolink::IOAddress& addr);
737
745 isc::asiolink::IOAddress addr, uint8_t len);
746};
747
748
755public:
756
766 size_t parse(SrvConfigPtr cfg, data::ConstElementPtr subnets_list);
767
773 size_t parse(Subnet6Collection& subnets,
774 data::ConstElementPtr subnets_list);
775
776};
777
784public:
785
808
811
818 // to ElementPtr)
820 static size_t setAllDefaults(isc::data::ConstElementPtr d2_config);
821
822private:
823
832 getProtocol(isc::data::ConstElementPtr scope, const std::string& name);
833
842 getFormat(isc::data::ConstElementPtr scope, const std::string& name);
843
852 getMode(isc::data::ConstElementPtr scope, const std::string& name);
853};
854
855}; // end of isc::dhcp namespace
856}; // end of isc namespace
857
858#endif // DHCP_PARSERS_H
static const Position & ZERO_POSITION()
Returns Position object with line_ and pos_ set to 0, and with an empty file name.
Definition: data.h:120
Wrapper class that holds MAC/hardware address sources.
Parser for the control-socket structure.
Definition: dhcp_parsers.h:209
void parse(SrvConfig &srv_cfg, isc::data::ConstElementPtr value)
"Parses" control-socket structure
Definition: dhcp_parsers.cc:69
Parser for D2ClientConfig.
Definition: dhcp_parsers.h:783
D2ClientConfigPtr parse(isc::data::ConstElementPtr d2_client_cfg)
Parses a given dhcp-ddns element into D2ClientConfig.
static const isc::data::SimpleDefaults D2_CLIENT_CONFIG_DEFAULTS
Defaults for the D2 client configuration.
Definition: dhcp_parsers.h:810
static size_t setAllDefaults(isc::data::ConstElementPtr d2_config)
Sets all defaults for D2 client configuration.
ReplaceClientNameMode
Defines the client name replacement modes.
Definition: d2_client_cfg.h:72
To be removed. Please use ConfigError instead.
parser for MAC/hardware acquisition sources
Definition: dhcp_parsers.h:193
void parse(CfgMACSource &mac_sources, isc::data::ConstElementPtr value)
parses parameters value
Definition: dhcp_parsers.cc:38
HRMode
Specifies allowed host reservation mode.
Definition: network.h:91
boost::shared_ptr< Network::RelayInfo > RelayInfoPtr
Pointer to the RelayInfo structure.
Definition: network.h:116
Parser for a list of option definitions.
Definition: dhcp_parsers.h:246
void parse(CfgOptionDefPtr cfg, isc::data::ConstElementPtr def_list)
Parses a list of option definitions, create them and store in cfg.
Parser for a single option definition.
Definition: dhcp_parsers.h:228
OptionDefinitionTuple parse(isc::data::ConstElementPtr option_def)
Parses an entry that describes single option definition.
Universe
defines option universe DHCPv4 or DHCPv6
Definition: option.h:67
Parser for IPv6 prefix delegation definitions.
Definition: dhcp_parsers.h:647
PdPoolParser()
Constructor.
void parse(PoolStoragePtr pools, data::ConstElementPtr pd_pool_)
Builds a prefix delegation pool from the given configuration.
Parser for a list of prefix delegation pools.
Definition: dhcp_parsers.h:690
void parse(PoolStoragePtr pools, data::ConstElementPtr pd_pool_list)
Parse configuration entries.
Parser for IPv4 pool definitions.
Definition: dhcp_parsers.h:322
PoolPtr poolMaker(asiolink::IOAddress &addr, uint32_t len, int32_t ignored)
Creates a Pool4 object given a IPv4 prefix and the prefix length.
Parser for IPv6 pool definitions.
Definition: dhcp_parsers.h:592
PoolPtr poolMaker(asiolink::IOAddress &addr, uint32_t len, int32_t ptype)
Creates a Pool6 object given a IPv6 prefix and the prefix length.
parser for a single pool definition
Definition: dhcp_parsers.h:273
virtual void parse(PoolStoragePtr pools, isc::data::ConstElementPtr pool_structure, const uint16_t address_family)
parses the actual structure
virtual PoolPtr poolMaker(isc::asiolink::IOAddress &min, isc::asiolink::IOAddress &max, int32_t ptype=0)=0
Creates a Pool object given starting and ending IP addresses.
virtual PoolPtr poolMaker(isc::asiolink::IOAddress &addr, uint32_t len, int32_t ptype=0)=0
Creates a Pool object given a IPv4 prefix and the prefix length.
virtual ~PoolParser()
destructor.
Definition: dhcp_parsers.h:277
Specialization of the pool list parser for DHCPv4.
Definition: dhcp_parsers.h:369
void parse(PoolStoragePtr pools, data::ConstElementPtr pools_list)
parses the actual structure
Specialization of the pool list parser for DHCPv6.
Definition: dhcp_parsers.h:617
void parse(PoolStoragePtr pools, data::ConstElementPtr pools_list)
parses the actual structure
Parser for a list of pools.
Definition: dhcp_parsers.h:350
virtual void parse(PoolStoragePtr pools, isc::data::ConstElementPtr pools_list)=0
parses the actual structure
virtual ~PoolsListParser()
destructor.
Definition: dhcp_parsers.h:354
parser for additional relay information
Definition: dhcp_parsers.h:389
void addAddress(const std::string &name, const std::string &address_str, isc::data::ConstElementPtr relay_elem, const isc::dhcp::Network::RelayInfoPtr &relay_info)
Attempts to add an IP address to list of relay addresses.
void parse(const isc::dhcp::Network::RelayInfoPtr &relay_info, isc::data::ConstElementPtr relay_elem)
parses the actual relay parameters
Specifies current DHCP configuration.
Definition: srv_config.h:44
void initSubnet(data::ConstElementPtr params, asiolink::IOAddress addr, uint8_t len)
Instantiates the IPv4 Subnet based on a given IPv4 address and prefix length.
Subnet4Ptr parse(data::ConstElementPtr subnet)
Parses a single IPv4 subnet configuration and adds to the Configuration Manager.
virtual void duplicate_option_warning(uint32_t code, asiolink::IOAddress &addr)
Issues a DHCP6 server specific warning regarding duplicate subnet options.
Subnet6Ptr parse(data::ConstElementPtr subnet)
Parses a single IPv6 subnet configuration and adds to the Configuration Manager.
void initSubnet(isc::data::ConstElementPtr params, isc::asiolink::IOAddress addr, uint8_t len)
Instantiates the IPv6 Subnet based on a given IPv6 address and prefix length.
this class parses a single subnet
Definition: dhcp_parsers.h:453
isc::dhcp::SubnetPtr subnet_
Pointer to the created subnet object.
Definition: dhcp_parsers.h:512
CfgOptionPtr options_
Pointer to the options configuration.
Definition: dhcp_parsers.h:521
virtual void initSubnet(isc::data::ConstElementPtr params, isc::asiolink::IOAddress addr, uint8_t len)=0
Instantiates the subnet based on a given IP prefix and prefix length.
SubnetPtr parse(isc::data::ConstElementPtr subnet)
parses a subnet description and returns Subnet{4,6} structure
isc::dhcp::Network::RelayInfoPtr relay_info_
Pointer to relay information.
Definition: dhcp_parsers.h:518
virtual ~SubnetConfigParser()
virtual destructor (does nothing)
Definition: dhcp_parsers.h:462
uint16_t address_family_
Address family: AF_INET or AF_INET6.
Definition: dhcp_parsers.h:515
PoolStoragePtr pools_
Storage for pools belonging to this subnet.
Definition: dhcp_parsers.h:509
static Network::HRMode hrModeFromText(const std::string &txt)
Attempts to convert text representation to HRMode enum.
this class parses list of DHCP4 subnets
Definition: dhcp_parsers.h:561
size_t parse(SrvConfigPtr cfg, data::ConstElementPtr subnets_list)
parses contents of the list
this class parses a list of DHCP6 subnets
Definition: dhcp_parsers.h:754
size_t parse(SrvConfigPtr cfg, data::ConstElementPtr subnets_list)
parses contents of the list
A template class that stores named elements of a given data type.
Definition: dhcp_parsers.h:54
const data::Element::Position & getPosition(const std::string &name, const data::ConstElementPtr parent=data::ConstElementPtr()) const
Returns position of the data element in the configuration string.
Definition: dhcp_parsers.h:107
ValueType getParam(const std::string &name) const
Returns the data value for the given parameter.
Definition: dhcp_parsers.h:81
void setParam(const std::string &name, const ValueType &value, const data::Element::Position &position)
Stores the the parameter, its value and the position in the store.
Definition: dhcp_parsers.h:67
ValueType getOptionalParam(const std::string &name, const ValueType &default_value) const
Returns the data value for an optional parameter.
Definition: dhcp_parsers.h:129
void delParam(const std::string &name)
Remove the parameter from the store.
Definition: dhcp_parsers.h:147
void clear()
Deletes all of the entries from the store.
Definition: dhcp_parsers.h:154
Defines the D2ClientConfig class.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
boost::shared_ptr< const Element > ConstElementPtr
Definition: data.h:23
std::vector< SimpleDefault > SimpleDefaults
This specifies all default values in a given scope (e.g. a subnet)
NameChangeFormat
Defines the list of data wire formats supported.
Definition: ncr_msg.h:60
NameChangeProtocol
Defines the list of socket protocols supported.
Definition: ncr_io.h:66
std::pair< std::string, isc::data::ConstElementPtr > ConfigPair
Combination of parameter name and configuration contents.
Definition: dhcp_parsers.h:173
boost::multi_index_container< Subnet6Ptr, boost::multi_index::indexed_by< boost::multi_index::random_access< boost::multi_index::tag< SubnetRandomAccessIndexTag > >, 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 > > > > Subnet6Collection
A collection of Subnet6 objects.
Definition: subnet.h:843
boost::shared_ptr< Subnet > SubnetPtr
A generic pointer to either Subnet4 or Subnet6 object.
Definition: subnet.h:455
boost::shared_ptr< Subnet4 > Subnet4Ptr
A pointer to a Subnet4 object.
Definition: subnet.h:464
std::vector< PoolPtr > PoolStorage
a collection of pools
Definition: dhcp_parsers.h:263
boost::shared_ptr< StringStorage > StringStoragePtr
Definition: dhcp_parsers.h:181
boost::shared_ptr< D2ClientConfig > D2ClientConfigPtr
Defines a pointer for D2ClientConfig instances.
boost::shared_ptr< CfgOption > CfgOptionPtr
Non-const pointer.
Definition: cfg_option.h:497
boost::shared_ptr< CfgOptionDef > CfgOptionDefPtr
Non-const pointer.
boost::shared_ptr< Subnet6 > Subnet6Ptr
A pointer to a Subnet6 object.
Definition: subnet.h:629
boost::shared_ptr< BooleanStorage > BooleanStoragePtr
Definition: dhcp_parsers.h:185
boost::shared_ptr< SrvConfig > SrvConfigPtr
Non-const pointer to the SrvConfig.
Definition: srv_config.h:707
boost::shared_ptr< Uint32Storage > Uint32StoragePtr
Definition: dhcp_parsers.h:177
ValueStorage< uint32_t > Uint32Storage
a collection of elements that store uint32 values
Definition: dhcp_parsers.h:176
boost::shared_ptr< PoolStorage > PoolStoragePtr
Definition: dhcp_parsers.h:264
boost::multi_index_container< OptionDescriptor, boost::multi_index::indexed_by< boost::multi_index::sequenced<>, boost::multi_index::hashed_non_unique< KeyFromKeyExtractor< boost::multi_index::const_mem_fun< Option, uint16_t, &Option::getType >, boost::multi_index::member< OptionDescriptor, OptionPtr, &OptionDescriptor::option_ > > >, boost::multi_index::hashed_non_unique< boost::multi_index::member< OptionDescriptor, bool, &OptionDescriptor::persistent_ > > > > OptionContainer
Multi index container for DHCP option descriptors.
Definition: cfg_option.h:203
boost::shared_ptr< Pool > PoolPtr
a pointer to either IPv4 or IPv6 Pool
Definition: pool.h:405
std::pair< isc::dhcp::OptionDefinitionPtr, std::string > OptionDefinitionTuple
Definition: dhcp_parsers.h:223
boost::multi_index_container< Subnet4Ptr, boost::multi_index::indexed_by< boost::multi_index::random_access< boost::multi_index::tag< SubnetRandomAccessIndexTag > >, 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 > > > > Subnet4Collection
A collection of Subnet4 objects.
Definition: subnet.h:798
ValueStorage< bool > BooleanStorage
Storage for parsed boolean values.
Definition: dhcp_parsers.h:184
ValueStorage< std::string > StringStorage
a collection of elements that store string values
Definition: dhcp_parsers.h:180
OptionSpaceContainer< OptionContainer, OptionDescriptor, std::string > OptionStorage
Collection of containers holding option spaces.
Definition: dhcp_parsers.h:38
boost::shared_ptr< OptionStorage > OptionStoragePtr
Shared pointer to option storage.
Definition: dhcp_parsers.h:40
boost::shared_ptr< Pool6 > Pool6Ptr
a pointer an IPv6 Pool
Definition: pool.h:402
Defines the logger used by the top-level component of kea-dhcp-ddns.
Represents the position of the data element within a configuration string.
Definition: data.h:88