7#ifndef MEMFILE_LEASE_STORAGE_H
8#define MEMFILE_LEASE_STORAGE_H
14#include <boost/multi_index/indexed_by.hpp>
15#include <boost/multi_index/member.hpp>
16#include <boost/multi_index/mem_fun.hpp>
17#include <boost/multi_index/hashed_index.hpp>
18#include <boost/multi_index/ordered_index.hpp>
19#include <boost/multi_index_container.hpp>
20#include <boost/multi_index/composite_key.hpp>
78typedef boost::multi_index_container<
81 boost::multi_index::indexed_by<
85 boost::multi_index::ordered_unique<
86 boost::multi_index::tag<AddressIndexTag>,
87 boost::multi_index::member<Lease, isc::asiolink::IOAddress, &Lease::addr_>
91 boost::multi_index::ordered_non_unique<
92 boost::multi_index::tag<DuidIaidTypeIndexTag>,
95 boost::multi_index::composite_key<
99 boost::multi_index::const_mem_fun<Lease6, const std::vector<uint8_t>&,
103 boost::multi_index::member<Lease6, uint32_t, &Lease6::iaid_>,
104 boost::multi_index::member<Lease6, Lease::Type, &Lease6::type_>
109 boost::multi_index::ordered_non_unique<
110 boost::multi_index::tag<ExpirationIndexTag>,
115 boost::multi_index::composite_key<
118 boost::multi_index::const_mem_fun<
Lease, bool,
121 boost::multi_index::const_mem_fun<
Lease, int64_t,
128 boost::multi_index::ordered_unique<
129 boost::multi_index::tag<SubnetIdIndexTag>,
130 boost::multi_index::composite_key<
133 boost::multi_index::member<
Lease,
137 boost::multi_index::member<
Lease,
145 boost::multi_index::ordered_non_unique<
146 boost::multi_index::tag<DuidIndexTag>,
147 boost::multi_index::const_mem_fun<
Lease6,
148 const std::vector<uint8_t>&,
154 boost::multi_index::ordered_non_unique<
155 boost::multi_index::tag<HostnameIndexTag>,
156 boost::multi_index::member<Lease, std::string, &Lease::hostname_>
160 boost::multi_index::ordered_non_unique<
161 boost::multi_index::tag<SubnetIdPoolIdIndexTag>,
164 boost::multi_index::composite_key<
170 boost::multi_index::member<Lease, SubnetID, &Lease::subnet_id_>,
175 boost::multi_index::member<Lease, uint32_t, &Lease::pool_id_>
197typedef boost::multi_index_container<
201 boost::multi_index::indexed_by<
205 boost::multi_index::ordered_unique<
206 boost::multi_index::tag<AddressIndexTag>,
209 boost::multi_index::member<Lease, isc::asiolink::IOAddress, &Lease::addr_>
213 boost::multi_index::ordered_non_unique<
214 boost::multi_index::tag<HWAddressSubnetIdIndexTag>,
217 boost::multi_index::composite_key<
223 boost::multi_index::const_mem_fun<Lease, const std::vector<uint8_t>&,
229 boost::multi_index::member<Lease, SubnetID, &Lease::subnet_id_>
234 boost::multi_index::ordered_non_unique<
235 boost::multi_index::tag<ClientIdSubnetIdIndexTag>,
238 boost::multi_index::composite_key<
242 boost::multi_index::const_mem_fun<Lease4, const std::vector<uint8_t>&,
245 boost::multi_index::member<Lease, uint32_t, &Lease::subnet_id_>
250 boost::multi_index::ordered_non_unique<
251 boost::multi_index::tag<ExpirationIndexTag>,
256 boost::multi_index::composite_key<
259 boost::multi_index::const_mem_fun<
Lease, bool,
262 boost::multi_index::const_mem_fun<
Lease, int64_t,
269 boost::multi_index::ordered_non_unique<
270 boost::multi_index::tag<SubnetIdIndexTag>,
271 boost::multi_index::member<Lease, isc::dhcp::SubnetID, &Lease::subnet_id_>
276 boost::multi_index::ordered_non_unique<
277 boost::multi_index::tag<HostnameIndexTag>,
278 boost::multi_index::member<Lease, std::string, &Lease::hostname_>
284 boost::multi_index::hashed_non_unique<
285 boost::multi_index::tag<RemoteIdIndexTag>,
286 boost::multi_index::member<
Lease4,
287 std::vector<uint8_t>,
294 boost::multi_index::ordered_non_unique<
295 boost::multi_index::tag<RelayIdIndexTag>,
296 boost::multi_index::composite_key<
299 boost::multi_index::member<
Lease4,
300 std::vector<uint8_t>,
303 boost::multi_index::member<
Lease,
310 boost::multi_index::ordered_non_unique<
311 boost::multi_index::tag<SubnetIdPoolIdIndexTag>,
314 boost::multi_index::composite_key<
320 boost::multi_index::member<Lease, SubnetID, &Lease::subnet_id_>,
325 boost::multi_index::member<Lease, uint32_t, &Lease::pool_id_>
365typedef Lease4Storage::index<HWAddressSubnetIdIndexTag>::type
369typedef Lease4Storage::index<ClientIdSubnetIdIndexTag>::type
385typedef std::pair<Lease4StorageRemoteIdIndex::const_iterator,
405 const std::vector<uint8_t>&
id)
434typedef boost::multi_index_container<
437 boost::multi_index::indexed_by<
439 boost::multi_index::ordered_non_unique<
440 boost::multi_index::tag<RelayIdIndexTag>,
441 boost::multi_index::composite_key<
444 std::vector<uint8_t>,
453 boost::multi_index::hashed_non_unique<
454 boost::multi_index::tag<LeaseAddressIndexTag>,
475typedef boost::multi_index_container<
478 boost::multi_index::indexed_by<
480 boost::multi_index::hashed_non_unique<
481 boost::multi_index::tag<RemoteIdIndexTag>,
483 std::vector<uint8_t>,
488 boost::multi_index::hashed_non_unique<
489 boost::multi_index::tag<LeaseAddressIndexTag>,
498typedef Lease6ExtendedInfoRelayIdTable::index<RelayIdIndexTag>::type
502typedef Lease6ExtendedInfoRelayIdTable::index<LeaseAddressIndexTag>::type
506typedef Lease6ExtendedInfoRemoteIdTable::index<RemoteIdIndexTag>::type
510typedef std::pair<RemoteIdIndex::const_iterator, RemoteIdIndex::const_iterator>
514typedef Lease6ExtendedInfoRemoteIdTable::index<LeaseAddressIndexTag>::type
The IOAddress class represents an IP addresses (version agnostic)
Lease6 extended informations for Bulk Lease Query.
Lease6ExtendedInfo(const isc::asiolink::IOAddress &lease_addr, const std::vector< uint8_t > &id)
Constructor.
std::vector< uint8_t > id_
Remote or relay opaque identifier.
isc::asiolink::IOAddress lease_addr_
Lease address.
boost::multi_index_container< Lease4Ptr, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< AddressIndexTag >, boost::multi_index::member< Lease, isc::asiolink::IOAddress, &Lease::addr_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< HWAddressSubnetIdIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::const_mem_fun< Lease, const std::vector< uint8_t > &, &Lease::getHWAddrVector >, boost::multi_index::member< Lease, SubnetID, &Lease::subnet_id_ > > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ClientIdSubnetIdIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::const_mem_fun< Lease4, const std::vector< uint8_t > &, &Lease4::getClientIdVector >, boost::multi_index::member< Lease, uint32_t, &Lease::subnet_id_ > > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ExpirationIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::const_mem_fun< Lease, bool, &Lease::stateExpiredReclaimed >, boost::multi_index::const_mem_fun< Lease, int64_t, &Lease::getExpirationTime > > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetIdIndexTag >, boost::multi_index::member< Lease, isc::dhcp::SubnetID, &Lease::subnet_id_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< HostnameIndexTag >, boost::multi_index::member< Lease, std::string, &Lease::hostname_ > >, boost::multi_index::hashed_non_unique< boost::multi_index::tag< RemoteIdIndexTag >, boost::multi_index::member< Lease4, std::vector< uint8_t >, &Lease4::remote_id_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< RelayIdIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::member< Lease4, std::vector< uint8_t >, &Lease4::relay_id_ >, boost::multi_index::member< Lease, isc::asiolink::IOAddress, &Lease::addr_ > > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetIdPoolIdIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::member< Lease, SubnetID, &Lease::subnet_id_ >, boost::multi_index::member< Lease, uint32_t, &Lease::pool_id_ > > > > > Lease4Storage
A multi index container holding DHCPv4 leases.
boost::multi_index_container< Lease6ExtendedInfoPtr, boost::multi_index::indexed_by< boost::multi_index::hashed_non_unique< boost::multi_index::tag< RemoteIdIndexTag >, boost::multi_index::member< Lease6ExtendedInfo, std::vector< uint8_t >, &Lease6ExtendedInfo::id_ > >, boost::multi_index::hashed_non_unique< boost::multi_index::tag< LeaseAddressIndexTag >, boost::multi_index::member< Lease6ExtendedInfo, isc::asiolink::IOAddress, &Lease6ExtendedInfo::lease_addr_ > > > > Lease6ExtendedInfoRemoteIdTable
A multi index container holding lease6 extended info for by remote id.
Lease6Storage::index< ExpirationIndexTag >::type Lease6StorageExpirationIndex
DHCPv6 lease storage index by expiration time.
Lease6Storage::index< DuidIndexTag >::type Lease6StorageDuidIndex
DHCPv6 lease storage index by DUID.
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Lease6Storage::index< SubnetIdPoolIdIndexTag >::type Lease6StorageSubnetIdPoolIdIndex
DHCPv6 lease storage index subnet-id and pool-id.
Lease6Storage::index< DuidIaidTypeIndexTag >::type Lease6StorageDuidIaidTypeIndex
DHCPv6 lease storage index by DUID, IAID, lease type.
Lease4Storage::index< ExpirationIndexTag >::type Lease4StorageExpirationIndex
DHCPv4 lease storage index by expiration time.
Lease6Storage::index< AddressIndexTag >::type Lease6StorageAddressIndex
DHCPv6 lease storage index by address.
Lease4Storage::index< HostnameIndexTag >::type Lease4StorageHostnameIndex
DHCPv4 lease storage index by hostname.
std::pair< Lease4StorageRemoteIdIndex::const_iterator, Lease4StorageRemoteIdIndex::const_iterator > Lease4StorageRemoteIdRange
DHCPv4 lease storage range by remote-id.
Lease6Storage::index< HostnameIndexTag >::type Lease6StorageHostnameIndex
DHCPv6 lease storage index by hostname.
boost::multi_index_container< Lease6Ptr, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< AddressIndexTag >, boost::multi_index::member< Lease, isc::asiolink::IOAddress, &Lease::addr_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< DuidIaidTypeIndexTag >, boost::multi_index::composite_key< Lease6, boost::multi_index::const_mem_fun< Lease6, const std::vector< uint8_t > &, &Lease6::getDuidVector >, boost::multi_index::member< Lease6, uint32_t, &Lease6::iaid_ >, boost::multi_index::member< Lease6, Lease::Type, &Lease6::type_ > > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ExpirationIndexTag >, boost::multi_index::composite_key< Lease6, boost::multi_index::const_mem_fun< Lease, bool, &Lease::stateExpiredReclaimed >, boost::multi_index::const_mem_fun< Lease, int64_t, &Lease::getExpirationTime > > >, boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetIdIndexTag >, boost::multi_index::composite_key< Lease6, boost::multi_index::member< Lease, isc::dhcp::SubnetID, &Lease::subnet_id_ >, boost::multi_index::member< Lease, isc::asiolink::IOAddress, &Lease::addr_ > > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< DuidIndexTag >, boost::multi_index::const_mem_fun< Lease6, const std::vector< uint8_t > &, &Lease6::getDuidVector > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< HostnameIndexTag >, boost::multi_index::member< Lease, std::string, &Lease::hostname_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetIdPoolIdIndexTag >, boost::multi_index::composite_key< Lease6, boost::multi_index::member< Lease, SubnetID, &Lease::subnet_id_ >, boost::multi_index::member< Lease, uint32_t, &Lease::pool_id_ > > > > > Lease6Storage
A multi index container holding DHCPv6 leases.
Lease4Storage::index< ClientIdSubnetIdIndexTag >::type Lease4StorageClientIdSubnetIdIndex
DHCPv4 lease storage index by client-id and subnet-id.
Lease4Storage::index< HWAddressSubnetIdIndexTag >::type Lease4StorageHWAddressSubnetIdIndex
DHCPv4 lease storage index by HW address and subnet-id.
Lease6ExtendedInfoRelayIdTable::index< LeaseAddressIndexTag >::type LeaseAddressRelayIdIndex
Lease6 extended information by lease address index of by relay id table.
Lease6ExtendedInfoRelayIdTable::index< RelayIdIndexTag >::type RelayIdIndex
Lease6 extended information by relay id index.
Lease4Storage::index< RemoteIdIndexTag >::type Lease4StorageRemoteIdIndex
DHCPv4 lease storage index by remote-id.
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
std::pair< RemoteIdIndex::const_iterator, RemoteIdIndex::const_iterator > RemoteIdIndexRange
Lease6 extended information by remote id range.
Lease4Storage::index< SubnetIdIndexTag >::type Lease4StorageSubnetIdIndex
DHCPv4 lease storage index subnet-id.
Lease4Storage::index< AddressIndexTag >::type Lease4StorageAddressIndex
DHCPv4 lease storage index by address.
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Lease6ExtendedInfoRemoteIdTable::index< LeaseAddressIndexTag >::type LeaseAddressRemoteIdIndex
Lease6 extended information by lease address index of by remote id table.
Lease6Storage::index< SubnetIdIndexTag >::type Lease6StorageSubnetIdIndex
DHCPv6 lease storage index by subnet-id.
boost::multi_index_container< Lease6ExtendedInfoPtr, boost::multi_index::indexed_by< boost::multi_index::ordered_non_unique< boost::multi_index::tag< RelayIdIndexTag >, boost::multi_index::composite_key< Lease6ExtendedInfo, boost::multi_index::member< Lease6ExtendedInfo, std::vector< uint8_t >, &Lease6ExtendedInfo::id_ >, boost::multi_index::member< Lease6ExtendedInfo, isc::asiolink::IOAddress, &Lease6ExtendedInfo::lease_addr_ > > >, boost::multi_index::hashed_non_unique< boost::multi_index::tag< LeaseAddressIndexTag >, boost::multi_index::member< Lease6ExtendedInfo, isc::asiolink::IOAddress, &Lease6ExtendedInfo::lease_addr_ > > > > Lease6ExtendedInfoRelayIdTable
A multi index container holding lease6 extended info for by relay id.
boost::shared_ptr< Lease6ExtendedInfo > Lease6ExtendedInfoPtr
Pointer to a Lease6ExtendedInfo object.
Lease6ExtendedInfoRemoteIdTable::index< RemoteIdIndexTag >::type RemoteIdIndex
Lease6 extended information by remote id index.
Lease4Storage::index< SubnetIdPoolIdIndexTag >::type Lease4StorageSubnetIdPoolIdIndex
DHCPv4 lease storage index subnet-id and pool-id.
Lease4Storage::index< RelayIdIndexTag >::type Lease4StorageRelayIdIndex
DHCPv4 lease storage index by relay-id.
Defines the logger used by the top-level component of kea-lfc.
Tag for indexes by address.
Tag for indexes by client-id, subnet-id tuple.
Tag for indexes by DUID, IAID, lease type tuple.
Tag for index using DUID.
Tag for indexes by expiration time.
Tag for indexes by HW address, subnet-id tuple.
Tag for index using hostname.
Structure that holds a lease for IPv4 address.
std::vector< uint8_t > remote_id_
Remote identifier for Bulk Lease Query.
std::vector< uint8_t > relay_id_
Relay identifier for Bulk Lease Query.
const std::vector< uint8_t > & getClientIdVector() const
Returns a client identifier.
Structure that holds a lease for IPv6 address and/or prefix.
const std::vector< uint8_t > & getDuidVector() const
Returns a reference to a vector representing a DUID.
Tag for indexes by lease address.
a common structure for IPv4 and IPv6 leases
bool stateExpiredReclaimed() const
Indicates if the lease is in the "expired-reclaimed" state.
SubnetID subnet_id_
Subnet identifier.
const std::vector< uint8_t > & getHWAddrVector() const
Returns raw (as vector) hardware address.
int64_t getExpirationTime() const
Returns lease expiration time.
isc::asiolink::IOAddress addr_
IPv4 ot IPv6 address.
Tag for index using relay-id.
Tag for index using remote-id.
Tag for indexes by subnet-id (and address for v6).
Tag for indexes by subnet-id and pool-id.