Kea 1.5.0
memfile_lease_mgr.h
Go to the documentation of this file.
1// Copyright (C) 2012-2018 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef MEMFILE_LEASE_MGR_H
8#define MEMFILE_LEASE_MGR_H
9
12#include <dhcp/hwaddr.h>
16#include <dhcpsrv/lease_mgr.h>
17#include <util/process_spawn.h>
18
19#include <boost/scoped_ptr.hpp>
20#include <boost/shared_ptr.hpp>
21
22namespace isc {
23namespace dhcp {
24
25class LFCSetup;
26
77class Memfile_LeaseMgr : public LeaseMgr {
78public:
79
90 static const int MAJOR_VERSION = 2;
91
93 static const int MINOR_VERSION = 1;
94
96
97
104 enum Universe {
106 V6
107 };
108
112
113
135
137 virtual ~Memfile_LeaseMgr();
138
140 static std::string getDBVersion();
141
145 virtual bool addLease(const Lease4Ptr& lease);
146
150 virtual bool addLease(const Lease6Ptr& lease);
151
160 virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress& addr) const;
161
172 virtual Lease4Collection getLease4(const isc::dhcp::HWAddr& hwaddr) const;
173
187 virtual Lease4Ptr getLease4(const HWAddr& hwaddr,
188 SubnetID subnet_id) const;
189
193 virtual Lease4Collection getLease4(const ClientId& client_id) const;
194
206 virtual Lease4Ptr getLease4(const ClientId& clientid,
207 const HWAddr& hwaddr,
208 SubnetID subnet_id) const;
209
222 virtual Lease4Ptr getLease4(const ClientId& clientid,
223 SubnetID subnet_id) const;
224
230 virtual Lease4Collection getLeases4(SubnetID subnet_id) const;
231
235 virtual Lease4Collection getLeases4() const;
236
261 virtual Lease4Collection
262 getLeases4(const asiolink::IOAddress& lower_bound_address,
263 const LeasePageSize& page_size) const;
264
274 virtual Lease6Ptr getLease6(Lease::Type type,
275 const isc::asiolink::IOAddress& addr) const;
276
286 const DUID& duid, uint32_t iaid) const;
287
300 virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
301 uint32_t iaid,
302 SubnetID subnet_id) const;
303
309 virtual Lease6Collection getLeases6(SubnetID subnet_id) const;
310
314 virtual Lease6Collection getLeases6() const;
315
321 virtual Lease6Collection getLeases6(const DUID& duid) const;
322
347 virtual Lease6Collection
348 getLeases6(const asiolink::IOAddress& lower_bound_address,
349 const LeasePageSize& page_size) const;
350
361 virtual void getExpiredLeases4(Lease4Collection& expired_leases,
362 const size_t max_leases) const;
363
374 virtual void getExpiredLeases6(Lease6Collection& expired_leases,
375 const size_t max_leases) const;
376
385 virtual void updateLease4(const Lease4Ptr& lease4);
386
395 virtual void updateLease6(const Lease6Ptr& lease6);
396
403 virtual bool deleteLease(const isc::asiolink::IOAddress& addr);
404
412 virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs);
413
421 virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs);
422
430 virtual size_t wipeLeases4(const SubnetID& subnet_id);
431
439 virtual size_t wipeLeases6(const SubnetID& subnet_id);
440
441private:
442
469 template<typename IndexType, typename LeaseType, typename StorageType,
470 typename LeaseFileType>
471 uint64_t deleteExpiredReclaimedLeases(const uint32_t secs,
472 const Universe& universe,
473 StorageType& storage,
474 LeaseFileType& lease_file) const;
475
476public:
477
483 virtual std::string getType() const {
484 return (std::string("memfile"));
485 }
486
492 virtual std::string getName() const {
493 return ("memory");
494 }
495
501 virtual std::string getDescription() const;
502
507 virtual std::pair<uint32_t, uint32_t> getVersion() const {
508 return (std::make_pair(MAJOR_VERSION, MINOR_VERSION));
509 }
510
515 virtual void commit();
516
521 virtual void rollback();
522
524
526
527
538 FILE_PID
539 };
540
559 static std::string appendSuffix(const std::string& file_name,
560 const LFCFileType& file_type);
562
563
567
568
572 std::string getDefaultLeaseFilePath(Universe u) const;
573
580 std::string getLeaseFilePath(Universe u) const;
581
593 bool persistLeases(Universe u) const;
594
596
597private:
598
599
615 std::string initLeaseFilePath(Universe u);
616
672 template<typename LeaseObjectType, typename LeaseFileType,
673 typename StorageType>
674 bool loadLeasesFromFiles(const std::string& filename,
675 boost::shared_ptr<LeaseFileType>& lease_file,
676 StorageType& storage);
677
679 Lease4Storage storage4_;
680
682 Lease6Storage storage6_;
683
685 boost::shared_ptr<CSVLeaseFile4> lease_file4_;
686
688 boost::shared_ptr<CSVLeaseFile6> lease_file6_;
689
690public:
691
696
697
701 bool isLFCRunning() const;
702
705 int getLFCExitStatus() const;
707
716
726
736 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
737 const SubnetID& last_subnet_id);
738
747
757
767 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
768 const SubnetID& last_subnet_id);
769
773
774
775protected:
776
788 virtual void lfcCallback();
790
792
793
794private:
795
812 void lfcSetup(bool conversion_needed = false);
813
836 template<typename LeaseFileType>
837 void lfcExecute(boost::shared_ptr<LeaseFileType>& lease_file);
838
840 boost::scoped_ptr<LFCSetup> lfc_setup_;
841
847
849};
850
851}; // end of isc::dhcp namespace
852}; // end of isc namespace
853
854#endif // MEMFILE_LEASE_MGR_H
Common database connection class.
std::map< std::string, std::string > ParameterMap
Database configuration parameter map.
Holds Client identifier or client IPv4 address.
Definition: duid.h:111
Holds DUID (DHCPv6 Unique Identifier)
Definition: duid.h:27
Abstract Lease Manager.
Definition: lease_mgr.h:222
Wraps value holding size of the page with leases.
Definition: lease_mgr.h:43
Concrete implementation of a lease database backend using flat file.
virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const
Returns existing IPv4 lease for specified IPv4 address.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID &subnet_id)
Creates and runs the IPv6 lease stats query for a single subnet.
virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs)
Deletes all expired-reclaimed DHCPv6 leases.
bool isLFCRunning() const
Checks if the process performing lease file cleanup is running.
virtual size_t wipeLeases4(const SubnetID &subnet_id)
Removes specified IPv4 leases.
virtual size_t wipeLeases6(const SubnetID &subnet_id)
Removed specified IPv6 leases.
virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs)
Deletes all expired-reclaimed DHCPv4 leases.
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv6 leases.
Universe
Specifies universe (V4, V6)
virtual std::string getDescription() const
Returns description of the backend.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID &subnet_id)
Creates and runs the IPv4 lease stats query for a single subnet.
virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID &first_subnet_id, const SubnetID &last_subnet_id)
Creates and runs the IPv4 lease stats query for a single subnet.
virtual bool deleteLease(const isc::asiolink::IOAddress &addr)
Deletes a lease.
LFCFileType
Types of the lease files used by the Lease File Cleanup.
@ FILE_PREVIOUS
Previous Lease File.
virtual void commit()
Commit Transactions.
virtual bool addLease(const Lease4Ptr &lease)
Adds an IPv4 lease.
int getLFCExitStatus() const
Returns the status code returned by the last executed LFC process.
bool persistLeases(Universe u) const
Specifies whether or not leases are written to disk.
virtual std::string getName() const
Returns backend name.
static std::string getDBVersion()
Local version of getDBVersion() class method.
virtual std::string getType() const
Return backend type.
virtual std::pair< uint32_t, uint32_t > getVersion() const
Returns backend version.
virtual LeaseStatsQueryPtr startLeaseStatsQuery6()
Creates and runs the IPv6 lease stats query.
virtual void rollback()
Rollback Transactions.
virtual LeaseStatsQueryPtr startLeaseStatsQuery4()
Creates and runs the IPv4 lease stats query.
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv4 leases.
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const
Returns existing IPv6 lease for a given IPv6 address.
virtual Lease6Collection getLeases6() const
Returns all IPv6 leases.
std::string getLeaseFilePath(Universe u) const
Returns an absolute path to the lease file.
virtual void lfcCallback()
A callback function triggering Lease File Cleanup (LFC).
virtual void updateLease4(const Lease4Ptr &lease4)
Updates IPv4 lease.
virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID &first_subnet_id, const SubnetID &last_subnet_id)
Creates and runs the IPv6 lease stats query for a single subnet.
virtual Lease4Collection getLeases4() const
Returns all IPv4 leases.
static std::string appendSuffix(const std::string &file_name, const LFCFileType &file_type)
Appends appropriate suffix to the file name.
virtual void updateLease6(const Lease6Ptr &lease6)
Updates IPv6 lease.
virtual ~Memfile_LeaseMgr()
Destructor (closes file)
std::string getDefaultLeaseFilePath(Universe u) const
Returns default path to the lease file.
static const int MINOR_VERSION
Defines minor version of the memfile backend.
An abstract API for lease database.
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition: lease.h:463
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition: lease.h:604
boost::shared_ptr< LeaseStatsQuery > LeaseStatsQueryPtr
Defines a pointer to a LeaseStatsQuery.
Definition: lease_mgr.h:207
uint32_t SubnetID
Unique identifier for a subnet (both v4 and v6)
Definition: lease.h:24
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< ClientIdHWAddressSubnetIdIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::const_mem_fun< Lease4, const std::vector< uint8_t > &, &Lease4::getClientIdVector >, 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< 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_ > > > > Lease4Storage
A multi index container holding DHCPv4 leases.
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 > > > > Lease6Storage
A multi index container holding DHCPv6 leases.
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition: lease.h:455
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition: lease.h:248
Defines the logger used by the top-level component of kea-dhcp-ddns.
Hardware type that represents information from DHCPv4 packet.
Definition: hwaddr.h:20
Type
Type of lease or pool.
Definition: lease.h:38