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>
15
16#include <boost/scoped_ptr.hpp>
17#include <boost/utility.hpp>
18
19#include <vector>
20
21namespace isc {
22namespace dhcp {
23
24// Forward definitions (needed for shared_ptr definitions)
25// See pgsql_lease_mgr.cc file for actual class definitions
26class PgSqlLease4Exchange;
27class PgSqlLease6Exchange;
28
34class PgSqlLeaseMgr : public LeaseMgr {
35public:
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
420
421
431 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
432 const SubnetID& last_subnet_id);
442
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
574private:
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
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
PostgreSQL Lease Manager.
virtual std::string getType() const
Return backend type.
virtual bool addLease(const Lease4Ptr &lease)
Adds an IPv4 lease.
virtual Lease6Collection getLeases6() const
Returns all IPv6 leases.
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 Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const
Returns an IPv4 lease for specified IPv4 address.
virtual void rollback()
Rollback Transactions.
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const
Returns existing IPv6 lease for a given IPv6 address.
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.
static std::string getDBVersion()
Local version of getDBVersion() class method.
virtual Lease4Collection getLeases4() const
Returns all IPv4 leases.
virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs)
Deletes all expired-reclaimed DHCPv4 leases.
virtual void updateLease4(const Lease4Ptr &lease4)
Updates IPv4 lease.
virtual size_t wipeLeases4(const SubnetID &subnet_id)
Removes specified IPv4 leases.
virtual std::string getName() const
Returns name of the database.
virtual void updateLease6(const Lease6Ptr &lease6)
Updates IPv6 lease.
virtual LeaseStatsQueryPtr startLeaseStatsQuery6()
Creates and runs the IPv6 lease stats query.
virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs)
Deletes all expired-reclaimed DHCPv6 leases.
StatementIndex
Statement Tags.
virtual void commit()
Commit Transactions.
virtual size_t wipeLeases6(const SubnetID &subnet_id)
Removed specified IPv6 leases.
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv6 leases.
virtual LeaseStatsQueryPtr startLeaseStatsQuery4()
Creates and runs the IPv4 lease stats query.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID &subnet_id)
Creates and runs the IPv6 lease stats query for a single subnet.
virtual std::pair< uint32_t, uint32_t > getVersion() const
Returns backend version.
virtual ~PgSqlLeaseMgr()
Destructor (closes database)
virtual bool deleteLease(const isc::asiolink::IOAddress &addr)
Deletes a lease.
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv4 leases.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID &subnet_id)
Creates and runs the IPv4 lease stats query for a single subnet.
virtual std::string getDescription() const
Returns description of the 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::shared_ptr< Lease > LeasePtr
Pointer to the lease object.
Definition: lease.h:29
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