28 #include <boost/shared_ptr.hpp>
29 #include <boost/noncopyable.hpp>
103 std::lock_guard<std::mutex> lock(mutex_);
104 return pickAddressInternal(subnet, client_classes, duid, hint);
106 return pickAddressInternal(subnet, client_classes, duid, hint);
123 pickAddressInternal(
const SubnetPtr& subnet,
168 pickAddressInternal(
const SubnetPtr& subnet,
188 const uint8_t prefix_len);
202 bool prefix,
const uint8_t prefix_len);
229 pickAddressInternal(
const SubnetPtr& subnet,
259 pickAddressInternal(
const SubnetPtr& subnet,
305 std::map<Lease::Type, AllocatorPtr> allocators_;
311 int hook_index_lease4_select_;
312 int hook_index_lease6_select_;
336 const uint8_t prefix_len,
337 const uint32_t preferred = 0,
338 const uint32_t valid = 0)
582 const uint8_t prefix_len = 128,
583 const uint32_t preferred = 0,
584 const uint32_t valid = 0);
605 const uint8_t prefix_len = 128);
612 const uint8_t prefix_len = 128)
const;
632 const uint8_t prefix_len = 128);
639 const uint8_t prefix_len = 128)
const;
647 const std::vector<uint8_t>& identifier) {
660 return (ias_.back());
721 const bool fwd_dns,
const bool rev_dns,
722 const std::string& hostname,
const bool fake_allocation,
889 const bool remove_lease,
890 const uint16_t max_unwarned_cycles = 0);
948 const bool remove_lease,
949 const uint16_t max_unwarned_cycles = 0);
1036 Lease6Ptr createLease6(ClientContext6& ctx,
1038 const uint8_t prefix_len,
1074 allocateReservedLeases6(ClientContext6& ctx,
Lease6Collection& existing_leases);
1090 allocateGlobalReservedLeases6(ClientContext6& ctx,
Lease6Collection& existing_leases);
1101 removeNonmatchingReservedLeases6(ClientContext6& ctx,
1112 removeNonmatchingReservedNoHostLeases6(ClientContext6& ctx,
1129 removeNonreservedLeases6(ClientContext6& ctx,
1166 ClientContext6& ctx,
1212 void extendLease6(ClientContext6& ctx,
Lease6Ptr lease);
1221 enum DbReclaimMode {
1224 DB_RECLAIM_LEAVE_UNCHANGED
1238 template<
typename LeasePtrType>
1239 void reclaimExpiredLease(
const LeasePtrType& lease,
1240 const bool remove_lease,
1253 template<
typename LeasePtrType>
1254 void reclaimExpiredLease(
const LeasePtrType& lease,
1267 void reclaimExpiredLease(
const Lease6Ptr& lease,
1268 const DbReclaimMode& reclaim_mode,
1281 void reclaimExpiredLease(
const Lease4Ptr& lease,
1282 const DbReclaimMode& reclaim_mode,
1303 template<
typename LeasePtrType>
1304 void reclaimLeaseInDatabase(
const LeasePtrType& lease,
1305 const bool remove_lease,
1306 const std::function<
void (
const LeasePtrType&)>&
1307 lease_update_fun)
const;
1321 bool reclaimDeclined(
const Lease4Ptr& lease);
1335 bool reclaimDeclined(
const Lease6Ptr& lease);
1439 const std::vector<uint8_t>& identifier) {
1440 host_identifiers_.push_back(
IdentifierPair(id_type, identifier));
1481 const bool fwd_dns_update,
const bool rev_dns_update,
1482 const std::string& hostname,
const bool fake_allocation);
1849 bool updateLease4Information(
const Lease4Ptr& lease,
1907 void setLeaseReusable(
const Lease4Ptr& lease,
1924 void setLeaseReusable(
const Lease6Ptr& lease,
1925 uint32_t current_preferred_lft,
1932 uint16_t incomplete_v4_reclamations_;
1936 uint16_t incomplete_v6_reclamations_;
1959 #endif // ALLOC_ENGINE_H
Resource(const isc::asiolink::IOAddress &address, const uint8_t prefix_len, const uint32_t preferred=0, const uint32_t valid=0)
Default constructor.
ConstHostPtr globalHost() const
Returns global host reservation if there is one.
Defines the D2ClientConfig class.
std::map< SubnetID, ConstHostPtr > hosts_
Holds a map of hosts belonging to the client within different subnets.
bool fake_allocation_
Indicates if this is a real or fake allocation.
boost::shared_ptr< DUID > DuidPtr
bool updateLease4ExtendedInfo(const Lease4Ptr &lease, const ClientContext4 &ctx) const
Stores additional client query parameters on a V4 lease.
virtual isc::asiolink::IOAddress pickAddress(const SubnetPtr &subnet, const ClientClasses &client_classes, const DuidPtr &duid, const isc::asiolink::IOAddress &hint)
Picks one address out of available pools in a given subnet.
Standard implementation of read-write mutexes with writer preference using C++11 mutex and condition ...
uint8_t getPrefixLength() const
Returns the prefix length.
HWAddrPtr hwaddr_
Hardware/MAC address (if available, may be NULL)
Lease6Collection changed_leases_
A pointer to any leases that have changed FQDN information.
HintContainer hints_
Client's hints.
AllocFailed(const char *file, size_t line, const char *what)
Constructor.
static MultiThreadingMgr & instance()
Returns a single instance of Multi Threading Manager.
ConstHostPtr currentHost() const
Returns host from the most preferred subnet.
static void findReservation(ClientContext6 &ctx)
Attempts to find appropriate host reservation.
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
isc::util::ReadWriteMutex rw_mutex_
The read-write mutex.
void addAllocatedResource(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128)
Convenience method adding allocated prefix or address.
static IPv6Resrv makeIPv6Resrv(const Lease6 &lease)
Creates an IPv6Resrv instance from a Lease6.
bool equals(const Resource &other) const
Compares two AllocEngine::Resource objects for equality.
Lease6Collection old_leases_
A pointer to any old leases that the client had before update but are no longer valid after the updat...
static isc::asiolink::IOAddress increaseAddress(const isc::asiolink::IOAddress &address, bool prefix, const uint8_t prefix_len)
Returns the next address or prefix.
An abstract API for lease database.
static ConstHostPtr findGlobalReservation(ClientContext6 &ctx)
Attempts to find the host reservation for the client.
Defines elements for storing the names of client classes.
uint32_t getValid() const
Returns the optional valid lifetime.
boost::shared_ptr< Subnet4 > Subnet4Ptr
A pointer to a Subnet4 object.
bool fwd_dns_update_
A boolean value which indicates that server takes responsibility for the forward DNS Update for this ...
DuidPtr duid_
Client identifier.
Lease4Ptr allocateLease4(ClientContext4 &ctx)
Returns IPv4 lease.
uint8_t prefix_len_
The prefix length (128 for an address).
IPv6 reservation for a host.
std::list< IdentifierPair > IdentifierList
Map holding values to be used as host identifiers.
AllocEngine(AllocType engine_type, uint64_t attempts, bool ipv6=true)
Constructor.
DdnsParamsPtr getDdnsParams()
Returns the set of DDNS behavioral parameters based on the selected subnet.
hooks::CalloutHandlePtr callout_handle_
Callout handle associated with the client's message.
bool operator()(const Resource &lhr, const Resource &rhr) const
Compare operator.
boost::shared_ptr< AllocEngine > AllocEnginePtr
A pointer to the AllocEngine object.
IdentifierList host_identifiers_
A list holding host identifiers extracted from a message received by the server.
An exception that is thrown when allocation module fails (e.g.
boost::shared_ptr< DdnsParams > DdnsParamsPtr
Defines a pointer for DdnsParams instances.
asiolink::IOAddress requested_address_
An address that the client desires.
void deleteExpiredReclaimedLeases4(const uint32_t secs)
Deletes reclaimed leases expired more than specified amount of time ago.
IterativeAllocator(Lease::Type type)
Default constructor.
void addNewResource(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128)
Convenience method adding new prefix or address.
AllocType
Specifies allocation type.
boost::shared_ptr< Option6IA > Option6IAPtr
A pointer to the Option6IA object.
bool updateLease6ExtendedInfo(const Lease6Ptr &lease, const ClientContext6 &ctx) const
Stores additional client query parameters on a V6 lease.
ResourceContainer new_resources_
Holds addresses and prefixes allocated for this IA.
boost::shared_ptr< Pkt6 > Pkt6Ptr
A pointer to Pkt6 packet.
Subnet6Ptr subnet_
Subnet selected for the client by the server.
ResourceContainer allocated_resources_
Holds addresses and prefixes allocated for all IAs.
Lease4Ptr conflicting_lease_
A pointer to the object representing a lease in conflict.
boost::shared_ptr< Option6IAPrefix > Option6IAPrefixPtr
Pointer to the Option6IAPrefix object.
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Lease4Ptr old_lease_
A pointer to an old lease that the client had before update.
ConstHostPtr currentHost() const
Returns host for currently selected subnet.
uint32_t getPreferred() const
Returns the optional preferred lifetime.
std::map< SubnetID, ConstHostPtr > hosts_
Holds a map of hosts belonging to the client within different subnets.
Random allocator that picks address randomly.
std::vector< IAContext > ias_
Container holding IA specific contexts.
Context information for the DHCPv6 leases allocation.
Subnet6Ptr host_subnet_
Subnet from which host reservations should be retrieved.
boost::shared_ptr< ClientContext4 > ClientContext4Ptr
Pointer to the ClientContext4.
Lease6Collection renewLeases6(ClientContext6 &ctx)
Renews existing DHCPv6 leases for a given IA.
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.
Subnet4Ptr subnet_
Subnet selected for the client by the server.
Pkt4Ptr query_
A pointer to the client's message.
Option6IAPtr ia_rsp_
A pointer to the IA_NA/IA_PD option to be sent in response.
boost::shared_ptr< Pkt4 > Pkt4Ptr
A pointer to Pkt4 object.
CalloutNextStep
Specifies allowed next steps.
ClientContext4()
Default constructor.
boost::shared_ptr< const Host > ConstHostPtr
Const pointer to the Host object.
void addHostIdentifier(const Host::IdentifierType &id_type, const std::vector< uint8_t > &identifier)
Convenience function adding host identifier into host_identifiers_ list.
bool hasGlobalReservation(const IPv6Resrv &resv) const
Determines if a global reservation exists.
Structure that holds a lease for IPv6 address and/or prefix.
Address/prefix allocator that iterates over all addresses.
std::vector< Resource > HintContainer
Container for client's hints.
Lease::Type type_
Lease type.
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.
virtual ~Allocator()
Virtual destructor.
uint8_t prefixlen_
IPv6 prefix length.
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
uint32_t valid_
The valid lifetime (0 when not set).
boost::shared_ptr< ClientId > ClientIdPtr
Shared pointer to a Client ID.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
isc::util::ReadWriteMutex & getReadWriteMutex()
Get the read-write mutex.
void addHostIdentifier(const Host::IdentifierType &id_type, const std::vector< uint8_t > &identifier)
Convenience function adding host identifier into host_identifiers_ list.
the lease contains non-temporary IPv6 address
bool fake_allocation_
Indicates if this is a real or fake allocation.
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-dhcp-ddns.
Lease6Collection new_leases_
A collection of newly allocated leases.
ClientIdPtr clientid_
Client identifier from the DHCP message.
uint32_t iaid_
The IAID field from IA_NA or IA_PD that is being processed.
Lease::Type type_
Lease type (IA or PD)
boost::shared_ptr< Allocator > AllocatorPtr
defines a pointer to allocator
Address/prefix allocator that gets an address based on a hash.
Pkt6Ptr query_
A pointer to the client's message.
bool isNewResource(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128) const
Checks if specified address or prefix was new.
Lease6Collection allocateLeases6(ClientContext6 &ctx)
Allocates IPv6 leases for a given IA container.
Parameters pertaining to individual IAs.
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
Lease4Ptr new_lease_
A pointer to a newly allocated lease.
HashedAllocator(Lease::Type type)
Default constructor (does nothing)
isc::asiolink::IOAddress address_
The address or prefix.
Type
Type of lease or pool.
IAContext()
Default constructor.
bool rev_dns_update_
A boolean value which indicates that server takes responsibility for the reverse DNS Update for this ...
bool fwd_dns_update_
Perform forward DNS update.
Base class for all address/prefix allocation algorithms.
static uint32_t getValidLft(const ClientContext4 &ctx)
Returns the valid lifetime based on the v4 context.
void deleteExpiredReclaimedLeases6(const uint32_t secs)
Deletes reclaimed leases expired more than specified amount of time ago.
isc::asiolink::IOAddress addr_
IPv4 ot IPv6 address.
void createIAContext()
Creates new IA context.
IAContext & currentIA()
Returns IA specific context for the currently processed IA.
ConstHostPtr globalHost() const
Returns global host reservation if there is one.
Lease::Type pool_type_
Defines pool type allocation.
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.
uint32_t preferred_
The preferred lifetime (0 when not set).
std::string hostname_
Hostname.
boost::shared_ptr< Subnet6 > Subnet6Ptr
A pointer to a Subnet6 object.
virtual ~AllocEngine()
Destructor.
IdentifierType
Type of the host identifier.
hooks::CalloutHandlePtr callout_handle_
Callout handle associated with the client's message.
static isc::asiolink::IOAddress increasePrefix(const isc::asiolink::IOAddress &prefix, const uint8_t prefix_len)
Returns the next prefix.
HWAddrPtr hwaddr_
HW address from the DHCP message.
bool isAllocated(const asiolink::IOAddress &prefix, const uint8_t prefix_len=128) const
Checks if specified address or prefix was allocated.
The IOAddress class represents an IP addresses (version agnostic)
std::string hostname_
Hostname.
RandomAllocator(Lease::Type type)
Default constructor (does nothing)
Context information for the DHCPv4 lease allocation.
DHCPv4 and DHCPv6 allocation engine.
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
std::set< Resource, ResourceCompare > ResourceContainer
Container holding allocated prefixes or addresses.
Allocator(Lease::Type pool_type)
Default constructor.
std::pair< Host::IdentifierType, std::vector< uint8_t > > IdentifierPair
A tuple holding host identifier type and value.
Container for storing client class names.
isc::asiolink::IOAddress getAddress() const
Returns the address.
boost::shared_ptr< Option6IAAddr > Option6IAAddrPtr
A pointer to the isc::dhcp::Option6IAAddr object.
bool rev_dns_update_
Perform reverse DNS update.
bool operator==(const Resource &other) const
Equality operator.
boost::shared_ptr< Subnet > SubnetPtr
A generic pointer to either Subnet4 or Subnet6 object.
DdnsParamsPtr getDdnsParams()
Returns the set of DDNS behavioral parameters based on the selected subnet.
AllocatorPtr getAllocator(Lease::Type type)
Returns allocator for a given pool type.
IdentifierList host_identifiers_
A list holding host identifiers extracted from a message received by the server.
ClientContext6()
Default constructor.