Kea  1.5.0
pgsql_lease_mgr.h
Go to the documentation of this file.
1 // Copyright (C) 2013-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 PGSQL_LEASE_MGR_H
8 #define PGSQL_LEASE_MGR_H
9 
10 #include <dhcp/hwaddr.h>
12 #include <dhcpsrv/lease_mgr.h>
13 #include <pgsql/pgsql_connection.h>
14 #include <pgsql/pgsql_exchange.h>
15 
16 #include <boost/scoped_ptr.hpp>
17 #include <boost/utility.hpp>
18 
19 #include <vector>
20 
21 namespace isc {
22 namespace dhcp {
23 
24 // Forward definitions (needed for shared_ptr definitions)
25 // See pgsql_lease_mgr.cc file for actual class definitions
26 class PgSqlLease4Exchange;
27 class PgSqlLease6Exchange;
28 
34 class PgSqlLeaseMgr : public LeaseMgr {
35 public:
36 
60 
62  virtual ~PgSqlLeaseMgr();
63 
65  static std::string getDBVersion();
66 
75  virtual bool addLease(const Lease4Ptr& lease);
76 
86  virtual bool addLease(const Lease6Ptr& lease);
87 
103  virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress& addr) const;
104 
118  virtual Lease4Collection getLease4(const isc::dhcp::HWAddr& hwaddr) const;
119 
133  virtual Lease4Ptr getLease4(const isc::dhcp::HWAddr& hwaddr,
134  SubnetID subnet_id) const;
135 
149  virtual Lease4Collection getLease4(const ClientId& clientid) const;
150 
161  virtual Lease4Ptr getLease4(const ClientId& client_id, const HWAddr& hwaddr,
162  SubnetID subnet_id) const;
163 
176  virtual Lease4Ptr getLease4(const ClientId& clientid,
177  SubnetID subnet_id) const;
178 
184  virtual Lease4Collection getLeases4(SubnetID subnet_id) const;
185 
189  virtual Lease4Collection getLeases4() const;
190 
215  virtual Lease4Collection
216  getLeases4(const asiolink::IOAddress& lower_bound_address,
217  const LeasePageSize& page_size) const;
218 
234  virtual Lease6Ptr getLease6(Lease::Type type,
235  const isc::asiolink::IOAddress& addr) const;
236 
254  virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
255  uint32_t iaid) const;
256 
270  virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
271  uint32_t iaid, SubnetID subnet_id) const;
272 
278  virtual Lease6Collection getLeases6(SubnetID subnet_id) const;
279 
283  virtual Lease6Collection getLeases6() const;
284 
290  virtual Lease6Collection getLeases6(const DUID& duid) const;
291 
316  virtual Lease6Collection
317  getLeases6(const asiolink::IOAddress& lower_bound_address,
318  const LeasePageSize& page_size) const;
319 
330  virtual void getExpiredLeases4(Lease4Collection& expired_leases,
331  const size_t max_leases) const;
332 
343  virtual void getExpiredLeases6(Lease6Collection& expired_leases,
344  const size_t max_leases) const;
345 
357  virtual void updateLease4(const Lease4Ptr& lease4);
358 
370  virtual void updateLease6(const Lease6Ptr& lease6);
371 
381  virtual bool deleteLease(const isc::asiolink::IOAddress& addr);
382 
390  virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs);
391 
399  virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs);
400 
410 
419  virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID& subnet_id);
420 
421 
431  virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
432  const SubnetID& last_subnet_id);
442 
451  virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID& subnet_id);
452 
462  virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
463  const SubnetID& last_subnet_id);
473  virtual size_t wipeLeases4(const SubnetID& subnet_id);
474 
484  virtual size_t wipeLeases6(const SubnetID& subnet_id);
485 
491  virtual std::string getType() const {
492  return (std::string("postgresql"));
493  }
494 
498  virtual std::string getName() const;
499 
505  virtual std::string getDescription() const;
506 
519  virtual std::pair<uint32_t, uint32_t> getVersion() const;
520 
526  virtual void commit();
527 
533  virtual void rollback();
534 
540  DELETE_LEASE4, // Delete from lease4 by address
541  DELETE_LEASE4_STATE_EXPIRED,// Delete expired lease4s in certain state.
542  DELETE_LEASE6, // Delete from lease6 by address
543  DELETE_LEASE6_STATE_EXPIRED,// Delete expired lease6s in certain state.
544  GET_LEASE4, // Get all IPv4 leases
545  GET_LEASE4_ADDR, // Get lease4 by address
546  GET_LEASE4_CLIENTID, // Get lease4 by client ID
547  GET_LEASE4_CLIENTID_SUBID, // Get lease4 by client ID & subnet ID
548  GET_LEASE4_HWADDR, // Get lease4 by HW address
549  GET_LEASE4_HWADDR_SUBID, // Get lease4 by HW address & subnet ID
550  GET_LEASE4_PAGE, // Get page of leases beginning with an address
551  GET_LEASE4_SUBID, // Get IPv4 leases by subnet ID
552  GET_LEASE4_EXPIRE, // Get expired lease4
553  GET_LEASE6, // Get all IPv6 leases
554  GET_LEASE6_ADDR, // Get lease6 by address
555  GET_LEASE6_DUID_IAID, // Get lease6 by DUID and IAID
556  GET_LEASE6_DUID_IAID_SUBID, // Get lease6 by DUID, IAID and subnet ID
557  GET_LEASE6_PAGE, // Get page of IPv6 leases beginning with an address
558  GET_LEASE6_SUBID, // Get IPv6 leases by subnet ID
559  GET_LEASE6_DUID, // Get IPv6 leases by DUID
560  GET_LEASE6_EXPIRE, // Get expired lease6
561  INSERT_LEASE4, // Add entry to lease4 table
562  INSERT_LEASE6, // Add entry to lease6 table
563  UPDATE_LEASE4, // Update a Lease4 entry
564  UPDATE_LEASE6, // Update a Lease6 entry
565  ALL_LEASE4_STATS, // Fetches IPv4 lease statistics
566  SUBNET_LEASE4_STATS, // Fetched IPv4 lease stats for a single subnet.
567  SUBNET_RANGE_LEASE4_STATS, // Fetched IPv4 lease stats for a subnet range.
568  ALL_LEASE6_STATS, // Fetches IPv6 lease statistics
569  SUBNET_LEASE6_STATS, // Fetched IPv6 lease stats for a single subnet.
570  SUBNET_RANGE_LEASE6_STATS, // Fetched IPv6 lease stats for a subnet range.
571  NUM_STATEMENTS // Number of statements
572  };
573 
574 private:
575 
591  bool addLeaseCommon(StatementIndex stindex, db::PsqlBindArray& bind_array);
592 
613  template <typename Exchange, typename LeaseCollection>
614  void getLeaseCollection(StatementIndex stindex, db::PsqlBindArray& bind_array,
615  Exchange& exchange, LeaseCollection& result,
616  bool single = false) const;
617 
634  void getLeaseCollection(StatementIndex stindex, db::PsqlBindArray& bind_array,
635  Lease4Collection& result) const {
636  getLeaseCollection(stindex, bind_array, exchange4_, result);
637  }
638 
654  void getLeaseCollection(StatementIndex stindex, db::PsqlBindArray& bind_array,
655  Lease6Collection& result) const {
656  getLeaseCollection(stindex, bind_array, exchange6_, result);
657  }
658 
668  void getLease(StatementIndex stindex, db::PsqlBindArray& bind_array,
669  Lease4Ptr& result) const;
670 
680  void getLease(StatementIndex stindex, db::PsqlBindArray& bind_array,
681  Lease6Ptr& result) const;
682 
697  template<typename LeaseCollection>
698  void getExpiredLeasesCommon(LeaseCollection& expired_leases,
699  const size_t max_leases,
700  StatementIndex statement_index) const;
701 
717  template <typename LeasePtr>
718  void updateLeaseCommon(StatementIndex stindex, db::PsqlBindArray& bind_array,
719  const LeasePtr& lease);
720 
735  uint64_t deleteLeaseCommon(StatementIndex stindex,
736  db::PsqlBindArray& bind_array);
737 
747  uint64_t deleteExpiredReclaimedLeasesCommon(const uint32_t secs,
748  StatementIndex statement_index);
749 
754  boost::scoped_ptr<PgSqlLease4Exchange> exchange4_;
755  boost::scoped_ptr<PgSqlLease6Exchange> exchange6_;
756 
758  db::PgSqlConnection conn_;
759 };
760 
761 } // namespace dhcp
762 } // namespace isc
763 
764 #endif // PGSQL_LEASE_MGR_H
isc::dhcp::PgSqlLeaseMgr::updateLease6
virtual void updateLease6(const Lease6Ptr &lease6)
Updates IPv6 lease.
Definition: pgsql_lease_mgr.cc:1691
isc::dhcp::PgSqlLeaseMgr
PostgreSQL Lease Manager.
Definition: pgsql_lease_mgr.h:34
isc::dhcp::LeasePageSize
Wraps value holding size of the page with leases.
Definition: lease_mgr.h:43
isc::dhcp::PgSqlLeaseMgr::getVersion
virtual std::pair< uint32_t, uint32_t > getVersion() const
Returns backend version.
Definition: pgsql_lease_mgr.cc:1859
isc::dhcp::PgSqlLeaseMgr::DELETE_LEASE6_STATE_EXPIRED
@ DELETE_LEASE6_STATE_EXPIRED
Definition: pgsql_lease_mgr.h:543
isc::dhcp::PgSqlLeaseMgr::DELETE_LEASE4_STATE_EXPIRED
@ DELETE_LEASE4_STATE_EXPIRED
Definition: pgsql_lease_mgr.h:541
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_CLIENTID
@ GET_LEASE4_CLIENTID
Definition: pgsql_lease_mgr.h:546
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6_DUID_IAID
@ GET_LEASE6_DUID_IAID
Definition: pgsql_lease_mgr.h:555
isc::dhcp::PgSqlLeaseMgr::getDBVersion
static std::string getDBVersion()
Local version of getDBVersion() class method.
Definition: pgsql_lease_mgr.cc:1117
isc::dhcp::PgSqlLeaseMgr::SUBNET_LEASE6_STATS
@ SUBNET_LEASE6_STATS
Definition: pgsql_lease_mgr.h:569
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_PAGE
@ GET_LEASE4_PAGE
Definition: pgsql_lease_mgr.h:550
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6_PAGE
@ GET_LEASE6_PAGE
Definition: pgsql_lease_mgr.h:557
isc::dhcp::PgSqlLeaseMgr::startSubnetRangeLeaseStatsQuery4
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.
Definition: pgsql_lease_mgr.cc:1796
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6_DUID_IAID_SUBID
@ GET_LEASE6_DUID_IAID_SUBID
Definition: pgsql_lease_mgr.h:556
isc::dhcp::PgSqlLeaseMgr::getLease6
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const
Returns existing IPv6 lease for a given IPv6 address.
Definition: pgsql_lease_mgr.cc:1420
isc::dhcp::PgSqlLeaseMgr::wipeLeases4
virtual size_t wipeLeases4(const SubnetID &subnet_id)
Removes specified IPv4 leases.
Definition: pgsql_lease_mgr.cc:1833
isc::dhcp::PgSqlLeaseMgr::rollback
virtual void rollback()
Rollback Transactions.
Definition: pgsql_lease_mgr.cc:1890
isc::dhcp::Lease4Ptr
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition: lease.h:245
pgsql_exchange.h
isc::dhcp::PgSqlLeaseMgr::getExpiredLeases6
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv6 leases.
Definition: pgsql_lease_mgr.cc:1602
isc::dhcp::PgSqlLeaseMgr::startSubnetLeaseStatsQuery4
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID &subnet_id)
Creates and runs the IPv4 lease stats query for a single subnet.
Definition: pgsql_lease_mgr.cc:1787
isc::dhcp::PgSqlLeaseMgr::startLeaseStatsQuery6
virtual LeaseStatsQueryPtr startLeaseStatsQuery6()
Creates and runs the IPv6 lease stats query.
Definition: pgsql_lease_mgr.cc:1806
isc::dhcp::PgSqlLeaseMgr::getLeases4
virtual Lease4Collection getLeases4() const
Returns all IPv4 leases.
Definition: pgsql_lease_mgr.cc:1374
isc::dhcp::LeaseMgr
Abstract Lease Manager.
Definition: lease_mgr.h:222
isc::dhcp::Lease6Ptr
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition: lease.h:460
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_SUBID
@ GET_LEASE4_SUBID
Definition: pgsql_lease_mgr.h:551
isc::dhcp::PgSqlLeaseMgr::UPDATE_LEASE6
@ UPDATE_LEASE6
Definition: pgsql_lease_mgr.h:564
isc::dhcp::PgSqlLeaseMgr::DELETE_LEASE6
@ DELETE_LEASE6
Definition: pgsql_lease_mgr.h:542
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6_SUBID
@ GET_LEASE6_SUBID
Definition: pgsql_lease_mgr.h:558
isc::dhcp::Lease::Type
Type
Type of lease or pool.
Definition: lease.h:38
isc::dhcp::HWAddr
Hardware type that represents information from DHCPv4 packet.
Definition: hwaddr.h:20
isc::dhcp::PgSqlLeaseMgr::ALL_LEASE6_STATS
@ ALL_LEASE6_STATS
Definition: pgsql_lease_mgr.h:568
isc::dhcp::PgSqlLeaseMgr::deleteLease
virtual bool deleteLease(const isc::asiolink::IOAddress &addr)
Deletes a lease.
Definition: pgsql_lease_mgr.cc:1725
isc::dhcp::PgSqlLeaseMgr::startSubnetLeaseStatsQuery6
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID &subnet_id)
Creates and runs the IPv6 lease stats query for a single subnet.
Definition: pgsql_lease_mgr.cc:1814
isc::dhcp::PgSqlLeaseMgr::PgSqlLeaseMgr
PgSqlLeaseMgr(const db::DatabaseConnection::ParameterMap &parameters)
Constructor.
Definition: pgsql_lease_mgr.cc:1083
isc::dhcp::PgSqlLeaseMgr::getDescription
virtual std::string getDescription() const
Returns description of the backend.
Definition: pgsql_lease_mgr.cc:1854
lease_mgr.h
An abstract API for lease database.
isc::dhcp::PgSqlLeaseMgr::getLease4
virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const
Returns an IPv4 lease for specified IPv4 address.
Definition: pgsql_lease_mgr.cc:1235
isc::dhcp::PgSqlLeaseMgr::wipeLeases6
virtual size_t wipeLeases6(const SubnetID &subnet_id)
Removed specified IPv6 leases.
Definition: pgsql_lease_mgr.cc:1838
isc::dhcp::PgSqlLeaseMgr::getExpiredLeases4
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv4 leases.
Definition: pgsql_lease_mgr.cc:1594
isc
Defines the logger used by the top-level component of kea-dhcp-ddns.
Definition: agent_parser.cc:144
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6_EXPIRE
@ GET_LEASE6_EXPIRE
Definition: pgsql_lease_mgr.h:560
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6_ADDR
@ GET_LEASE6_ADDR
Definition: pgsql_lease_mgr.h:554
isc::dhcp::ClientId
Holds Client identifier or client IPv4 address.
Definition: duid.h:111
isc::dhcp::PgSqlLeaseMgr::~PgSqlLeaseMgr
virtual ~PgSqlLeaseMgr()
Destructor (closes database)
Definition: pgsql_lease_mgr.cc:1113
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_HWADDR
@ GET_LEASE4_HWADDR
Definition: pgsql_lease_mgr.h:548
isc::dhcp::PgSqlLeaseMgr::commit
virtual void commit()
Commit Transactions.
Definition: pgsql_lease_mgr.cc:1885
isc::dhcp::PgSqlLeaseMgr::INSERT_LEASE4
@ INSERT_LEASE4
Definition: pgsql_lease_mgr.h:561
isc::dhcp::LeasePtr
boost::shared_ptr< Lease > LeasePtr
Pointer to the lease object.
Definition: lease.h:26
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_EXPIRE
@ GET_LEASE4_EXPIRE
Definition: pgsql_lease_mgr.h:552
isc::dhcp::PgSqlLeaseMgr::SUBNET_LEASE4_STATS
@ SUBNET_LEASE4_STATS
Definition: pgsql_lease_mgr.h:566
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4
@ GET_LEASE4
Definition: pgsql_lease_mgr.h:544
isc::dhcp::PgSqlLeaseMgr::startSubnetRangeLeaseStatsQuery6
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.
Definition: pgsql_lease_mgr.cc:1823
isc::dhcp::PgSqlLeaseMgr::deleteExpiredReclaimedLeases6
virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs)
Deletes all expired-reclaimed DHCPv6 leases.
Definition: pgsql_lease_mgr.cc:1753
hwaddr.h
isc::dhcp::PgSqlLeaseMgr::deleteExpiredReclaimedLeases4
virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs)
Deletes all expired-reclaimed DHCPv4 leases.
Definition: pgsql_lease_mgr.cc:1745
isc::dhcp::PgSqlLeaseMgr::ALL_LEASE4_STATS
@ ALL_LEASE4_STATS
Definition: pgsql_lease_mgr.h:565
isc::dhcp::PgSqlLeaseMgr::addLease
virtual bool addLease(const Lease4Ptr &lease)
Adds an IPv4 lease.
Definition: pgsql_lease_mgr.cc:1151
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_ADDR
@ GET_LEASE4_ADDR
Definition: pgsql_lease_mgr.h:545
isc::dhcp::PgSqlLeaseMgr::UPDATE_LEASE4
@ UPDATE_LEASE4
Definition: pgsql_lease_mgr.h:563
isc::dhcp::PgSqlLeaseMgr::startLeaseStatsQuery4
virtual LeaseStatsQueryPtr startLeaseStatsQuery4()
Creates and runs the IPv4 lease stats query.
Definition: pgsql_lease_mgr.cc:1779
isc::dhcp::Lease4Collection
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition: lease.h:455
pgsql_connection.h
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_CLIENTID_SUBID
@ GET_LEASE4_CLIENTID_SUBID
Definition: pgsql_lease_mgr.h:547
isc::dhcp::LeaseStatsQueryPtr
boost::shared_ptr< LeaseStatsQuery > LeaseStatsQueryPtr
Defines a pointer to a LeaseStatsQuery.
Definition: lease_mgr.h:207
isc::dhcp::DUID
Holds DUID (DHCPv6 Unique Identifier)
Definition: duid.h:27
isc::db::PsqlBindArray
Definition: pgsql_exchange.h:44
isc::dhcp::PgSqlLeaseMgr::SUBNET_RANGE_LEASE6_STATS
@ SUBNET_RANGE_LEASE6_STATS
Definition: pgsql_lease_mgr.h:570
isc::dhcp::PgSqlLeaseMgr::DELETE_LEASE4
@ DELETE_LEASE4
Definition: pgsql_lease_mgr.h:540
isc::dhcp::PgSqlLeaseMgr::getLeases6
virtual Lease6Collection getLeases6() const
Returns all IPv6 leases.
Definition: pgsql_lease_mgr.cc:1542
isc::dhcp::PgSqlLeaseMgr::SUBNET_RANGE_LEASE4_STATS
@ SUBNET_RANGE_LEASE4_STATS
Definition: pgsql_lease_mgr.h:567
isc::dhcp::SubnetID
uint32_t SubnetID
Unique identifier for a subnet (both v4 and v6)
Definition: lease.h:24
isc::dhcp::Lease6Collection
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition: lease.h:604
isc::db::DatabaseConnection::ParameterMap
std::map< std::string, std::string > ParameterMap
Database configuration parameter map.
Definition: database_connection.h:152
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6_DUID
@ GET_LEASE6_DUID
Definition: pgsql_lease_mgr.h:559
isc::dhcp::PgSqlLeaseMgr::getName
virtual std::string getName() const
Returns name of the database.
Definition: pgsql_lease_mgr.cc:1843
isc::dhcp::PgSqlLeaseMgr::updateLease4
virtual void updateLease4(const Lease4Ptr &lease4)
Updates IPv4 lease.
Definition: pgsql_lease_mgr.cc:1671
dhcpsrv_exceptions.h
isc::dhcp::PgSqlLeaseMgr::GET_LEASE6
@ GET_LEASE6
Definition: pgsql_lease_mgr.h:553
isc::dhcp::PgSqlLeaseMgr::NUM_STATEMENTS
@ NUM_STATEMENTS
Definition: pgsql_lease_mgr.h:571
isc::dhcp::PgSqlLeaseMgr::INSERT_LEASE6
@ INSERT_LEASE6
Definition: pgsql_lease_mgr.h:562
isc::dhcp::PgSqlLeaseMgr::getType
virtual std::string getType() const
Return backend type.
Definition: pgsql_lease_mgr.h:491
isc::dhcp::PgSqlLeaseMgr::GET_LEASE4_HWADDR_SUBID
@ GET_LEASE4_HWADDR_SUBID
Definition: pgsql_lease_mgr.h:549
isc::dhcp::PgSqlLeaseMgr::StatementIndex
StatementIndex
Statement Tags.
Definition: pgsql_lease_mgr.h:539