Kea 2.5.8
isc::dhcp::Subnet Class Referenceabstract

#include <subnet.h>

+ Inheritance diagram for isc::dhcp::Subnet:

Public Member Functions

void addPool (const PoolPtr &pool)
 Adds a new pool for the subnet.
 
virtual void createAllocators ()=0
 Instantiates the allocators and their states.
 
virtual isc::asiolink::IOAddress default_pool () const =0
 Returns the default address that will be used for pool selection.
 
void delPools (Lease::Type type)
 Deletes all pools of specified type.
 
std::pair< isc::asiolink::IOAddress, uint8_t > get () const
 Returns subnet parameters (prefix and prefix length).
 
SubnetAllocationStatePtr getAllocationState (Lease::Type type) const
 Returns subnet-specific allocation state.
 
AllocatorPtr getAllocator (Lease::Type type) const
 Returns lease allocator instance.
 
PoolPtr getAnyPool (Lease::Type type)
 Returns a pool without any address specified.
 
SubnetID getID () const
 Returns unique ID for that subnet.
 
const PoolPtr getPool (Lease::Type type, const ClientClasses &client_classes, const isc::asiolink::IOAddress &addr) const
 Returns a pool that specified address belongs to with classes.
 
const PoolPtr getPool (Lease::Type type, const isc::asiolink::IOAddress &addr, bool anypool=true) const
 Returns a pool that specified address belongs to.
 
isc::util::uint128_t getPoolCapacity (Lease::Type type) const
 Returns the number of possible leases for specified lease type.
 
isc::util::uint128_t getPoolCapacity (Lease::Type type, const ClientClasses &client_classes) const
 Returns the number of possible leases for specified lease type allowed for a client which belongs to classes.
 
isc::util::uint128_t getPoolCapacity (Lease::Type type, const ClientClasses &client_classes, Allocator::PrefixLenMatchType prefix_length_match, uint8_t hint_prefix_length) const
 Returns the number of possible leases for specified lease type allowed for a client which belongs to classes and matching selection criteria relative to provided hint prefix length.
 
const PoolCollectiongetPools (Lease::Type type) const
 Returns all pools (const variant).
 
PoolCollectiongetPoolsWritable (Lease::Type type)
 Returns all pools (non-const variant).
 
template<typename SharedNetworkPtrType >
void getSharedNetwork (SharedNetworkPtrType &shared_network) const
 Retrieves pointer to a shared network associated with a subnet.
 
std::string getSharedNetworkName () const
 Returns shared network name.
 
void initAllocatorsAfterConfigure ()
 Calls initAfterConfigure for each allocator.
 
bool inPool (Lease::Type type, const isc::asiolink::IOAddress &addr) const
 checks if the specified address is in pools.
 
bool inPool (Lease::Type type, const isc::asiolink::IOAddress &addr, const ClientClasses &client_classes) const
 checks if the specified address is in allowed pools.
 
bool inRange (const isc::asiolink::IOAddress &addr) const
 checks if specified address is in range.
 
void setAllocationState (Lease::Type type, const SubnetAllocationStatePtr &allocation_state)
 Sets subnet-specific allocation state.
 
void setAllocator (Lease::Type type, const AllocatorPtr &allocator)
 Sets new allocator instance.
 
void setSharedNetwork (const NetworkPtr &shared_network)
 Assigns shared network to a subnet.
 
void setSharedNetworkName (const std::string &shared_network_name)
 Sets new shared network name.
 
