| Kea 3.0.2-git

memfile_lease_mgr.h
Go to the documentation of this file.
1// Copyright (C) 2012-2025 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
10#include <asiolink/interval_timer.h>
11#include <asiolink/process_spawn.h>
12#include <database/database_connection.h>
13#include <dhcp/hwaddr.h>
14#include <dhcpsrv/csv_lease_file4.h>
15#include <dhcpsrv/csv_lease_file6.h>
16#include <dhcpsrv/lease_mgr_factory.h>
17#include <dhcpsrv/memfile_lease_limits.h>
18#include <dhcpsrv/memfile_lease_storage.h>
19#include <dhcpsrv/tracking_lease_mgr.h>
20
21#include <boost/scoped_ptr.hpp>
22#include <boost/shared_ptr.hpp>
23
24#include <mutex>
25
26 namespace isc {
27 namespace dhcp {
28
29 class LFCSetup;
30
81 class Memfile_LeaseMgr : public TrackingLeaseMgr {
82 public:
83
94 static const int MAJOR_VERSION_V4 = 3;
95
97 static const int MINOR_VERSION_V4 = 0;
99
112 static const int MAJOR_VERSION_V6 = 5;
113
115 static const int MINOR_VERSION_V6 = 0;
117
124 enum Universe {
125 V4,
126 V6
127 };
128
132
133
154 Memfile_LeaseMgr(const db::DatabaseConnection::ParameterMap& parameters);
155
157 virtual ~Memfile_LeaseMgr();
158
160 static std::string getDBVersion();
161
163 static std::string getDBVersionInternal(Universe const& u);
164
170 virtual bool addLease(const Lease4Ptr& lease) override;
171
177 virtual bool addLease(const Lease6Ptr& lease) override;
178
187 virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress& addr) const override;
188
199 virtual Lease4Collection getLease4(const isc::dhcp::HWAddr& hwaddr) const override;
200
214 virtual Lease4Ptr getLease4(const HWAddr& hwaddr,
215 SubnetID subnet_id) const override;
216
222 virtual Lease4Collection getLease4(const ClientId& client_id) const override;
223
236 virtual Lease4Ptr getLease4(const ClientId& clientid,
237 SubnetID subnet_id) const override;
238
244 virtual Lease4Collection getLeases4(SubnetID subnet_id) const override;
245
251 virtual Lease4Collection getLeases4(const std::string& hostname) const override;
252
256 virtual Lease4Collection getLeases4() const override;
257
282 virtual Lease4Collection
283 getLeases4(const asiolink::IOAddress& lower_bound_address,
284 const LeasePageSize& page_size) const override;
285
295 virtual Lease6Ptr getLease6(Lease::Type type,
296 const isc::asiolink::IOAddress& addr) const override;
297
306 virtual Lease6Collection getLeases6(Lease::Type type,
307 const DUID& duid,
308 uint32_t iaid) const override;
309
322 virtual Lease6Collection getLeases6(Lease::Type type,
323 const DUID& duid,
324 uint32_t iaid,
325 SubnetID subnet_id) const override;
326
332 virtual Lease6Collection getLeases6(SubnetID subnet_id) const override;
333
339 virtual Lease6Collection getLeases6(const std::string& hostname) const override;
340
344 virtual Lease6Collection getLeases6() const override;
345
349 virtual Lease6Collection getLeases6(const DUID& duid) const override;
350
375 virtual Lease6Collection
376 getLeases6(const asiolink::IOAddress& lower_bound_address,
377 const LeasePageSize& page_size) const override;
378
387 virtual Lease6Collection
388 getLeases6(SubnetID subnet_id,
389 const asiolink::IOAddress& lower_bound_address,
390 const LeasePageSize& page_size) const override;
391
402 virtual void getExpiredLeases4(Lease4Collection& expired_leases,
403 const size_t max_leases) const override;
404
415 virtual void getExpiredLeases6(Lease6Collection& expired_leases,
416 const size_t max_leases) const override;
417
435 virtual void updateLease4(const Lease4Ptr& lease4) override;
436
454 virtual void updateLease6(const Lease6Ptr& lease6) override;
455
470 virtual bool deleteLease(const Lease4Ptr& lease) override;
471
486 virtual bool deleteLease(const Lease6Ptr& lease) override;
487
495 virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs) override;
496
504 virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs) override;
505
514 virtual size_t wipeLeases4(const SubnetID& subnet_id) override;
515
524 virtual size_t wipeLeases6(const SubnetID& subnet_id) override;
525
537 virtual std::string
538 checkLimits4(isc::data::ConstElementPtr const& user_context) const override;
539
551 virtual std::string
552 checkLimits6(isc::data::ConstElementPtr const& user_context) const override;
553
558 virtual bool isJsonSupported() const override;
559
560 private:
561
565
571 bool addLeaseInternal(const Lease4Ptr& lease);
572
578 bool addLeaseInternal(const Lease6Ptr& lease);
579
585 Lease4Ptr getLease4Internal(const isc::asiolink::IOAddress& addr) const;
586
591 void getLease4Internal(const isc::dhcp::HWAddr& hwaddr,
592 Lease4Collection& collection) const;
593
601 Lease4Ptr getLease4Internal(const HWAddr& hwaddr,
602 SubnetID subnet_id) const;
603
608 void getLease4Internal(const ClientId& client_id,
609 Lease4Collection& collection) const;
610
618 Lease4Ptr getLease4Internal(const ClientId& clientid,
619 const HWAddr& hwaddr,
620 SubnetID subnet_id) const;
621
628 Lease4Ptr getLease4Internal(const ClientId& clientid,
629 SubnetID subnet_id) const;
630
635 void getLeases4Internal(SubnetID subnet_id,
636 Lease4Collection& collection) const;
637
642 void getLeases4Internal(const std::string& hostname,
643 Lease4Collection& collection) const;
644
648 void getLeases4Internal(Lease4Collection& collection) const;
649
656 void getLeases4Internal(const asiolink::IOAddress& lower_bound_address,
657 const LeasePageSize& page_size,
658 Lease4Collection& collection) const;
659
666 Lease6Ptr getLease6Internal(Lease::Type type,
667 const isc::asiolink::IOAddress& addr) const;
668
674 Lease6Ptr getAnyLease6Internal(const isc::asiolink::IOAddress& addr) const;
675
683 void getLeases6Internal(Lease::Type type,
684 const DUID& duid,
685 uint32_t iaid,
686 Lease6Collection& collection) const;
687
696 void getLeases6Internal(Lease::Type type,
697 const DUID& duid,
698 uint32_t iaid,
699 SubnetID subnet_id,
700 Lease6Collection& collection) const;
701
706 void getLeases6Internal(SubnetID subnet_id,
707 Lease6Collection& collection) const;
708
713 void getLeases6Internal(const std::string& hostname,
714 Lease6Collection& collection) const;
715
719 void getLeases6Internal(Lease6Collection& collection) const;
720
725 void getLeases6Internal(const DUID& duid,
726 Lease6Collection& collection) const;
727
734 void getLeases6Internal(const asiolink::IOAddress& lower_bound_address,
735 const LeasePageSize& page_size,
736 Lease6Collection& collection) const;
737
746 virtual Lease6Collection
747 getLeases6Internal(SubnetID subnet_id,
748 const asiolink::IOAddress& lower_bound_address,
749 const LeasePageSize& page_size) const;
750
757 void getExpiredLeases4Internal(Lease4Collection& expired_leases,
758 const size_t max_leases) const;
759
766 void getExpiredLeases6Internal(Lease6Collection& expired_leases,
767 const size_t max_leases) const;
768
783 void updateLease4Internal(const Lease4Ptr& lease4);
784
799 void updateLease6Internal(const Lease6Ptr& lease6);
800
815 bool deleteLeaseInternal(const Lease4Ptr& addr);
816
831 bool deleteLeaseInternal(const Lease6Ptr& addr);
832
838 size_t wipeLeases4Internal(const SubnetID& subnet_id);
839
845 size_t wipeLeases6Internal(const SubnetID& subnet_id);
847
874 template<typename IndexType, typename LeaseType, typename StorageType,
875 typename LeaseFileType>
876 uint64_t deleteExpiredReclaimedLeases(const uint32_t secs,
877 const Universe& universe,
878 StorageType& storage,
879 LeaseFileType& lease_file);
880
887 int64_t getSubnetStat(const SubnetID& subnet_id, const std::string& stat_label) const;
888
899 bool getLeaseLimit(data::ConstElementPtr parent, Lease::Type ltype, size_t& limit) const;
900
901 public:
902
908 virtual std::string getType() const override {
909 return (std::string("memfile"));
910 }
911
917 virtual std::string getName() const override {
918 return ("memory");
919 }
920
926 virtual std::string getDescription() const override;
927
933 virtual std::pair<uint32_t, uint32_t> getVersion(const std::string& timer_name = std::string()) const override;
934
939 virtual void commit() override;
940
945 virtual void rollback() override;
946
948
950
951
956 enum LFCFileType {
957 FILE_CURRENT,
958 FILE_INPUT,
959 FILE_PREVIOUS,
960 FILE_OUTPUT,
961 FILE_FINISH,
962 FILE_PID
963 };
964
983 static std::string appendSuffix(const std::string& file_name,
984 const LFCFileType& file_type);
986
990
991
996 std::string getDefaultLeaseFilePath(Universe u,
997 const std::string filename = "") const;
998
1005 std::string getLeaseFilePath(Universe u) const;
1006
1018 bool persistLeases(Universe u) const;
1019
1021
1022 private:
1023
1039 std::string initLeaseFilePath(Universe u);
1040
1096 template<typename LeaseObjectType, typename LeaseFileType,
1097 typename StorageType>
1098 bool loadLeasesFromFiles(const std::string& filename,
1099 boost::shared_ptr<LeaseFileType>& lease_file,
1100 StorageType& storage);
1101
1103 Lease4Storage storage4_;
1104
1106 Lease6Storage storage6_;
1107
1108 protected:
1109
1111 Lease6ExtendedInfoRelayIdTable relay_id6_;
1112
1114 Lease6ExtendedInfoRemoteIdTable remote_id6_;
1115
1117 boost::shared_ptr<CSVLeaseFile4> lease_file4_;
1118
1120 boost::shared_ptr<CSVLeaseFile6> lease_file6_;
1121
1122 public:
1123
1128
1129
1133 bool isLFCRunning() const;
1134
1137 int getLFCExitStatus() const;
1139
1147 virtual LeaseStatsQueryPtr startLeaseStatsQuery4() override;
1148
1160 virtual LeaseStatsQueryPtr startPoolLeaseStatsQuery4() override;
1161
1170 virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID& subnet_id) override;
1171
1181 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
1182 const SubnetID& last_subnet_id) override;
1183
1191 virtual LeaseStatsQueryPtr startLeaseStatsQuery6() override;
1192
1204 virtual LeaseStatsQueryPtr startPoolLeaseStatsQuery6() override;
1205
1214 virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID& subnet_id) override;
1215
1225 virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
1226 const SubnetID& last_subnet_id) override;
1227
1231
1232
1233 protected:
1234
1246 virtual void lfcCallback();
1248
1250
1251
1252 private:
1253
1270 void lfcSetup(bool conversion_needed = false);
1271
1294 template<typename LeaseFileType>
1295 void lfcExecute(boost::shared_ptr<LeaseFileType>& lease_file);
1296
1298 boost::scoped_ptr<LFCSetup> lfc_setup_;
1299
1304 db::DatabaseConnection conn_;
1305
1307
1309 boost::scoped_ptr<std::mutex> mutex_;
1310
1312 ClassLeaseCounter class_lease_counter_;
1313
1314 public:
1322 virtual size_t getClassLeaseCount(const ClientClass& client_class,
1323 const Lease::Type& ltype = Lease::TYPE_V4) const override;
1324
1332 virtual void recountClassLeases4() override;
1333
1341 virtual void recountClassLeases6() override;
1342
1346 virtual void clearClassLeaseCounts() override;
1347
1351
1364 virtual Lease4Collection
1365 getLeases4ByRelayId(const OptionBuffer& relay_id,
1366 const asiolink::IOAddress& lower_bound_address,
1367 const LeasePageSize& page_size,
1368 const time_t& qry_start_time = 0,
1369 const time_t& qry_end_time = 0) override;
1370
1383 virtual Lease4Collection
1384 getLeases4ByRemoteId(const OptionBuffer& remote_id,
1385 const asiolink::IOAddress& lower_bound_address,
1386 const LeasePageSize& page_size,
1387 const time_t& qry_start_time = 0,
1388 const time_t& qry_end_time = 0) override;
1389
1398 virtual Lease6Collection
1399 getLeases6ByRelayId(const DUID& relay_id,
1400 const asiolink::IOAddress& lower_bound_address,
1401 const LeasePageSize& page_size) override;
1402
1411 virtual Lease6Collection
1412 getLeases6ByRemoteId(const OptionBuffer& remote_id,
1413 const asiolink::IOAddress& lower_bound_address,
1414 const LeasePageSize& page_size) override;
1415
1425 size_t extractExtendedInfo4(bool update, bool current);
1426
1431 virtual size_t upgradeExtendedInfo6(const LeasePageSize& page_size) override;
1432
1434 virtual void wipeExtendedInfoTables6() override;
1435
1439 virtual size_t byRelayId6size() const override;
1440
1444 virtual size_t byRemoteId6size() const override;
1445
1446 private:
1447
1460 Lease4Collection
1461 getLeases4ByRelayIdInternal(const OptionBuffer& relay_id,
1462 const asiolink::IOAddress& lower_bound_address,
1463 const LeasePageSize& page_size,
1464 const time_t& qry_start_time,
1465 const time_t& qry_end_time);
1466
1479 Lease4Collection
1480 getLeases4ByRemoteIdInternal(const OptionBuffer& remote_id,
1481 const asiolink::IOAddress& lower_bound_address,
1482 const LeasePageSize& page_size,
1483 const time_t& qry_start_time,
1484 const time_t& qry_end_time);
1485
1494 Lease6Collection
1495 getLeases6ByRelayIdInternal(const DUID& relay_id,
1496 const asiolink::IOAddress& lower_bound_address,
1497 const LeasePageSize& page_size);
1498
1507 Lease6Collection
1508 getLeases6ByRemoteIdInternal(const OptionBuffer& remote_id,
1509 const asiolink::IOAddress& lower_bound_address,
1510 const LeasePageSize& page_size);
1511
1512 public:
1513
1517 virtual void writeLeases4(const std::string& filename) override;
1518
1522 virtual void writeLeases6(const std::string& filename) override;
1523
1528 virtual size_t upgradeExtendedInfo4(const LeasePageSize& page_size) override;
1529
1530 protected:
1531
1533
1535 void buildExtendedInfoTables6();
1536
1540 virtual void deleteExtendedInfo6(const isc::asiolink::IOAddress& addr) override;
1541
1546 virtual void addRelayId6(const isc::asiolink::IOAddress& lease_addr,
1547 const std::vector<uint8_t>& relay_id) override;
1548
1553 virtual void addRemoteId6(const isc::asiolink::IOAddress& lease_addr,
1554 const std::vector<uint8_t>& remote_id) override;
1555
1556 private:
1561 virtual void writeLeases4Internal(const std::string& filename);
1562
1567 virtual void writeLeases6Internal(const std::string& filename);
1568
1569 public:
1576 static TrackingLeaseMgrPtr
1577 factory(const isc::db::DatabaseConnection::ParameterMap& parameters);
1578};
1579
1581 struct MemfileLeaseMgrInit {
1582 // Constructor registers
1583 MemfileLeaseMgrInit() {
1584 LeaseMgrFactory::registerFactory("memfile",
1585 Memfile_LeaseMgr::factory,
1586 true,
1587 Memfile_LeaseMgr::getDBVersion);
1588 }
1589
1590 // Destructor deregisters
1591 ~MemfileLeaseMgrInit() {
1592 LeaseMgrFactory::deregisterFactory("memfile", true);
1593 }
1594};
1595
1596} // namespace dhcp
1597} // namespace isc
1598
1599#endif // MEMFILE_LEASE_MGR_H
isc::asiolink::IOAddress
The IOAddress class represents an IP addresses (version agnostic).
Definition io_address.h:45
isc::db::DatabaseConnection
Common database connection class.
Definition database_connection.h:125
isc::db::DatabaseConnection::ParameterMap
std::map< std::string, std::string > ParameterMap
Database configuration parameter map.
Definition database_connection.h:137
isc::dhcp::ClassLeaseCounter
Container that maintains counts of leases per class and lease type.
Definition memfile_lease_limits.h:30
isc::dhcp::ClientId
Holds Client identifier or client IPv4 address.
Definition duid.h:222
isc::dhcp::DUID
Holds DUID (DHCPv6 Unique Identifier).
Definition duid.h:142
isc::dhcp::LFCSetup
Represents a configuration for Lease File Cleanup.
Definition memfile_lease_mgr.cc:66
isc::dhcp::LeaseMgrFactory::registerFactory
static bool registerFactory(const std::string &db_type, const Factory &factory, bool no_log=false, DBVersion db_version=DBVersion())
Register a lease mgr factory.
Definition lease_mgr_factory.cc:133
isc::dhcp::LeaseMgrFactory::deregisterFactory
static bool deregisterFactory(const std::string &db_type, bool no_log=false)
Deregister a lease mgr factory.
Definition lease_mgr_factory.cc:163
isc::dhcp::LeasePageSize
Wraps value holding size of the page with leases.
Definition lease_mgr.h:46
isc::dhcp::Memfile_LeaseMgr::remote_id6_
Lease6ExtendedInfoRemoteIdTable remote_id6_
stores IPv6 by-remote-id cross-reference table
Definition memfile_lease_mgr.h:1114
isc::dhcp::Memfile_LeaseMgr::rollback
virtual void rollback() override
Rollback Transactions.
Definition memfile_lease_mgr.cc:2226
isc::dhcp::Memfile_LeaseMgr::extractExtendedInfo4
size_t extractExtendedInfo4(bool update, bool current)
Extract extended info for v4 leases.
Definition memfile_lease_mgr.cc:3279
isc::dhcp::Memfile_LeaseMgr::startSubnetRangeLeaseStatsQuery6
virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID &first_subnet_id, const SubnetID &last_subnet_id) override
Creates and runs the IPv6 lease stats query for a single subnet.
Definition memfile_lease_mgr.cc:2611
isc::dhcp::Memfile_LeaseMgr::clearClassLeaseCounts
virtual void clearClassLeaseCounts() override
Clears the class-lease count map.
Definition memfile_lease_mgr.cc:2717
isc::dhcp::Memfile_LeaseMgr::byRelayId6size
virtual size_t byRelayId6size() const override
Return the by-relay-id table size.
Definition memfile_lease_mgr.cc:3148
isc::dhcp::Memfile_LeaseMgr::getLeases4ByRelayId
virtual Lease4Collection getLeases4ByRelayId(const OptionBuffer &relay_id, const asiolink::IOAddress &lower_bound_address, const LeasePageSize &page_size, const time_t &qry_start_time=0, const time_t &qry_end_time=0) override
The following queries are used to fulfill Bulk Lease Query queries.
Definition memfile_lease_mgr.cc:2964
isc::dhcp::Memfile_LeaseMgr::Memfile_LeaseMgr
Memfile_LeaseMgr(const db::DatabaseConnection::ParameterMap &parameters)
The sole lease manager constructor.
Definition memfile_lease_mgr.cc:996
isc::dhcp::Memfile_LeaseMgr::isLFCRunning
bool isLFCRunning() const
Checks if the process performing lease file cleanup is running.
Definition memfile_lease_mgr.cc:2410
isc::dhcp::Memfile_LeaseMgr::writeLeases4
virtual void writeLeases4(const std::string &filename) override
Write V4 leases to a file.
Definition memfile_lease_mgr.cc:3426
isc::dhcp::Memfile_LeaseMgr::updateLease4
virtual void updateLease4(const Lease4Ptr &lease4) override
Updates IPv4 lease.
Definition memfile_lease_mgr.cc:1901
isc::dhcp::Memfile_LeaseMgr::wipeLeases4
virtual size_t wipeLeases4(const SubnetID &subnet_id) override
Removes specified IPv4 leases.
Definition memfile_lease_mgr.cc:2626
isc::dhcp::Memfile_LeaseMgr::deleteExtendedInfo6
virtual void deleteExtendedInfo6(const isc::asiolink::IOAddress &addr) override
Delete lease6 extended info from tables.
Definition memfile_lease_mgr.cc:3400
isc::dhcp::Memfile_LeaseMgr::isJsonSupported
virtual bool isJsonSupported() const override
Checks if JSON support is enabled in the database.
Definition memfile_lease_mgr.cc:2909
isc::dhcp::Memfile_LeaseMgr::Universe
Universe
Specifies universe (V4, V6).
Definition memfile_lease_mgr.h:124
isc::dhcp::Memfile_LeaseMgr::V4
@ V4
Definition memfile_lease_mgr.h:125
isc::dhcp::Memfile_LeaseMgr::V6
@ V6
Definition memfile_lease_mgr.h:126
isc::dhcp::Memfile_LeaseMgr::getType
virtual std::string getType() const override
Return backend type.
Definition memfile_lease_mgr.h:908
isc::dhcp::Memfile_LeaseMgr::factory
static TrackingLeaseMgrPtr factory(const isc::db::DatabaseConnection::ParameterMap &parameters)
Factory class method.
Definition memfile_lease_mgr.cc:3500
isc::dhcp::Memfile_LeaseMgr::LFCFileType
LFCFileType
Types of the lease files used by the Lease File Cleanup.
Definition memfile_lease_mgr.h:956
isc::dhcp::Memfile_LeaseMgr::FILE_CURRENT
@ FILE_CURRENT
Lease File
Definition memfile_lease_mgr.h:957
isc::dhcp::Memfile_LeaseMgr::FILE_PREVIOUS
@ FILE_PREVIOUS
Previous Lease File.
Definition memfile_lease_mgr.h:959
isc::dhcp::Memfile_LeaseMgr::FILE_FINISH
@ FILE_FINISH
LFC Finish File.
Definition memfile_lease_mgr.h:961
isc::dhcp::Memfile_LeaseMgr::FILE_OUTPUT
@ FILE_OUTPUT
LFC Output File.
Definition memfile_lease_mgr.h:960
isc::dhcp::Memfile_LeaseMgr::FILE_PID
@ FILE_PID
PID File.
Definition memfile_lease_mgr.h:962
isc::dhcp::Memfile_LeaseMgr::FILE_INPUT
@ FILE_INPUT
Lease File Copy
Definition memfile_lease_mgr.h:958
isc::dhcp::Memfile_LeaseMgr::deleteLease
virtual bool deleteLease(const Lease4Ptr &lease) override
Deletes an IPv4 lease.
Definition memfile_lease_mgr.cc:2034
isc::dhcp::Memfile_LeaseMgr::commit
virtual void commit() override
Commit Transactions.
Definition memfile_lease_mgr.cc:2221
isc::dhcp::Memfile_LeaseMgr::wipeLeases6
virtual size_t wipeLeases6(const SubnetID &subnet_id) override
Removed specified IPv6 leases.
Definition memfile_lease_mgr.cc:2655
isc::dhcp::Memfile_LeaseMgr::getVersion
virtual std::pair< uint32_t, uint32_t > getVersion(const std::string &timer_name=std::string()) const override
Returns backend version.
Definition memfile_lease_mgr.cc:2210
isc::dhcp::Memfile_LeaseMgr::getLFCExitStatus
int getLFCExitStatus() const
Returns the status code returned by the last executed LFC process.
Definition memfile_lease_mgr.cc:2415
isc::dhcp::Memfile_LeaseMgr::startPoolLeaseStatsQuery6
virtual LeaseStatsQueryPtr startPoolLeaseStatsQuery6() override
Creates and runs the IPv6 lease stats query for all subnets and pools.
Definition memfile_lease_mgr.cc:2585
isc::dhcp::Memfile_LeaseMgr::persistLeases
bool persistLeases(Universe u) const
Specifies whether or not leases are written to disk.
Definition memfile_lease_mgr.cc:2285
isc::dhcp::Memfile_LeaseMgr::getName
virtual std::string getName() const override
Returns backend name.
Definition memfile_lease_mgr.h:917
isc::dhcp::Memfile_LeaseMgr::addRemoteId6
virtual void addRemoteId6(const isc::asiolink::IOAddress &lease_addr, const std::vector< uint8_t > &remote_id) override
Add lease6 extended info into by-remote-id table.
Definition memfile_lease_mgr.cc:3418
isc::dhcp::Memfile_LeaseMgr::getDBVersion
static std::string getDBVersion()
Return extended version info.
Definition memfile_lease_mgr.cc:1065
isc::dhcp::Memfile_LeaseMgr::getLeases4
virtual Lease4Collection getLeases4() const override
Returns all IPv4 leases.
Definition memfile_lease_mgr.cc:1386
isc::dhcp::Memfile_LeaseMgr::getClassLeaseCount
virtual size_t getClassLeaseCount(const ClientClass &client_class, const Lease::Type &ltype=Lease::TYPE_V4) const override
Returns the class lease count for a given class and lease type.
Definition memfile_lease_mgr.cc:2706
isc::dhcp::Memfile_LeaseMgr::getExpiredLeases6
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const override
Returns a collection of expired DHCPv6 leases.
Definition memfile_lease_mgr.cc:1840
isc::dhcp::Memfile_LeaseMgr::buildExtendedInfoTables6
void buildExtendedInfoTables6()
Extended information / Bulk Lease Query shared interface.
Definition memfile_lease_mgr.cc:3348
isc::dhcp::Memfile_LeaseMgr::addLease
virtual bool addLease(const Lease4Ptr &lease) override
Adds an IPv4 lease.
Definition memfile_lease_mgr.cc:1106
isc::dhcp::Memfile_LeaseMgr::byRemoteId6size
virtual size_t byRemoteId6size() const override
Return the by-remote-id table size.
Definition memfile_lease_mgr.cc:3153
isc::dhcp::Memfile_LeaseMgr::getDefaultLeaseFilePath
std::string getDefaultLeaseFilePath(Universe u, const std::string filename="") const
Returns default path to the lease file.
Definition memfile_lease_mgr.cc:2260
isc::dhcp::Memfile_LeaseMgr::writeLeases6
virtual void writeLeases6(const std::string &filename) override
Write V6 leases to a file.
Definition memfile_lease_mgr.cc:3463
isc::dhcp::Memfile_LeaseMgr::relay_id6_
Lease6ExtendedInfoRelayIdTable relay_id6_
stores IPv6 by-relay-id cross-reference table
Definition memfile_lease_mgr.h:1111
isc::dhcp::Memfile_LeaseMgr::recountClassLeases6
virtual void recountClassLeases6() override
Recount the leases per class for V6 leases.
Definition memfile_lease_mgr.cc:2695
isc::dhcp::Memfile_LeaseMgr::getLeases4ByRemoteId
virtual Lease4Collection getLeases4ByRemoteId(const OptionBuffer &remote_id, const asiolink::IOAddress &lower_bound_address, const LeasePageSize &page_size, const time_t &qry_start_time=0, const time_t &qry_end_time=0) override
Returns existing IPv4 leases with a given remote-id.
Definition memfile_lease_mgr.cc:3050
isc::dhcp::Memfile_LeaseMgr::wipeExtendedInfoTables6
virtual void wipeExtendedInfoTables6() override
Wipe extended info table (v6).
Definition memfile_lease_mgr.cc:3136
isc::dhcp::Memfile_LeaseMgr::lease_file4_
boost::shared_ptr< CSVLeaseFile4 > lease_file4_
Holds the pointer to the DHCPv4 lease file IO.
Definition memfile_lease_mgr.h:1117
isc::dhcp::Memfile_LeaseMgr::getLeaseFilePath
std::string getLeaseFilePath(Universe u) const
Returns an absolute path to the lease file.
Definition memfile_lease_mgr.cc:2276
isc::dhcp::Memfile_LeaseMgr::getLeases6ByRemoteId
virtual Lease6Collection getLeases6ByRemoteId(const OptionBuffer &remote_id, const asiolink::IOAddress &lower_bound_address, const LeasePageSize &page_size) override
Returns existing IPv6 leases with a given remote-id.
Definition memfile_lease_mgr.cc:3220
isc::dhcp::Memfile_LeaseMgr::getLeases6
virtual Lease6Collection getLeases6() const override
Returns all IPv6 leases.
Definition memfile_lease_mgr.cc:1633
isc::dhcp::Memfile_LeaseMgr::lfcCallback
virtual void lfcCallback()
A callback function triggering Lease File Cleanup (LFC).
Definition memfile_lease_mgr.cc:2420
isc::dhcp::Memfile_LeaseMgr::startSubnetLeaseStatsQuery4
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID &subnet_id) override
Creates and runs the IPv4 lease stats query for a single subnet.
Definition memfile_lease_mgr.cc:2544
isc::dhcp::Memfile_LeaseMgr::getLeases6ByRelayId
virtual Lease6Collection getLeases6ByRelayId(const DUID &relay_id, const asiolink::IOAddress &lower_bound_address, const LeasePageSize &page_size) override
Returns existing IPv6 leases with a given relay-id.
Definition memfile_lease_mgr.cc:3158
isc::dhcp::Memfile_LeaseMgr::startSubnetLeaseStatsQuery6
virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID &subnet_id) override
Creates and runs the IPv6 lease stats query for a single subnet.
Definition memfile_lease_mgr.cc:2598
isc::dhcp::Memfile_LeaseMgr::getDescription
virtual std::string getDescription() const override
Returns description of the backend.
Definition memfile_lease_mgr.cc:2205
isc::dhcp::Memfile_LeaseMgr::appendSuffix
static std::string appendSuffix(const std::string &file_name, const LFCFileType &file_type)
Appends appropriate suffix to the file name.
Definition memfile_lease_mgr.cc:2232
isc::dhcp::Memfile_LeaseMgr::addRelayId6
virtual void addRelayId6(const isc::asiolink::IOAddress &lease_addr, const std::vector< uint8_t > &relay_id) override
Add lease6 extended info into by-relay-id table.
Definition memfile_lease_mgr.cc:3410
isc::dhcp::Memfile_LeaseMgr::upgradeExtendedInfo6
virtual size_t upgradeExtendedInfo6(const LeasePageSize &page_size) override
Upgrade extended info (v6).
Definition memfile_lease_mgr.cc:3395
isc::dhcp::Memfile_LeaseMgr::startLeaseStatsQuery4
virtual LeaseStatsQueryPtr startLeaseStatsQuery4() override
Creates and runs the IPv4 lease stats query.
Definition memfile_lease_mgr.cc:2518
isc::dhcp::Memfile_LeaseMgr::getLease6
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const override
Returns existing IPv6 lease for a given IPv6 address.
Definition memfile_lease_mgr.cc:1468
isc::dhcp::Memfile_LeaseMgr::recountClassLeases4
virtual void recountClassLeases4() override
Recount the leases per class for V4 leases.
Definition memfile_lease_mgr.cc:2684
isc::dhcp::Memfile_LeaseMgr::updateLease6
virtual void updateLease6(const Lease6Ptr &lease6) override
Updates IPv6 lease.
Definition memfile_lease_mgr.cc:1982
isc::dhcp::Memfile_LeaseMgr::startSubnetRangeLeaseStatsQuery4
virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID &first_subnet_id, const SubnetID &last_subnet_id) override
Creates and runs the IPv4 lease stats query for a single subnet.
Definition memfile_lease_mgr.cc:2557
isc::dhcp::Memfile_LeaseMgr::deleteExpiredReclaimedLeases4
virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs) override
Deletes all expired-reclaimed DHCPv4 leases.
Definition memfile_lease_mgr.cc:2106
isc::dhcp::Memfile_LeaseMgr::getDBVersionInternal
static std::string getDBVersionInternal(Universe const &u)
Local version of getDBVersion() class method.
Definition memfile_lease_mgr.cc:1053
isc::dhcp::Memfile_LeaseMgr::startPoolLeaseStatsQuery4
virtual LeaseStatsQueryPtr startPoolLeaseStatsQuery4() override
Creates and runs the IPv4 lease stats query for all subnets and pools.
Definition memfile_lease_mgr.cc:2531
isc::dhcp::Memfile_LeaseMgr::checkLimits6
virtual std::string checkLimits6(isc::data::ConstElementPtr const &user_context) const override
Checks if the IPv6 lease limits set in the given user context are exceeded.
Definition memfile_lease_mgr.cc:2808
isc::dhcp::Memfile_LeaseMgr::startLeaseStatsQuery6
virtual LeaseStatsQueryPtr startLeaseStatsQuery6() override
Creates and runs the IPv6 lease stats query.
Definition memfile_lease_mgr.cc:2572
isc::dhcp::Memfile_LeaseMgr::getLease4
virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const override
Returns existing IPv4 lease for specified IPv4 address.
Definition memfile_lease_mgr.cc:1179
isc::dhcp::Memfile_LeaseMgr::~Memfile_LeaseMgr
virtual ~Memfile_LeaseMgr()
Destructor (closes file).
Definition memfile_lease_mgr.cc:1041
isc::dhcp::Memfile_LeaseMgr::checkLimits4
virtual std::string checkLimits4(isc::data::ConstElementPtr const &user_context) const override
Checks if the IPv4 lease limits set in the given user context are exceeded.
Definition memfile_lease_mgr.cc:2722
isc::dhcp::Memfile_LeaseMgr::lease_file6_
boost::shared_ptr< CSVLeaseFile6 > lease_file6_
Holds the pointer to the DHCPv6 lease file IO.
Definition memfile_lease_mgr.h:1120
isc::dhcp::Memfile_LeaseMgr::upgradeExtendedInfo4
virtual size_t upgradeExtendedInfo4(const LeasePageSize &page_size) override
Upgrade extended info (v4).
Definition memfile_lease_mgr.cc:3343
isc::dhcp::Memfile_LeaseMgr::deleteExpiredReclaimedLeases6
virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs) override
Deletes all expired-reclaimed DHCPv6 leases.
Definition memfile_lease_mgr.cc:2124
isc::dhcp::Memfile_LeaseMgr::getExpiredLeases4
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const override
Returns a collection of expired DHCPv4 leases.
Definition memfile_lease_mgr.cc:1803
isc::dhcp::TrackingLeaseMgr::TrackingLeaseMgr
TrackingLeaseMgr()
Constructor.
Definition tracking_lease_mgr.cc:22
csv_lease_file4.h
csv_lease_file6.h
database_connection.h
isc::dhcp::Memfile_LeaseMgr::MAJOR_VERSION_V4
static const int MAJOR_VERSION_V4
Definition memfile_lease_mgr.h:94
isc::dhcp::Memfile_LeaseMgr::MINOR_VERSION_V4
static const int MINOR_VERSION_V4
the minor version of the v4 memfile backend
Definition memfile_lease_mgr.h:97
isc::dhcp::Memfile_LeaseMgr::MAJOR_VERSION_V6
static const int MAJOR_VERSION_V6
Definition memfile_lease_mgr.h:112
isc::dhcp::Memfile_LeaseMgr::MINOR_VERSION_V6
static const int MINOR_VERSION_V6
the minor version of the v6 memfile backend
Definition memfile_lease_mgr.h:115
hwaddr.h
interval_timer.h
lease_mgr_factory.h
memfile_lease_limits.h
memfile_lease_storage.h
isc::data::ConstElementPtr
boost::shared_ptr< const Element > ConstElementPtr
Definition data.h:29
isc::dhcp
Definition dhcp4/client_handler.cc:20
isc::dhcp::ClientClass
std::string ClientClass
Defines a single class name.
Definition classify.h:43
isc::dhcp::Lease4Storage
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< 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_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< HostnameIndexTag >, boost::multi_index::member< Lease, std::string, &Lease::hostname_ > >, boost::multi_index::hashed_non_unique< boost::multi_index::tag< RemoteIdIndexTag >, boost::multi_index::member< Lease4, std::vector< uint8_t >, &Lease4::remote_id_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< RelayIdIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::member< Lease4, std::vector< uint8_t >, &Lease4::relay_id_ >, boost::multi_index::member< Lease, isc::asiolink::IOAddress, &Lease::addr_ > > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetIdPoolIdIndexTag >, boost::multi_index::composite_key< Lease4, boost::multi_index::member< Lease, SubnetID, &Lease::subnet_id_ >, boost::multi_index::member< Lease, uint32_t, &Lease::pool_id_ > > > > > Lease4Storage
A multi index container holding DHCPv4 leases.
Definition memfile_lease_storage.h:329
isc::dhcp::Lease6ExtendedInfoRemoteIdTable
boost::multi_index_container< Lease6ExtendedInfoPtr, boost::multi_index::indexed_by< boost::multi_index::hashed_non_unique< boost::multi_index::tag< RemoteIdIndexTag >, boost::multi_index::member< Lease6ExtendedInfo, std::vector< uint8_t >, &Lease6ExtendedInfo::id_ > >, boost::multi_index::hashed_non_unique< boost::multi_index::tag< LeaseAddressIndexTag >, boost::multi_index::member< Lease6ExtendedInfo, isc::asiolink::IOAddress, &Lease6ExtendedInfo::lease_addr_ > > > > Lease6ExtendedInfoRemoteIdTable
A multi index container holding lease6 extended info for by remote id.
Definition memfile_lease_storage.h:495
isc::dhcp::Lease6Ptr
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition lease.h:528
isc::dhcp::Lease6Collection
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition lease.h:693
isc::dhcp::LeaseStatsQueryPtr
boost::shared_ptr< LeaseStatsQuery > LeaseStatsQueryPtr
Defines a pointer to a LeaseStatsQuery.
Definition lease_mgr.h:233
isc::dhcp::Lease6Storage
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_unique< boost::multi_index::tag< SubnetIdIndexTag >, boost::multi_index::composite_key< Lease6, boost::multi_index::member< Lease, isc::dhcp::SubnetID, &Lease::subnet_id_ >, boost::multi_index::member< Lease, isc::asiolink::IOAddress, &Lease::addr_ > > >, 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 > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< HostnameIndexTag >, boost::multi_index::member< Lease, std::string, &Lease::hostname_ > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetIdPoolIdIndexTag >, boost::multi_index::composite_key< Lease6, boost::multi_index::member< Lease, SubnetID, &Lease::subnet_id_ >, boost::multi_index::member< Lease, uint32_t, &Lease::pool_id_ > > > > > Lease6Storage
A multi index container holding DHCPv6 leases.
Definition memfile_lease_storage.h:179
isc::dhcp::SubnetID
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
Definition subnet_id.h:25
isc::dhcp::TrackingLeaseMgrPtr
std::unique_ptr< TrackingLeaseMgr > TrackingLeaseMgrPtr
TrackingLeaseMgr pointer.
Definition tracking_lease_mgr.h:306
isc::dhcp::OptionBuffer
std::vector< uint8_t > OptionBuffer
buffer types used in DHCP code.
Definition option.h:24
isc::dhcp::Lease4Collection
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition lease.h:520
isc::dhcp::Lease4Ptr
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition lease.h:315
isc::dhcp::Lease6ExtendedInfoRelayIdTable
boost::multi_index_container< Lease6ExtendedInfoPtr, boost::multi_index::indexed_by< boost::multi_index::ordered_non_unique< boost::multi_index::tag< RelayIdIndexTag >, boost::multi_index::composite_key< Lease6ExtendedInfo, boost::multi_index::member< Lease6ExtendedInfo, std::vector< uint8_t >, &Lease6ExtendedInfo::id_ >, boost::multi_index::member< Lease6ExtendedInfo, isc::asiolink::IOAddress, &Lease6ExtendedInfo::lease_addr_ > > >, boost::multi_index::hashed_non_unique< boost::multi_index::tag< LeaseAddressIndexTag >, boost::multi_index::member< Lease6ExtendedInfo, isc::asiolink::IOAddress, &Lease6ExtendedInfo::lease_addr_ > > > > Lease6ExtendedInfoRelayIdTable
A multi index container holding lease6 extended info for by relay id.
Definition memfile_lease_storage.h:460
isc
Defines the logger used by the top-level component of kea-lfc.
Definition agent_parser.cc:148
process_spawn.h
isc::dhcp::HWAddr
Hardware type that represents information from DHCPv4 packet.
Definition hwaddr.h:20
isc::dhcp::Lease::Type
Type
Type of lease or pool.
Definition lease.h:46
isc::dhcp::Lease::TYPE_V4
@ TYPE_V4
IPv4 lease.
Definition lease.h:50
isc::dhcp::MemfileLeaseMgrInit::~MemfileLeaseMgrInit
~MemfileLeaseMgrInit()
Definition memfile_lease_mgr.h:1591
isc::dhcp::MemfileLeaseMgrInit::MemfileLeaseMgrInit
MemfileLeaseMgrInit()
Definition memfile_lease_mgr.h:1583
tracking_lease_mgr.h