17#include <boost/scoped_ptr.hpp>
18#include <boost/shared_ptr.hpp>
65 const uint8_t* identifier_begin,
const size_t identifier_len)
const;
81 const uint8_t* identifier_begin,
82 const size_t identifier_len);
212 size_t& source_index,
213 uint64_t lower_host_id,
230 size_t& source_index,
231 uint64_t lower_host_id,
248 size_t& source_index,
249 uint64_t lower_host_id,
266 size_t& source_index,
267 uint64_t lower_host_id,
283 uint64_t lower_host_id,
299 uint64_t lower_host_id,
315 uint64_t lower_host_id,
331 uint64_t lower_host_id,
390 const uint8_t* identifier_begin,
const size_t identifier_len)
const;
404 const uint8_t* identifier_begin,
const size_t identifier_len);
455 const uint8_t* identifier_begin,
const size_t identifier_len)
const;
469 const uint8_t* identifier_begin,
const size_t identifier_len);
573 const uint8_t* identifier_begin,
const size_t identifier_len);
594 const uint8_t* identifier_begin,
const size_t identifier_len);
611 return (std::string(
"configuration file"));
666 template<
typename Storage>
668 const uint8_t* identifier,
669 const size_t identifier_len,
670 Storage& storage)
const;
682 template<
typename Storage>
683 void getAllInternal4(
const SubnetID& subnet_id,
684 Storage& storage)
const;
696 template<
typename Storage>
697 void getAllInternal6(
const SubnetID& subnet_id,
698 Storage& storage)
const;
710 template<
typename Storage>
711 void getAllbyHostnameInternal(
const std::string& hostname,
712 Storage& storage)
const;
725 template<
typename Storage>
726 void getAllbyHostnameInternal4(
const std::string& hostname,
728 Storage& storage)
const;
741 template<
typename Storage>
742 void getAllbyHostnameInternal6(
const std::string& hostname,
744 Storage& storage)
const;
759 template<
typename Storage>
760 void getPageInternal4(
const SubnetID& subnet_id,
761 uint64_t lower_host_id,
763 Storage& storage)
const;
778 template<
typename Storage>
779 void getPageInternal6(
const SubnetID& subnet_id,
780 uint64_t lower_host_id,
782 Storage& storage)
const;
796 template<
typename Storage>
797 void getPageInternal(uint64_t lower_host_id,
799 Storage& storage)
const;
812 template<
typename Storage>
814 Storage& storage)
const;
827 template<
typename Storage>
829 Storage& storage)
const;
842 getAllInternal4(
const SubnetID& subnet_id,
857 template<
typename Storage>
859 getAllInternal6(
const SubnetID& subnet_id,
861 Storage& storage)
const;
880 getHostInternal(
const SubnetID& subnet_id,
const bool subnet6,
882 const uint8_t* identifier,
883 const size_t identifier_len)
const;
898 template<
typename ReturnType,
typename Storage>
899 ReturnType getHostInternal6(
const SubnetID& subnet_id,
902 template<
typename ReturnType>
904 const uint8_t prefix_len)
const;
917 virtual void add4(
const HostPtr& host);
930 virtual void add6(
const HostPtr& host);
933 uint64_t next_host_id_ = 0;
954 bool ip_reservations_unique_ =
true;
957 const boost::scoped_ptr<std::mutex> mutex_;
The IOAddress class represents an IP addresses (version agnostic)
Base interface for the classes implementing simple data source for host reservations.
virtual ~CfgHosts()
Destructor.
virtual void update(HostPtr const &host)
Attempts to update an existing host entry.
virtual size_t delAll4(const SubnetID &subnet_id)
Attempts to delete all hosts for a given IPv4 subnet.
virtual void add(const HostPtr &host)
Adds a new host to the collection.
virtual ConstHostCollection getPage6(const SubnetID &subnet_id, size_t &source_index, uint64_t lower_host_id, const HostPageSize &page_size) const
Returns range of hosts in a DHCPv6 subnet.
virtual bool del4(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len)
Attempts to delete a host by (subnet4-id, identifier, identifier-type)
virtual bool del(const SubnetID &subnet_id, const asiolink::IOAddress &addr)
Attempts to delete hosts by address.
virtual bool setIPReservationsUnique(const bool unique)
Controls whether IP reservations are unique or non-unique.
virtual size_t delAll6(const SubnetID &subnet_id)
Attempts to delete all hosts for a given IPv6 subnet.
virtual ConstHostPtr get6(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
Returns a host connected to the IPv6 subnet.
virtual ConstHostCollection getAllbyHostname(const std::string &hostname) const
Return all hosts with a hostname.
virtual bool del6(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len)
Attempts to delete a host by (subnet6-id, identifier, identifier-type)
virtual ConstHostCollection getPage4(const SubnetID &subnet_id, size_t &source_index, uint64_t lower_host_id, const HostPageSize &page_size) const
Returns range of hosts in a DHCPv4 subnet.
virtual ConstHostCollection getAll4(const SubnetID &subnet_id) const
Return all hosts in a DHCPv4 subnet.
virtual ConstHostPtr get4(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
Returns a host connected to the IPv4 subnet.
virtual ConstHostCollection getAll6(const SubnetID &subnet_id) const
Return all hosts in a DHCPv6 subnet.
virtual ConstHostCollection getAllbyHostname6(const std::string &hostname, const SubnetID &subnet_id) const
Return all hosts with a hostname in a DHCPv6 subnet.
virtual std::string getType() const
Return backend type.
isc::data::ElementPtr toElement() const
Unparse a configuration object.
virtual ConstHostCollection getAllbyHostname4(const std::string &hostname, const SubnetID &subnet_id) const
Return all hosts with a hostname in a DHCPv4 subnet.
virtual ConstHostCollection getAll(const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
Return all hosts connected to any subnet for which reservations have been made using a specified iden...
Wraps value holding size of the page with host reservations.
IdentifierType
Type of the host identifier.
Interface for retrieving writable host reservations.
boost::shared_ptr< Element > ElementPtr
boost::shared_ptr< const CfgHosts > ConstCfgHostsPtr
Const pointer.
boost::multi_index_container< HostPtr, boost::multi_index::indexed_by< boost::multi_index::ordered_non_unique< boost::multi_index::composite_key< Host, boost::multi_index::const_mem_fun< Host, const std::vector< uint8_t > &, &Host::getIdentifier >, boost::multi_index::const_mem_fun< Host, Host::IdentifierType, &Host::getIdentifierType > > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< Host, const asiolink::IOAddress &, &Host::getIPv4Reservation > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< Host, SubnetID, &Host::getIPv4SubnetID > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< Host, SubnetID, &Host::getIPv6SubnetID > >, boost::multi_index::ordered_unique< boost::multi_index::const_mem_fun< Host, uint64_t, &Host::getHostId > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< Host, std::string, &Host::getLowerHostname > > > > HostContainer
Multi-index container holding host reservations.
boost::shared_ptr< Host > HostPtr
Pointer to the Host object.
std::vector< ConstHostPtr > ConstHostCollection
Collection of the const Host objects.
boost::multi_index_container< HostResrv6Tuple, boost::multi_index::indexed_by< boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< HostResrv6Tuple, const asiolink::IOAddress &, &HostResrv6Tuple::getPrefix > >, boost::multi_index::ordered_non_unique< boost::multi_index::composite_key< HostResrv6Tuple, boost::multi_index::member< HostResrv6Tuple, const SubnetID, &HostResrv6Tuple::subnet_id_ >, boost::multi_index::const_mem_fun< HostResrv6Tuple, const asiolink::IOAddress &, &HostResrv6Tuple::getPrefix > > >, boost::multi_index::ordered_non_unique< boost::multi_index::member< HostResrv6Tuple, const SubnetID, &HostResrv6Tuple::subnet_id_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< HostResrv6Tuple, uint64_t, &HostResrv6Tuple::getHostId > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< HostResrv6Tuple, const asiolink::IOAddress &, &HostResrv6Tuple::getPrefix > > > > HostContainer6
Multi-index container holding IPv6 reservations.
std::vector< HostPtr > HostCollection
Collection of the Host objects.
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
boost::shared_ptr< CfgHosts > CfgHostsPtr
Non-const pointer.
boost::shared_ptr< const Host > ConstHostPtr
Const pointer to the Host object.
Defines the logger used by the top-level component of kea-lfc.
Abstract class for configuration Cfg_* classes.