Kea 3.2.1-git
alloc_engine.h
Go to the documentation of this file.
1// Copyright (C) 2012-2026 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 ALLOC_ENGINE_H
8#define ALLOC_ENGINE_H
9
10#include <asiolink/io_address.h>
11#include <dhcp/classify.h>
12#include <dhcp/duid.h>
13#include <dhcp/hwaddr.h>
14#include <dhcp/pkt4.h>
15#include <dhcp/pkt6.h>
16#include <dhcp/option6_ia.h>
17#include <dhcp/option6_iaaddr.h>
19#include <dhcpsrv/allocator.h>
21#include <dhcpsrv/host.h>
22#include <dhcpsrv/subnet.h>
23#include <dhcpsrv/lease_mgr.h>
24#include <dhcpsrv/srv_config.h>
28
29#include <boost/shared_ptr.hpp>
30#include <boost/noncopyable.hpp>
31
32#include <functional>
33#include <list>
34#include <map>
35#include <mutex>
36#include <set>
37#include <utility>
38
39namespace isc {
40namespace dhcp {
41
47class AllocEngine : public boost::noncopyable {
48public:
49
59 AllocEngine(isc::util::uint128_t const& attempts);
60
62 virtual ~AllocEngine() { }
63
64private:
65
67 isc::util::uint128_t attempts_;
68
70 int hook_index_lease4_select_;
71 int hook_index_lease6_select_;
72
73public:
74
83 class Resource {
84 public:
85
95 const uint8_t prefix_len = 128,
96 const uint32_t preferred = 0,
97 const uint32_t valid = 0)
98 : address_(address), prefix_len_(prefix_len),
99 preferred_(preferred), valid_(valid) {
100 }
101
106 return (address_);
107 }
108
112 uint8_t getPrefixLength() const {
113 return (prefix_len_);
114 }
115
119 uint32_t getPreferred() const {
120 return (preferred_);
121 }
122
126 uint32_t getValid() const {
127 return (valid_);
128 }
129
135 bool equals(const Resource& other) const {
136 return (address_ == other.address_ &&
137 prefix_len_ == other.prefix_len_);
138 }
139
145 bool operator==(const Resource& other) const {
146 return (equals(other));
147 }
148
149 protected:
150
153
155 uint8_t prefix_len_;
156
158 uint32_t preferred_;
159
161 uint32_t valid_;
162 };
163
175 bool operator() (const Resource& lhr, const Resource& rhr) const {
176 if (lhr.getAddress() == rhr.getAddress()) {
177 return (lhr.getPrefixLength() < rhr.getPrefixLength());
178 } else {
179 return (lhr.getAddress() < rhr.getAddress());
180 }
181 }
182 };
183
185 typedef std::vector<Resource> HintContainer;
186
188 typedef std::set<Resource, ResourceCompare> ResourceContainer;
189
191 typedef std::pair<Host::IdentifierType, std::vector<uint8_t> > IdentifierPair;
192
194 typedef std::list<IdentifierPair> IdentifierList;
195
218 struct ClientContext6 : public boost::noncopyable {
219
221
222
227
234
239
242
247
250
253
257
263 std::map<SubnetID, ConstHostPtr> hosts_;
264
269
274
279 std::string hostname_;
280
283
286
289
291
293 struct IAContext {
294
297 uint32_t iaid_;
298
301
307
316
324
327
332
336
340 IAContext();
341
348 void addHint(const asiolink::IOAddress& prefix,
349 const uint8_t prefix_len = 128,
350 const uint32_t preferred = 0,
351 const uint32_t valid = 0);
352
358 void addHint(const Option6IAAddrPtr& iaaddr);
359
365 void addHint(const Option6IAPrefixPtr& iaprefix);
366
371 void addNewResource(const asiolink::IOAddress& prefix,
372 const uint8_t prefix_len = 128);
373
378 bool isNewResource(const asiolink::IOAddress& prefix,
379 const uint8_t prefix_len = 128) const;
380 };
381
383 std::vector<IAContext> ias_;
384
393
398 void addAllocatedResource(const asiolink::IOAddress& prefix,
399 const uint8_t prefix_len = 128);
400
405 bool isAllocated(const asiolink::IOAddress& prefix,
406 const uint8_t prefix_len = 128) const;
407
415 const std::vector<uint8_t>& identifier) {
416 if (identifier.empty()) {
417 isc_throw(BadValue, "identifier is empty");
418 }
419 host_identifiers_.push_back(IdentifierPair(id_type, identifier));
420 }
421
428 if (ias_.empty()) {
430 }
431 return (ias_.back());
432 }
433
434 std::vector<IAContext>& getIAContexts() {
435 return (ias_);
436 }
437
443 ias_.push_back(IAContext());
444 }
445
453
462 ConstHostPtr globalHost() const;
463
469 bool hasGlobalReservation(const IPv6Resrv& resv) const;
470
473
495 ClientContext6(const ConstSubnet6Ptr& subnet, const DuidPtr& duid,
496 const bool fwd_dns, const bool rev_dns,
497 const std::string& hostname, const bool fake_allocation,
498 const Pkt6Ptr& query,
499 const hooks::CalloutHandlePtr& callout_handle =
501
502 private:
506 DdnsParamsPtr ddns_params_;
507 };
508
591 allocateLeases6(ClientContext6& ctx);
592
613 Lease6Collection renewLeases6(ClientContext6& ctx);
614
663 void reclaimExpiredLeases6(const size_t max_leases, const uint16_t timeout,
664 const bool remove_lease,
665 const uint16_t max_unwarned_cycles = 0);
666
679 void reclaimExpiredLeases6Internal(const size_t max_leases,
680 const uint16_t timeout,
681 const bool remove_lease,
682 const uint16_t max_unwarned_cycles = 0);
683
689 void deleteExpiredReclaimedLeases6(const uint32_t secs);
690
739 void reclaimExpiredLeases4(const size_t max_leases, const uint16_t timeout,
740 const bool remove_lease,
741 const uint16_t max_unwarned_cycles = 0);
742
755 void reclaimExpiredLeases4Internal(const size_t max_leases,
756 const uint16_t timeout,
757 const bool remove_lease,
758 const uint16_t max_unwarned_cycles = 0);
759
765 void deleteExpiredReclaimedLeases4(const uint32_t secs);
766
780 static void findReservation(ClientContext6& ctx);
781
792 static ConstHostPtr findGlobalReservation(ClientContext6& ctx);
793
799 static IPv6Resrv makeIPv6Resrv(const Lease6& lease) {
800 if (lease.type_ == Lease::TYPE_NA) {
801 return (IPv6Resrv(IPv6Resrv::TYPE_NA, lease.addr_,
802 (lease.prefixlen_ ? lease.prefixlen_ : 128)));
803 }
804
805 return (IPv6Resrv(IPv6Resrv::TYPE_PD, lease.addr_, lease.prefixlen_));
806 }
807
808public:
825 static void getLifetimes6(ClientContext6& ctx, uint32_t& preferred,
826 uint32_t& valid);
827
841 static void getMinLifetimes6(ClientContext6& ctx, uint32_t& preferred,
842 uint32_t& valid);
843private:
844
880 Lease6Ptr createLease6(ClientContext6& ctx,
881 const isc::asiolink::IOAddress& addr,
882 const uint8_t prefix_len,
884
899 Lease6Collection allocateUnreservedLeases6(ClientContext6& ctx);
900
941 Lease6Ptr allocateBestMatch(ClientContext6& ctx,
942 Lease6Ptr& hint_lease,
943 bool& search_hint_lease,
944 const isc::asiolink::IOAddress& hint,
945 uint8_t hint_prefix_length,
946 ConstSubnet6Ptr original_subnet,
947 SharedNetwork6Ptr& network,
948 uint64_t& total_attempts,
949 uint64_t& subnets_with_unavail_leases,
950 uint64_t& subnets_with_unavail_pools,
952 Allocator::PrefixLenMatchType prefix_length_match);
953
970 void
971 allocateReservedLeases6(ClientContext6& ctx, Lease6Collection& existing_leases);
972
986 void
987 allocateGlobalReservedLeases6(ClientContext6& ctx, Lease6Collection& existing_leases);
988
997 void
998 removeNonmatchingReservedLeases6(ClientContext6& ctx,
999 Lease6Collection& existing_leases);
1000
1008 void
1009 removeNonmatchingReservedNoHostLeases6(ClientContext6& ctx,
1010 Lease6Collection& existing_leases);
1011
1025 void
1026 removeNonreservedLeases6(ClientContext6& ctx,
1027 Lease6Collection& existing_leases);
1028
1061 Lease6Ptr
1062 reuseExpiredLease(Lease6Ptr& expired,
1063 ClientContext6& ctx,
1064 uint8_t prefix_len,
1066
1085 Lease6Collection updateLeaseData(ClientContext6& ctx,
1086 const Lease6Collection& leases);
1087
1093 static bool
1094 removeLeases(Lease6Collection& container,
1095 const asiolink::IOAddress& addr);
1096
1109 void extendLease6(ClientContext6& ctx, Lease6Ptr lease);
1110
1118 enum DbReclaimMode {
1119 DB_RECLAIM_REMOVE,
1120 DB_RECLAIM_UPDATE,
1121 DB_RECLAIM_LEAVE_UNCHANGED
1122 };
1123
1135 template<typename LeasePtrType>
1136 void reclaimExpiredLease(const LeasePtrType& lease,
1137 const bool remove_lease,
1138 const hooks::CalloutHandlePtr& callout_handle);
1139
1150 template<typename LeasePtrType>
1151 void reclaimExpiredLease(const LeasePtrType& lease,
1152 const hooks::CalloutHandlePtr& callout_handle);
1153
1164 void reclaimExpiredLease(const Lease6Ptr& lease,
1165 const DbReclaimMode& reclaim_mode,
1166 const hooks::CalloutHandlePtr& callout_handle);
1167
1178 void reclaimExpiredLease(const Lease4Ptr& lease,
1179 const DbReclaimMode& reclaim_mode,
1180 const hooks::CalloutHandlePtr& callout_handle);
1181
1200 template<typename LeasePtrType>
1201 void reclaimLeaseInDatabase(const LeasePtrType& lease,
1202 const bool remove_lease,
1203 const std::function<void (const LeasePtrType&)>&
1204 lease_update_fun) const;
1205
1218 bool reclaimDeclined(const Lease4Ptr& lease);
1219
1232 bool reclaimDeclined(const Lease6Ptr& lease);
1233
1234public:
1235
1253 struct ClientContext4 : public boost::noncopyable {
1258
1261
1264
1267
1273
1276
1279
1284 std::string hostname_;
1285
1288
1295
1298 uint32_t offer_lft_;
1299
1302
1305
1311 std::map<SubnetID, ConstHostPtr> hosts_;
1312
1319
1325
1329
1333
1342
1343
1351 const std::vector<uint8_t>& identifier) {
1352 if (identifier.empty()) {
1353 isc_throw(BadValue, "identifier is empty");
1354 }
1355 host_identifiers_.push_back(IdentifierPair(id_type, identifier));
1356 }
1357
1364 ConstHostPtr currentHost() const;
1365
1374 ConstHostPtr globalHost() const;
1375
1378
1395 ClientContext4(const ConstSubnet4Ptr& subnet,
1396 const ClientIdPtr& clientid,
1397 const HWAddrPtr& hwaddr,
1398 const asiolink::IOAddress& requested_addr,
1399 const bool fwd_dns_update, const bool rev_dns_update,
1400 const std::string& hostname, const bool fake_allocation,
1401 const uint32_t offer_lft = 0);
1402 private:
1406 DdnsParamsPtr ddns_params_;
1407 };
1408
1410 typedef boost::shared_ptr<ClientContext4> ClientContext4Ptr;
1411
1518
1531 static void findReservation(ClientContext4& ctx);
1532
1544
1562 static uint32_t getValidLft(const ClientContext4& ctx);
1563
1577 static void getMinValidLft(const ClientContext4& ctx, uint32_t& valid);
1578
1595 static uint32_t getOfferLft(const ClientContext4& ctx,
1596 bool only_on_discover = true);
1601 static void getRemaining(const Lease4Ptr& lease, uint32_t& valid);
1602
1608 static void getRemaining(const Lease6Ptr& lease, uint32_t& preferred,
1609 uint32_t& valid);
1610
1611private:
1612
1643 Lease4Ptr discoverLease4(ClientContext4& ctx);
1644
1682 Lease4Ptr requestLease4(ClientContext4& ctx);
1683
1713 Lease4Ptr createLease4(const ClientContext4& ctx,
1714 const isc::asiolink::IOAddress& addr,
1716
1730 Lease4Ptr renewLease4(const Lease4Ptr& lease, ClientContext4& ctx);
1731
1748 Lease4Ptr
1749 reuseExpiredLease4(Lease4Ptr& expired, ClientContext4& ctx,
1751
1767 Lease4Ptr
1768 allocateOrReuseLease4(const asiolink::IOAddress& address,
1769 ClientContext4& ctx,
1771
1790 Lease4Ptr allocateUnreservedLease4(ClientContext4& ctx);
1791
1814 bool updateLease4Information(const Lease4Ptr& lease,
1815 ClientContext4& ctx) const;
1816
1817protected:
1834 bool updateLease4ExtendedInfo(const Lease4Ptr& lease,
1835 const ClientContext4& ctx) const;
1836
1852 void updateLease6ExtendedInfo(const Lease6Ptr& lease,
1853 const ClientContext6& ctx) const;
1854
1858 void clearReclaimedExtendedInfo(const Lease4Ptr& lease) const;
1859
1863 void clearReclaimedExtendedInfo(const Lease6Ptr& lease) const;
1864
1865private:
1866
1880 void setLeaseReusable(const Lease4Ptr& lease,
1881 const ClientContext4& ctx) const;
1882
1897 void setLeaseReusable(const Lease6Ptr& lease,
1898 uint32_t current_preferred_lft,
1899 const ClientContext6& ctx) const;
1900
1901private:
1902
1905 uint16_t incomplete_v4_reclamations_;
1906
1909 uint16_t incomplete_v6_reclamations_;
1910
1911public:
1912
1921
1924
1933 static std::string labelNetworkOrSubnet(ConstSubnetPtr subnet);
1934};
1935
1937typedef boost::shared_ptr<AllocEngine> AllocEnginePtr;
1938
1939} // namespace dhcp
1940} // namespace isc
1941
1942#endif // ALLOC_ENGINE_H
Defines elements for storing the names of client classes.
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
Defines a single hint.
uint8_t prefix_len_
The prefix length (128 for an address).
uint32_t valid_
The valid lifetime (0 when not set).
bool operator==(const Resource &other) const
Equality operator.
Resource(const isc::asiolink::IOAddress &address, const uint8_t prefix_len=128, const uint32_t preferred=0, const uint32_t valid=0)
Default constructor.
bool equals(const Resource &other) const
Compares two AllocEngine::Resource objects for equality.
uint8_t getPrefixLength() const
Returns the prefix length.
uint32_t preferred_
The preferred lifetime (0 when not set).
uint32_t getPreferred() const
Returns the optional preferred lifetime.
isc::asiolink::IOAddress getAddress() const
Returns the address.
uint32_t getValid() const
Returns the optional valid lifetime.
isc::asiolink::IOAddress address_
The address or prefix.
std::set< Resource, ResourceCompare > ResourceContainer
Container holding allocated prefixes or addresses.
boost::shared_ptr< ClientContext4 > ClientContext4Ptr
Pointer to the ClientContext4.
static IPv6Resrv makeIPv6Resrv(const Lease6 &lease)
Creates an IPv6Resrv instance from a Lease6.
void updateLease6ExtendedInfo(const Lease6Ptr &lease, const ClientContext6 &ctx) const
Stores additional client query parameters on a V6 lease.
static void getMinValidLft(const ClientContext4 &ctx, uint32_t &valid)
Returns the valid lifetime based on the v4 context when the pool occupancy is over the adaptive lease...
void reclaimExpiredLeases6Internal(const size_t max_leases, const uint16_t timeout, const bool remove_lease, const uint16_t max_unwarned_cycles=0)
Body of reclaimExpiredLeases6.
bool updateLease4ExtendedInfo(const Lease4Ptr &lease, const ClientContext4 &ctx) const
Stores additional client query parameters on a V4 lease.
isc::util::ReadWriteMutex & getReadWriteMutex()
Get the read-write mutex.
static ConstHostPtr findGlobalReservation(ClientContext6 &ctx)
Attempts to find the host reservation for the client.
AllocEngine(isc::util::uint128_t const &attempts)
Constructor.
std::pair< Host::IdentifierType, std::vector< uint8_t > > IdentifierPair
A tuple holding host identifier type and value.
virtual ~AllocEngine()
Destructor.
void clearReclaimedExtendedInfo(const Lease4Ptr &lease) const
Clear extended info from a reclaimed V4 lease.
isc::util::ReadWriteMutex rw_mutex_
The read-write mutex.
static void getLifetimes6(ClientContext6 &ctx, uint32_t &preferred, uint32_t &valid)
Determines the preferred and valid v6 lease lifetimes.
static void findReservation(ClientContext6 &ctx)
static uint32_t getOfferLft(const ClientContext4 &ctx, bool only_on_discover=true)
Returns the offer lifetime based on the v4 context.
void reclaimExpiredLeases4Internal(const size_t max_leases, const uint16_t timeout, const bool remove_lease, const uint16_t max_unwarned_cycles=0)
Body of reclaimExpiredLeases4.
void deleteExpiredReclaimedLeases4(const uint32_t secs)
Deletes reclaimed leases expired more than specified amount of time ago.
static uint32_t getValidLft(const ClientContext4 &ctx)
Returns the valid lifetime based on the v4 context.
void reclaimExpiredLeases6(const size_t max_leases, const uint16_t timeout, const bool remove_lease, const uint16_t max_unwarned_cycles=0)
Reclaims expired IPv6 leases.
std::list< IdentifierPair > IdentifierList
Map holding values to be used as host identifiers.
static std::string labelNetworkOrSubnet(ConstSubnetPtr subnet)
Generates a label for subnet or shared-network from subnet.
void reclaimExpiredLeases4(const size_t max_leases, const uint16_t timeout, const bool remove_lease, const uint16_t max_unwarned_cycles=0)
Reclaims expired IPv4 leases.
static void getMinLifetimes6(ClientContext6 &ctx, uint32_t &preferred, uint32_t &valid)
Determines the preferred and valid v6 lease lifetimes when the pool occupancy is over the adaptive le...
static void getRemaining(const Lease4Ptr &lease, uint32_t &valid)
Set remaining valid life time.
Lease4Ptr allocateLease4(ClientContext4 &ctx)
Returns IPv4 lease.
void deleteExpiredReclaimedLeases6(const uint32_t secs)
Deletes reclaimed leases expired more than specified amount of time ago.
Lease6Collection allocateLeases6(ClientContext6 &ctx)
Allocates IPv6 leases for a given IA container.
Lease6Collection renewLeases6(ClientContext6 &ctx)
Renews existing DHCPv6 leases for a given IA.
std::vector< Resource > HintContainer
Container for client's hints.
PrefixLenMatchType
Type of preferred PD-pool prefix length selection criteria.
Definition allocator.h:61
IdentifierType
Type of the host identifier.
Definition host.h:337
IPv6 reservation for a host.
Definition host.h:163
IPv6Resrv(const Type &type, const asiolink::IOAddress &prefix, const uint8_t prefix_len=128)
Constructor.
Definition host.cc:86
CalloutNextStep
Specifies allowed next steps.
Defines the D2ClientConfig class.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
An abstract API for lease database.
boost::shared_ptr< const Subnet6 > ConstSubnet6Ptr
A const pointer to a Subnet6 object.
Definition subnet.h:620
boost::shared_ptr< const Subnet4 > ConstSubnet4Ptr
A const pointer to a Subnet4 object.
Definition subnet.h:455
boost::shared_ptr< Pkt4 > Pkt4Ptr
A pointer to Pkt4 object.
Definition pkt4.h:556
boost::shared_ptr< DUID > DuidPtr
Definition duid.h:136
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition lease.h:528
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition lease.h:693
boost::shared_ptr< AllocEngine > AllocEnginePtr
A pointer to the AllocEngine object.
boost::shared_ptr< Option6IA > Option6IAPtr
A pointer to the Option6IA object.
Definition option6_ia.h:20
boost::shared_ptr< DdnsParams > DdnsParamsPtr
Defines a pointer for DdnsParams instances.
boost::shared_ptr< Option6IAPrefix > Option6IAPrefixPtr
Pointer to the Option6IAPrefix object.
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
Definition hwaddr.h:154
boost::shared_ptr< SharedNetwork6 > SharedNetwork6Ptr
Pointer to SharedNetwork6 object.
boost::shared_ptr< ClientId > ClientIdPtr
Shared pointer to a Client ID.
Definition duid.h:216
boost::shared_ptr< Option6IAAddr > Option6IAAddrPtr
A pointer to the isc::dhcp::Option6IAAddr object.
boost::shared_ptr< const Host > ConstHostPtr
Const pointer to the Host object.
Definition host.h:840
boost::shared_ptr< const Subnet > ConstSubnetPtr
A generic pointer to either const Subnet4 or const Subnet6 object.
Definition subnet.h:449
boost::shared_ptr< Pkt6 > Pkt6Ptr
A pointer to Pkt6 packet.
Definition pkt6.h:31
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition lease.h:315
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
boost::multiprecision::checked_uint128_t uint128_t
Definition bigints.h:21
Defines the logger used by the top-level component of kea-lfc.
Standard implementation of read-write mutexes with writer preference using C++11 mutex and condition ...
Context information for the DHCPv4 lease allocation.
ClientIdPtr clientid_
Client identifier from the DHCP message.
DdnsParamsPtr getDdnsParams()
Returns the set of DDNS behavioral parameters based on the selected subnet.
bool early_global_reservations_lookup_
Indicates if early global reservation is enabled.
ConstHostPtr currentHost() const
Returns host for currently selected subnet.
Pkt4Ptr query_
A pointer to the client's message.
Lease4Ptr new_lease_
A pointer to a newly allocated lease.
std::map< SubnetID, ConstHostPtr > hosts_
Holds a map of hosts belonging to the client within different subnets.
ConstSubnet4Ptr subnet_
Subnet selected for the client by the server.
bool rev_dns_update_
Perform reverse DNS update.
uint32_t offer_lft_
If not zero, then we will allocate on DISCOVER for this amount of time.
bool fake_allocation_
Indicates if this is a real or fake allocation.
hooks::CalloutHandlePtr callout_handle_
Callout handle associated with the client's message.
bool unknown_requested_addr_
True when the address DHCPREQUEST'ed by client is not within a dynamic pool the server knows about.
Lease4Ptr old_lease_
A pointer to an old lease that the client had before update.
ConstHostPtr globalHost() const
Returns global host reservation if there is one.
bool fwd_dns_update_
Perform forward DNS update.
asiolink::IOAddress requested_address_
An address that the client desires.
Lease4Ptr conflicting_lease_
A pointer to the object representing a lease in conflict.
void addHostIdentifier(const Host::IdentifierType &id_type, const std::vector< uint8_t > &identifier)
Convenience function adding host identifier into host_identifiers_ list.
IdentifierList host_identifiers_
A list holding host identifiers extracted from a message received by the server.
HWAddrPtr hwaddr_
HW address from the DHCP message.
Parameters pertaining to individual IAs.
Lease6Collection old_leases_
A pointer to any old leases that the client had before update but are no longer valid after the updat...
Option6IAPtr ia_rsp_
A pointer to the IA_NA/IA_PD option to be sent in response.
Lease::Type type_
Lease type (IA or PD).
ResourceContainer new_resources_
Holds addresses and prefixes allocated for this IA.
bool isNewResource(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128) const
Checks if specified address or prefix was new.
Lease6Collection changed_leases_
A pointer to any leases that have changed FQDN information.
void addHint(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128, const uint32_t preferred=0, const uint32_t valid=0)
Convenience method adding new hint.
void addNewResource(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128)
Convenience method adding new prefix or address.
Lease6Collection reused_leases_
Set of leases marked for reuse by lease caching.
uint32_t iaid_
The IAID field from IA_NA or IA_PD that is being processed.
Context information for the DHCPv6 leases allocation.
IAContext & currentIA()
Returns IA specific context for the currently processed IA.
std::vector< IAContext > ias_
Container holding IA specific contexts.
void addHostIdentifier(const Host::IdentifierType &id_type, const std::vector< uint8_t > &identifier)
Convenience function adding host identifier into host_identifiers_ list.
bool fake_allocation_
Indicates if this is a real or fake allocation.
ConstHostPtr currentHost() const
Returns host from the most preferred subnet.
DuidPtr duid_
Client identifier.
void addAllocatedResource(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128)
Convenience method adding allocated prefix or address.
Lease6Collection new_leases_
A collection of newly allocated leases.
std::vector< IAContext > & getIAContexts()
HWAddrPtr hwaddr_
Hardware/MAC address (if available, may be NULL).
hooks::CalloutHandlePtr callout_handle_
Callout handle associated with the client's message.
bool isAllocated(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128) const
Checks if specified address or prefix was allocated.
bool hasGlobalReservation(const IPv6Resrv &resv) const
Determines if a global reservation exists.
ResourceContainer allocated_resources_
Holds addresses and prefixes allocated for all IAs.
bool rev_dns_update_
A boolean value which indicates that server takes responsibility for the reverse DNS Update for this ...
DdnsParamsPtr getDdnsParams()
Returns the set of DDNS behavioral parameters based on the selected subnet.
ConstHostPtr globalHost() const
Returns global host reservation if there is one.
Pkt6Ptr query_
A pointer to the client's message.
bool early_global_reservations_lookup_
Indicates if early global reservation is enabled.
void createIAContext()
Creates new IA context.
ConstSubnet6Ptr host_subnet_
Subnet from which host reservations should be retrieved.
IdentifierList host_identifiers_
A list holding host identifiers extracted from a message received by the server.
ConstSubnet6Ptr subnet_
Subnet selected for the client by the server.
std::map< SubnetID, ConstHostPtr > hosts_
Holds a map of hosts belonging to the client within different subnets.
bool fwd_dns_update_
A boolean value which indicates that server takes responsibility for the forward DNS Update for this ...
bool operator()(const Resource &lhr, const Resource &rhr) const
Compare operator.
Structure that holds a lease for IPv6 address and/or prefix.
Definition lease.h:536
Lease::Type type_
Lease type.
Definition lease.h:541
uint8_t prefixlen_
IPv6 prefix length.
Definition lease.h:546
Type
Type of lease or pool.
Definition lease.h:46
@ TYPE_NA
the lease contains non-temporary IPv6 address
Definition lease.h:47
isc::asiolink::IOAddress addr_
IPv4 ot IPv6 address.
Definition lease.h:126