%PDF- %PDF-
| Direktori : /backups/router/usr/local/include/kea/dhcpsrv/ |
| Current File : //backups/router/usr/local/include/kea/dhcpsrv/writable_host_data_source.h |
// Copyright (C) 2014-2020 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef WRITABLE_HOST_DATA_SOURCE_H
#define WRITABLE_HOST_DATA_SOURCE_H
namespace isc {
namespace dhcp {
/// @brief Interface for retrieving writable host reservations.
///
/// This interface specifies the methods which return pointers to the
/// @c Host objects, which can be modified. Deriving from this interface
/// is needed if the class implementation must return the pointers to the
/// objects which may be modified by the caller. Such classes usually
/// also derive from the @c BaseHostDataSource to implement methods which
/// return the const objects.
class WritableHostDataSource {
public:
/// @brief Default destructor implementation.
virtual ~WritableHostDataSource() { }
/// @brief Non-const version of the @c getAll const method.
///
/// This method returns all @c Host objects which represent reservations
/// for a specified identifier. This method may return multiple hosts
/// because a particular client may have reservations in multiple subnets.
///
/// @param identifier_type Identifier type.
/// @param identifier_begin Pointer to a beginning of a buffer containing
/// an identifier.
/// @param identifier_len Identifier length.
///
/// @return Collection of non-const @c Host objects.
virtual HostCollection
getAll(const Host::IdentifierType& identifier_type,
const uint8_t* identifier_begin,
const size_t identifier_len) = 0;
/// @brief Returns a collection of hosts in the specified DHCPv4 subnet.
///
/// @param subnet_id Subnet identifier.
///
/// @return Collection of non-const @c Host objects.
virtual HostCollection
getAll4(const SubnetID& subnet_id) = 0;
/// @brief Returns a collection of hosts in the specified DHCPv6 subnet.
///
/// @param subnet_id Subnet identifier.
///
/// @return Collection of non-const @c Host objects.
virtual HostCollection
getAll6(const SubnetID& subnet_id) = 0;
/// @brief Return all hosts with a hostname.
///
/// This method returns all @c Host objects which represent reservations
/// using a specified hostname.
///
/// @param hostname The lower case hostname.
///
/// @return Collection of @c Host objects.
virtual HostCollection
getAllbyHostname(const std::string& hostname) = 0;
/// @brief Return all hosts with a hostname in a DHCPv4 subnet.
///
/// This method returns all @c Host objects which represent reservations
/// using a specified hostname in a specified subnet.
///
/// @param hostname The lower case hostname.
/// @param subnet_id Subnet identifier.
///
/// @return Collection of @c Host objects.
virtual HostCollection
getAllbyHostname4(const std::string& hostname, const SubnetID& subnet_id) = 0;
/// @brief Return all hosts with a hostname in a DHCPv6 subnet.
///
/// This method returns all @c Host objects which represent reservations
/// using a specified hostname in a specified subnet.
///
/// @param hostname The lower case hostname.
/// @param subnet_id Subnet identifier.
///
/// @return Collection of @c Host objects.
virtual HostCollection
getAllbyHostname6(const std::string& hostname, const SubnetID& subnet_id) = 0;
/// @brief Returns range of hosts in a DHCPv4 subnet.
///
/// This method implements paged browsing of host databases. The
/// parameters specify a page size, an index in sources and the
/// starting host id of the range. If not zero this host id is
/// excluded from the returned range. When a source is exhausted
/// the index is updated. There is no guarantee about the order
/// of returned host reservations, only the sources and
/// reservations from the same source are ordered.
///
/// @param subnet_id Subnet identifier.
/// @param source_index Index of the source.
/// @param lower_host_id Host identifier used as lower bound for the
/// returned range.
/// @param page_size maximum size of the page returned.
///
/// @return Collection of non-const @c Host objects.
virtual HostCollection
getPage4(const SubnetID& subnet_id,
size_t& source_index,
uint64_t lower_host_id,
const HostPageSize& page_size) = 0;
/// @brief Returns range of hosts in a DHCPv6 subnet.
///
/// This method implements paged browsing of host databases. The
/// parameters specify a page size, an index in sources and the
/// starting host id of the range. If not zero this host id is
/// excluded from the returned range. When a source is exhausted
/// the index is updated. There is no guarantee about the order
/// of returned host reservations, only the sources and
/// reservations from the same source are ordered.
///
/// @param subnet_id Subnet identifier.
/// @param source_index Index of the source.
/// @param lower_host_id Host identifier used as lower bound for the
/// returned range.
/// @param page_size maximum size of the page returned.
///
/// @return Collection of non-const @c Host objects.
virtual HostCollection
getPage6(const SubnetID& subnet_id,
size_t& source_index,
uint64_t lower_host_id,
const HostPageSize& page_size) = 0;
/// @brief Returns range of hosts.
///
/// This method implements paged browsing of host databases. The
/// parameters specify a page size, an index in sources and the
/// starting host id of the range. If not zero this host id is
/// excluded from the returned range. When a source is exhausted
/// the index is updated. There is no guarantee about the order
/// of returned host reservations, only the sources and
/// reservations from the same source are ordered.
///
/// @param source_index Index of the source.
/// @param lower_host_id Host identifier used as lower bound for the
/// returned range.
/// @param page_size maximum size of the page returned.
///
/// @return Collection of non-const @c Host objects.
virtual HostCollection
getPage4(size_t& source_index,
uint64_t lower_host_id,
const HostPageSize& page_size) = 0;
/// @brief Returns range of hosts.
///
/// This method implements paged browsing of host databases. The
/// parameters specify a page size, an index in sources and the
/// starting host id of the range. If not zero this host id is
/// excluded from the returned range. When a source is exhausted
/// the index is updated. There is no guarantee about the order
/// of returned host reservations, only the sources and
/// reservations from the same source are ordered.
///
/// @param source_index Index of the source.
/// @param lower_host_id Host identifier used as lower bound for the
/// returned range.
/// @param page_size maximum size of the page returned.
///
/// @return Collection of non-const @c Host objects.
virtual HostCollection
getPage6(size_t& source_index,
uint64_t lower_host_id,
const HostPageSize& page_size) = 0;
/// @brief Returns a collection of hosts using the specified IPv4 address.
///
/// This method may return multiple @c Host objects if they are connected
/// to different subnets.
///
/// @param address IPv4 address for which the @c Host object is searched.
///
/// @return Collection of @c Host objects.
virtual HostCollection
getAll4(const asiolink::IOAddress& address) = 0;
/// @brief Returns a host connected to the IPv4 subnet.
///
/// @param subnet_id Subnet identifier.
/// @param identifier_type Identifier type.
/// @param identifier_begin Pointer to a beginning of a buffer containing
/// an identifier.
/// @param identifier_len Identifier length.
///
/// @return Non-const @c Host object for which reservation has been made
/// using the specified identifier.
virtual HostPtr
get4(const SubnetID& subnet_id, const Host::IdentifierType& identifier_type,
const uint8_t* identifier_begin, const size_t identifier_len) = 0;
/// @brief Returns a host connected to the IPv6 subnet.
///
/// @param subnet_id Subnet identifier.
/// @param identifier_type Identifier type.
/// @param identifier_begin Pointer to a beginning of a buffer containing
/// an identifier.
/// @param identifier_len Identifier length.
///
/// @return Non-const @c Host object for which reservation has been made
/// using the specified identifier.
virtual HostPtr
get6(const SubnetID& subnet_id, const Host::IdentifierType& identifier_type,
const uint8_t* identifier_begin, const size_t identifier_len) = 0;
/// @brief Returns a host using the specified IPv6 prefix.
///
/// @param prefix IPv6 prefix for which the @c Host object is searched.
/// @param prefix_len IPv6 prefix length.
///
/// @return Non-const @c Host object using a specified IPv6 prefix.
virtual HostPtr
get6(const asiolink::IOAddress& prefix, const uint8_t prefix_len) = 0;
/// @brief Returns a host connected to the IPv6 subnet and having
/// a reservation for a specified IPv6 address or prefix.
///
/// @param subnet_id Subnet identifier.
/// @param address reserved IPv6 address/prefix.
///
/// @return @c Host object using a specified IPv6 address/prefix.
virtual HostPtr
get6(const SubnetID& subnet_id, const asiolink::IOAddress& address) = 0;
};
}
}
#endif // WRITABLE_HOST_DATA_SOURCE_H