20#include <boost/multi_index/mem_fun.hpp>
21#include <boost/multi_index/indexed_by.hpp>
22#include <boost/multi_index/ordered_index.hpp>
23#include <boost/multi_index/random_access_index.hpp>
24#include <boost/multi_index_container.hpp>
25#include <boost/date_time/posix_time/posix_time.hpp>
26#include <boost/pointer_cast.hpp>
27#include <boost/shared_ptr.hpp>
119 std::pair<isc::asiolink::IOAddress, uint8_t>
get()
const {
172 bool anypool =
true)
const;
224 virtual std::string
toText()
const;
251 template<
typename SharedNetworkPtrType>
253 shared_network = boost::dynamic_pointer_cast<
266 void setSharedNetwork(
const NetworkPtr& shared_network) {
395 static std::pair<asiolink::IOAddress, uint8_t>
549 void setSname(
const std::string& sname);
554 const std::string&
getSname()
const;
591 static std::pair<asiolink::IOAddress, uint8_t>
617 std::string filename_;
710 static std::pair<asiolink::IOAddress, uint8_t>
770typedef boost::multi_index_container<
774 boost::multi_index::indexed_by<
777 boost::multi_index::random_access<
778 boost::multi_index::tag<SubnetRandomAccessIndexTag>
781 boost::multi_index::ordered_unique<
782 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
783 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
786 boost::multi_index::ordered_unique<
787 boost::multi_index::tag<SubnetPrefixIndexTag>,
788 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
792 boost::multi_index::ordered_non_unique<
793 boost::multi_index::tag<SubnetServerIdIndexTag>,
822typedef boost::multi_index_container<
826 boost::multi_index::indexed_by<
829 boost::multi_index::random_access<
830 boost::multi_index::tag<SubnetRandomAccessIndexTag>
833 boost::multi_index::ordered_unique<
834 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
835 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
838 boost::multi_index::ordered_unique<
839 boost::multi_index::tag<SubnetPrefixIndexTag>,
840 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
The IOAddress class represents an IP addresses (version agnostic)
Represents a network that can be associated with a subnet.
Container for storing client class names.
Specialization of the Network object for DHCPv4 case.
virtual asiolink::IOAddress getServerId() const
Returns binary representation of the dhcp-server-identifier option (54).
Specialization of the Network object for DHCPv6 case.
A configuration holder for IPv4 subnet.
virtual bool clientSupported(const isc::dhcp::ClientClasses &client_classes) const
Checks whether this subnet and parent shared network supports the client that belongs to specified cl...
Cfg4o6 & get4o6()
Returns DHCP4o6 configuration parameters.
const std::string & getFilename() const
Returns boot file name for this subnet.
void setSiaddr(const isc::asiolink::IOAddress &siaddr)
Sets siaddr for the Subnet4.
Subnet4Ptr getNextSubnet(const Subnet4Ptr &first_subnet) const
Returns next subnet within shared network.
virtual data::ElementPtr toElement() const
Unparse a subnet object.
const std::string & getSname() const
Returns server hostname for this subnet.
void setFilename(const std::string &filename)
Sets boot file name for the Subnet4.
void setSname(const std::string &sname)
Sets server hostname for the Subnet4.
const Cfg4o6 & get4o6() const
Returns const DHCP4o6 configuration parameters.
isc::asiolink::IOAddress getSiaddr() const
Returns siaddr for this subnet.
static std::pair< asiolink::IOAddress, uint8_t > parsePrefix(const std::string &prefix)
Converts subnet prefix to a pair of prefix/length pair.
A configuration holder for IPv6 subnet.
virtual bool clientSupported(const isc::dhcp::ClientClasses &client_classes) const
Checks whether this subnet and parent shared network supports the client that belongs to specified cl...
static std::pair< asiolink::IOAddress, uint8_t > parsePrefix(const std::string &prefix)
Converts subnet prefix to a pair of prefix/length pair.
Subnet6Ptr getNextSubnet(const Subnet6Ptr &first_subnet) const
Returns next subnet within shared network.
virtual data::ElementPtr toElement() const
Unparse a subnet object.
void setSharedNetworkName(const std::string &shared_network_name)
Sets new shared network name.
isc::asiolink::IOAddress prefix_
a prefix of the subnet
SubnetID getID() const
Returns unique ID for that subnet.
uint8_t prefix_len_
a prefix length of the subnet
static void resetSubnetID()
Resets subnet-id counter to its initial value (1)
std::map< Lease::Type, boost::posix_time::ptime > last_allocated_time_
Timestamp indicating when a lease of a specified type has been last allocated from this subnet.
virtual data::ElementPtr toElement() const
Unparse a subnet object.
static SubnetID generateNextID()
returns the next unique Subnet-ID
PoolCollection pools_ta_
collection of IPv6 temporary address pools in that subnet
void getSharedNetwork(SharedNetworkPtrType &shared_network) const
Retrieves pointer to a shared network associated with a subnet.
WeakNetworkPtr shared_network_
Pointer to a shared network that subnet belongs to.
PoolPtr getAnyPool(Lease::Type type)
Returns a pool without any address specified.
void addPool(const PoolPtr &pool)
Adds a new pool for the subnet.
std::string iface_
Name of the network interface (if connected directly)
virtual ~Subnet()
virtual destructor
bool inRange(const isc::asiolink::IOAddress &addr) const
checks if specified address is in range
isc::asiolink::IOAddress last_allocated_pd_
last allocated IPv6 prefix
virtual std::string toText() const
Returns textual representation of the subnet (e.g.
void delPools(Lease::Type type)
Deletes all pools of specified type.
std::pair< isc::asiolink::IOAddress, uint8_t > get() const
Returns subnet parameters (prefix and prefix length)
static std::pair< asiolink::IOAddress, uint8_t > parsePrefixCommon(const std::string &prefix)
Converts subnet prefix to a pair of prefix/length pair.
std::string getSharedNetworkName() const
Returns shared network name.
PoolCollection pools_
collection of IPv4 or non-temporary IPv6 pools in that subnet
PoolCollection & getPoolsWritable(Lease::Type type)
Returns all pools (non-const variant)
isc::asiolink::IOAddress getLastAllocated(Lease::Type type) const
returns the last address that was tried from this subnet
void setLastAllocated(Lease::Type type, const isc::asiolink::IOAddress &addr)
sets the last address that was tried from this subnet
const PoolPtr getPool(Lease::Type type, const isc::asiolink::IOAddress &addr, bool anypool=true) const
Returns a pool that specified address belongs to.
isc::asiolink::IOAddress last_allocated_ia_
last allocated address
boost::posix_time::ptime getLastAllocatedTime(const Lease::Type &lease_type) const
Returns the timestamp when the setLastAllocated function was called.
uint64_t sumPoolCapacity(const PoolCollection &pools) const
Returns a sum of possible leases in all pools.
std::string shared_network_name_
Shared network name.
bool poolOverlaps(const Lease::Type &pool_type, const PoolPtr &pool) const
Checks if the specified pool overlaps with an existing pool.
virtual isc::asiolink::IOAddress default_pool() const =0
Returns the default address that will be used for pool selection.
PoolCollection pools_pd_
collection of IPv6 prefix pools in that subnet
const PoolCollection & getPools(Lease::Type type) const
Returns all pools (const variant)
static SubnetID static_id_
keeps the subnet-id value
virtual void checkType(Lease::Type type) const =0
Checks if used pool type is valid.
uint64_t getPoolCapacity(Lease::Type type) const
Returns the number of possible leases for specified lease type.
bool inPool(Lease::Type type, const isc::asiolink::IOAddress &addr) const
checks if the specified address is in pools
isc::asiolink::IOAddress last_allocated_ta_
last allocated temporary address
This template specifies a parameter value.
boost::shared_ptr< Element > ElementPtr
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.
boost::shared_ptr< Subnet > SubnetPtr
A generic pointer to either Subnet4 or Subnet6 object.
boost::shared_ptr< Subnet4 > Subnet4Ptr
A pointer to a Subnet4 object.
boost::shared_ptr< const Subnet6 > ConstSubnet6Ptr
A const pointer to a Subnet6 object.
boost::shared_ptr< const Subnet4 > ConstSubnet4Ptr
A const pointer to a Subnet4 object.
boost::shared_ptr< Subnet6 > Subnet6Ptr
A pointer to a Subnet6 object.
std::vector< PoolPtr > PoolCollection
a container for either IPv4 or IPv6 Pools
boost::weak_ptr< Network > WeakNetworkPtr
Weak pointer to the Network object.
boost::shared_ptr< Pool > PoolPtr
a pointer to either IPv4 or IPv6 Pool
uint32_t SubnetID
Unique identifier for a subnet (both v4 and v6)
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.
boost::shared_ptr< Network > NetworkPtr
Pointer to the Network object.
Defines the logger used by the top-level component of kea-dhcp-ddns.
Abstract class for configuration Cfg_* classes.
Base class for user context.
This structure contains information about DHCP4o6 (RFC7341)
Type
Type of lease or pool.
Tag for the index for searching by subnet prefix.
Tag for the random access index.
Tag for the index for searching by server identifier.
Tag for the index for searching by subnet identifier.