Kea  2.5.3
cfg_subnets6.h
Go to the documentation of this file.
1 // Copyright (C) 2014-2023 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 CFG_SUBNETS6_H
8 #define CFG_SUBNETS6_H
9 
10 #include <asiolink/io_address.h>
11 #include <dhcp/option.h>
12 #include <dhcp/pkt6.h>
13 #include <cc/cfg_to_element.h>
15 #include <dhcpsrv/subnet.h>
16 #include <dhcpsrv/subnet_id.h>
18 #include <util/optional.h>
19 #include <boost/shared_ptr.hpp>
20 #include <string>
21 
22 namespace isc {
23 namespace dhcp {
24 
35 public:
36 
43  void add(const Subnet6Ptr& subnet);
44 
53  Subnet6Ptr replace(const Subnet6Ptr& subnet);
54 
60  void del(const ConstSubnet6Ptr& subnet);
61 
67  void del(const SubnetID& subnet_id);
68 
110  void merge(CfgOptionDefPtr cfg_def, CfgSharedNetworks6Ptr networks,
111  CfgSubnets6& other);
112 
120  const Subnet6Collection* getAll() const {
121  return (&subnets_);
122  }
123 
139  ConstSubnet6Ptr getBySubnetId(const SubnetID& subnet_id) const;
140 
156  ConstSubnet6Ptr getByPrefix(const std::string& subnet_prefix) const;
157 
164  static SubnetSelector initSelector(const Pkt6Ptr& query);
165 
202  Subnet6Ptr selectSubnet(const SubnetSelector& selector) const;
203 
211  Subnet6Ptr getSubnet(const SubnetID id) const;
212 
246  Subnet6Ptr
247  selectSubnet(const asiolink::IOAddress& address,
248  const ClientClasses& client_classes = ClientClasses(),
249  const bool is_relay_address = false) const;
250 
260  SubnetIDSet getLinks(const asiolink::IOAddress& link_addr,
261  uint8_t& link_len) const;
262 
270  void updateStatistics();
271 
278  void removeStatistics();
279 
282 
284  void clear();
285 
289  virtual isc::data::ElementPtr toElement() const;
290 
291 private:
292 
312  Subnet6Ptr
313  selectSubnet(const std::string& iface_name,
314  const ClientClasses& client_classes) const;
315 
337  Subnet6Ptr
338  selectSubnet(const OptionPtr& interface_id,
339  const ClientClasses& client_classes) const;
340 
342  Subnet6Collection subnets_;
343 
344 };
345 
347 
348 typedef boost::shared_ptr<CfgSubnets6> CfgSubnets6Ptr;
350 
352 typedef boost::shared_ptr<const CfgSubnets6> ConstCfgSubnets6Ptr;
353 
355 
356 }
357 }
358 
359 #endif // CFG_SUBNETS6_H
Holds subnets configured for the DHCPv6 server.
Definition: cfg_subnets6.h:34
SubnetIDSet getLinks(const asiolink::IOAddress &link_addr, uint8_t &link_len) const
Convert a link address into a link set.
void updateStatistics()
Updates statistics.
Subnet6Ptr replace(const Subnet6Ptr &subnet)
Replaces subnet in the configuration.
Definition: cfg_subnets6.cc:47
virtual isc::data::ElementPtr toElement() const
Unparse a configuration object.
const Subnet6Collection * getAll() const
Returns pointer to the collection of all IPv6 subnets.
Definition: cfg_subnets6.h:120
void merge(CfgOptionDefPtr cfg_def, CfgSharedNetworks6Ptr networks, CfgSubnets6 &other)
Merges specified subnet configuration into this configuration.
Definition: cfg_subnets6.cc:90
Subnet6Ptr selectSubnet(const SubnetSelector &selector) const
Selects a subnet using parameters specified in the selector.
Subnet6Ptr getSubnet(const SubnetID id) const
Returns subnet with specified subnet-id value.
void removeStatistics()
Removes statistics.
void add(const Subnet6Ptr &subnet)
Adds new subnet to the configuration.
Definition: cfg_subnets6.cc:29
void clear()
Clears all subnets from the configuration.
static SubnetSelector initSelector(const Pkt6Ptr &query)
Build selector from a client's message.
void del(const ConstSubnet6Ptr &subnet)
Removes subnet from the configuration.
Definition: cfg_subnets6.cc:68
ConstSubnet6Ptr getByPrefix(const std::string &subnet_prefix) const
Returns const pointer to a subnet which matches the specified prefix in the canonical form.
void initAllocatorsAfterConfigure()
Calls initAllocatorsAfterConfigure for each subnet.
ConstSubnet6Ptr getBySubnetId(const SubnetID &subnet_id) const
Returns const pointer to a subnet identified by the specified subnet identifier.
Container for storing client class names.
Definition: classify.h:108
boost::shared_ptr< Element > ElementPtr
Definition: data.h:26
std::set< dhcp::SubnetID > SubnetIDSet
Ordered list aka set of subnetIDs.
Definition: subnet_id.h:43
boost::shared_ptr< const Subnet6 > ConstSubnet6Ptr
A const pointer to a Subnet6 object.
Definition: subnet.h:657
boost::shared_ptr< CfgOptionDef > CfgOptionDefPtr
Non-const pointer.
boost::shared_ptr< Subnet6 > Subnet6Ptr
A pointer to a Subnet6 object.
Definition: subnet.h:663
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:974
boost::shared_ptr< CfgSubnets6 > CfgSubnets6Ptr
Non-const pointer.
Definition: cfg_subnets6.h:349
boost::shared_ptr< CfgSharedNetworks6 > CfgSharedNetworks6Ptr
Pointer to the configuration of IPv6 shared networks.
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
Definition: subnet_id.h:25
boost::shared_ptr< const CfgSubnets6 > ConstCfgSubnets6Ptr
Const pointer.
Definition: cfg_subnets6.h:352
boost::shared_ptr< Pkt6 > Pkt6Ptr
A pointer to Pkt6 packet.
Definition: pkt6.h:28
boost::shared_ptr< Option > OptionPtr
Definition: option.h:36
Defines the logger used by the top-level component of kea-lfc.
Abstract class for configuration Cfg_* classes.
Subnet selector used to specify parameters used to select a subnet.