19 #include <boost/multi_index/mem_fun.hpp>
20 #include <boost/multi_index/indexed_by.hpp>
21 #include <boost/multi_index/ordered_index.hpp>
22 #include <boost/multi_index/random_access_index.hpp>
23 #include <boost/multi_index_container.hpp>
24 #include <boost/date_time/posix_time/posix_time.hpp>
25 #include <boost/pointer_cast.hpp>
26 #include <boost/scoped_ptr.hpp>
27 #include <boost/shared_ptr.hpp>
101 boost::posix_time::ptime
127 std::pair<isc::asiolink::IOAddress, uint8_t>
get()
const {
181 bool anypool =
true)
const;
234 virtual std::string
toText()
const;
261 template<
typename SharedNetworkPtrType>
263 shared_network = boost::dynamic_pointer_cast<
352 if (static_id_ == SUBNET_ID_MAX) {
356 return (static_id_++);
406 static std::pair<asiolink::IOAddress, uint8_t>
488 boost::posix_time::ptime
489 getLastAllocatedTimeInternal(
const Lease::Type& lease_type)
const;
509 boost::scoped_ptr<std::mutex> mutex_;
584 Subnet4Ptr
getNextSubnet(
const Subnet4Ptr& first_subnet)
const;
640 static std::pair<asiolink::IOAddress, uint8_t>
736 Subnet6Ptr
getNextSubnet(
const Subnet6Ptr& first_subnet)
const;
776 static std::pair<asiolink::IOAddress, uint8_t>
836 typedef boost::multi_index_container<
840 boost::multi_index::indexed_by<
842 boost::multi_index::ordered_unique<
843 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
844 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
847 boost::multi_index::ordered_unique<
848 boost::multi_index::tag<SubnetPrefixIndexTag>,
849 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
853 boost::multi_index::ordered_non_unique<
854 boost::multi_index::tag<SubnetServerIdIndexTag>,
860 boost::multi_index::ordered_non_unique<
861 boost::multi_index::tag<SubnetModificationTimeIndexTag>,
863 boost::posix_time::ptime,
891 typedef boost::multi_index_container<
895 boost::multi_index::indexed_by<
897 boost::multi_index::ordered_unique<
898 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
899 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
902 boost::multi_index::ordered_unique<
903 boost::multi_index::tag<SubnetPrefixIndexTag>,
904 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
907 boost::multi_index::ordered_non_unique<
908 boost::multi_index::tag<SubnetModificationTimeIndexTag>,
909 boost::multi_index::const_mem_fun<data::BaseStampedElement,
910 boost::posix_time::ptime,
922 template<
typename ReturnPtrType,
typename CollectionType>
933 static ReturnPtrType
get(
const CollectionType& collection,
935 auto& index = collection.template get<SubnetSubnetIdIndexTag>();
936 auto s = index.find(subnet_id);
937 if (s != index.end()) {
941 return (ReturnPtrType());
WeakNetworkPtr parent_network_
Pointer to another network that this network belongs to.
static Subnet4Ptr create(const isc::asiolink::IOAddress &prefix, uint8_t length, const Triplet< uint32_t > &t1, const Triplet< uint32_t > &t2, const Triplet< uint32_t > &valid_lifetime, const SubnetID id=0)
Factory function creating an instance of the Subnet4.
Subnet6Ptr getNextSubnet(const Subnet6Ptr &first_subnet) const
Returns next subnet within shared network.
boost::shared_ptr< Network > NetworkPtr
Pointer to the Network object.
Tag for the index for searching by subnet identifier.
static Subnet6Ptr create(const isc::asiolink::IOAddress &prefix, uint8_t length, const Triplet< uint32_t > &t1, const Triplet< uint32_t > &t2, const Triplet< uint32_t > &preferred_lifetime, const Triplet< uint32_t > &valid_lifetime, const SubnetID id=0)
Factory function creating an instance of the Subnet4.
Cfg4o6 & get4o6()
Returns DHCP4o6 configuration parameters.
virtual data::ElementPtr toElement() const
Unparse a subnet object.
Subnet6(const isc::asiolink::IOAddress &prefix, uint8_t length, const Triplet< uint32_t > &t1, const Triplet< uint32_t > &t2, const Triplet< uint32_t > &preferred_lifetime, const Triplet< uint32_t > &valid_lifetime, const SubnetID id=0)
Constructor with all parameters.
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...
bool inRange(const isc::asiolink::IOAddress &addr) const
checks if specified address is in range.
virtual data::ElementPtr toElement() const
Unparse a subnet object.
boost::shared_ptr< Subnet4 > Subnet4Ptr
A pointer to a Subnet4 object.
void addPool(const PoolPtr &pool)
Adds a new pool for the subnet.
boost::shared_ptr< Element > ElementPtr
std::vector< PoolPtr > PoolCollection
a container for either IPv4 or IPv6 Pools
isc::asiolink::IOAddress last_allocated_pd_
last allocated IPv6 prefix.
Tag for the index for searching by subnet prefix.
A configuration holder for IPv4 subnet.
boost::shared_ptr< Pool > PoolPtr
a pointer to either IPv4 or IPv6 Pool
uint8_t prefix_len_
a prefix length of the subnet.
static std::pair< asiolink::IOAddress, uint8_t > parsePrefix(const std::string &prefix)
Converts subnet prefix to a pair of prefix/length pair.
A class containing static convenience methods to fetch the subnets from the containers.
Subnet4(const isc::asiolink::IOAddress &prefix, uint8_t length, const Triplet< uint32_t > &t1, const Triplet< uint32_t > &t2, const Triplet< uint32_t > &valid_lifetime, const SubnetID id=0)
Constructor with all parameters.
Specialization of the Network object for DHCPv6 case.
boost::posix_time::ptime getModificationTime() const
Returns timestamp.
Tag for the index for searching by server identifier.
const PoolPtr getPool(Lease::Type type, const isc::asiolink::IOAddress &addr, bool anypool=true) const
Returns a pool that specified address belongs to.
std::string shared_network_name_
Shared network name.
void getSharedNetwork(SharedNetworkPtrType &shared_network) const
Retrieves pointer to a shared network associated with a subnet.
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.
SubnetID getID() const
Returns unique ID for that subnet.
This structure contains information about DHCP4o6 (RFC7341)
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...
virtual std::string toText() const
Returns textual representation of the subnet (e.g.
Common interface representing a network to which the DHCP clients are connected.
boost::shared_ptr< const Subnet6 > ConstSubnet6Ptr
A const pointer to a Subnet6 object.
virtual data::ElementPtr toElement() const
Unparse a subnet object.
static SubnetID static_id_
keeps the subnet-id value.
void setSharedNetworkName(const std::string &shared_network_name)
Sets new shared network name.
isc::asiolink::IOAddress last_allocated_ia_
last allocated address.
static void resetSubnetID()
Resets subnet-id counter to its initial value (1).
static std::pair< asiolink::IOAddress, uint8_t > parsePrefixCommon(const std::string &prefix)
Converts subnet prefix to a pair of prefix/length pair.
bool poolOverlaps(const Lease::Type &pool_type, const PoolPtr &pool) const
Checks if the specified pool overlaps with an existing pool.
isc::asiolink::IOAddress prefix_
a prefix of the subnet.
PoolCollection pools_
collection of IPv4 or non-temporary IPv6 pools in that subnet.
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.
isc::asiolink::IOAddress getLastAllocated(Lease::Type type) const
returns the last address that was tried from this subnet.
Defines the logger used by the top-level component of kea-dhcp-ddns.
const PoolCollection & getPools(Lease::Type type) const
Returns all pools (const variant).
PoolPtr getAnyPool(Lease::Type type)
Returns a pool without any address specified.
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...
boost::shared_ptr< const Subnet4 > ConstSubnet4Ptr
A const pointer to a Subnet4 object.
void setSharedNetwork(const NetworkPtr &shared_network)
Assigns shared network to a subnet.
Subnet4Ptr getNextSubnet(const Subnet4Ptr &first_subnet) const
Returns next subnet within shared network.
void setLastAllocated(Lease::Type type, const isc::asiolink::IOAddress &addr)
sets the last address that was tried from this subnet.
A configuration holder for IPv6 subnet.
PoolCollection & getPoolsWritable(Lease::Type type)
Returns all pools (non-const variant).
uint64_t getPoolCapacity(Lease::Type type) const
Returns the number of possible leases for specified lease type.
Type
Type of lease or pool.
This class represents configuration element which is associated with database identifier and the modi...
static std::pair< asiolink::IOAddress, uint8_t > parsePrefix(const std::string &prefix)
Converts subnet prefix to a pair of prefix/length pair.
virtual void checkType(Lease::Type type) const =0
Checks if used pool type is valid.
Specialization of the Network object for DHCPv4 case.
virtual asiolink::IOAddress getServerId() const
Returns binary representation of the dhcp-server-identifier option (54).
std::string getSharedNetworkName() const
Returns shared network name.
void delPools(Lease::Type type)
Deletes all pools of specified type.
Subnet(const isc::asiolink::IOAddress &prefix, uint8_t len, const SubnetID id)
Protected constructor.
isc::asiolink::IOAddress last_allocated_ta_
last allocated temporary address.
boost::shared_ptr< Subnet6 > Subnet6Ptr
A pointer to a Subnet6 object.
bool inPool(Lease::Type type, const isc::asiolink::IOAddress &addr) const
checks if the specified address is in pools.
PoolCollection pools_ta_
collection of IPv6 temporary address pools in that subnet.
The IOAddress class represents an IP addresses (version agnostic)
const Cfg4o6 & get4o6() const
Returns const DHCP4o6 configuration parameters.
Tag for the index for searching by subnet modification time.
PoolCollection pools_pd_
collection of IPv6 prefix pools in that subnet.
virtual isc::asiolink::IOAddress default_pool() const =0
Returns the default address that will be used for pool selection.
Container for storing client class names.
uint64_t sumPoolCapacity(const PoolCollection &pools) const
Returns a sum of possible leases in all pools.
static SubnetID generateNextID()
returns the next unique Subnet-ID.
boost::shared_ptr< Subnet > SubnetPtr
A generic pointer to either Subnet4 or Subnet6 object.
boost::posix_time::ptime getLastAllocatedTime(const Lease::Type &lease_type) const
Returns the timestamp when the setLastAllocated function was called.
uint32_t SubnetID
Unique identifier for a subnet (both v4 and v6)
virtual ~Subnet()
virtual destructor.