Kea 2.0.1
lease_mgr.h
Go to the documentation of this file.
1// Copyright (C) 2012-2021 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 LEASE_MGR_H
8#define LEASE_MGR_H
9
10#include <asiolink/io_address.h>
11#include <asiolink/io_service.h>
13#include <dhcp/duid.h>
14#include <dhcp/option.h>
15#include <dhcp/hwaddr.h>
16#include <dhcpsrv/lease.h>
17#include <dhcpsrv/subnet.h>
18
19#include <boost/noncopyable.hpp>
20#include <boost/shared_ptr.hpp>
21
22#include <fstream>
23#include <iostream>
24#include <map>
25#include <string>
26#include <utility>
27#include <vector>
28
36namespace isc {
37namespace dhcp {
38
40typedef std::pair<uint32_t, uint32_t> VersionPair;
41
44public:
45
51 explicit LeasePageSize(const size_t page_size);
52
53 const size_t page_size_;
54};
55
64 subnet_id_(0), lease_type_(Lease::TYPE_NA),
65 lease_state_(Lease::STATE_DEFAULT), state_count_(0) {
66 }
67
75 LeaseStatsRow(const SubnetID& subnet_id, const uint32_t lease_state,
76 const int64_t state_count)
77 : subnet_id_(subnet_id), lease_type_(Lease::TYPE_NA),
78 lease_state_(lease_state), state_count_(state_count) {
79 }
80
87 LeaseStatsRow(const SubnetID& subnet_id, const Lease::Type& lease_type,
88 const uint32_t lease_state, const int64_t state_count)
89 : subnet_id_(subnet_id), lease_type_(lease_type),
90 lease_state_(lease_state), state_count_(state_count) {
91 }
92
94 bool operator< (const LeaseStatsRow &rhs) const {
95 if (subnet_id_ < rhs.subnet_id_) {
96 return (true);
97 }
98
99 if (subnet_id_ == rhs.subnet_id_ &&
100 lease_type_ < rhs.lease_type_) {
101 return (true);
102 }
103
104 if (subnet_id_ == rhs.subnet_id_ &&
105 lease_type_ == rhs.lease_type_ &&
107 return (true);
108 }
109
110 return (false);
111 }
112
118 uint32_t lease_state_;
121};
122
129public:
131 typedef enum {
136
140
147 LeaseStatsQuery(const SubnetID& subnet_id);
148
157 LeaseStatsQuery(const SubnetID& first_subnet_id, const SubnetID& last_subnet_id);
158
160 virtual ~LeaseStatsQuery() {};
161
167 virtual void start() {};
168
175 virtual bool getNextRow(LeaseStatsRow& row);
176
179 return (first_subnet_id_);
180 };
181
184 return (last_subnet_id_);
185 };
186
191 return (select_mode_);
192 };
193
194protected:
197
200
201private:
203 SelectMode select_mode_;
204};
205
207typedef boost::shared_ptr<LeaseStatsQuery> LeaseStatsQueryPtr;
208
210typedef boost::shared_ptr<LeaseStatsRow> LeaseStatsRowPtr;
211
222class LeaseMgr {
223public:
227 {}
228
230 virtual ~LeaseMgr()
231 {}
232
235 static std::string getDBVersion();
236
248 virtual bool addLease(const Lease4Ptr& lease) = 0;
249
261 virtual bool addLease(const Lease6Ptr& lease) = 0;
262
275 virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress& addr) const = 0;
276
287 virtual Lease4Collection getLease4(const isc::dhcp::HWAddr& hwaddr) const = 0;
288
299 virtual Lease4Ptr getLease4(const isc::dhcp::HWAddr& hwaddr,
300 SubnetID subnet_id) const = 0;
301
312 virtual Lease4Collection getLease4(const ClientId& clientid) const = 0;
313
323 virtual Lease4Ptr getLease4(const ClientId& clientid,
324 SubnetID subnet_id) const = 0;
325
331 virtual Lease4Collection getLeases4(SubnetID subnet_id) const = 0;
332
338 virtual Lease4Collection getLeases4(const std::string& hostname) const = 0;
339
343 virtual Lease4Collection getLeases4() const = 0;
344
369 virtual Lease4Collection
370 getLeases4(const asiolink::IOAddress& lower_bound_address,
371 const LeasePageSize& page_size) const = 0;
372
384 const isc::asiolink::IOAddress& addr) const = 0;
385
398 virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
399 uint32_t iaid) const = 0;
400
412 virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
413 uint32_t iaid, SubnetID subnet_id) const = 0;
414
438 Lease6Ptr getLease6(Lease::Type type, const DUID& duid,
439 uint32_t iaid, SubnetID subnet_id) const;
440
446 virtual Lease6Collection getLeases6(SubnetID subnet_id) const = 0;
447
453 virtual Lease6Collection getLeases6(const std::string& hostname) const = 0;
454
458 virtual Lease6Collection getLeases6() const = 0;
459
464 virtual Lease6Collection getLeases6(const DUID& duid) const = 0;
465
490 virtual Lease6Collection
491 getLeases6(const asiolink::IOAddress& lower_bound_address,
492 const LeasePageSize& page_size) const = 0;
493
504 virtual void getExpiredLeases4(Lease4Collection& expired_leases,
505 const size_t max_leases) const = 0;
506
517 virtual void getExpiredLeases6(Lease6Collection& expired_leases,
518 const size_t max_leases) const = 0;
519
525 virtual void updateLease4(const Lease4Ptr& lease4) = 0;
526
530 virtual void updateLease6(const Lease6Ptr& lease6) = 0;
531
540 virtual bool deleteLease(const Lease4Ptr& lease) = 0;
541
550 virtual bool deleteLease(const Lease6Ptr& lease) = 0;
551
559 virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs) = 0;
560
568 virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs) = 0;
569
587 void recountLeaseStats4();
588
599
610
622 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
623 const SubnetID& last_subnet_id);
624
644 void recountLeaseStats6();
645
656
667
679 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
680 const SubnetID& last_subnet_id);
681
689 virtual size_t wipeLeases4(const SubnetID& subnet_id) = 0;
690
698 virtual size_t wipeLeases6(const SubnetID& subnet_id) = 0;
699
705 virtual std::string getType() const = 0;
706
713 virtual std::string getName() const = 0;
714
720 virtual std::string getDescription() const = 0;
721
736 virtual VersionPair getVersion() const = 0;
737
742 virtual void commit() = 0;
743
748 virtual void rollback() = 0;
749
753 static void setIOService(const isc::asiolink::IOServicePtr& io_service) {
754 io_service_ = io_service;
755 }
756
759 return (io_service_);
760 }
761
762private:
764 static isc::asiolink::IOServicePtr io_service_;
765};
766
767} // namespace dhcp
768} // namespace isc
769
770#endif // LEASE_MGR_H
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
virtual Lease6Collection getLeases6(SubnetID subnet_id) const =0
Returns all IPv6 leases for the particular subnet identifier.
virtual Lease4Collection getLeases4(const std::string &hostname) const =0
Returns all IPv4 leases for the particular hostname.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID &subnet_id)
Creates and runs the IPv6 lease stats query for a single subnet.
Definition: lease_mgr.cc:343
virtual void rollback()=0
Rollback Transactions.
static isc::asiolink::IOServicePtr & getIOService()
Returns pointer to the IO service.
Definition: lease_mgr.h:758
virtual Lease4Collection getLease4(const ClientId &clientid) const =0
Returns existing IPv4 lease for specified client-id.
virtual Lease6Collection getLeases6() const =0
Returns all IPv6 leases.
virtual Lease6Collection getLeases6(Lease::Type type, const DUID &duid, uint32_t iaid) const =0
Returns existing IPv6 leases for a given DUID+IA combination.
void recountLeaseStats6()
Recalculates per-subnet and global stats for IPv6 leases.
Definition: lease_mgr.cc:215
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const =0
Returns a collection of expired DHCPv6 leases.
virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs)=0
Deletes all expired and reclaimed DHCPv6 leases.
virtual size_t wipeLeases6(const SubnetID &subnet_id)=0
Virtual method which removes specified leases.
virtual Lease4Collection getLeases4(SubnetID subnet_id) const =0
Returns all IPv4 leases for the particular subnet identifier.
LeaseMgr()
Constructor.
Definition: lease_mgr.h:226
virtual ~LeaseMgr()
Destructor.
Definition: lease_mgr.h:230
virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const =0
Returns an IPv4 lease for specified IPv4 address.
virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs)=0
Deletes all expired and reclaimed DHCPv4 leases.
virtual Lease6Collection getLeases6(const asiolink::IOAddress &lower_bound_address, const LeasePageSize &page_size) const =0
Returns range of IPv6 leases using paging.
virtual Lease4Ptr getLease4(const isc::dhcp::HWAddr &hwaddr, SubnetID subnet_id) const =0
Returns existing IPv4 leases for specified hardware address and a subnet.
virtual bool addLease(const Lease6Ptr &lease)=0
Adds an IPv6 lease.
virtual Lease6Collection getLeases6(Lease::Type type, const DUID &duid, uint32_t iaid, SubnetID subnet_id) const =0
Returns existing IPv6 lease for a given DUID+IA combination.
virtual void commit()=0
Commit Transactions.
virtual VersionPair getVersion() const =0
Returns backend version.
virtual Lease6Collection getLeases6(const DUID &duid) const =0
Returns collection of leases for matching DUID.
virtual bool addLease(const Lease4Ptr &lease)=0
Adds an IPv4 lease.
virtual std::string getType() const =0
Return backend type.
virtual Lease4Ptr getLease4(const ClientId &clientid, SubnetID subnet_id) const =0
Returns existing IPv4 lease for specified client-id.
virtual size_t wipeLeases4(const SubnetID &subnet_id)=0
Virtual method which removes specified leases.
virtual bool deleteLease(const Lease4Ptr &lease)=0
Deletes an IPv4 lease.
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: lease_mgr.cc:204
virtual std::string getName() const =0
Returns backend name.
void recountLeaseStats4()
Recalculates per-subnet and global stats for IPv4 leases.
Definition: lease_mgr.cc:67
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const =0
Returns a collection of expired DHCPv4 leases.
static std::string getDBVersion()
Class method to return extended version info This class method must be redeclared and redefined in de...
Definition: lease_mgr.cc:354
virtual void updateLease4(const Lease4Ptr &lease4)=0
Updates IPv4 lease.
virtual Lease4Collection getLeases4() const =0
Returns all IPv4 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.
Definition: lease_mgr.cc:348
virtual bool deleteLease(const Lease6Ptr &lease)=0
Deletes an IPv6 lease.
virtual Lease4Collection getLeases4(const asiolink::IOAddress &lower_bound_address, const LeasePageSize &page_size) const =0
Returns range of IPv4 leases using paging.
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID &subnet_id)
Creates and runs the IPv4 lease stats query for a single subnet.
Definition: lease_mgr.cc:199
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const =0
Returns existing IPv6 lease for a given IPv6 address.
virtual Lease4Collection getLease4(const isc::dhcp::HWAddr &hwaddr) const =0
Returns existing IPv4 leases for specified hardware address.
virtual std::string getDescription() const =0
Returns description of the backend.
virtual LeaseStatsQueryPtr startLeaseStatsQuery4()
Creates and runs the IPv4 lease stats query for all subnets.
Definition: lease_mgr.cc:194
static void setIOService(const isc::asiolink::IOServicePtr &io_service)
Sets IO service to be used by the Lease Manager.
Definition: lease_mgr.h:753
virtual Lease6Collection getLeases6(const std::string &hostname) const =0
Returns all IPv6 leases for the particular hostname.
virtual LeaseStatsQueryPtr startLeaseStatsQuery6()
Creates and runs the IPv6 lease stats query for all subnets.
Definition: lease_mgr.cc:338
virtual void updateLease6(const Lease6Ptr &lease6)=0
Updates IPv6 lease.
Wraps value holding size of the page with leases.
Definition: lease_mgr.h:43
const size_t page_size_
Holds page size.
Definition: lease_mgr.h:53
LeasePageSize(const size_t page_size)
Constructor.
Definition: lease_mgr.cc:36
Base class for fulfilling a statistical lease data query.
Definition: lease_mgr.h:128
virtual ~LeaseStatsQuery()
virtual destructor
Definition: lease_mgr.h:160
SubnetID getLastSubnetID() const
Returns the value of last subnet ID specified (or zero)
Definition: lease_mgr.h:183
SubnetID first_subnet_id_
First (or only) subnet_id in the selection criteria.
Definition: lease_mgr.h:192
virtual void start()
Executes the query.
Definition: lease_mgr.h:167
SubnetID getFirstSubnetID() const
Returns the value of first subnet ID specified (or zero)
Definition: lease_mgr.h:178
SelectMode getSelectMode() const
Returns the selection criteria mode The value returned is based upon the constructor variant used and...
Definition: lease_mgr.h:190
SubnetID last_subnet_id_
Last subnet_id in the selection criteria when a range is given.
Definition: lease_mgr.h:199
virtual bool getNextRow(LeaseStatsRow &row)
Fetches the next row of data.
Definition: lease_mgr.cc:210
LeaseStatsQuery()
Default constructor The query created will return statistics for all subnets.
Definition: lease_mgr.cc:161
SelectMode
Defines the types of selection criteria supported.
Definition: lease_mgr.h:131
std::pair< uint32_t, uint32_t > VersionPair
Pair containing major and minor versions.
std::pair< uint32_t, uint32_t > VersionPair
Pair containing major and minor versions.
Definition: lease_mgr.h:40
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition: lease.h:492
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition: lease.h:640
boost::shared_ptr< LeaseStatsQuery > LeaseStatsQueryPtr
Defines a pointer to a LeaseStatsQuery.
Definition: lease_mgr.h:207
boost::shared_ptr< LeaseStatsRow > LeaseStatsRowPtr
Defines a pointer to a LeaseStatsRow.
Definition: lease_mgr.h:210
uint32_t SubnetID
Unique identifier for a subnet (both v4 and v6)
Definition: lease.h:24
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition: lease.h:487
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition: lease.h:283
Defines the logger used by the top-level component of kea-lfc.
Hardware type that represents information from DHCPv4 packet.
Definition: hwaddr.h:20
Contains a single row of lease statistical data.
Definition: lease_mgr.h:61
int64_t state_count_
state_count The count of leases in the lease state
Definition: lease_mgr.h:120
LeaseStatsRow(const SubnetID &subnet_id, const uint32_t lease_state, const int64_t state_count)
Constructor.
Definition: lease_mgr.h:75
LeaseStatsRow()
Default constructor.
Definition: lease_mgr.h:63
uint32_t lease_state_
The lease_state to which the count applies.
Definition: lease_mgr.h:118
SubnetID subnet_id_
The subnet ID to which this data applies.
Definition: lease_mgr.h:114
bool operator<(const LeaseStatsRow &rhs) const
Less-than operator.
Definition: lease_mgr.h:94
LeaseStatsRow(const SubnetID &subnet_id, const Lease::Type &lease_type, const uint32_t lease_state, const int64_t state_count)
Constructor.
Definition: lease_mgr.h:87
Lease::Type lease_type_
The lease_type to which the count applies.
Definition: lease_mgr.h:116
a common structure for IPv4 and IPv6 leases
Definition: lease.h:35
Type
Type of lease or pool.
Definition: lease.h:50