Kea 3.1.1
isc::host_cache::HostCache Class Reference

Host Cache implementation. More...

#include <host_cache.h>

+ Inheritance diagram for isc::host_cache::HostCache:

Public Member Functions

 HostCache ()
 Constructor.
 
virtual ~HostCache ()
 Destructor.
 
virtual void add (const dhcp::HostPtr &host)
 Adds a new host to the collection.
 
int cacheClearHandler (hooks::CalloutHandle &handle)
 cache-clear command handler.
 
int cacheFlushHandler (hooks::CalloutHandle &handle)
 cache-flush command handler.
 
int cacheGetByIdHandler (hooks::CalloutHandle &handle)
 cache-get-by-id command handler.
 
int cacheGetHandler (hooks::CalloutHandle &handle)
 cache-get command handler.
 
int cacheInsertHandler (hooks::CalloutHandle &handle)
 cache-insert command handler.
 
int cacheLoadHandler (hooks::CalloutHandle &handle)
 cache-load command handler.
 
int cacheRemoveHandler (hooks::CalloutHandle &handle)
 cache-remove command handler.
 
int cacheSizeHandler (hooks::CalloutHandle &handle)
 Command handlers.
 
int cacheWriteHandler (hooks::CalloutHandle &handle)
 cache-write command handler.
 
virtual size_t capacity () const
 Return the maximum number of entries.
 
virtual void configure (const data::ConstElementPtr &config)
 Parses configuration.
 
virtual bool del (const dhcp::SubnetID &subnet_id, const asiolink::IOAddress &addr)
 Attempts to delete a host by (subnet-id, address)
 
virtual bool del4 (const dhcp::SubnetID &subnet_id, const dhcp::Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len)
 Attempts to delete a host by (subnet-id4, identifier, identifier-type)
 
virtual bool del6 (const dhcp::SubnetID &subnet_id, const dhcp::Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len)
 Attempts to delete a host by (subnet-id6, identifier, identifier-type)
 
virtual void flush (size_t count)
 Flush entries.
 
