diff options
author | Francis Dupont <fdupont@isc.org> | 2022-10-04 16:37:03 +0200 |
---|---|---|
committer | Francis Dupont <fdupont@isc.org> | 2023-01-26 14:49:49 +0100 |
commit | 602c8406a49810dbe1307745dc60694c3610acc2 (patch) | |
tree | d7badbe15ba883b8ee1f5062bf57637bf8b0c771 /src/lib | |
parent | [#2669] add ChangeLog entry (diff) | |
download | kea-602c8406a49810dbe1307745dc60694c3610acc2.tar.xz kea-602c8406a49810dbe1307745dc60694c3610acc2.zip |
[#2586] Reported v4 code from #2584
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/dhcpsrv/lease.cc | 2 | ||||
-rw-r--r-- | src/lib/dhcpsrv/lease.h | 6 | ||||
-rw-r--r-- | src/lib/dhcpsrv/memfile_lease_storage.h | 52 |
3 files changed, 56 insertions, 4 deletions
diff --git a/src/lib/dhcpsrv/lease.cc b/src/lib/dhcpsrv/lease.cc index 0d529cdd20..17bb555101 100644 --- a/src/lib/dhcpsrv/lease.cc +++ b/src/lib/dhcpsrv/lease.cc @@ -334,7 +334,7 @@ Lease4::Lease4(const isc::asiolink::IOAddress& address, : Lease(address, valid_lifetime, subnet_id, cltt, fqdn_fwd, fqdn_rev, hostname, hw_address), - client_id_(client_id) { + client_id_(client_id), remote_id_(), relay_id_() { } std::string diff --git a/src/lib/dhcpsrv/lease.h b/src/lib/dhcpsrv/lease.h index 73a913e8d4..9ff45d0cd4 100644 --- a/src/lib/dhcpsrv/lease.h +++ b/src/lib/dhcpsrv/lease.h @@ -502,6 +502,12 @@ struct Lease4 : public Lease { static Lease4Ptr fromElement(const data::ConstElementPtr& element); /// @todo: Add DHCPv4 failover related fields here + + /// @brief Remote identifier for Bulk Lease Query + std::vector<uint8_t> remote_id_; + + /// @brief Relay identifier for Bulk Lease Query + std::vector<uint8_t> relay_id_; }; /// @brief A collection of IPv4 leases. diff --git a/src/lib/dhcpsrv/memfile_lease_storage.h b/src/lib/dhcpsrv/memfile_lease_storage.h index 693bccf278..0ec2dd3b1f 100644 --- a/src/lib/dhcpsrv/memfile_lease_storage.h +++ b/src/lib/dhcpsrv/memfile_lease_storage.h @@ -49,6 +49,12 @@ struct DuidIndexTag { }; /// @brief Tag for index using hostname. struct HostnameIndexTag { }; +/// @brief Tag for index using remote-id. +struct RemoteIdIndexTag { }; + +/// @brief Tag for index using relay-id. +struct RelayIdIndexTag { }; + /// @name Multi index containers holding DHCPv4 and DHCPv6 leases. /// //@{ @@ -60,6 +66,8 @@ struct HostnameIndexTag { }; /// - using a composite index: DUID, IAID and lease type. /// - using a composite index: boolean flag indicating if the state is /// "expired-reclaimed" and expiration time. +/// - using subnet ID. +/// - using hostname. /// /// Indexes can be accessed using the index number (from 0 to 5) or a /// name tag. It is recommended to use the tags to access indexes as @@ -141,11 +149,15 @@ typedef boost::multi_index_container< /// @brief A multi index container holding DHCPv4 leases. /// /// The leases in the container may be accessed using different indexes: -/// - IPv6 address, -/// - composite index: HW address and subnet id, +/// - IPv4 address, +/// - composite index: hardware address and subnet id, /// - composite index: client id and subnet id, /// - using a composite index: boolean flag indicating if the state is /// "expired-reclaimed" and expiration time. +/// - using subnet id. +/// - using hostname. +/// - using remote id. +/// - using a composite index: /// /// Indexes can be accessed using the index number (from 0 to 5) or a /// name tag. It is recommended to use the tags to access indexes as @@ -227,11 +239,39 @@ typedef boost::multi_index_container< boost::multi_index::member<Lease, isc::dhcp::SubnetID, &Lease::subnet_id_> >, - // Specification of the seventh index starts here + // Specification of the sixth index starts here. // This index is used to retrieve leases for matching hostname. boost::multi_index::ordered_non_unique< boost::multi_index::tag<HostnameIndexTag>, boost::multi_index::member<Lease, std::string, &Lease::hostname_> + >, + + // Specification of the seventh index starts here. + // This index is used to retrieve leases for matching remote id + // for Bulk Lease Query. + boost::multi_index::hashed_non_unique< + boost::multi_index::tag<RemoteIdIndexTag>, + boost::multi_index::member<Lease4, + std::vector<uint8_t>, + &Lease4::remote_id_> + >, + + // Specification of the eighth index starts here. + // This index is used to retrieve leases for matching relay id + // for Bulk Lease Query. + boost::multi_index::ordered_non_unique< + boost::multi_index::tag<RelayIdIndexTag>, + boost::multi_index::composite_key< + Lease4, + // Relay id. + boost::multi_index::member<Lease4, + std::vector<uint8_t>, + &Lease4::relay_id_>, + // Address. + boost::multi_index::member<Lease, + isc::asiolink::IOAddress, + &Lease::addr_> + > > > > Lease4Storage; // Specify the type name for this container. @@ -280,6 +320,12 @@ typedef Lease4Storage::index<SubnetIdIndexTag>::type Lease4StorageSubnetIdIndex; /// @brief DHCPv4 lease storage index by hostname. typedef Lease4Storage::index<HostnameIndexTag>::type Lease4StorageHostnameIndex; +/// @brief DHCPv4 lease storage index by remote identifier. +typedef Lease4Storage::index<RemoteIdIndexTag>::type Lease4StorageRemoteIdInde; + +/// @brief DHCPv4 lease storage index by relay identifier. +typedef Lease4Storage::index<RelayIdIndexTag>::type Lease4StorageRelayIdIndex; + //@} /// @name Multi index containers holding DHCPv6 lease extended informations |