21 #include <boost/multi_index/mem_fun.hpp> 22 #include <boost/multi_index/indexed_by.hpp> 23 #include <boost/multi_index/ordered_index.hpp> 24 #include <boost/multi_index/random_access_index.hpp> 25 #include <boost/multi_index_container.hpp> 26 #include <boost/date_time/posix_time/posix_time.hpp> 27 #include <boost/pointer_cast.hpp> 28 #include <boost/scoped_ptr.hpp> 29 #include <boost/shared_ptr.hpp> 104 boost::posix_time::ptime
130 std::pair<isc::asiolink::IOAddress, uint8_t>
get()
const {
183 bool anypool =
true)
const;
236 virtual std::string
toText()
const;
263 template<
typename SharedNetworkPtrType>
265 shared_network = boost::dynamic_pointer_cast<
354 if (static_id_ == SUBNET_ID_MAX) {
358 return (static_id_++);
408 static std::pair<asiolink::IOAddress, uint8_t>
490 boost::posix_time::ptime
491 getLastAllocatedTimeInternal(
const Lease::Type& lease_type)
const;
511 boost::scoped_ptr<std::mutex> mutex_;
586 Subnet4Ptr getNextSubnet(
const Subnet4Ptr& first_subnet)
const;
600 Subnet4Ptr getNextSubnet(
const Subnet4Ptr& first_subnet,
642 static std::pair<asiolink::IOAddress, uint8_t>
643 parsePrefix(
const std::string& prefix);
738 Subnet6Ptr getNextSubnet(
const Subnet6Ptr& first_subnet)
const;
752 Subnet6Ptr getNextSubnet(
const Subnet6Ptr& first_subnet,
778 static std::pair<asiolink::IOAddress, uint8_t>
779 parsePrefix(
const std::string& prefix);
821 typedef boost::multi_index_container<
825 boost::multi_index::indexed_by<
827 boost::multi_index::ordered_unique<
828 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
829 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
832 boost::multi_index::ordered_unique<
833 boost::multi_index::tag<SubnetPrefixIndexTag>,
834 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
862 typedef boost::multi_index_container<
866 boost::multi_index::indexed_by<
868 boost::multi_index::ordered_unique<
869 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
870 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
873 boost::multi_index::ordered_unique<
874 boost::multi_index::tag<SubnetPrefixIndexTag>,
875 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
879 boost::multi_index::ordered_non_unique<
880 boost::multi_index::tag<SubnetServerIdIndexTag>,
886 boost::multi_index::ordered_non_unique<
887 boost::multi_index::tag<SubnetModificationTimeIndexTag>,
889 boost::posix_time::ptime,
901 typedef boost::multi_index_container<
905 boost::multi_index::indexed_by<
907 boost::multi_index::ordered_unique<
908 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
909 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
912 boost::multi_index::ordered_unique<
913 boost::multi_index::tag<SubnetPrefixIndexTag>,
914 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
941 typedef boost::multi_index_container<
945 boost::multi_index::indexed_by<
947 boost::multi_index::ordered_unique<
948 boost::multi_index::tag<SubnetSubnetIdIndexTag>,
949 boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
952 boost::multi_index::ordered_unique<
953 boost::multi_index::tag<SubnetPrefixIndexTag>,
954 boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
957 boost::multi_index::ordered_non_unique<
958 boost::multi_index::tag<SubnetModificationTimeIndexTag>,
959 boost::multi_index::const_mem_fun<data::BaseStampedElement,
960 boost::posix_time::ptime,
973 template<
typename ReturnPtrType,
typename CollectionType>
984 static ReturnPtrType
get(
const CollectionType& collection,
986 auto& index = collection.template get<SubnetSubnetIdIndexTag>();
987 auto s = index.find(subnet_id);
988 if (s != index.end()) {
992 return (ReturnPtrType());
1007 template <isc::util::DhcpSpace D>
1008 struct adapter_Subnet {};
1022 template <isc::util::DhcpSpace D>
1025 template <isc::util::DhcpSpace D>
WeakNetworkPtr parent_network_
Pointer to another network that this network belongs to.
isc::asiolink::IOAddress getLastAllocated(Lease::Type type) const
returns the last address that was tried from this subnet.
boost::shared_ptr< Network > NetworkPtr
Pointer to the Network object.
Tag for the index for searching by subnet identifier.
Cfg4o6 & get4o6()
Returns DHCP4o6 configuration parameters.
bool inRange(const isc::asiolink::IOAddress &addr) const
checks if specified address is in range.
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...
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::posix_time::ptime getLastAllocatedTime(const Lease::Type &lease_type) const
Returns the timestamp when the setLastAllocated function was called.
boost::shared_ptr< Pool > PoolPtr
a pointer to either IPv4 or IPv6 Pool
bool inPool(Lease::Type type, const isc::asiolink::IOAddress &addr) const
checks if the specified address is in pools.
uint8_t prefix_len_
a prefix length of the subnet.
A class containing static convenience methods to fetch the subnets from the containers.
Specialization of the Network object for DHCPv6 case.
boost::shared_ptr< SubnetT< D > > SubnetTPtr
SubnetID getID() const
Returns unique ID for that subnet.
Tag for the index for searching by server identifier.
std::string shared_network_name_
Shared network name.
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.
This structure contains information about DHCP4o6 (RFC7341)
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 > > >> Subnet4SimpleCollection
A simple collection of Subnet4 objects.
void getSharedNetwork(SharedNetworkPtrType &shared_network) const
Retrieves pointer to a shared network associated with a subnet.
boost::posix_time::ptime getModificationTime() const
Returns timestamp.
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.
const PoolCollection & getPools(Lease::Type type) const
Returns all pools (const variant).
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).
const Cfg4o6 & get4o6() const
Returns const DHCP4o6 configuration parameters.
std::string getSharedNetworkName() const
Returns shared network name.
uint64_t sumPoolCapacity(const PoolCollection &pools) const
Returns a sum of possible leases in all pools.
static std::pair< asiolink::IOAddress, uint8_t > parsePrefixCommon(const std::string &prefix)
Converts subnet prefix to a pair of prefix/length pair.
uint64_t getPoolCapacity(Lease::Type type) const
Returns the number of possible leases for specified lease type.
isc::asiolink::IOAddress prefix_
a prefix of the subnet.
PoolCollection pools_
collection of IPv4 or non-temporary IPv6 pools in that subnet.
virtual bool clientSupported(const isc::dhcp::ClientClasses &client_classes) const
Checks whether this network supports client that belongs to specified classes.
bool poolOverlaps(const Lease::Type &pool_type, const PoolPtr &pool) const
Checks if the specified pool overlaps with an existing pool.
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 > > >> Subnet6SimpleCollection
A simple collection of Subnet6 objects.
virtual data::ElementPtr toElement() const
Unparse a subnet object.
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.
Defines the logger used by the top-level component of kea-lfc.
PoolPtr getAnyPool(Lease::Type type)
Returns a pool without any address specified.
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.
typename adapter_Subnet< D >::type SubnetT
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).
const PoolPtr getPool(Lease::Type type, const isc::asiolink::IOAddress &addr, bool anypool=true) const
Returns a pool that specified address belongs to.
Type
Type of lease or pool.
This class represents configuration element which is associated with database identifier and the modi...
virtual asiolink::IOAddress getServerId() const
Returns binary representation of the dhcp-server-identifier option (54).
virtual void checkType(Lease::Type type) const =0
Checks if used pool type is valid.
Specialization of the Network object for DHCPv4 case.
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.
PoolCollection pools_ta_
collection of IPv6 temporary address pools in that subnet.
The IOAddress class represents an IP addresses (version agnostic)
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.
virtual std::string toText() const
Returns textual representation of the subnet (e.g.
static SubnetID generateNextID()
returns the next unique Subnet-ID.
boost::shared_ptr< Subnet > SubnetPtr
A generic pointer to either Subnet4 or Subnet6 object.
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
virtual ~Subnet()
virtual destructor.