virtual dhcp::ConstHostCollection get (const dhcp::Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
 Return all hosts connected to any subnet for which reservations have been made using a specified identifier.
 
virtual dhcp::ConstHostPtr get4 (const dhcp::SubnetID &subnet_id, const asiolink::IOAddress &address) const
 Returns a host connected to the IPv4 subnet and having a reservation for a specified IPv4 address.
 
virtual dhcp::ConstHostPtr get4 (const dhcp::SubnetID &subnet_id, const dhcp::Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
 Returns a host connected to the IPv4 subnet.
 
virtual dhcp::ConstHostPtr get6 (const asiolink::IOAddress &prefix, const uint8_t prefix_len) const
 Returns a host using the specified IPv6 prefix.
 
virtual dhcp::ConstHostPtr get6 (const dhcp::SubnetID &subnet_id, const asiolink::IOAddress &address) const
 Returns a host connected to the IPv6 subnet and having a reservation for a specified IPv6 address or prefix.
 
virtual dhcp::ConstHostPtr get6 (const dhcp::SubnetID &subnet_id, const dhcp::Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
 Returns a host connected to the IPv6 subnet.
 
virtual dhcp::ConstHostCollection getAll (const dhcp::Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
 BaseHostDataSource methods.
 
virtual dhcp::ConstHostCollection getAll4 (const asiolink::IOAddress &address) const
 Returns a collection of hosts using the specified IPv4 address.
 
virtual dhcp::ConstHostCollection getAll4 (const dhcp::SubnetID &subnet_id) const
 Return all hosts in a DHCPv4 subnet.
 
virtual dhcp::ConstHostCollection getAll4 (const dhcp::SubnetID &subnet_id, const asiolink::IOAddress &address) const
 Returns all hosts connected to the IPv4 subnet and having a reservation for a specified address.
 
virtual dhcp::ConstHostCollection getAll6 (const asiolink::IOAddress &address) const
 Returns a collection of hosts using the specified IPv6 address.
 
virtual dhcp::ConstHostCollection getAll6 (const dhcp::SubnetID &subnet_id) const
 Return all hosts in a DHCPv6 subnet.
 
virtual dhcp::ConstHostCollection getAll6 (const dhcp::SubnetID &subnet_id, const asiolink::IOAddress &address) const
 Returns all hosts connected to the IPv6 subnet and having a reservation for a specified address or delegated prefix (lease).
 
virtual dhcp::ConstHostCollection getAllbyHostname (const std::string &hostname) const
 Return all hosts with a hostname.
 
virtual dhcp::ConstHostCollection getAllbyHostname4 (const std::string &hostname, const dhcp::SubnetID &subnet_id) const
 Return all hosts with a hostname in a DHCPv4 subnet.
 
virtual dhcp::ConstHostCollection getAllbyHostname6 (const std::string &hostname, const dhcp::SubnetID &subnet_id) const
 Return all hosts with a hostname in a DHCPv6 subnet.
 
virtual size_t getMaximum () const
 Get maximum number of cached hosts.
 
virtual dhcp::ConstHostCollection getPage4 (const dhcp::SubnetID &subnet_id, size_t &source_index, uint64_t lower_host_id, const dhcp::HostPageSize &page_size) const
 Return range of hosts in a DHCPv4 subnet.
 
virtual dhcp::ConstHostCollection getPage4 (size_t &source_index, uint64_t lower_host_id, const dhcp::HostPageSize &page_size) const
 Return range of hosts.
 
virtual dhcp::ConstHostCollection getPage6 (const dhcp::SubnetID &subnet_id, size_t &source_index, uint64_t lower_host_id, const dhcp::HostPageSize &page_size) const
 Return range of hosts in a DHCPv6 subnet.
 
virtual dhcp::ConstHostCollection getPage6 (size_t &source_index, uint64_t lower_host_id, const dhcp::HostPageSize &page_size) const
 Return range of hosts.
 
virtual std::string getType () const
 Return backend type.
 
virtual size_t insert (const dhcp::ConstHostPtr &host, bool overwrite)
 Insert a host into the cache.
 
virtual bool remove (const dhcp::HostPtr &host)
 Remove a host from the cache.
 
virtual bool setIPReservationsUnique (const bool unique)
 Controls whether IP reservations are unique or non-unique.
 
virtual void setMaximum (size_t maximum)
 Set maximum number of cached hosts (0 means unbound).
 
virtual size_t size () const
 Return the number of entries.
 
virtual data::ElementPtr toElement () const
 Returns the whole content of the cache as Element tree.
 
void update (isc::dhcp::HostPtr const &host)
 Implements isc::dhcp::BaseHostDataSource::update() for HostCache.
 
- Public Member Functions inherited from isc::dhcp::CacheHostDataSource
virtual ~CacheHostDataSource ()
 Default destructor implementation.
 
- Public Member Functions inherited from isc::dhcp::BaseHostDataSource
virtual ~BaseHostDataSource ()
 Default destructor implementation.
 
virtual void commit ()
 Commit Transactions.
 
virtual isc::db::DatabaseConnection::ParameterMap getParameters () const
 Return backend parameters.
 
virtual bool isUnusable ()
 Flag which indicates if the host manager has at least one unusable connection.
 
virtual void rollback ()
 Rollback Transactions.
 

Protected Attributes

boost::shared_ptr< HostCacheImplimpl_
 Implementation.
 
boost::scoped_ptr< std::mutex > mutex_
 mutex
 

Additional Inherited Members

- Public Types inherited from isc::dhcp::BaseHostDataSource
enum  IdType { ID_HWADDR = 0 , ID_DUID = 1 }
 Specifies the type of an identifier. More...
 

Detailed Description

Host Cache implementation.

This Host cache provides Host backend that is able to cache hosts. Support for both positive (there is an entry for given host) and negative (there is no such entry) can be cached. Host collections (returned by getAll*() methods) are not handled.

Definition at line 34 of file host_cache.h.

Constructor & Destructor Documentation

◆ HostCache()

isc::host_cache::HostCache::HostCache ( )

Constructor.

Exceptions
Unexpectedif allocation fails.

Definition at line 35 of file host_cache.cc.

References impl_, and mutex_.

◆ ~HostCache()

isc::host_cache::HostCache::~HostCache ( )
virtual

Destructor.

Definition at line 38 of file host_cache.cc.

References impl_.

Member Function Documentation

◆ add()

void isc::host_cache::HostCache::add ( const dhcp::HostPtr & host)
virtual

Adds a new host to the collection.

The implementations of this method should guard against duplicate reservations for the same host, where possible. For example, when the reservation for the same HW address and subnet id is added twice, the implementation should throw an exception. Note, that usually it is impossible to guard against adding duplicated host, where one instance is identified by HW address, another one by DUID.

Parameters
hostPointer to the new Host object being added.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 280 of file host_cache.cc.

References isc::host_cache::HOST_CACHE_ADD, isc::host_cache::HOST_CACHE_ADD_DUPLICATE, isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::host_cache_logger, impl_, isc_throw, LOG_DEBUG, and mutex_.

◆ cacheClearHandler()

int isc::host_cache::HostCache::cacheClearHandler ( hooks::CalloutHandle & handle)

cache-clear command handler.

This command cleares the host cache.

No parameter taken.

Example command clearing the whole cache. { "command": "cache-clear" }

Parameters
handleCallout context - which is expected to contain the clear command JSON text in the "command" argument
Returns
result of the operation

Definition at line 475 of file host_cache.cc.

References isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_CLEAR, isc::host_cache::HOST_CACHE_COMMAND_CLEAR_FAILED, isc::host_cache::host_cache_logger, impl_, LOG_ERROR, LOG_INFO, isc::config::CmdsImpl::setErrorResponse(), and isc::config::CmdsImpl::setSuccessResponse().

+ Here is the call graph for this function:

◆ cacheFlushHandler()

int isc::host_cache::HostCache::cacheFlushHandler ( hooks::CalloutHandle & handle)

cache-flush command handler.

This command flushes the host cache.

Parameter is the number of entries to flush (must be > 0) or the string 'all'.

Example command flushing at most 5 entries { "command": "cache-flush", "arguments": 5 }

Example command flush the whole cache { "command": "cache-flush", "arguments": "all" }

Parameters
handleCallout context - which is expected to contain the flush command JSON text in the "command" argument
Returns
result of the operation

Definition at line 495 of file host_cache.cc.

References isc::config::CmdsImpl::cmd_args_, isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_FLUSH, isc::host_cache::HOST_CACHE_COMMAND_FLUSH_FAILED, isc::host_cache::host_cache_logger, impl_, isc_throw, LOG_ERROR, LOG_INFO, isc::host_cache::HCConfigParser::MAXIMUM, isc::config::CmdsImpl::setErrorResponse(), and isc::config::CmdsImpl::setSuccessResponse().

+ Here is the call graph for this function:

◆ cacheGetByIdHandler()

int isc::host_cache::HostCache::cacheGetByIdHandler ( hooks::CalloutHandle & handle)

cache-get-by-id command handler.

This command retrieves the host cache entries matching the given identifier.

Parameters are an identifier-type and an identifier.

Example command getting the specified entries. { "command": "cache-get-by-id", "arguments": { "hw-address": "01:02:03:04:05:06" } }

The result is a list of modified host reservations:

  • client-classes for DHCPv4 and DHCPv6 are returned in client-classes4 and client-classes6 entries
  • option-data for DHCPv4 and DHCPv6 are returned in option-data4 and option-data6 entries
  • IPv4 subnet-id is added in the subnet-id4 entry
  • IPv6 subnet-id is added in the subnet-id6 entry
  • internal host-id is added in the host-id entry
Parameters
handleCallout context - which is expected to contain the get command JSON text in the "command" argument
Returns
result of the operation

Definition at line 573 of file host_cache.cc.

References isc::config::CmdsImpl::cmd_args_, isc::config::CONTROL_RESULT_EMPTY, isc::config::CONTROL_RESULT_SUCCESS, isc::config::createAnswer(), Element::createList(), isc::util::str::decodeFormattedHexString(), isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_GET_BY_ID, isc::host_cache::HOST_CACHE_COMMAND_GET_BY_ID_FAILED, isc::host_cache::host_cache_logger, isc::dhcp::Host::IDENT_CIRCUIT_ID, isc::dhcp::Host::IDENT_CLIENT_ID, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, impl_, isc_throw, LOG_ERROR, LOG_INFO, Element::map, mutex_, isc::util::str::quotedStringToBinary(), isc::config::CmdsImpl::setErrorResponse(), isc::config::CmdsImpl::setResponse(), and isc::host_cache::toElement().

+ Here is the call graph for this function:

◆ cacheGetHandler()

int isc::host_cache::HostCache::cacheGetHandler ( hooks::CalloutHandle & handle)

cache-get command handler.

This command retrieves the host cache content.

No parameter taken.

Example command dumping the whole cache { "command": "cache-get", }

The result is a list of modified host reservations:

  • client-classes for DHCPv4 and DHCPv6 are returned in client-classes4 and client-classes6 entries
  • option-data for DHCPv4 and DHCPv6 are returned in option-data4 and option-data6 entries
  • IPv4 subnet-id is added in the subnet-id4 entry
  • IPv6 subnet-id is added in the subnet-id6 entry
  • internal host-id is added in the host-id entry The list is ordered is decreasing last used time, i.e. the first host is the oldest and the last the newest. This operation is the main debug tool.
Parameters
handleCallout context - which is expected to contain the get command JSON text in the "command" argument
Returns
result of the operation

Definition at line 544 of file host_cache.cc.

References isc::config::CONTROL_RESULT_EMPTY, isc::config::CONTROL_RESULT_SUCCESS, isc::config::createAnswer(), isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_GET, isc::host_cache::HOST_CACHE_COMMAND_GET_FAILED, isc::host_cache::host_cache_logger, impl_, LOG_ERROR, LOG_INFO, isc::config::CmdsImpl::setErrorResponse(), and isc::config::CmdsImpl::setResponse().

+ Here is the call graph for this function:

◆ cacheInsertHandler()

int isc::host_cache::HostCache::cacheInsertHandler ( hooks::CalloutHandle & handle)

cache-insert command handler.

This command inserts entries into the host cache.

Parameter is either one entry, or a list of entries in the format described for cache-get.

Example command { "command": "cache-insert", "arguments": { host1, host2 } }

Parameters
handleCallout context - which is expected to contain the insert command JSON text in the "command" argument and entry/entries in the "arguments" one.
Returns
result of the operation

Definition at line 672 of file host_cache.cc.

References isc::config::CmdsImpl::cmd_args_, isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_INSERT, isc::host_cache::HOST_CACHE_COMMAND_INSERT_FAILED, isc::host_cache::host_cache_logger, impl_, isc_throw, LOG_ERROR, LOG_INFO, Element::map, mutex_, isc::host_cache::HCEntryListParser::parse(), isc::host_cache::HCEntryParser::parse(), isc::config::CmdsImpl::setErrorResponse(), and isc::config::CmdsImpl::setSuccessResponse().

+ Here is the call graph for this function:

◆ cacheLoadHandler()

int isc::host_cache::HostCache::cacheLoadHandler ( hooks::CalloutHandle & handle)

cache-load command handler.

This command loads the cache content from disk.

Parameter is the path of the file where to read the host cache content, i.e. the cache-write opposite operation. When two entries conflict the most recent one is kept and the previous/older one is removed.

Parameters
handleCallout context - which is expected to contain the flush command JSON text in the "command" argument
Returns
result of the operation

Definition at line 793 of file host_cache.cc.

References isc::config::CmdsImpl::cmd_args_, isc::config::CmdsImpl::extractCommand(), Element::fromJSONFile(), isc::host_cache::HOST_CACHE_COMMAND_LOAD, isc::host_cache::HOST_CACHE_COMMAND_LOAD_FAILED, isc::host_cache::host_cache_logger, impl_, isc_throw, LOG_ERROR, LOG_INFO, isc::host_cache::HCEntryListParser::parse(), isc::config::CmdsImpl::setErrorResponse(), isc::config::CmdsImpl::setSuccessResponse(), and Element::string.

+ Here is the call graph for this function:

◆ cacheRemoveHandler()

int isc::host_cache::HostCache::cacheRemoveHandler ( hooks::CalloutHandle & handle)

cache-remove command handler.

This command removes entries into the host cache.

Parameters are either a subnet-id and an ip-address, or an identifier-type, an identifier and subnet-id4 or subnet-id6.

Example command with an address { "command": "cache-remove", "arguments": { "subnet-id": 123, "ip-address": "192.0.0.2" } }

Example command with an identifier { "command": "cache-remove", "arguments": { "subnet-id6": 10, "hw-address": "01:02:03:04:05:06" } }

Parameters
handleCallout context - which is expected to contain the remove command JSON text in the "command" argument and entry/entries in the "arguments" one.
Returns
result of the operation

Definition at line 855 of file host_cache.cc.

References isc::config::CmdsImpl::cmd_args_, isc::config::CONTROL_RESULT_EMPTY, isc::util::str::decodeFormattedHexString(), isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_REMOVE, isc::host_cache::HOST_CACHE_COMMAND_REMOVE_FAILED, isc::host_cache::host_cache_logger, isc::dhcp::Host::IDENT_CIRCUIT_ID, isc::dhcp::Host::IDENT_CLIENT_ID, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, impl_, isc_throw, isc::asiolink::IOAddress::isV4(), isc::asiolink::IOAddress::isV4Zero(), isc::asiolink::IOAddress::isV6(), isc::asiolink::IOAddress::isV6Zero(), LOG_ERROR, LOG_INFO, Element::map, mutex_, isc::util::str::quotedStringToBinary(), isc::config::CmdsImpl::setErrorResponse(), and isc::config::CmdsImpl::setSuccessResponse().

+ Here is the call graph for this function:

◆ cacheSizeHandler()

int isc::host_cache::HostCache::cacheSizeHandler ( hooks::CalloutHandle & handle)

Command handlers.

cache-size command handler.

This command returns the size of the host cache.

No parameter taken.

Example command returning the cache size. { "command": "cache-size" }

The result is the size of the cache.

Parameters
handleCallout context - which is expected to contain the size command JSON text in the "command" argument
Returns
result of the operation

Definition at line 448 of file host_cache.cc.

References isc::config::CONTROL_RESULT_SUCCESS, Element::create(), isc::config::createAnswer(), Element::createMap(), isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_SIZE, isc::host_cache::HOST_CACHE_COMMAND_SIZE_FAILED, isc::host_cache::host_cache_logger, impl_, LOG_ERROR, LOG_INFO, mutex_, isc::config::CmdsImpl::setErrorResponse(), and isc::config::CmdsImpl::setResponse().

+ Here is the call graph for this function:

◆ cacheWriteHandler()

int isc::host_cache::HostCache::cacheWriteHandler ( hooks::CalloutHandle & handle)

cache-write command handler.

This command writes the host cache content to disk.

Parameter is the path of the file where to write the host cache content as a JSON list of entries in the format described for cache-get.

Example command { "command": "cache-write", "arguments": "cache.dump" }

Parameters
handleCallout context - which is expected to contain the write command JSON text in the "command" argument
Returns
result of the operation

Definition at line 735 of file host_cache.cc.

References isc::config::CmdsImpl::cmd_args_, isc::config::CmdsImpl::extractCommand(), isc::host_cache::HOST_CACHE_COMMAND_WRITE, isc::host_cache::HOST_CACHE_COMMAND_WRITE_FAILED, isc::host_cache::host_cache_logger, isc::host_cache::HOST_CACHE_PATH_SECURITY_WARNING, impl_, isc::dhcp::CfgMgr::instance(), isc_throw, LOG_ERROR, LOG_INFO, LOG_WARN, isc::data::prettyPrint(), isc::config::CmdsImpl::setErrorResponse(), isc::config::CmdsImpl::setSuccessResponse(), Element::string, isc::dhcp::CfgMgr::validatePath(), and isc::Exception::what().

+ Here is the call graph for this function:

◆ capacity()

size_t isc::host_cache::HostCache::capacity ( ) const
virtual

Return the maximum number of entries.

Returns
the maximum number of entries, 0 means unbound.

Implements isc::dhcp::CacheHostDataSource.

Definition at line 434 of file host_cache.cc.

References impl_, and mutex_.

◆ configure()

void isc::host_cache::HostCache::configure ( const data::ConstElementPtr & config)
virtual

Parses configuration.

Parameters
configConfiguration specified for the hooks library.
Exceptions
ConfigErrorwhen configuration fails.

Definition at line 42 of file host_cache.cc.

References isc::host_cache::HCConfigParser::parse().

+ Here is the call graph for this function:

◆ del()

bool isc::host_cache::HostCache::del ( const dhcp::SubnetID & subnet_id,
const asiolink::IOAddress & addr )
virtual

Attempts to delete a host by (subnet-id, address)

This method supports both v4 and v6.

Parameters
subnet_idsubnet identifier.
addrspecified address.
Returns
always false.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 308 of file host_cache.cc.

References isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DEL_SUBNET_ID_ADDRESS4, isc::host_cache::HOST_CACHE_DEL_SUBNET_ID_ADDRESS6, isc::host_cache::host_cache_logger, impl_, isc::asiolink::IOAddress::isV4(), isc::asiolink::IOAddress::isV6(), LOG_DEBUG, mutex_, and isc::asiolink::IOAddress::toText().

+ Here is the call graph for this function:

◆ del4()

bool isc::host_cache::HostCache::del4 ( const dhcp::SubnetID & subnet_id,
const dhcp::Host::IdentifierType & identifier_type,
const uint8_t * identifier_begin,
const size_t identifier_len )
virtual

Attempts to delete a host by (subnet-id4, identifier, identifier-type)

This method supports v4 hosts only.

Parameters
subnet_idIPv4 Subnet identifier.
identifier_typeIdentifier type.
identifier_beginPointer to a beginning of a buffer containing an identifier.
identifier_lenIdentifier length.
Returns
always false.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 339 of file host_cache.cc.

References isc::dhcp::Host::getIdentifierAsText(), isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DEL_SUBNET_ID_IDENTIFIER4, isc::host_cache::host_cache_logger, impl_, LOG_DEBUG, and mutex_.

+ Here is the call graph for this function:

◆ del6()

bool isc::host_cache::HostCache::del6 ( const dhcp::SubnetID & subnet_id,
const dhcp::Host::IdentifierType & identifier_type,
const uint8_t * identifier_begin,
const size_t identifier_len )
virtual

Attempts to delete a host by (subnet-id6, identifier, identifier-type)

This method supports v6 hosts only.

Parameters
subnet_idIPv6 Subnet identifier.
identifier_typeIdentifier type.
identifier_beginPointer to a beginning of a buffer containing an identifier.
identifier_lenIdentifier length.
Returns
always false.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 362 of file host_cache.cc.

References isc::dhcp::Host::getIdentifierAsText(), isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DEL_SUBNET_ID_IDENTIFIER6, isc::host_cache::host_cache_logger, impl_, LOG_DEBUG, and mutex_.

+ Here is the call graph for this function:

◆ flush()

void isc::host_cache::HostCache::flush ( size_t count)
virtual

Flush entries.

Parameters
countnumber of entries to remove, 0 means all.

Implements isc::dhcp::CacheHostDataSource.

Definition at line 418 of file host_cache.cc.

References impl_, and mutex_.

◆ get()

ConstHostCollection isc::host_cache::HostCache::get ( const dhcp::Host::IdentifierType & identifier_type,
const uint8_t * identifier_begin,
const size_t identifier_len ) const
virtual

Return all hosts connected to any subnet for which reservations have been made using a specified identifier.

This method returns all Host objects which represent reservations for a specified identifier. This method may return multiple hosts because a particular client may have reservations in multiple subnets.

Parameters
identifier_typeIdentifier type (ignored).
identifier_beginPointer to a beginning of a buffer containing an identifier (ignored).
identifier_lenIdentifier length.
Returns
Collection of const Host objects.
Todo
Add to the cache_host_data_source.h file.

Definition at line 440 of file host_cache.cc.

References impl_, and mutex_.

◆ get4() [1/2]

ConstHostPtr isc::host_cache::HostCache::get4 ( const dhcp::SubnetID & subnet_id,
const asiolink::IOAddress & address ) const
virtual

Returns a host connected to the IPv4 subnet and having a reservation for a specified IPv4 address.

One of the use cases for this method is to detect collisions between dynamically allocated addresses and reserved addresses. When the new address is assigned to a client, the allocation mechanism should check if this address is not reserved for some other host and do not allocate this address if reservation is present.

Implementations of this method should guard against invalid addresses, such as IPv6 address.

Parameters
subnet_idSubnet identifier.
addressreserved IPv4 address.
Returns
Const Host object using a specified IPv4 address.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 156 of file host_cache.cc.

References isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DBG_TRACE, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_ADDRESS4, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_ADDRESS4_HOST, isc::host_cache::host_cache_logger, impl_, isc::asiolink::IOAddress::isV4(), LOG_DEBUG, mutex_, and isc::asiolink::IOAddress::toText().

+ Here is the call graph for this function:

◆ get4() [2/2]

ConstHostPtr isc::host_cache::HostCache::get4 ( const dhcp::SubnetID & subnet_id,
const dhcp::Host::IdentifierType & identifier_type,
const uint8_t * identifier_begin,
const size_t identifier_len ) const
virtual

Returns a host connected to the IPv4 subnet.

Parameters
subnet_idSubnet identifier.
identifier_typeIdentifier type.
identifier_beginPointer to a beginning of a buffer containing an identifier.
identifier_lenIdentifier length.
Returns
Const Host object for which reservation has been made using the specified identifier.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 127 of file host_cache.cc.

References isc::dhcp::Host::getIdentifierAsText(), isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DBG_TRACE, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_IDENTIFIER, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_IDENTIFIER_HOST, isc::host_cache::host_cache_logger, impl_, LOG_DEBUG, and mutex_.

+ Here is the call graph for this function:

◆ get6() [1/3]

ConstHostPtr isc::host_cache::HostCache::get6 ( const asiolink::IOAddress & prefix,
const uint8_t prefix_len ) const
virtual

Returns a host using the specified IPv6 prefix.

Parameters
prefixIPv6 prefix for which the Host object is searched.
prefix_lenIPv6 prefix length.
Returns
Const Host object using a specified IPv6 prefix.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 218 of file host_cache.cc.

References isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DBG_TRACE, isc::host_cache::HOST_CACHE_GET_ONE_PREFIX, isc::host_cache::HOST_CACHE_GET_ONE_PREFIX_HOST, isc::host_cache::host_cache_logger, impl_, LOG_DEBUG, mutex_, and isc::asiolink::IOAddress::toText().

+ Here is the call graph for this function:

◆ get6() [2/3]

ConstHostPtr isc::host_cache::HostCache::get6 ( const dhcp::SubnetID & subnet_id,
const asiolink::IOAddress & address ) const
virtual

Returns a host connected to the IPv6 subnet and having a reservation for a specified IPv6 address or prefix.

Parameters
subnet_idSubnet identifier.
addressreserved IPv6 address/prefix.
Returns
Const Host object using a specified IPv6 address/prefix.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 241 of file host_cache.cc.

References isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DBG_TRACE, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_ADDRESS6, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_ADDRESS6_HOST, isc::host_cache::host_cache_logger, impl_, isc::asiolink::IOAddress::isV6(), LOG_DEBUG, mutex_, and isc::asiolink::IOAddress::toText().

+ Here is the call graph for this function:

◆ get6() [3/3]

ConstHostPtr isc::host_cache::HostCache::get6 ( const dhcp::SubnetID & subnet_id,
const dhcp::Host::IdentifierType & identifier_type,
const uint8_t * identifier_begin,
const size_t identifier_len ) const
virtual

Returns a host connected to the IPv6 subnet.

Parameters
subnet_idSubnet identifier.
identifier_typeIdentifier type.
identifier_beginPointer to a beginning of a buffer containing an identifier.
identifier_lenIdentifier length.
Returns
Const Host object for which reservation has been made using the specified identifier.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 189 of file host_cache.cc.

References isc::dhcp::Host::getIdentifierAsText(), isc::host_cache::HOST_CACHE_DBG_RESULTS, isc::host_cache::HOST_CACHE_DBG_TRACE, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_IDENTIFIER, isc::host_cache::HOST_CACHE_GET_ONE_SUBNET_ID_IDENTIFIER_HOST, isc::host_cache::host_cache_logger, impl_, LOG_DEBUG, and mutex_.

+ Here is the call graph for this function:

◆ getAll()

ConstHostCollection isc::host_cache::HostCache::getAll ( const dhcp::Host::IdentifierType & identifier_type,
const uint8_t * identifier_begin,
const size_t identifier_len ) const
virtual

BaseHostDataSource methods.

Note
Methods returning collections must return empty collections and not throw because the host cache is an individual object cache so is transparent for these methods. Beware that these methods simply merge results without checking if an entry is already present too.

Return all hosts connected to any subnet for which reservations have been made using a specified identifier.

This method returns all Host objects which represent reservations for a specified identifier. This method may return multiple hosts because a particular client may have reservations in multiple subnets.

Parameters
identifier_typeIdentifier type (ignored).
identifier_beginPointer to a beginning of a buffer containing an identifier (ignored).
identifier_lenIdentifier length.
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 58 of file host_cache.cc.

◆ getAll4() [1/3]

ConstHostCollection isc::host_cache::HostCache::getAll4 ( const asiolink::IOAddress & address) const
virtual

Returns a collection of hosts using the specified IPv4 address.

This method may return multiple Host objects if they are connected to different subnets.

Parameters
addressIPv4 address for which the Host object is searched (ignored).
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 122 of file host_cache.cc.

◆ getAll4() [2/3]

ConstHostCollection isc::host_cache::HostCache::getAll4 ( const dhcp::SubnetID & subnet_id) const
virtual

Return all hosts in a DHCPv4 subnet.

This method returns all Host objects which represent reservations in a specified subnet.

Parameters
subnet_idSubnet identifier.
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 65 of file host_cache.cc.

◆ getAll4() [3/3]

ConstHostCollection isc::host_cache::HostCache::getAll4 ( const dhcp::SubnetID & subnet_id,
const asiolink::IOAddress & address ) const
virtual

Returns all hosts connected to the IPv4 subnet and having a reservation for a specified address.

Parameters
subnet_idSubnet identifier.
addressreserved IPv4 address.
Returns
Empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 183 of file host_cache.cc.

◆ getAll6() [1/3]

ConstHostCollection isc::host_cache::HostCache::getAll6 ( const asiolink::IOAddress & address) const
virtual

Returns a collection of hosts using the specified IPv6 address.

This method may return multiple Host objects if they are connected to different subnets.

Parameters
addressIPv6 address for which the Host object is searched.
Returns
Empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 275 of file host_cache.cc.

◆ getAll6() [2/3]

ConstHostCollection isc::host_cache::HostCache::getAll6 ( const dhcp::SubnetID & subnet_id) const
virtual

Return all hosts in a DHCPv6 subnet.

This method returns all Host objects which represent reservations in a specified subnet.

Parameters
subnet_idSubnet identifier.
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 70 of file host_cache.cc.

◆ getAll6() [3/3]

ConstHostCollection isc::host_cache::HostCache::getAll6 ( const dhcp::SubnetID & subnet_id,
const asiolink::IOAddress & address ) const
virtual

Returns all hosts connected to the IPv6 subnet and having a reservation for a specified address or delegated prefix (lease).

Parameters
subnet_idSubnet identifier.
addressreserved IPv6 address/prefix.
Returns
Empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 269 of file host_cache.cc.

◆ getAllbyHostname()

ConstHostCollection isc::host_cache::HostCache::getAllbyHostname ( const std::string & hostname) const
virtual

Return all hosts with a hostname.

This method returns all Host objects which represent reservations using a specified hostname.

Parameters
hostnameThe lower case hostname.
Returns
Collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 75 of file host_cache.cc.

◆ getAllbyHostname4()

ConstHostCollection isc::host_cache::HostCache::getAllbyHostname4 ( const std::string & hostname,
const dhcp::SubnetID & subnet_id ) const
virtual

Return all hosts with a hostname in a DHCPv4 subnet.

This method returns all Host objects which represent reservations using a specified hostname in a specified subnet.

Parameters
hostnameThe lower case hostname.
subnet_idSubnet identifier.
Returns
Collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 80 of file host_cache.cc.

◆ getAllbyHostname6()

ConstHostCollection isc::host_cache::HostCache::getAllbyHostname6 ( const std::string & hostname,
const dhcp::SubnetID & subnet_id ) const
virtual

Return all hosts with a hostname in a DHCPv6 subnet.

This method returns all Host objects which represent reservations using a specified hostname in a specified subnet.

Parameters
hostnameThe lower case hostname.
subnet_idSubnet identifier.
Returns
Collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 86 of file host_cache.cc.

◆ getMaximum()

size_t isc::host_cache::HostCache::getMaximum ( ) const
virtual

Get maximum number of cached hosts.

Definition at line 52 of file host_cache.cc.

References impl_, and mutex_.

◆ getPage4() [1/2]

dhcp::ConstHostCollection isc::host_cache::HostCache::getPage4 ( const dhcp::SubnetID & subnet_id,
size_t & source_index,
uint64_t lower_host_id,
const dhcp::HostPageSize & page_size ) const
virtual

Return range of hosts in a DHCPv4 subnet.

This method returns a page of Host objects which represent reservations in a specified subnet.

Parameters
subnet_idSubnet identifier.
source_indexIndex of the source (unused).
lower_host_idHost identifier used as lower bound for the returned range.
page_sizemaximum size of the page returned.
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 92 of file host_cache.cc.

◆ getPage4() [2/2]

dhcp::ConstHostCollection isc::host_cache::HostCache::getPage4 ( size_t & source_index,
uint64_t lower_host_id,
const dhcp::HostPageSize & page_size ) const
virtual

Return range of hosts.

This method returns a page of Host objects which represent reservations.

Parameters
source_indexIndex of the source (unused).
lower_host_idHost identifier used as lower bound for the returned range.
page_sizemaximum size of the page returned.
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 108 of file host_cache.cc.

◆ getPage6() [1/2]

dhcp::ConstHostCollection isc::host_cache::HostCache::getPage6 ( const dhcp::SubnetID & subnet_id,
size_t & source_index,
uint64_t lower_host_id,
const dhcp::HostPageSize & page_size ) const
virtual

Return range of hosts in a DHCPv6 subnet.

This method returns a page of Host objects which represent reservations in a specified subnet.

Parameters
subnet_idSubnet identifier.
source_indexIndex of the source (unused).
lower_host_idHost identifier used as lower bound for the returned range.
page_sizemaximum size of the page returned.
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 100 of file host_cache.cc.

◆ getPage6() [2/2]

dhcp::ConstHostCollection isc::host_cache::HostCache::getPage6 ( size_t & source_index,
uint64_t lower_host_id,
const dhcp::HostPageSize & page_size ) const
virtual

Return range of hosts.

This method returns a page of Host objects which represent reservations.

Parameters
source_indexIndex of the source (unused).
lower_host_idHost identifier used as lower bound for the returned range.
page_sizemaximum size of the page returned.
Returns
Always returns an empty collection of const Host objects.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 115 of file host_cache.cc.

◆ getType()

virtual std::string isc::host_cache::HostCache::getType ( ) const
inlinevirtual

Return backend type.

Returns the type of the backend (e.g. "mysql", "memfile" etc.)

Returns
"cache" string.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 394 of file host_cache.h.

◆ insert()

size_t isc::host_cache::HostCache::insert ( const dhcp::ConstHostPtr & host,
bool overwrite )
virtual

Insert a host into the cache.

Similar to add() but with a different purpose.

Parameters
hostPointer to the new Host object being inserted.
overwritefalse if doing nothing in case of conflicts (and returning 1), true if removing conflicting entries (and returning their number).
Returns
number of conflicts limited to one if overwrite is false.

Implements isc::dhcp::CacheHostDataSource.

Definition at line 406 of file host_cache.cc.

References impl_, and mutex_.

◆ remove()

bool isc::host_cache::HostCache::remove ( const dhcp::HostPtr & host)
virtual

Remove a host from the cache.

Does the same than del, del4 or del6 but with a more uniform interface and a different purpose.

Note
A pointer to a copy does not remove the object.
Parameters
hostPointer to the existing Host object being removed.
Returns
true when found and removed.

Implements isc::dhcp::CacheHostDataSource.

Definition at line 412 of file host_cache.cc.

References impl_, and mutex_.

◆ setIPReservationsUnique()

bool isc::host_cache::HostCache::setIPReservationsUnique ( const bool unique)
virtual

Controls whether IP reservations are unique or non-unique.

In a typical case, the IP reservations are unique and backends verify prior to adding a host reservation to the database that the reservation for a given IP address/subnet does not exist. In some cases it may be required to allow non-unique IP reservations, e.g. in the case when a host has several interfaces and independently of which interface is used by this host to communicate with the DHCP server the same IP address should be assigned. In this case the unique value should be set to false to disable the checks for uniqueness on the backend side.

Parameters
uniqueboolean flag indicating if the IP reservations must be unique within the subnet or can be non-unique.
Returns
true when addresses must be unique, false otherwise because this backend does not support specifying the same IP address in multiple host reservations.

Implements isc::dhcp::BaseHostDataSource.

Definition at line 391 of file host_cache.cc.

◆ setMaximum()

void isc::host_cache::HostCache::setMaximum ( size_t maximum)
virtual

Set maximum number of cached hosts (0 means unbound).

Definition at line 47 of file host_cache.cc.

References impl_, and mutex_.

Referenced by isc::host_cache::HCConfigParser::parse().

◆ size()

size_t isc::host_cache::HostCache::size ( ) const
virtual

Return the number of entries.

Returns
the current number of active entries in the cache.

Implements isc::dhcp::CacheHostDataSource.

Definition at line 428 of file host_cache.cc.

References impl_, and mutex_.

◆ toElement()

ElementPtr isc::host_cache::HostCache::toElement ( ) const
virtual

Returns the whole content of the cache as Element tree.

Returns
a pointer to unparsed content

Definition at line 400 of file host_cache.cc.

References impl_, and mutex_.

◆ update()

void isc::host_cache::HostCache::update ( isc::dhcp::HostPtr const & host)
virtual

Implements isc::dhcp::BaseHostDataSource::update() for HostCache.

Attempts to update an existing host entry.

Parameters
hostthe host up to date with the requested changes

Reimplemented from isc::dhcp::BaseHostDataSource.

Definition at line 385 of file host_cache.cc.

References impl_, and mutex_.

Member Data Documentation

◆ impl_

◆ mutex_

boost::scoped_ptr<std::mutex> isc::host_cache::HostCache::mutex_
protected

The documentation for this class was generated from the following files: