Kea 2.2.0
lease.h
Go to the documentation of this file.
1// Copyright (C) 2013-2022 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_H
8#define LEASE_H
9
10#include <asiolink/io_address.h>
11#include <dhcp/duid.h>
12#include <dhcp/option.h>
13#include <dhcp/hwaddr.h>
14#include <dhcpsrv/subnet_id.h>
15#include <cc/user_context.h>
16#include <cc/cfg_to_element.h>
17#include <util/dhcp_space.h>
18
19namespace isc {
20namespace dhcp {
21
22struct Lease;
23
25typedef boost::shared_ptr<Lease> LeasePtr;
26
32
34 static const uint32_t INFINITY_LFT = 0xffffffff;
35
43 static std::string lifetimeToText(uint32_t lifetime);
44
46 typedef enum {
47 TYPE_NA = 0,
48 TYPE_TA = 1,
49 TYPE_PD = 2,
50 TYPE_V4 = 3
52
56 static std::string typeToText(Type type);
57
63 static Type textToType(const std::string& text);
64
66
67
69 static const uint32_t STATE_DEFAULT;
70
72 static const uint32_t STATE_DECLINED;
73
75 static const uint32_t STATE_EXPIRED_RECLAIMED;
76
84 static std::string basicStatesToText(const uint32_t state);
85
104 uint32_t valid_lft, SubnetID subnet_id, time_t cltt,
105 const bool fqdn_fwd, const bool fqdn_rev,
106 const std::string& hostname,
107 const HWAddrPtr& hwaddr);
108
110 virtual ~Lease() {}
111
115 virtual Lease::Type getType() const = 0;
116
121
125 uint32_t valid_lft_;
126
131
138
143 time_t cltt_;
144
150
155
159 std::string hostname_;
160
165
170
175
185 uint32_t state_;
186
190 virtual std::string toText() const = 0;
191
194 bool expired() const;
195
200 bool stateExpiredReclaimed() const;
201
205 bool stateDeclined() const;
206
215 bool hasIdenticalFqdn(const Lease& other) const;
216
225 const std::vector<uint8_t>& getHWAddrVector() const;
226
231 int64_t getExpirationTime() const;
232
243 virtual void decline(uint32_t probation_period) = 0;
244
247
258 static void syncCurrentExpirationTime(const Lease& from, Lease& to);
259
268
269protected:
270
279 static void fromElementCommon(const LeasePtr& lease,
280 const data::ConstElementPtr& element);
281
282};
283
284struct Lease4;
285
287typedef boost::shared_ptr<Lease4> Lease4Ptr;
288
295struct Lease4 : public Lease {
296
302
315 Lease4(const isc::asiolink::IOAddress& addr, const HWAddrPtr& hwaddr,
316 const uint8_t* clientid, size_t clientid_len, uint32_t valid_lft,
317 time_t cltt, uint32_t subnet_id,
318 const bool fqdn_fwd = false, const bool fqdn_rev = false,
319 const std::string& hostname = "")
320 : Lease(addr, valid_lft, subnet_id, cltt, fqdn_fwd, fqdn_rev,
321 hostname, hwaddr) {
322 if (clientid_len) {
323 client_id_.reset(new ClientId(clientid, clientid_len));
324 }
325 }
326
338 Lease4(const isc::asiolink::IOAddress& address,
339 const HWAddrPtr& hw_address,
340 const ClientIdPtr& client_id,
341 const uint32_t valid_lifetime,
342 const time_t cltt,
343 const SubnetID subnet_id,
344 const bool fqdn_fwd = false,
345 const bool fqdn_rev = false,
346 const std::string& hostname = "");
347
348
352 Lease4() : Lease(0, 0, 0, 0, false, false, "", HWAddrPtr())
353 {
354 }
355
359 Lease4(const Lease4& other);
360
367 virtual Lease::Type getType() const {
368 return (Lease::TYPE_V4);
369 }
370
379 static std::string statesToText(const uint32_t state);
380
390 const std::vector<uint8_t>& getClientIdVector() const;
391
452 bool belongsToClient(const HWAddrPtr& hw_address,
453 const ClientIdPtr& client_id) const;
454
458 Lease4& operator=(const Lease4& other);
459
463 bool operator==(const Lease4& other) const;
464
468 bool operator!=(const Lease4& other) const {
469 return (!operator==(other));
470 }
471
475 virtual std::string toText() const;
476
482 void decline(uint32_t probation_period);
483
485 virtual isc::data::ElementPtr toElement() const;
486
492 static Lease4Ptr fromElement(const data::ConstElementPtr& element);
493
495};
496
498typedef std::vector<Lease4Ptr> Lease4Collection;
499
501typedef boost::shared_ptr<Lease4Collection> Lease4CollectionPtr;
502
503struct Lease6;
504
506typedef boost::shared_ptr<Lease6> Lease6Ptr;
507
514struct Lease6 : public Lease {
515
520
524 uint8_t prefixlen_;
525
531 uint32_t iaid_;
532
535
541
549
551
562 Lease6(Lease::Type type, const isc::asiolink::IOAddress& addr, DuidPtr duid,
563 uint32_t iaid, uint32_t preferred, uint32_t valid,
564 SubnetID subnet_id, const HWAddrPtr& hwaddr = HWAddrPtr(),
565 uint8_t prefixlen = 128);
566
581 Lease6(Lease::Type type, const isc::asiolink::IOAddress& addr, DuidPtr duid,
582 uint32_t iaid, uint32_t preferred, uint32_t valid,
583 SubnetID subnet_id, const bool fqdn_fwd,
584 const bool fqdn_rev, const std::string& hostname,
585 const HWAddrPtr& hwaddr = HWAddrPtr(), uint8_t prefixlen = 128);
586
590 Lease6();
591
598 virtual Lease::Type getType() const {
599 return (type_);
600 }
601
610 static std::string statesToText(const uint32_t state);
611
620 const std::vector<uint8_t>& getDuidVector() const;
621
627 void decline(uint32_t probation_period);
628
632 bool operator==(const Lease6& other) const;
633
637 bool operator!=(const Lease6& other) const {
638 return (!operator==(other));
639 }
640
644 virtual std::string toText() const;
645
647 virtual isc::data::ElementPtr toElement() const;
648
654 static Lease6Ptr fromElement(const data::ConstElementPtr& element);
655};
656
658typedef boost::shared_ptr<const Lease6> ConstLease6Ptr;
659
661typedef std::vector<Lease6Ptr> Lease6Collection;
662
663
665typedef boost::shared_ptr<Lease6Collection> Lease6CollectionPtr;
666
673std::ostream&
674operator<<(std::ostream& os, const Lease& lease);
675
678namespace {
679
680template <isc::util::DhcpSpace D>
681struct AdapterLease {};
682
683template <>
684struct AdapterLease<isc::util::DHCPv4> {
685 using type = Lease4;
686};
687
688template <>
689struct AdapterLease<isc::util::DHCPv6> {
690 using type = Lease6;
691};
692
693} // namespace
694
695template <isc::util::DhcpSpace D>
696using LeaseT = typename AdapterLease<D>::type;
697
698template <isc::util::DhcpSpace D>
699using LeaseTPtr = boost::shared_ptr<LeaseT<D>>;
701
702}; // end of isc::dhcp namespace
703}; // end of isc namespace
704
705#endif // LEASE_H
Holds Client identifier or client IPv4 address.
Definition: duid.h:111
boost::shared_ptr< const Element > ConstElementPtr
Definition: data.h:27
boost::shared_ptr< Element > ElementPtr
Definition: data.h:24
boost::shared_ptr< Lease4Collection > Lease4CollectionPtr
A shared pointer to the collection of IPv4 leases.
Definition: lease.h:501
boost::shared_ptr< DUID > DuidPtr
Definition: duid.h:20
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition: lease.h:503
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition: lease.h:661
std::ostream & operator<<(std::ostream &os, const OpaqueDataTuple &tuple)
Inserts the OpaqueDataTuple as a string into stream.
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
Definition: hwaddr.h:154
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
Definition: subnet_id.h:24
boost::shared_ptr< Lease > LeasePtr
Pointer to the lease object.
Definition: lease.h:22
boost::shared_ptr< ClientId > ClientIdPtr
Shared pointer to a Client ID.
Definition: duid.h:103
boost::shared_ptr< Lease6Collection > Lease6CollectionPtr
A shared pointer to the collection of IPv6 leases.
Definition: lease.h:665
boost::shared_ptr< const Lease6 > ConstLease6Ptr
Pointer to a const Lease6 structure.
Definition: lease.h:658
boost::shared_ptr< LeaseT< D > > LeaseTPtr
Definition: lease.h:699
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition: lease.h:498
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition: lease.h:284
typename AdapterLease< D >::type LeaseT
Definition: lease.h:696
Defines the logger used by the top-level component of kea-lfc.
Abstract class for configuration Cfg_* classes.
virtual isc::data::ElementPtr toElement() const =0
Unparse a configuration object.
Base class for user context.
Definition: user_context.h:22
Structure that holds a lease for IPv4 address.
Definition: lease.h:295
ClientIdPtr client_id_
Client identifier.
Definition: lease.h:301
void decline(uint32_t probation_period)
Sets IPv4 lease to declined state.
Definition: lease.cc:381
static std::string statesToText(const uint32_t state)
Returns name of the lease states specific to DHCPv4.
Definition: lease.cc:340
Lease4(const isc::asiolink::IOAddress &addr, const HWAddrPtr &hwaddr, const uint8_t *clientid, size_t clientid_len, uint32_t valid_lft, time_t cltt, uint32_t subnet_id, const bool fqdn_fwd=false, const bool fqdn_rev=false, const std::string &hostname="")
Constructor.
Definition: lease.h:315
bool operator==(const Lease4 &other) const
Compare two leases for equality.
Definition: lease.cc:601
virtual Lease::Type getType() const
Returns Lease type.
Definition: lease.h:367
bool operator!=(const Lease4 &other) const
Compare two leases for inequality.
Definition: lease.h:468
const std::vector< uint8_t > & getClientIdVector() const
Returns a client identifier.
Definition: lease.cc:345
virtual isc::data::ElementPtr toElement() const
Return the JSON representation of a lease.
Definition: lease.cc:428
bool belongsToClient(const HWAddrPtr &hw_address, const ClientIdPtr &client_id) const
Check if the lease belongs to the client with the given identifiers.
Definition: lease.cc:364
Lease4()
Default constructor.
Definition: lease.h:352
Lease4 & operator=(const Lease4 &other)
Assignment operator.
Definition: lease.cc:393
virtual std::string toText() const
Convert lease to printable form.
Definition: lease.cc:581
static Lease4Ptr fromElement(const data::ConstElementPtr &element)
Returns pointer to the IPv4 lease created from JSON representation.
Definition: lease.cc:453
Structure that holds a lease for IPv6 address and/or prefix.
Definition: lease.h:514
const std::vector< uint8_t > & getDuidVector() const
Returns a reference to a vector representing a DUID.
Definition: lease.cc:533
virtual Lease::Type getType() const
Returns Lease type.
Definition: lease.h:598
virtual std::string toText() const
Convert Lease to Printable Form.
Definition: lease.cc:556
bool operator==(const Lease6 &other) const
Compare two leases for equality.
Definition: lease.cc:619
static std::string statesToText(const uint32_t state)
Returns name of the lease states specific to DHCPv6.
Definition: lease.cc:528
Lease6()
Constructor.
Definition: lease.cc:521
Lease::Type type_
Lease type.
Definition: lease.h:519
uint32_t reuseable_preferred_lft_
Remaining preferred lifetime.
Definition: lease.h:548
bool operator!=(const Lease6 &other) const
Compare two leases for inequality.
Definition: lease.h:637
uint32_t iaid_
Identity Association Identifier (IAID)
Definition: lease.h:531
uint32_t preferred_lft_
Preferred lifetime.
Definition: lease.h:540
DuidPtr duid_
Client identifier.
Definition: lease.h:534
static Lease6Ptr fromElement(const data::ConstElementPtr &element)
Returns pointer to the IPv6 lease created from JSON representation.
Definition: lease.cc:673
uint8_t prefixlen_
IPv6 prefix length.
Definition: lease.h:524
virtual isc::data::ElementPtr toElement() const
Return the JSON representation of a lease.
Definition: lease.cc:642
void decline(uint32_t probation_period)
Sets IPv6 lease to declined state.
Definition: lease.cc:543
a common structure for IPv4 and IPv6 leases
Definition: lease.h:31
void updateCurrentExpirationTime()
Update lease current expiration time with new value, so that additional operations can be done withou...
Definition: lease.cc:286
bool hasIdenticalFqdn(const Lease &other) const
Returns true if the other lease has equal FQDN data.
Definition: lease.cc:128
virtual void decline(uint32_t probation_period)=0
Sets lease to DECLINED state.
static const uint32_t INFINITY_LFT
Infinity (means static, i.e. never expire)
Definition: lease.h:34
virtual ~Lease()
Destructor.
Definition: lease.h:110
uint32_t reuseable_valid_lft_
Remaining valid lifetime.
Definition: lease.h:137
static std::string lifetimeToText(uint32_t lifetime)
Print lifetime.
Definition: lease.cc:29
bool stateDeclined() const
Indicates if the lease is in the "declined" state.
Definition: lease.cc:118
bool stateExpiredReclaimed() const
Indicates if the lease is in the "expired-reclaimed" state.
Definition: lease.cc:113
static const uint32_t STATE_DEFAULT
A lease in the default state.
Definition: lease.h:69
uint32_t current_valid_lft_
Current valid lifetime.
Definition: lease.h:130
SubnetID subnet_id_
Subnet identifier.
Definition: lease.h:154
const std::vector< uint8_t > & getHWAddrVector() const
Returns raw (as vector) hardware address.
Definition: lease.cc:355
uint32_t valid_lft_
Valid lifetime.
Definition: lease.h:125
static std::string basicStatesToText(const uint32_t state)
Returns name(s) of the basic lease state(s).
Definition: lease.cc:90
static const uint32_t STATE_DECLINED
Declined lease.
Definition: lease.h:72
bool expired() const
returns true if the lease is expired
Definition: lease.cc:108
Lease(const isc::asiolink::IOAddress &addr, uint32_t valid_lft, SubnetID subnet_id, time_t cltt, const bool fqdn_fwd, const bool fqdn_rev, const std::string &hostname, const HWAddrPtr &hwaddr)
Constructor.
Definition: lease.cc:39
static const uint32_t STATE_EXPIRED_RECLAIMED
Expired and reclaimed lease.
Definition: lease.h:75
Type
Type of lease or pool.
Definition: lease.h:46
@ TYPE_TA
the lease contains temporary IPv6 address
Definition: lease.h:48
@ TYPE_PD
the lease contains IPv6 prefix (for prefix delegation)
Definition: lease.h:49
@ TYPE_V4
IPv4 lease.
Definition: lease.h:50
@ TYPE_NA
the lease contains non-temporary IPv6 address
Definition: lease.h:47
static void syncCurrentExpirationTime(const Lease &from, Lease &to)
Sync lease current expiration time with new value from another lease, so that additional operations c...
Definition: lease.cc:291
std::string hostname_
Client hostname.
Definition: lease.h:159
uint32_t state_
Holds the lease state(s).
Definition: lease.h:185
virtual Lease::Type getType() const =0
Returns Lease type.
int64_t getExpirationTime() const
Returns lease expiration time.
Definition: lease.cc:123
bool fqdn_fwd_
Forward zone updated?
Definition: lease.h:164
time_t cltt_
Client last transmission time.
Definition: lease.h:143
virtual std::string toText() const =0
Convert Lease to Printable Form.
static void fromElementCommon(const LeasePtr &lease, const data::ConstElementPtr &element)
Sets common (for v4 and v6) properties of the lease object.
Definition: lease.cc:135
static std::string typeToText(Type type)
returns text representation of a lease type
Definition: lease.cc:52
static Type textToType(const std::string &text)
Converts type name to the actual type.
Definition: lease.cc:72
HWAddrPtr hwaddr_
Client's MAC/hardware address.
Definition: lease.h:174
bool fqdn_rev_
Reverse zone updated?
Definition: lease.h:169
isc::asiolink::IOAddress addr_
IPv4 ot IPv6 address.
Definition: lease.h:120
time_t current_cltt_
Current client last transmission time.
Definition: lease.h:149