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>
75 typedef boost::multi_index_container<
78 boost::multi_index::indexed_by<
82 boost::multi_index::ordered_unique<
83 boost::multi_index::tag<AddressIndexTag>,
84 boost::multi_index::member<Lease, isc::asiolink::IOAddress, &Lease::addr_>
88 boost::multi_index::ordered_non_unique<
89 boost::multi_index::tag<DuidIaidTypeIndexTag>,
92 boost::multi_index::composite_key<
96 boost::multi_index::const_mem_fun<Lease6, const std::vector<uint8_t>&,
100 boost::multi_index::member<Lease6, uint32_t, &Lease6::iaid_>,
101 boost::multi_index::member<Lease6, Lease::Type, &Lease6::type_>
106 boost::multi_index::ordered_non_unique<
107 boost::multi_index::tag<ExpirationIndexTag>,
112 boost::multi_index::composite_key<
115 boost::multi_index::const_mem_fun<
Lease, bool,
118 boost::multi_index::const_mem_fun<
Lease, int64_t,
125 boost::multi_index::ordered_non_unique<
126 boost::multi_index::tag<SubnetIdIndexTag>,
133 boost::multi_index::ordered_non_unique<
134 boost::multi_index::tag<DuidIndexTag>,
135 boost::multi_index::const_mem_fun<
Lease6,
136 const std::vector<uint8_t>&,
142 boost::multi_index::ordered_non_unique<
143 boost::multi_index::tag<HostnameIndexTag>,
144 boost::multi_index::member<Lease, std::string, &Lease::hostname_>
165 typedef boost::multi_index_container<
169 boost::multi_index::indexed_by<
173 boost::multi_index::ordered_unique<
174 boost::multi_index::tag<AddressIndexTag>,
177 boost::multi_index::member<Lease, isc::asiolink::IOAddress, &Lease::addr_>
181 boost::multi_index::ordered_non_unique<
182 boost::multi_index::tag<HWAddressSubnetIdIndexTag>,
185 boost::multi_index::composite_key<
191 boost::multi_index::const_mem_fun<Lease, const std::vector<uint8_t>&,
197 boost::multi_index::member<Lease, SubnetID, &Lease::subnet_id_>
202 boost::multi_index::ordered_non_unique<
203 boost::multi_index::tag<ClientIdSubnetIdIndexTag>,
206 boost::multi_index::composite_key<
210 boost::multi_index::const_mem_fun<Lease4, const std::vector<uint8_t>&,
213 boost::multi_index::member<Lease, uint32_t, &Lease::subnet_id_>
218 boost::multi_index::ordered_non_unique<
219 boost::multi_index::tag<ExpirationIndexTag>,
224 boost::multi_index::composite_key<
227 boost::multi_index::const_mem_fun<
Lease, bool,
230 boost::multi_index::const_mem_fun<
Lease, int64_t,
237 boost::multi_index::ordered_non_unique<
238 boost::multi_index::tag<SubnetIdIndexTag>,
239 boost::multi_index::member<Lease, isc::dhcp::SubnetID, &Lease::subnet_id_>
244 boost::multi_index::ordered_non_unique<
245 boost::multi_index::tag<HostnameIndexTag>,
246 boost::multi_index::member<Lease, std::string, &Lease::hostname_>
252 boost::multi_index::hashed_non_unique<
253 boost::multi_index::tag<RemoteIdIndexTag>,
254 boost::multi_index::member<
Lease4,
255 std::vector<uint8_t>,
262 boost::multi_index::ordered_non_unique<
263 boost::multi_index::tag<RelayIdIndexTag>,
264 boost::multi_index::composite_key<
267 boost::multi_index::member<
Lease4,
268 std::vector<uint8_t>,
271 boost::multi_index::member<
Lease,
310 typedef Lease4Storage::index<HWAddressSubnetIdIndexTag>::type
314 typedef Lease4Storage::index<ClientIdSubnetIdIndexTag>::type
327 typedef std::pair<Lease4StorageRemoteIdIndex::const_iterator,
347 const std::vector<uint8_t>&
id)
376 typedef boost::multi_index_container<
379 boost::multi_index::indexed_by<
381 boost::multi_index::ordered_non_unique<
382 boost::multi_index::tag<RelayIdIndexTag>,
383 boost::multi_index::composite_key<
386 std::vector<uint8_t>,
395 boost::multi_index::hashed_non_unique<
396 boost::multi_index::tag<LeaseAddressIndexTag>,
417 typedef boost::multi_index_container<
420 boost::multi_index::indexed_by<
422 boost::multi_index::hashed_non_unique<
423 boost::multi_index::tag<RemoteIdIndexTag>,
425 std::vector<uint8_t>,
430 boost::multi_index::hashed_non_unique<
431 boost::multi_index::tag<LeaseAddressIndexTag>,
440 typedef Lease6ExtendedInfoRelayIdTable::index<RelayIdIndexTag>::type
444 typedef Lease6ExtendedInfoRelayIdTable::index<LeaseAddressIndexTag>::type
448 typedef Lease6ExtendedInfoRemoteIdTable::index<RemoteIdIndexTag>::type
452 typedef std::pair<RemoteIdIndex::const_iterator, RemoteIdIndex::const_iterator>
456 typedef 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< 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< DuidIaidTypeIndexTag >::type Lease6StorageDuidIaidTypeIndex
DHCPv6 lease storage index by DUID, IAID, lease type.
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_ > > > >> Lease4Storage
A multi index container holding DHCPv4 leases.
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 identifier.
Lease6Storage::index< HostnameIndexTag >::type Lease6StorageHostnameIndex
DHCPv6 lease storage index by hostname.
Lease4Storage::index< ClientIdSubnetIdIndexTag >::type Lease4StorageClientIdSubnetIdIndex
DHCPv4 lease storage index by client and subnet identifier.
Lease4Storage::index< HWAddressSubnetIdIndexTag >::type Lease4StorageHWAddressSubnetIdIndex
DHCPv4 lease storage index by HW address and subnet identifier.
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 identifier.
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
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_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< 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_ > > >> Lease6Storage
A multi index container holding DHCPv6 leases.
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 identifier.
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< RelayIdIndexTag >::type Lease4StorageRelayIdIndex
DHCPv4 lease storage index by relay identifier.
Defines the logger used by the top-level component of kea-lfc.
Tag for indexes by address.
Tag for indexes by client and subnet identifiers.
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 identifier 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.