Kea 1.5.0
mysql_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 MYSQL_LEASE_MGR_H
8#define MYSQL_LEASE_MGR_H
9
10#include <dhcp/hwaddr.h>
12#include <dhcpsrv/lease_mgr.h>
14
15#include <boost/scoped_ptr.hpp>
16#include <boost/utility.hpp>
17#include <mysql.h>
18
19#include <time.h>
20
21namespace isc {
22namespace dhcp {
23
24// Forward declaration of the Lease exchange objects. These classes are defined
25// in the .cc file.
26class MySqlLease4Exchange;
27class MySqlLease6Exchange;
28
34
35class MySqlLeaseMgr : public LeaseMgr {
36public:
37
62
64 virtual ~MySqlLeaseMgr();
65
67 static std::string getDBVersion();
68
78 virtual bool addLease(const Lease4Ptr& lease);
79
89 virtual bool addLease(const Lease6Ptr& lease);
90
109 virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress& addr) const;
110
111
128 virtual Lease4Collection getLease4(const isc::dhcp::HWAddr& hwaddr) const;
129
146 virtual Lease4Ptr getLease4(const isc::dhcp::HWAddr& hwaddr,
147 SubnetID subnet_id) const;
148
165 virtual Lease4Collection getLease4(const ClientId& clientid) const;
166
177 virtual Lease4Ptr getLease4(const ClientId& client_id, const HWAddr& hwaddr,
178 SubnetID subnet_id) const;
179
195 virtual Lease4Ptr getLease4(const ClientId& clientid,
196 SubnetID subnet_id) const;
197
203 virtual Lease4Collection getLeases4(SubnetID subnet_id) const;
204
208 virtual Lease4Collection getLeases4() const;
209
234 virtual Lease4Collection
235 getLeases4(const asiolink::IOAddress& lower_bound_address,
236 const LeasePageSize& page_size) const;
237
256 virtual Lease6Ptr getLease6(Lease::Type type,
257 const isc::asiolink::IOAddress& addr) const;
258
279 virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
280 uint32_t iaid) const;
281
298 virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
299 uint32_t iaid, SubnetID subnet_id) const;
300
306 virtual Lease6Collection getLeases6(SubnetID subnet_id) const;
307
311 virtual Lease6Collection getLeases6() const;
312
318 virtual Lease6Collection getLeases6(const DUID& duid) const;
319
344 virtual Lease6Collection
345 getLeases6(const asiolink::IOAddress& lower_bound_address,
346 const LeasePageSize& page_size) const;
347
358 virtual void getExpiredLeases4(Lease4Collection& expired_leases,
359 const size_t max_leases) const;
360
371 virtual void getExpiredLeases6(Lease6Collection& expired_leases,
372 const size_t max_leases) const;
373
385 virtual void updateLease4(const Lease4Ptr& lease4);
386
398 virtual void updateLease6(const Lease6Ptr& lease6);
399
409 virtual bool deleteLease(const isc::asiolink::IOAddress& addr);
410
418 virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs);
419
427 virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs);
428
438
448
458 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
459 const SubnetID& last_subnet_id);
460
470
480
490 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
491 const SubnetID& last_subnet_id);
492
502 virtual size_t wipeLeases4(const SubnetID& subnet_id);
503
513 virtual size_t wipeLeases6(const SubnetID& subnet_id);
514
520 virtual std::string getType() const {
521 return (std::string("mysql"));
522 }
523
529 virtual std::string getName() const;
530
536 virtual std::string getDescription() const;
537
550 virtual std::pair<uint32_t, uint32_t> getVersion() const;
551
558 virtual void commit();
559
566 virtual void rollback();
567
572 DELETE_LEASE4, // Delete from lease4 by address
573 DELETE_LEASE4_STATE_EXPIRED, // Delete expired lease4 in a given state
574 DELETE_LEASE6, // Delete from lease6 by address
575 DELETE_LEASE6_STATE_EXPIRED, // Delete expired lease6 in a given state
576 GET_LEASE4, // Get all IPv4 leases
577 GET_LEASE4_ADDR, // Get lease4 by address
578 GET_LEASE4_CLIENTID, // Get lease4 by client ID
579 GET_LEASE4_CLIENTID_SUBID, // Get lease4 by client ID & subnet ID
580 GET_LEASE4_HWADDR, // Get lease4 by HW address
581 GET_LEASE4_HWADDR_SUBID, // Get lease4 by HW address & subnet ID
582 GET_LEASE4_PAGE, // Get page of leases beginning with an address
583 GET_LEASE4_SUBID, // Get IPv4 leases by subnet ID
584 GET_LEASE4_EXPIRE, // Get lease4 by expiration.
585 GET_LEASE6, // Get all IPv6 leases
586 GET_LEASE6_ADDR, // Get lease6 by address
587 GET_LEASE6_DUID_IAID, // Get lease6 by DUID and IAID
588 GET_LEASE6_DUID_IAID_SUBID, // Get lease6 by DUID, IAID and subnet ID
589 GET_LEASE6_PAGE, // Get page of leases beginning with an address
590 GET_LEASE6_SUBID, // Get IPv6 leases by subnet ID
591 GET_LEASE6_DUID, // Get IPv6 leases by DUID
592 GET_LEASE6_EXPIRE, // Get lease6 by expiration.
593 INSERT_LEASE4, // Add entry to lease4 table
594 INSERT_LEASE6, // Add entry to lease6 table
595 UPDATE_LEASE4, // Update a Lease4 entry
596 UPDATE_LEASE6, // Update a Lease6 entry
597 ALL_LEASE4_STATS, // Fetches IPv4 lease statistics
598 SUBNET_LEASE4_STATS, // Fetched IPv4 lease stats for a single subnet.
599 SUBNET_RANGE_LEASE4_STATS, // Fetched IPv4 lease stats for a subnet range.
600 ALL_LEASE6_STATS, // Fetches IPv6 lease statistics
601 SUBNET_LEASE6_STATS, // Fetched IPv6 lease stats for a single subnet.
602 SUBNET_RANGE_LEASE6_STATS, // Fetched IPv6 lease stats for a subnet range.
603 NUM_STATEMENTS // Number of statements
604 };
605
606private:
622 bool addLeaseCommon(StatementIndex stindex, std::vector<MYSQL_BIND>& bind);
623
644 template <typename Exchange, typename LeaseCollection>
645 void getLeaseCollection(StatementIndex stindex, MYSQL_BIND* bind,
646 Exchange& exchange, LeaseCollection& result,
647 bool single = false) const;
648
665 void getLeaseCollection(StatementIndex stindex, MYSQL_BIND* bind,
666 Lease4Collection& result) const {
667 getLeaseCollection(stindex, bind, exchange4_, result);
668 }
669
685 void getLeaseCollection(StatementIndex stindex, MYSQL_BIND* bind,
686 Lease6Collection& result) const {
687 getLeaseCollection(stindex, bind, exchange6_, result);
688 }
689
699 void getLease(StatementIndex stindex, MYSQL_BIND* bind,
700 Lease4Ptr& result) const;
701
711 void getLease(StatementIndex stindex, MYSQL_BIND* bind,
712 Lease6Ptr& result) const;
713
714
729 template<typename LeaseCollection>
730 void getExpiredLeasesCommon(LeaseCollection& expired_leases,
731 const size_t max_leases,
732 StatementIndex statement_index) const;
733
750 template <typename LeasePtr>
751 void updateLeaseCommon(StatementIndex stindex, MYSQL_BIND* bind,
752 const LeasePtr& lease);
753
769 uint64_t deleteLeaseCommon(StatementIndex stindex, MYSQL_BIND* bind);
770
780 uint64_t deleteExpiredReclaimedLeasesCommon(const uint32_t secs,
781 StatementIndex statement_index);
782
793 void checkError(int status, StatementIndex index,
794 const char* what) const;
795
796 // Members
797
802 boost::scoped_ptr<MySqlLease4Exchange> exchange4_;
803 boost::scoped_ptr<MySqlLease6Exchange> exchange6_;
804
806 db::MySqlConnection conn_;
807};
808
809} // namespace dhcp
810} // namespace isc
811
812#endif // MYSQL_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
MySQL Lease Manager.
virtual std::string getName() const
Returns backend name.
virtual std::string getType() const
Return backend type.
virtual void rollback()
Rollback Transactions.
virtual size_t wipeLeases4(const SubnetID &subnet_id)
Removes specified IPv4 leases.
static std::string getDBVersion()
Local version of getDBVersion() class method.
virtual std::string getDescription() const
Returns description of the backend.
virtual void commit()
Commit Transactions.
virtual bool deleteLease(const isc::asiolink::IOAddress &addr)
Deletes a lease.
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv6 leases.
virtual std::pair< uint32_t, uint32_t > getVersion() const
Returns backend version.
virtual Lease6Collection getLeases6() const
Returns all IPv6 leases.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID &subnet_id)
Creates and runs the IPv6 lease stats query for a single subnet.
virtual bool addLease(const Lease4Ptr &lease)
Adds an IPv4 lease.
virtual size_t wipeLeases6(const SubnetID &subnet_id)
Removed specified IPv6 leases.
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const
Returns existing IPv6 lease for a given IPv6 address.
virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs)
Deletes all expired-reclaimed DHCPv6 leases.
virtual void updateLease6(const Lease6Ptr &lease6)
Updates IPv6 lease.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID &subnet_id)
Creates and runs the IPv4 lease stats query for a single subnet.
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 LeaseStatsQueryPtr startLeaseStatsQuery4()
Creates and runs the IPv4 lease stats query.
virtual void updateLease4(const Lease4Ptr &lease4)
Updates IPv4 lease.
virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs)
Deletes all expired-reclaimed DHCPv4 leases.
StatementIndex
Statement Tags.
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const
Returns a collection of expired DHCPv4 leases.
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 LeaseStatsQueryPtr startLeaseStatsQuery6()
Creates and runs the IPv6 lease stats query.
virtual Lease4Collection getLeases4() const
Returns all IPv4 leases.
virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const
Returns an IPv4 lease for specified IPv4 address.
virtual ~MySqlLeaseMgr()
Destructor (closes database)
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