summaryrefslogtreecommitdiffstats
path: root/src/lib/dhcpsrv/writable_host_data_source.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/dhcpsrv/writable_host_data_source.h')
-rw-r--r--src/lib/dhcpsrv/writable_host_data_source.h245
1 files changed, 245 insertions, 0 deletions
diff --git a/src/lib/dhcpsrv/writable_host_data_source.h b/src/lib/dhcpsrv/writable_host_data_source.h
new file mode 100644
index 0000000..6115d22
--- /dev/null
+++ b/src/lib/dhcpsrv/writable_host_data_source.h
@@ -0,0 +1,245 @@
+// 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