virtual std::string toText () const
 Returns textual representation of the subnet (e.g.
 
- Public Member Functions inherited from isc::dhcp::Network
 Network ()
 Constructor.
 
virtual ~Network ()
 Virtual destructor.
 
void addRelayAddress (const asiolink::IOAddress &addr)
 Adds an address to the list addresses in the network's relay info.
 
void allowClientClass (const isc::dhcp::ClientClass &class_name)
 Sets the supported class to class class_name.
 
virtual bool clientSupported (const isc::dhcp::ClientClasses &client_classes) const
 Checks whether this network supports client that belongs to specified classes.
 
util::Optional< std::string > getAllocatorType (const Inheritance &inheritance=Inheritance::ALL) const
 Returns allocator type.
 
util::Optional< uint32_t > getCacheMaxAge (const Inheritance &inheritance=Inheritance::ALL) const
 Returns value in seconds to use as cache maximum age.
 
util::Optional< double > getCacheThreshold (const Inheritance &inheritance=Inheritance::ALL) const
 Returns percentage to use as cache threshold.
 
util::Optional< bool > getCalculateTeeTimes (const Inheritance &inheritance=Inheritance::ALL) const
 Returns whether or not T1/T2 calculation is enabled.
 
CfgOptionPtr getCfgOption ()
 Returns pointer to the option data configuration for this network.
 
ConstCfgOptionPtr getCfgOption () const
 Returns const pointer to the option data configuration for this network.
 
util::Optional< ClientClassgetClientClass (const Inheritance &inheritance=Inheritance::ALL) const
 returns the client class
 
util::Optional< std::string > getDdnsConflictResolutionMode (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ib-ddns-conflict-resolution-mode.
 
util::Optional< std::string > getDdnsGeneratedPrefix (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-generated-prefix.
 
util::Optional< bool > getDdnsOverrideClientUpdate (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-override-client-update.
 
util::Optional< bool > getDdnsOverrideNoUpdate (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-override-no-update.
 
util::Optional< std::string > getDdnsQualifyingSuffix (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-qualifying-suffix.
 
util::Optional< D2ClientConfig::ReplaceClientNameModegetDdnsReplaceClientNameMode (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-replace-client-name-mode.
 
util::Optional< bool > getDdnsSendUpdates (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-send-updates.
 
util::Optional< double > getDdnsTtlPercent (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-ttl-percent.
 
util::Optional< bool > getDdnsUpdateOnRenew (const Inheritance &inheritance=Inheritance::ALL) const
 Returns ddns-update-on-renew.
 
util::Optional< std::string > getDefaultAllocatorType (const Inheritance &inheritance=Inheritance::ALL) const
 Returns a default allocator type.
 
util::Optional< std::string > getHostnameCharReplacement (const Inheritance &inheritance=Inheritance::ALL) const
 Return the invalid char replacement used to sanitize client hostnames.
 
util::Optional< std::string > getHostnameCharSet (const Inheritance &inheritance=Inheritance::ALL) const
 Return the char set regexp used to sanitize client hostnames.
 
util::Optional< std::string > getIface (const Inheritance &inheritance=Inheritance::ALL) const
 Returns name of the local interface for which this network is selected.
 
virtual std::string getLabel () const
 Generates an identifying label for logging.
 
const IOAddressListgetRelayAddresses () const
 Returns the list of relay addresses from the network's relay info.
 
const RelayInfogetRelayInfo () const
 Returns const reference to relay information.
 
const ClientClassesgetRequiredClasses () const
 Returns classes which are required to be evaluated.
 
util::Optional< bool > getReservationsGlobal (const Inheritance &inheritance=Inheritance::ALL) const
 Returns whether global reservations should be fetched.
 
util::Optional< bool > getReservationsInSubnet (const Inheritance &inheritance=Inheritance::ALL) const
 Returns whether subnet reservations should be fetched.
 
util::Optional< bool > getReservationsOutOfPool (const Inheritance &inheritance=Inheritance::ALL) const
 Returns whether only out-of-pool reservations are allowed.
 
util::Optional< bool > getStoreExtendedInfo (const Inheritance &inheritance=Inheritance::ALL) const
 Returns store-extended-info.
 
isc::util::Triplet< uint32_t > getT1 (const Inheritance &inheritance=Inheritance::ALL) const
 Returns T1 (renew timer), expressed in seconds.
 
util::Optional< double > getT1Percent (const Inheritance &inheritance=Inheritance::ALL) const
 Returns percentage to use when calculating the T1 (renew timer).
 
isc::util::Triplet< uint32_t > getT2 (const Inheritance &inheritance=Inheritance::ALL) const
 Returns T2 (rebind timer), expressed in seconds.
 
util::Optional< double > getT2Percent (const Inheritance &inheritance=Inheritance::ALL) const
 Returns percentage to use when calculating the T2 (rebind timer).
 
isc::util::Triplet< uint32_t > getValid (const Inheritance &inheritance=Inheritance::ALL) const
 Return valid-lifetime for addresses in that prefix.
 
bool hasFetchGlobalsFn () const
 Checks if the network is associated with a function used to fetch globally configured parameters.
 
bool hasRelayAddress (const asiolink::IOAddress &address) const
 Tests if the network's relay info contains the given address.
 
bool hasRelays () const
 Indicates if network's relay info has relay addresses.
 
void requireClientClass (const isc::dhcp::ClientClass &class_name)
 Adds class class_name to classes required to be evaluated.
 
void setAllocatorType (const util::Optional< std::string > &allocator_type)
 Sets new allocator type.
 
void setCacheMaxAge (const util::Optional< uint32_t > &cache_max_age)
 Sets cache max for a network.
 
void setCacheThreshold (const util::Optional< double > &cache_threshold)
 Sets cache threshold for a network.
 
void setCalculateTeeTimes (const util::Optional< bool > &calculate_tee_times)
 Sets whether or not T1/T2 calculation is enabled.
 
void setDdnsConflictResolutionMode (const util::Optional< std::string > &ddns_conflict_resolution_mode)
 Sets new ib-ddns-conflict-resolution-mode.
 
void setDdnsGeneratedPrefix (const util::Optional< std::string > &ddns_generated_prefix)
 Sets new ddns-generated-prefix.
 
void setDdnsOverrideClientUpdate (const util::Optional< bool > &ddns_override_client_update)
 Sets new ddns-override-client-update.
 
void setDdnsOverrideNoUpdate (const util::Optional< bool > &ddns_override_no_update)
 Sets new ddns-override-no-update.
 
void setDdnsQualifyingSuffix (const util::Optional< std::string > &ddns_qualifying_suffix)
 Sets new ddns-qualifying-suffix.
 
void setDdnsReplaceClientNameMode (const util::Optional< D2ClientConfig::ReplaceClientNameMode > &ddns_replace_client_name_mode)
 Sets new ddns-replace-client-name-mode.
 
void setDdnsSendUpdates (const util::Optional< bool > &ddns_send_updates)
 Sets new ddns-send-updates.
 
void setDdnsTtlPercent (const util::Optional< double > &ddns_ttl_percent)
 Sets new ddns-ttl-percent.
 
void setDdnsUpdateOnRenew (const util::Optional< bool > &ddns_update_on_renew)
 Sets new ddns-update-on-renew.
 
void setDefaultAllocatorType (const std::string &allocator_type)
 Sets a defalt allocator type.
 
void setFetchGlobalsFn (FetchNetworkGlobalsFn fetch_globals_fn)
 Sets the optional callback function used to fetch globally configured parameters.
 
void setHostnameCharReplacement (const util::Optional< std::string > &hostname_char_replacement)
 Sets new hostname-char-replacement.
 
void setHostnameCharSet (const util::Optional< std::string > &hostname_char_set)
 Sets new hostname-char-set.
 
void setIface (const util::Optional< std::string > &iface_name)
 Sets local name of the interface for which this network is selected.
 
void setRelayInfo (const RelayInfo &relay)
 Sets information about relay.
 
void setReservationsGlobal (const util::Optional< bool > &reservations_global)
 Sets whether global reservations should be fetched.
 
void setReservationsInSubnet (const util::Optional< bool > &reservations_in_subnet)
 Sets whether subnet reservations should be fetched.
 
void setReservationsOutOfPool (const util::Optional< bool > &reservations_out_of_pool)
 Sets whether only out-of-pool reservations are allowed.
 
void setStoreExtendedInfo (const util::Optional< bool > &store_extended_info)
 Sets new store-extended-info.
 
void setT1 (const isc::util::Triplet< uint32_t > &t1)
 Sets new renew timer for a network.
 
void setT1Percent (const util::Optional< double > &t1_percent)
 Sets new percentage for calculating T1 (renew timer).
 
void setT2 (const isc::util::Triplet< uint32_t > &t2)
 Sets new rebind timer for a network.
 
void setT2Percent (const util::Optional< double > &t2_percent)
 Sets new percentage for calculating T2 (rebind timer).
 
void setValid (const isc::util::Triplet< uint32_t > &valid)
 Sets new valid lifetime for a network.
 
virtual data::ElementPtr toElement () const
 Unparses network object.
 
- Public Member Functions inherited from isc::data::StampedElement
 StampedElement ()
 Constructor.
 
void delServerTag (const std::string &server_tag)
 Deletes server tag.
 
isc::data::ElementPtr getMetadata () const
 Returns an object representing metadata to be returned with objects from the configuration backend.
 
std::set< ServerTaggetServerTags () const
 Returns server tags.
 
bool hasAllServerTag () const
 Checks if the element has 'all' server tag.
 
bool hasServerTag (const ServerTag &server_tag) const
 Checks if the element has the given server tag.
 
void setServerTag (const std::string &server_tag)
 Adds new server tag.
 
- Public Member Functions inherited from isc::data::BaseStampedElement
 BaseStampedElement ()
 Constructor.
 
uint64_t getId () const
 Returns element's database identifier.
 
boost::posix_time::ptime getModificationTime () const
 Returns timestamp.
 
void setId (const uint64_t id)
 Sets element's database identifier.
 
void setModificationTime (const boost::posix_time::ptime &timestamp)
 Sets timestamp to the explicitly provided value.
 
void updateModificationTime ()
 Sets timestamp to the current time.
 
- Public Member Functions inherited from isc::data::UserContext
void contextToElement (data::ElementPtr map) const
 Merge unparse a user_context object.
 
data::ConstElementPtr getContext () const
 Returns const pointer to the user context.
 
void setContext (const data::ConstElementPtr &ctx)
 Sets user context.
 
- Public Member Functions inherited from isc::data::CfgToElement
virtual ~CfgToElement ()
 Destructor.
 
virtual isc::data::ElementPtr toElement () const =0
 Unparse a configuration object.
 

Static Public Member Functions

static void resetSubnetID ()
 Resets subnet-id counter to its initial value (1).
 
- Static Public Member Functions inherited from isc::data::UserContext
static data::ElementPtr toElement (data::ConstElementPtr map)
 Copy an Element map.
 

Protected Member Functions

 Subnet (const isc::asiolink::IOAddress &prefix, uint8_t len, const SubnetID id)
 Protected constructor.
 
virtual ~Subnet ()
 virtual destructor.
 
virtual void checkType (Lease::Type type) const =0
 Checks if used pool type is valid.
 
virtual std::string getLabel () const
 Generates an identifying label for logging.
 
bool poolOverlaps (const Lease::Type &pool_type, const PoolPtr &pool) const
 Checks if the specified pool overlaps with an existing pool.
 
isc::util::uint128_t sumPoolCapacity (const PoolCollection &pools) const
 Returns a sum of possible leases in all pools.
 
isc::util::uint128_t sumPoolCapacity (const PoolCollection &pools, const ClientClasses &client_classes) const
 Returns a sum of possible leases in all pools allowing classes.
 
isc::util::uint128_t sumPoolCapacity (const PoolCollection &pools, const ClientClasses &client_classes, Allocator::PrefixLenMatchType prefix_length_match, uint8_t hint_prefix_length) const
 Returns a sum of possible leases in all pools allowing classes and matching selection criteria relative to provided hint prefix length.
 
virtual data::ElementPtr toElement () const
 Unparse a subnet object.
 
- Protected Member Functions inherited from isc::dhcp::Network
FetchNetworkGlobalsFn getFetchGlobalsFn () const
 Gets the optional callback function used to fetch globally configured parameters.
 
template<typename NumType >
isc::util::Triplet< NumType > getGlobalProperty (isc::util::Triplet< NumType > property, const int global_index, const int min_index=-1, const int max_index=-1) const
 The getGlobalProperty specialization for isc::util::Triplet<T>.
 
template<typename ReturnType >
ReturnType getGlobalProperty (ReturnType property, const int global_index, const int min_index=-1, const int max_index=-1) const
 Returns a value of global configuration parameter with a given index.
 
util::Optional< asiolink::IOAddressgetGlobalProperty (util::Optional< asiolink::IOAddress > property, const int global_index, const int min_index=-1, const int max_index=-1) const
 The getGlobalProperty specialization for Optional<IOAddress>.
 
template<typename BaseType >
OptionPtr getOptionProperty (OptionPtr(BaseType::*MethodPointer)(const Inheritance &inheritance) const, OptionPtr property, const Inheritance &inheritance) const
 Returns option pointer associated with a network using inheritance.
 
template<typename BaseType , typename ReturnType >
ReturnType getProperty (ReturnType(BaseType::*MethodPointer)(const Inheritance &) const, ReturnType property, const Inheritance &inheritance, const int global_index=-1, const int min_index=-1, const int max_index=-1) const
 Returns a value associated with a network using inheritance.
 

Static Protected Member Functions

static SubnetID generateNextID ()
 returns the next unique Subnet-ID.
 
static std::pair< asiolink::IOAddress, uint8_t > parsePrefixCommon (const std::string &prefix)
 Converts subnet prefix to a pair of prefix/length pair.
 

Protected Attributes

std::map< Lease::Type, SubnetAllocationStatePtrallocation_states_
 Holds subnet-specific allocation state.
 
std::map< Lease::Type, AllocatorPtrallocators_
 Lease allocators used by the subnet.
 
SubnetID id_
 subnet-id
 
PoolCollection pools_
 collection of IPv4 or non-temporary IPv6 pools in that subnet.
 
PoolCollection pools_pd_
 collection of IPv6 prefix pools in that subnet.
 
PoolCollection pools_ta_
 collection of IPv6 temporary address pools in that subnet.
 
isc::asiolink::IOAddress prefix_
 a prefix of the subnet.
 
uint8_t prefix_len_
 a prefix length of the subnet.
 
std::string shared_network_name_
 Shared network name.
 
- Protected Attributes inherited from isc::dhcp::Network
util::Optional< std::string > allocator_type_
 Allocator used for IP address allocations.
 
util::Optional< uint32_t > cache_max_age_
 Value in seconds to use as cache maximal age.
 
util::Optional< double > cache_threshold_
 Percentage of the lease lifetime to use as cache threshold.
 
util::Optional< bool > calculate_tee_times_
 Enables calculation of T1 and T2 timers.
 
CfgOptionPtr cfg_option_
 Pointer to the option data configuration for this subnet.
 
util::Optional< ClientClassclient_class_
 Optional definition of a client class.
 
util::Optional< std::string > ddns_conflict_resolution_mode_
 DDNS conflict resolution mode.
 
util::Optional< std::string > ddns_generated_prefix_
 Prefix Kea should use when generating domain-names.
 
util::Optional< bool > ddns_override_client_update_
 Should Kea perform updates, even if client requested delegation.
 
util::Optional< bool > ddns_override_no_update_
 Should Kea perform updates, even if client requested no updates.
 
util::Optional< std::string > ddns_qualifying_suffix_
 Suffix Kea should use when to qualify partial domain-names.
 
util::Optional< D2ClientConfig::ReplaceClientNameModeddns_replace_client_name_mode_
 How Kea should handle the domain-name supplied by the client.
 
util::Optional< bool > ddns_send_updates_
 Should Kea perform DNS updates.
 
util::Optional< double > ddns_ttl_percent_
 Percentage of the lease lifetime to use for DNS TTL.
 
util::Optional< bool > ddns_update_on_renew_
 Should Kea perform updates when leases are extended.
 
util::Optional< std::string > default_allocator_type_
 Default allocator type.
 
FetchNetworkGlobalsFn fetch_globals_fn_
 Pointer to the optional callback used to fetch globally configured parameters inherited to the Network object.
 
util::Optional< std::string > hostname_char_replacement_
 A string to replace invalid characters when scrubbing hostnames.
 
util::Optional< std::string > hostname_char_set_
 Regular expression describing invalid characters for client hostnames.
 
util::Optional< std::string > iface_name_
 Holds interface name for which this network is selected.
 
WeakNetworkPtr parent_network_
 Pointer to another network that this network belongs to.
 
RelayInfo relay_
 Relay information.
 
ClientClasses required_classes_
 Required classes.
 
util::Optional< bool > reservations_global_
 Enables global reservations.
 
util::Optional< bool > reservations_in_subnet_
 Enables subnet reservations.
 
util::Optional< bool > reservations_out_of_pool_
 Enables out-of-pool reservations optimization.
 
util::Optional< bool > store_extended_info_
 Should Kea store additional client query data (e.g.
 
isc::util::Triplet< uint32_t > t1_
 a isc::util::Triplet (min/default/max) holding allowed renew timer values
 
util::Optional< double > t1_percent_
 Percentage of the lease lifetime to use when calculating T1 timer.
 
isc::util::Triplet< uint32_t > t2_
 a isc::util::Triplet (min/default/max) holding allowed rebind timer values
 
util::Optional< double > t2_percent_
 Percentage of the lease lifetime to use when calculating T2 timer.
 
isc::util::Triplet< uint32_t > valid_
 a isc::util::Triplet (min/default/max) holding allowed valid lifetime values
 
- Protected Attributes inherited from isc::data::BaseStampedElement
uint64_t id_
 Database identifier of the configuration element.
 
boost::posix_time::ptime timestamp_
 Holds timestamp value.
 
- Protected Attributes inherited from isc::data::UserContext
data::ConstElementPtr user_context_
 Pointer to the user context (may be NULL)
 

Static Protected Attributes

static SubnetID static_id_ = 1
 keeps the subnet-id value.
 

Additional Inherited Members

- Public Types inherited from isc::dhcp::Network
enum class  Inheritance { NONE , PARENT_NETWORK , GLOBAL , ALL }
 Inheritance "mode" used when fetching an optional Network parameter. More...
 
typedef boost::shared_ptr< Network::RelayInfoRelayInfoPtr
 Pointer to the RelayInfo structure.
 

Detailed Description

Definition at line 41 of file subnet.h.

Constructor & Destructor Documentation

◆ Subnet()

isc::dhcp::Subnet::Subnet ( const isc::asiolink::IOAddress prefix,
uint8_t  len,
const SubnetID  id 
)
protected

Protected constructor.

By making the constructor protected, we make sure that no one will ever instantiate that class. Subnet4 and Subnet6 should be used instead.

This constructor assigns a new subnet-id (see generateNextID). This subnet-id has unique value that is strictly monotonously increasing for each subnet, until it is explicitly reset back to 1 during reconfiguration process.

Parameters
prefixsubnet prefix
lenprefix length for the subnet
idarbitrary subnet id, value of 0 triggers autogeneration of subnet id

Definition at line 71 of file subnet.cc.

References isc::dhcp::DHCPSRV_CONFIGURED_SUBNET_WITHOUT_ID, isc::dhcp::dhcpsrv_logger, id_, isc_throw, isc::asiolink::IOAddress::isV4(), isc::asiolink::IOAddress::isV6(), LOG_WARN, and toText().

+ Here is the call graph for this function:

◆ ~Subnet()

virtual isc::dhcp::Subnet::~Subnet ( )
inlineprotectedvirtual

virtual destructor.

A virtual destructor is needed because other classes derive from this class.

Definition at line 357 of file subnet.h.

Member Function Documentation

◆ addPool()

void isc::dhcp::Subnet::addPool ( const PoolPtr pool)

Adds a new pool for the subnet.

This method checks that the address range represented by the pool matches the subnet prefix, if the pool type is different than IA_PD. The prefixes from the IA_PD pools don't need to match the prefix from the subnet from which they are handed out to the requesting router because the requesting router may use the delegated prefixes in different networks (using different subnets).

A DHCPv4 pool being added must not overlap with any existing DHCPv4 pool. A DHCPv6 pool being added must not overlap with any existing DHCPv6 pool.

Pools held within a subnet are sorted by first pool address/prefix from the lowest to the highest.

Parameters
poolpool to be added
Exceptions
isc::BadValueif the pool type is invalid, in the case of address pools if the address range of the pool does not match the subnet prefix, or if the pool overlaps with an existing pool within the subnet.

Definition at line 479 of file subnet.cc.

References checkType(), getPoolsWritable(), inRange(), isc_throw, poolOverlaps(), prefix_, prefix_len_, isc::dhcp::Lease::TYPE_NA, isc::dhcp::Lease::TYPE_PD, isc::dhcp::Lease::TYPE_TA, isc::dhcp::Lease::TYPE_V4, and isc::dhcp::Lease::typeToText().

+ Here is the call graph for this function:

◆ checkType()

virtual void isc::dhcp::Subnet::checkType ( Lease::Type  type) const
protectedpure virtual

Checks if used pool type is valid.

Allowed type for Subnet4 is Pool::TYPE_V4. Allowed types for Subnet6 are Pool::TYPE_{IA,TA,PD}. This method is implemented in derived classes.

Parameters
typetype to be checked
Exceptions
BadValueif invalid value is used

Referenced by addPool(), getPool(), getPools(), and getPoolsWritable().

◆ createAllocators()

virtual void isc::dhcp::Subnet::createAllocators ( )
pure virtual

Instantiates the allocators and their states.

It determines the types of the allocators to create using the list of the allocator types specified with the Network::setAllocatorType method.

This function is called from the subnet parsers and after fetching the subnet configuration from a configuration backend.

Implemented in isc::dhcp::Subnet4, and isc::dhcp::Subnet6.

◆ default_pool()

virtual isc::asiolink::IOAddress isc::dhcp::Subnet::default_pool ( ) const
pure virtual

Returns the default address that will be used for pool selection.

It must be implemented in derived classes (should return :: for Subnet6 and 0.0.0.0 for Subnet4).

Referenced by getAnyPool().

◆ delPools()

void isc::dhcp::Subnet::delPools ( Lease::Type  type)

Deletes all pools of specified type.

This method is used for testing purposes only

Parameters
typetype of pools to be deleted

Definition at line 534 of file subnet.cc.

References getPoolsWritable().

+ Here is the call graph for this function:

◆ generateNextID()

static SubnetID isc::dhcp::Subnet::generateNextID ( )
inlinestaticprotected

returns the next unique Subnet-ID.

This method generates and returns the next unique subnet-id. It is a strictly monotonously increasing value (1,2,3,...) for each new Subnet object created. It can be explicitly reset back to 1 during reconfiguration (resetSubnetID).

Returns
the next unique Subnet-ID

Definition at line 376 of file subnet.h.

References resetSubnetID(), and static_id_.

+ Here is the call graph for this function:

◆ get()

std::pair< isc::asiolink::IOAddress, uint8_t > isc::dhcp::Subnet::get ( ) const
inline

Returns subnet parameters (prefix and prefix length).

Returns
(prefix, prefix length) pair

Definition at line 90 of file subnet.h.

References prefix_, and prefix_len_.

◆ getAllocationState()

SubnetAllocationStatePtr isc::dhcp::Subnet::getAllocationState ( Lease::Type  type) const

Returns subnet-specific allocation state.

The actual type of the state depends on the allocator type.

Parameters
typelease type for which the allocation state is returned.
Returns
allocation state.

Definition at line 389 of file subnet.cc.

References allocation_states_, isc_throw, and isc::dhcp::Lease::typeToText().

+ Here is the call graph for this function:

◆ getAllocator()

AllocatorPtr isc::dhcp::Subnet::getAllocator ( Lease::Type  type) const

Returns lease allocator instance.

An allocator is responsible for selecting leases from the subnet's pools. Each subnet has one allocator common for all pools belonging to the subnet. The allocation engine uses this function to get the current subnet allocator and uses it to select and offer an address.

Parameters
typelease type for which the allocator instance should be returned.
Returns
Allocator instance.

Definition at line 373 of file subnet.cc.

References allocators_, isc_throw, and isc::dhcp::Lease::typeToText().

+ Here is the call graph for this function:

◆ getAnyPool()

PoolPtr isc::dhcp::Subnet::getAnyPool ( Lease::Type  type)
inline

Returns a pool without any address specified.

Parameters
typepool type that the pool is looked for
Returns
returns one of the pools defined

Definition at line 160 of file subnet.h.

References default_pool(), and getPool().

+ Here is the call graph for this function:

◆ getID()

SubnetID isc::dhcp::Subnet::getID ( ) const
inline

Returns unique ID for that subnet.

Returns
unique ID for that subnet

Definition at line 83 of file subnet.h.

References id_.

Referenced by isc::dhcp::Subnet4::getNextSubnet(), isc::dhcp::Subnet6::getNextSubnet(), and toElement().

◆ getLabel()

virtual std::string isc::dhcp::Subnet::getLabel ( ) const
inlineprotectedvirtual

Generates an identifying label for logging.

Returns
string containing the label

Reimplemented from isc::dhcp::Network.

Definition at line 440 of file subnet.h.

References id_.

◆ getPool() [1/2]

const PoolPtr isc::dhcp::Subnet::getPool ( Lease::Type  type,
const ClientClasses client_classes,
const isc::asiolink::IOAddress addr 
) const

Returns a pool that specified address belongs to with classes.

Variant using only pools allowing given classes.

Parameters
typepool type that the pool is looked for
client_classesclient class list which must be allowed
addraddress that the returned pool should cover (optional)

Definition at line 450 of file subnet.cc.

References checkType(), and getPools().

+ Here is the call graph for this function:

◆ getPool() [2/2]

const PoolPtr isc::dhcp::Subnet::getPool ( Lease::Type  type,
const isc::asiolink::IOAddress addr,
bool  anypool = true 
) const

Returns a pool that specified address belongs to.

This method uses binary search to retrieve the pool. Thus, the number of comparisons performed by this method is logarithmic in the number of pools belonging to a subnet.

If there is no pool that the address belongs to (hint is invalid), other pool of specified type will be returned.

With anypool set to true, this means give me a pool, preferably the one that addr belongs to. With anypool set to false, it means give me a pool that addr belongs to (or NULL if here is no such pool)

Parameters
typepool type that the pool is looked for
addraddress that the returned pool should cover (optional)
anypoolother pool may be returned as well, not only the one that addr belongs to
Returns
found pool (or NULL)

Definition at line 404 of file subnet.cc.

References checkType(), and getPools().

Referenced by getAnyPool().

+ Here is the call graph for this function:

◆ getPoolCapacity() [1/3]

uint128_t isc::dhcp::Subnet::getPoolCapacity ( Lease::Type  type) const

Returns the number of possible leases for specified lease type.

Parameters
typetype of the lease

Definition at line 104 of file subnet.cc.

References isc_throw, pools_, pools_pd_, pools_ta_, sumPoolCapacity(), isc::dhcp::Lease::TYPE_NA, isc::dhcp::Lease::TYPE_PD, isc::dhcp::Lease::TYPE_TA, and isc::dhcp::Lease::TYPE_V4.

+ Here is the call graph for this function:

◆ getPoolCapacity() [2/3]

uint128_t isc::dhcp::Subnet::getPoolCapacity ( Lease::Type  type,
const ClientClasses client_classes 
) const

Returns the number of possible leases for specified lease type allowed for a client which belongs to classes.

Parameters
typetype of the lease
client_classeslist of classes the client belongs to
Returns
number of leases matching lease type and classes

Definition at line 120 of file subnet.cc.

References isc_throw, pools_, pools_pd_, pools_ta_, sumPoolCapacity(), isc::dhcp::Lease::TYPE_NA, isc::dhcp::Lease::TYPE_PD, isc::dhcp::Lease::TYPE_TA, and isc::dhcp::Lease::TYPE_V4.

+ Here is the call graph for this function:

◆ getPoolCapacity() [3/3]

uint128_t isc::dhcp::Subnet::getPoolCapacity ( Lease::Type  type,
const ClientClasses client_classes,
Allocator::PrefixLenMatchType  prefix_length_match,
uint8_t  hint_prefix_length 
) const

Returns the number of possible leases for specified lease type allowed for a client which belongs to classes and matching selection criteria relative to provided hint prefix length.

Parameters
typetype of the lease
client_classeslist of classes the client belongs to
prefix_length_matchtype which indicates the selection criteria for the pools relative to the provided hint prefix length
hint_prefix_lengththe hint prefix length that the client provided
Returns
number of leases matching lease type and classes

Definition at line 137 of file subnet.cc.

References isc_throw, pools_, pools_pd_, pools_ta_, sumPoolCapacity(), isc::dhcp::Lease::TYPE_NA, isc::dhcp::Lease::TYPE_PD, isc::dhcp::Lease::TYPE_TA, and isc::dhcp::Lease::TYPE_V4.

+ Here is the call graph for this function:

◆ getPools()

const PoolCollection & isc::dhcp::Subnet::getPools ( Lease::Type  type) const

Returns all pools (const variant).

The reference is only valid as long as the object that returned it.

Parameters
typelease type to be set
Returns
a collection of all pools

Definition at line 336 of file subnet.cc.

References checkType(), isc_throw, pools_, pools_pd_, pools_ta_, isc::dhcp::Lease::TYPE_NA, isc::dhcp::Lease::TYPE_PD, isc::dhcp::Lease::TYPE_TA, and isc::dhcp::Lease::TYPE_V4.

Referenced by getPool(), inPool(), poolOverlaps(), isc::dhcp::Subnet4::toElement(), and isc::dhcp::Subnet6::toElement().

+ Here is the call graph for this function:

◆ getPoolsWritable()

PoolCollection & isc::dhcp::Subnet::getPoolsWritable ( Lease::Type  type)

Returns all pools (non-const variant).

The reference is only valid as long as the object that returned it.

Parameters
typelease type to be set
Returns
a collection of all pools

Definition at line 354 of file subnet.cc.

References checkType(), isc_throw, pools_, pools_pd_, pools_ta_, isc::dhcp::Lease::TYPE_NA, isc::dhcp::Lease::TYPE_PD, isc::dhcp::Lease::TYPE_TA, and isc::dhcp::Lease::TYPE_V4.

Referenced by addPool(), and delPools().

+ Here is the call graph for this function:

◆ getSharedNetwork()

template<typename SharedNetworkPtrType >
void isc::dhcp::Subnet::getSharedNetwork ( SharedNetworkPtrType &  shared_network) const
inline

Retrieves pointer to a shared network associated with a subnet.

By implementing it as a template function we overcome a need to include shared_network.h header file to specify return type explicitly. The header can't be included because it would cause circular dependency between subnet.h and shared_network.h.

This method uses an argument to hold a return value to allow the compiler to infer the return type without a need to call this function with an explicit return type as template argument.

Parameters
[out]shared_networkPointer to the shared network where returned value should be assigned.
Template Parameters
Typeof the shared network, i.e. SharedNetwork4 or a SharedNetwork6.

Definition at line 240 of file subnet.h.

References isc::dhcp::Network::parent_network_.

Referenced by isc::dhcp::Subnet4::clientSupported(), isc::dhcp::Subnet6::clientSupported(), isc::dhcp::Subnet4::getNextSubnet(), and isc::dhcp::Subnet6::getNextSubnet().

◆ getSharedNetworkName()

std::string isc::dhcp::Subnet::getSharedNetworkName ( ) const
inline

Returns shared network name.

Returns
shared network name

Definition at line 259 of file subnet.h.

References shared_network_name_.

◆ initAllocatorsAfterConfigure()

void isc::dhcp::Subnet::initAllocatorsAfterConfigure ( )

Calls initAfterConfigure for each allocator.

Definition at line 444 of file subnet.cc.

References allocators_.

◆ inPool() [1/2]

bool isc::dhcp::Subnet::inPool ( Lease::Type  type,
const isc::asiolink::IOAddress addr 
) const

checks if the specified address is in pools.

Note the difference between inRange() and inPool() for addresses (i.e. not prefixes). For a given subnet (e.g. 2001::/64) there may be one or more pools defined that may or may not cover entire subnet, e.g. pool 2001::1-2001::10). inPool() returning true implies inRange(), but the reverse implication is not always true. For the given example, 2001::1234:abcd would return true for inRange(), but false for inPool() check.

Parameters
typetype of pools to iterate over
addrthis address will be checked if it belongs to any pools in that subnet
Returns
true if the address is in any of the pools

Definition at line 539 of file subnet.cc.

References getPools(), inRange(), and isc::dhcp::Lease::TYPE_PD.

+ Here is the call graph for this function:

◆ inPool() [2/2]

bool isc::dhcp::Subnet::inPool ( Lease::Type  type,
const isc::asiolink::IOAddress addr,
const ClientClasses client_classes 
) const

checks if the specified address is in allowed pools.

This takes also into account client classes

Parameters
typetype of pools to iterate over
addrthis address will be checked if it belongs to any pools in that subnet
client_classesclient class list which must be allowed
Returns
true if the address is in any of the allowed pools

Definition at line 557 of file subnet.cc.

References getPools(), inRange(), and isc::dhcp::Lease::TYPE_PD.

+ Here is the call graph for this function:

◆ inRange()

bool isc::dhcp::Subnet::inRange ( const isc::asiolink::IOAddress addr) const

checks if specified address is in range.

Parameters
addrthis address will be checked if it is included in a specific range
Returns
true if address is in range, false otherwise

Definition at line 89 of file subnet.cc.

References isc::asiolink::firstAddrInPrefix(), isc::asiolink::lastAddrInPrefix(), prefix_, and prefix_len_.

Referenced by addPool(), and inPool().

+ Here is the call graph for this function:

◆ parsePrefixCommon()

std::pair< IOAddress, uint8_t > isc::dhcp::Subnet::parsePrefixCommon ( const std::string &  prefix)
staticprotected

Converts subnet prefix to a pair of prefix/length pair.

IPv4 and IPv6 specific conversion functions should apply extra checks on the returned values, i.e. whether length is in range and the IP address has a valid type.

Parameters
prefixPrefix to be parsed.
Exceptions
BadValueif provided prefix is not valid.

Definition at line 228 of file subnet.cc.

References isc_throw.

Referenced by isc::dhcp::Subnet4::parsePrefix(), and isc::dhcp::Subnet6::parsePrefix().

◆ poolOverlaps()

bool isc::dhcp::Subnet::poolOverlaps ( const Lease::Type pool_type,
const PoolPtr pool 
) const
protected

Checks if the specified pool overlaps with an existing pool.

Parameters
pool_typePool type.
poolPointer to a pool for which the method should check if it overlaps with any existing pool within this subnet.
Returns
true if pool overlaps with an existing pool of a specified type, false otherwise

Definition at line 580 of file subnet.cc.

References getPools().

Referenced by addPool().

+ Here is the call graph for this function:

◆ resetSubnetID()

static void isc::dhcp::Subnet::resetSubnetID ( )
inlinestatic

Resets subnet-id counter to its initial value (1).

This should be called during reconfiguration, before any new subnet objects are created. It will ensure that the subnet_id will be consistent between reconfigures.

Definition at line 219 of file subnet.h.

References static_id_.

Referenced by generateNextID(), isc::dhcp::processDhcp4Config(), and isc::dhcp::processDhcp6Config().

◆ setAllocationState()

void isc::dhcp::Subnet::setAllocationState ( Lease::Type  type,
const SubnetAllocationStatePtr allocation_state 
)

Sets subnet-specific allocation state.

Parameters
typelease type for which the allocation state is set.
allocation_stateallocation state instance.

Definition at line 400 of file subnet.cc.

References allocation_states_.

Referenced by isc::dhcp::Subnet4::createAllocators(), and isc::dhcp::Subnet6::createAllocators().

◆ setAllocator()

void isc::dhcp::Subnet::setAllocator ( Lease::Type  type,
const AllocatorPtr allocator 
)

Sets new allocator instance.

If the server is configured to use a different allocator for the subnet, it can set the current allocator with this function.

Parameters
typelease type for which the allocator is set.
allocatornew allocator instance.

Definition at line 384 of file subnet.cc.

References allocators_.

Referenced by isc::dhcp::Subnet4::createAllocators(), and isc::dhcp::Subnet6::createAllocators().

◆ setSharedNetwork()

void isc::dhcp::Subnet::setSharedNetwork ( const NetworkPtr shared_network)
inline

Assigns shared network to a subnet.

This method replaces any shared network associated with a subnet with a new shared network.

Parameters
shared_networkPointer to a new shared network to be associated with the subnet.

Definition at line 252 of file subnet.h.

References isc::dhcp::Network::parent_network_.

◆ setSharedNetworkName()

void isc::dhcp::Subnet::setSharedNetworkName ( const std::string &  shared_network_name)
inline

Sets new shared network name.

In certain cases the subnet must be associated with the shared network but the shared network object is not available. In particular, subnets are returned from the configuration database with only names of the shared networks. The actual shared networks must be fetched from the database using a separate query. In order to not loose associations of subnets with shared networks, the configuration backends will use this method to store the shared network names. The servers will later use those names to associate subnets with shared network instances.

Parameters
shared_network_nameNew shared network name.

Definition at line 275 of file subnet.h.

References shared_network_name_.

◆ sumPoolCapacity() [1/3]

uint128_t isc::dhcp::Subnet::sumPoolCapacity ( const PoolCollection pools) const
protected

Returns a sum of possible leases in all pools.

Parameters
poolslist of pools
Returns
sum of possible leases

Definition at line 157 of file subnet.cc.

Referenced by getPoolCapacity().

◆ sumPoolCapacity() [2/3]

uint128_t isc::dhcp::Subnet::sumPoolCapacity ( const PoolCollection pools,
const ClientClasses client_classes 
) const
protected

Returns a sum of possible leases in all pools allowing classes.

Parameters
poolslist of pools
client_classeslist of classes
Returns
sum of possible/allowed leases

Definition at line 175 of file subnet.cc.

◆ sumPoolCapacity() [3/3]

uint128_t isc::dhcp::Subnet::sumPoolCapacity ( const PoolCollection pools,
const ClientClasses client_classes,
Allocator::PrefixLenMatchType  prefix_length_match,
uint8_t  hint_prefix_length 
) const
protected

Returns a sum of possible leases in all pools allowing classes and matching selection criteria relative to provided hint prefix length.

Note
This function should be called only for PD pools.
Parameters
poolslist of pools
client_classeslist of classes
prefix_length_matchtype which indicates the selection criteria for the pools relative to the provided hint prefix length
hint_prefix_lengththe hint prefix length that the client provided
Returns
sum of possible/allowed leases

Definition at line 198 of file subnet.cc.

References isc::dhcp::Allocator::isValidPrefixPool().

+ Here is the call graph for this function:

◆ toElement()

data::ElementPtr isc::dhcp::Subnet::toElement ( ) const
protectedvirtual

Unparse a subnet object.

Returns
A pointer to unparsed subnet configuration.

Reimplemented from isc::dhcp::Network.

Reimplemented in isc::dhcp::Subnet4, and isc::dhcp::Subnet6.

Definition at line 745 of file subnet.cc.

References isc::data::UserContext::contextToElement(), isc::data::Element::create(), isc::data::Element::createMap(), getID(), and toText().

Referenced by isc::dhcp::Subnet4::toElement(), and isc::dhcp::Subnet6::toElement().

+ Here is the call graph for this function:

◆ toText()

std::string isc::dhcp::Subnet::toText ( ) const
virtual

Returns textual representation of the subnet (e.g.

"2001:db8::/64").

Returns
textual representation

Definition at line 97 of file subnet.cc.

References prefix_, and prefix_len_.

Referenced by Subnet(), and toElement().

Member Data Documentation

◆ allocation_states_

std::map<Lease::Type, SubnetAllocationStatePtr> isc::dhcp::Subnet::allocation_states_
protected

Holds subnet-specific allocation state.

Definition at line 485 of file subnet.h.

Referenced by getAllocationState(), and setAllocationState().

◆ allocators_

std::map<Lease::Type, AllocatorPtr> isc::dhcp::Subnet::allocators_
protected

Lease allocators used by the subnet.

Definition at line 482 of file subnet.h.

Referenced by getAllocator(), initAllocatorsAfterConfigure(), and setAllocator().

◆ id_

SubnetID isc::dhcp::Subnet::id_
protected

subnet-id

Subnet-id is a unique value that can be used to find or identify a Subnet4 or Subnet6.

Definition at line 461 of file subnet.h.

Referenced by Subnet(), getID(), and getLabel().

◆ pools_

PoolCollection isc::dhcp::Subnet::pools_
protected

collection of IPv4 or non-temporary IPv6 pools in that subnet.

Definition at line 464 of file subnet.h.

Referenced by isc::dhcp::Subnet4::createAllocators(), isc::dhcp::Subnet6::createAllocators(), getPoolCapacity(), getPools(), and getPoolsWritable().

◆ pools_pd_

PoolCollection isc::dhcp::Subnet::pools_pd_
protected

collection of IPv6 prefix pools in that subnet.

Definition at line 470 of file subnet.h.

Referenced by isc::dhcp::Subnet6::createAllocators(), getPoolCapacity(), getPools(), and getPoolsWritable().

◆ pools_ta_

PoolCollection isc::dhcp::Subnet::pools_ta_
protected

collection of IPv6 temporary address pools in that subnet.

Definition at line 467 of file subnet.h.

Referenced by isc::dhcp::Subnet6::createAllocators(), getPoolCapacity(), getPools(), and getPoolsWritable().

◆ prefix_

isc::asiolink::IOAddress isc::dhcp::Subnet::prefix_
protected

a prefix of the subnet.

Definition at line 473 of file subnet.h.

Referenced by addPool(), get(), inRange(), and toText().

◆ prefix_len_

uint8_t isc::dhcp::Subnet::prefix_len_
protected

a prefix length of the subnet.

Definition at line 476 of file subnet.h.

Referenced by addPool(), get(), inRange(), and toText().

◆ shared_network_name_

std::string isc::dhcp::Subnet::shared_network_name_
protected

Shared network name.

Definition at line 479 of file subnet.h.

Referenced by getSharedNetworkName(), and setSharedNetworkName().

◆ static_id_

SubnetID isc::dhcp::Subnet::static_id_ = 1
staticprotected

keeps the subnet-id value.

It is incremented every time a new Subnet object is created. It is reset (resetSubnetID) every time reconfiguration occurs.

Static value initialized in subnet.cc.

Definition at line 366 of file subnet.h.

Referenced by generateNextID(), and resetSubnetID().


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