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 
22 namespace isc {
23 namespace dhcp {
24 
25 class LFCSetup;
26 
77 class Memfile_LeaseMgr : public LeaseMgr {
78 public:
79 
90  static const int MAJOR_VERSION = 2;
91 
93  static const int MINOR_VERSION = 1;
94 
96 
97 
104  enum Universe {
105  V4,
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 
441 private:
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 
476 public:
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 
532  enum LFCFileType {
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 
597 private:
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 
690 public:
691 
696 
697 
701  bool isLFCRunning() const;
702 
705  int getLFCExitStatus() const;
707 
716 
725  virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID& subnet_id);
726 
736  virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
737  const SubnetID& last_subnet_id);
738 
747 
756  virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID& subnet_id);
757 
767  virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
768  const SubnetID& last_subnet_id);
769 
773 
774 
775 protected:
776 
788  virtual void lfcCallback();
790 
792 
793 
794 private:
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
virtual bool deleteLease(const isc::asiolink::IOAddress &addr)
Deletes a lease.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID &subnet_id)
Creates and runs the IPv6 lease stats query for a single subnet.
virtual void rollback()
Rollback Transactions.
virtual std::string getName() const
Returns backend name.
virtual ~Memfile_LeaseMgr()
Destructor (closes file)
boost::shared_ptr< LeaseStatsQuery > LeaseStatsQueryPtr
Defines a pointer to a LeaseStatsQuery.
Definition: lease_mgr.h:207
Concrete implementation of a lease database backend using flat file.
virtual std::string getDescription() const
Returns description of the backend.
Abstract Lease Manager.
Definition: lease_mgr.h:222
An abstract API for lease database.
virtual size_t wipeLeases6(const SubnetID &subnet_id)
Removed specified IPv6 leases.
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition: lease.h:455
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.
Universe
Specifies universe (V4, V6)
Common database connection class.
Memfile_LeaseMgr(const db::DatabaseConnection::ParameterMap &parameters)
The sole lease manager constructor.
virtual Lease6Collection getLeases6() const
Returns all IPv6 leases.
static std::string getDBVersion()
Local version of getDBVersion() class method.
LFCFileType
Types of the lease files used by the Lease File Cleanup.
Holds DUID (DHCPv6 Unique Identifier)
Definition: duid.h:27
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID &subnet_id)
Creates and runs the IPv4 lease stats query for a single subnet.
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const
Returns existing IPv6 lease for a given IPv6 address.
virtual LeaseStatsQueryPtr startLeaseStatsQuery6()
Creates and runs the IPv6 lease stats query.
virtual void lfcCallback()
A callback function triggering Lease File Cleanup (LFC).
bool isLFCRunning() const
Checks if the process performing lease file cleanup is running.
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition: lease.h:245
virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs)
Deletes all expired-reclaimed DHCPv4 leases.
virtual void commit()
Commit Transactions.
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv6 leases.
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.
virtual std::string getType() const
Return backend type.
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.
static const int MINOR_VERSION
Defines minor version of the memfile backend.
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition: lease.h:604
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 size_t wipeLeases4(const SubnetID &subnet_id)
Removes specified IPv4 leases.
virtual LeaseStatsQueryPtr startLeaseStatsQuery4()
Creates and runs the IPv4 lease stats query.
std::string getLeaseFilePath(Universe u) const
Returns an absolute path to the lease file.
Defines the logger used by the top-level component of kea-dhcp-ddns.
bool persistLeases(Universe u) const
Specifies whether or not leases are written to disk.
virtual void updateLease4(const Lease4Ptr &lease4)
Updates IPv4 lease.
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv4 leases.
virtual std::pair< uint32_t, uint32_t > getVersion() const
Returns backend version.
std::string getDefaultLeaseFilePath(Universe u) const
Returns default path to the lease file.
Type
Type of lease or pool.
Definition: lease.h:38
Holds Client identifier or client IPv4 address.
Definition: duid.h:111
virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs)
Deletes all expired-reclaimed DHCPv6 leases.
Hardware type that represents information from DHCPv4 packet.
Definition: hwaddr.h:20
Wraps value holding size of the page with leases.
Definition: lease_mgr.h:43
std::map< std::string, std::string > ParameterMap
Database configuration parameter map.
int getLFCExitStatus() const
Returns the status code returned by the last executed LFC process.
virtual void updateLease6(const Lease6Ptr &lease6)
Updates IPv6 lease.
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition: lease.h:460
static std::string appendSuffix(const std::string &file_name, const LFCFileType &file_type)
Appends appropriate suffix to the file name.
virtual Lease4Collection getLeases4() const
Returns all IPv4 leases.
virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const
Returns existing IPv4 lease for specified IPv4 address.
uint32_t SubnetID
Unique identifier for a subnet (both v4 and v6)
Definition: lease.h:24
virtual bool addLease(const Lease4Ptr &lease)
Adds an IPv4 lease.