Kea 2.7.6
|
Configuration Manager. More...
#include <cfgmgr.h>
Public Member Functions | |
bool | ddnsEnabled () |
Convenience method for checking if DHCP-DDNS updates are enabled. | |
const D2ClientConfigPtr & | getD2ClientConfig () const |
Fetches the DHCP-DDNS configuration pointer. | |
D2ClientMgr & | getD2ClientMgr () |
Fetches the DHCP-DDNS manager. | |
util::Optional< std::string > | getDataDir () const |
returns path do the data directory | |
void | setD2ClientConfig (D2ClientConfigPtr &new_config) |
Updates the DHCP-DDNS client configuration to the given value. | |
void | setDataDir (const std::string &datadir, bool unspecified=true) |
Sets new data directory. | |
Static Public Member Functions | |
static CfgMgr & | instance () |
returns a single instance of Configuration Manager | |
Methods managing the collection of configurations. | |
The following methods manage the process of preparing a configuration without affecting a currently used configuration and then committing the configuration to replace current configuration atomically.
| |
void | clear () |
Remove current, staging, and external configurations. | |
void | clearStagingConfiguration () |
Remove staging configuration. | |
void | commit () |
Commits the staging configuration. | |
SrvConfigPtr | getCurrentCfg () |
Returns a pointer to the current configuration. | |
SrvConfigPtr | getStagingCfg () |
Returns a pointer to the staging configuration. | |
SrvConfigPtr | createExternalCfg () |
Creates an external configuration and returns pointer to it. | |
void | mergeIntoStagingCfg (const uint32_t seq) |
Merges external configuration with the given sequence number into the staging configuration. | |
void | mergeIntoCurrentCfg (const uint32_t seq) |
Merges external configuration with the given sequence number into the current configuration. | |
void | setFamily (uint16_t family) |
Sets address family (AF_INET or AF_INET6) | |
uint16_t | getFamily () const |
Returns address family. | |
CfgMgr () | |
Protected constructor. | |
virtual | ~CfgMgr ()=default |
virtual destructor | |
Configuration Manager.
This singleton class holds the whole configuration for DHCPv4 and DHCPv6 servers.
Below is a sketch of configuration inheritance. Let's investigate the following configuration:
Parameters defined in a global scope are applicable to everything until they are overwritten in a smaller scope, in this case subnet6. In the example above, the first subnet6 has preferred lifetime of 500s and a valid lifetime of 1000s. The second subnet has preferred lifetime of 500s, but valid lifetime of 2000s.
Parameter inheritance is implemented in dedicated classes. See isc::dhcp::SimpleParser4::deriveParameters and isc::dhcp::SimpleParser6::deriveParameters.
|
protected |
|
protectedvirtualdefault |
virtual destructor
void isc::dhcp::CfgMgr::clear | ( | ) |
Remove current, staging, and external configurations.
This function removes all configurations, including current, staging and external configurations. It creates a new current configuration with default settings.
This function is exception safe.
Definition at line 73 of file cfgmgr.cc.
References setD2ClientConfig().
void isc::dhcp::CfgMgr::clearStagingConfiguration | ( | ) |
Remove staging configuration.
This function is exception safe.
Definition at line 87 of file cfgmgr.cc.
Referenced by isc::dhcp::ControlledDhcpv4Srv::loadConfigFile(), and isc::dhcp::ControlledDhcpv6Srv::loadConfigFile().
void isc::dhcp::CfgMgr::commit | ( | ) |
SrvConfigPtr isc::dhcp::CfgMgr::createExternalCfg | ( | ) |
Creates an external configuration and returns pointer to it.
External configurations are those that come from other sources than from the configuration file, e.g. a database or a command. They are created aside and merged into the staging or current configuration. External configurations are accessed by their sequence numbers. The sequence numbers are autogenerated when the external configuration instance is created.
Definition at line 129 of file cfgmgr.cc.
Referenced by isc::dhcp::CBControlDHCPv4::databaseConfigApply(), and isc::dhcp::CBControlDHCPv6::databaseConfigApply().
bool isc::dhcp::CfgMgr::ddnsEnabled | ( | ) |
SrvConfigPtr isc::dhcp::CfgMgr::getCurrentCfg | ( | ) |
Returns a pointer to the current configuration.
This function returns pointer to the current configuration. If the current configuration is not set it will create a default configuration and return it.
In the previous Kea releases this method used to return a const pointer to the current configuration to ensure that it is not accidentally modified while the server is running. This has been changed in Kea 1.3 release and now this function returns a non-const pointer. The reason is that there are certain use cases when current configuration must be modified without going through a full cycle of server reconfiguration, e.g. add a subnet to the current configuration as a result of receiving a command over control API. In such case the performance of processing such command is critical and rebuilding the whole configuration just for this small configuration change is out of question.
Nevertheless, such configuration updates should always be made with caution and one has to make sure that the configuration data integrity is preserved.
Definition at line 115 of file cfgmgr.cc.
Referenced by isc::dhcp::Dhcpv4Srv::acceptServerId(), isc::dhcp::Dhcpv4Srv::adjustIfaceData(), isc::dhcp::Dhcpv4Srv::assignLease(), isc::dhcp::Dhcpv4Srv::buildCfgOptionList(), isc::dhcp::Dhcpv6Srv::buildCfgOptionList(), isc::dhcp::SanityChecker::checkLease(), isc::dhcp::SanityChecker::checkLease(), isc::dhcp::configureCommandChannel(), isc::dhcp::CBControlDHCPv4::databaseConfigApply(), isc::dhcp::CBControlDHCPv6::databaseConfigApply(), isc::dhcp::Dhcpv4Srv::declineLease(), isc::dhcp::Dhcpv6Srv::declineLease(), isc::dhcp::Dhcpv4Srv::deferredUnpack(), isc::dhcp::Dhcpv4Srv::earlyGHRLookup(), isc::dhcp::Dhcpv6Srv::earlyGHRLookup(), isc::dhcp::Dhcpv4Srv::evaluateAdditionalClasses(), isc::dhcp::Dhcpv6Srv::evaluateAdditionalClasses(), isc::dhcp::Dhcpv4Exchange::evaluateClasses(), isc::dhcp::Dhcpv6Srv::evaluateClasses(), isc::dhcp::Memfile_LeaseMgr::extractExtendedInfo4(), isc::dhcp::AllocEngine::ClientContext4::getDdnsParams(), isc::dhcp::AllocEngine::ClientContext6::getDdnsParams(), isc::dhcp::AllocEngine::getLifetimes6(), isc::dhcp::Dhcpv6Srv::getMAC(), isc::dhcp::AllocEngine::getOfferLft(), isc::dhcp::AllocEngine::getValidLft(), isc::dhcp::CfgSubnets4::initSelector(), isc::lease_cmds::LeaseCmdsImpl::lease4UpdateHandler(), isc::lease_cmds::LeaseCmdsImpl::lease4WipeHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6BulkApplyHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6UpdateHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6WipeHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseAddHandler(), isc::dhcp::SanityChecker::leaseCheckingEnabled(), isc::stat_cmds::LeaseStatCmdsImpl::makeResultSet4(), isc::stat_cmds::LeaseStatCmdsImpl::makeResultSet6(), mergeIntoCurrentCfg(), isc::dhcp::Dhcpv6Srv::processLocalizedQuery6(), isc::dhcp::Dhcpv4Srv::processRelease(), isc::dhcp::Dhcpv6Srv::processRSOO(), isc::dhcp::queueNCR(), isc::dhcp::queueNCR(), isc::dhcp::LeaseMgr::recountLeaseStats4(), isc::dhcp::LeaseMgr::recountLeaseStats6(), isc::dhcp::Dhcpv4Srv::recoverStashedAgentOption(), isc::dhcp::Dhcpv6Srv::releaseIA_NA(), isc::dhcp::Dhcpv6Srv::releaseIA_PD(), isc::dhcp::Dhcpv4Exchange::removeDependentEvaluatedClasses(), isc::dhcp::Dhcpv6Srv::removeDependentEvaluatedClasses(), isc::dhcp::Dhcpv4Srv::selectSubnet(), isc::dhcp::Dhcpv6Srv::selectSubnet(), isc::dhcp::Dhcpv4Srv::selectSubnet4o6(), isc::dhcp::Dhcpv4Srv::serverDecline(), isc::dhcp::Dhcpv4Srv::setFixedFields(), isc::dhcp::Dhcpv4Exchange::setHostIdentifiers(), isc::dhcp::Dhcpv6Srv::setHostIdentifiers(), isc::dhcp::AllocEngine::updateLease4ExtendedInfo(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnAdd(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnAdd(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnDelete(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnDelete(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnUpdate(), and isc::lease_cmds::LeaseCmdsImpl::updateStatsOnUpdate().
const D2ClientConfigPtr & isc::dhcp::CfgMgr::getD2ClientConfig | ( | ) | const |
D2ClientMgr & isc::dhcp::CfgMgr::getD2ClientMgr | ( | ) |
Fetches the DHCP-DDNS manager.
Definition at line 68 of file cfgmgr.cc.
Referenced by isc::dhcp::Dhcpv6Srv::createNameChangeRequests(), isc::dhcp::Dhcpv4Srv::d2ClientErrorHandler(), isc::dhcp::Dhcpv6Srv::d2ClientErrorHandler(), isc::dhcp::Dhcpv4Srv::postAllocateNameUpdate(), isc::dhcp::Dhcpv6Srv::processClientFqdn(), isc::dhcp::Dhcpv4Srv::processClientName(), isc::dhcp::Dhcpv4Srv::startD2(), isc::dhcp::Dhcpv6Srv::startD2(), isc::dhcp::Dhcpv4Srv::stopD2(), and isc::dhcp::Dhcpv6Srv::stopD2().
Optional< std::string > isc::dhcp::CfgMgr::getDataDir | ( | ) | const |
returns path do the data directory
This method returns a path to writable directory that DHCP servers can store data in.
Definition at line 34 of file cfgmgr.cc.
Referenced by isc::dhcp::Memfile_LeaseMgr::getDefaultLeaseFilePath(), and isc::dhcp::SrvConfig::toElement().
|
inline |
Returns address family.
Definition at line 235 of file cfgmgr.h.
Referenced by isc::dhcp::Memfile_LeaseMgr::getDBVersion(), load(), isc::dhcp::CompatibilityParser::parse(), isc::dhcp::CfgHosts::toElement(), isc::dhcp::ClientClassDef::toElement(), and isc::dhcp::SrvConfig::toElement().
SrvConfigPtr isc::dhcp::CfgMgr::getStagingCfg | ( | ) |
Returns a pointer to the staging configuration.
The staging configuration is used by the configuration parsers to create new configuration. The staging configuration doesn't affect the server's operation until it is committed. The staging configuration is a non-const object which can be modified by the caller.
Multiple consecutive calls to this function return the same object which can be modified from various places of the code (e.g. various configuration parsers).
Definition at line 120 of file cfgmgr.cc.
Referenced by isc::dhcp::HostReservationIdsParser4::HostReservationIdsParser4(), isc::dhcp::HostReservationIdsParser6::HostReservationIdsParser6(), isc::dhcp::Memfile_LeaseMgr::buildExtendedInfoTables6(), isc::dhcp::SanityChecker::checkLease(), isc::dhcp::SanityChecker::checkLease(), isc::dhcp::configureCommandChannel(), isc::dhcp::configureDhcp4Server(), isc::dhcp::configureDhcp6Server(), isc::dhcp::CBControlDHCPv4::databaseConfigApply(), isc::dhcp::CBControlDHCPv6::databaseConfigApply(), isc::dhcp::Memfile_LeaseMgr::extractExtendedInfo4(), isc::dhcp::SanityChecker::leaseCheckingEnabled(), mergeIntoStagingCfg(), isc::dhcp::Dhcp4to6Ipc::open(), isc::dhcp::Dhcp6to4Ipc::open(), isc::dhcp::Subnet4ConfigParser::parse(), isc::dhcp::Subnet6ConfigParser::parse(), isc::dhcp::ControlledDhcpv4Srv::processConfig(), isc::dhcp::ControlledDhcpv6Srv::processConfig(), isc::dhcp::processDhcp4Config(), isc::dhcp::processDhcp6Config(), and isc::ha::HAConfig::validate().
|
static |
returns a single instance of Configuration Manager
CfgMgr is a singleton and this method is the only way of accessing it.
Definition at line 28 of file cfgmgr.cc.
Referenced by isc::dhcp::HostReservationIdsParser4::HostReservationIdsParser4(), isc::dhcp::HostReservationIdsParser6::HostReservationIdsParser6(), isc::dhcp::Dhcpv4Srv::acceptServerId(), isc::dhcp::Dhcpv4Srv::adjustIfaceData(), isc::ha::LeaseSyncFilter::apply(), isc::dhcp::Dhcpv4Srv::assignLease(), isc::dhcp::Dhcpv4Srv::buildCfgOptionList(), isc::dhcp::Dhcpv6Srv::buildCfgOptionList(), isc::dhcp::Memfile_LeaseMgr::buildExtendedInfoTables6(), isc::dhcp::SanityChecker::checkLease(), isc::dhcp::SanityChecker::checkLease(), isc::dhcp::configureCommandChannel(), isc::dhcp::configureDhcp4Server(), isc::dhcp::configureDhcp6Server(), isc::dhcp::Dhcpv6Srv::createNameChangeRequests(), isc::dhcp::SubnetConfigParser::createSubnet(), isc::dhcp::Dhcpv4Srv::d2ClientErrorHandler(), isc::dhcp::Dhcpv6Srv::d2ClientErrorHandler(), isc::dhcp::CBControlDHCPv4::databaseConfigApply(), isc::dhcp::CBControlDHCPv6::databaseConfigApply(), isc::dhcp::Dhcpv4Srv::declineLease(), isc::dhcp::Dhcpv6Srv::declineLease(), isc::dhcp::Dhcpv4Srv::deferredUnpack(), isc::dhcp::Dhcpv4Srv::earlyGHRLookup(), isc::dhcp::Dhcpv6Srv::earlyGHRLookup(), isc::dhcp::Dhcpv4Srv::evaluateAdditionalClasses(), isc::dhcp::Dhcpv6Srv::evaluateAdditionalClasses(), isc::dhcp::Dhcpv4Exchange::evaluateClasses(), isc::dhcp::Dhcpv6Srv::evaluateClasses(), isc::dhcp::Memfile_LeaseMgr::extractExtendedInfo4(), isc::dhcp::ControlledDhcpv4Srv::finishConfigHookLibraries(), isc::dhcp::ControlledDhcpv6Srv::finishConfigHookLibraries(), isc::dhcp::Memfile_LeaseMgr::getDBVersion(), isc::dhcp::AllocEngine::ClientContext4::getDdnsParams(), isc::dhcp::AllocEngine::ClientContext6::getDdnsParams(), isc::dhcp::Memfile_LeaseMgr::getDefaultLeaseFilePath(), isc::dhcp::AllocEngine::getLifetimes6(), isc::dhcp::Dhcpv6Srv::getMAC(), isc::dhcp::AllocEngine::getOfferLft(), isc::dhcp::AllocEngine::getValidLft(), isc::dhcp::CfgSubnets4::initSelector(), isc::lease_cmds::LeaseCmdsImpl::lease4ResendDdnsHandler(), isc::lease_cmds::LeaseCmdsImpl::lease4UpdateHandler(), isc::lease_cmds::LeaseCmdsImpl::lease4WipeHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6BulkApplyHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6ResendDdnsHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6UpdateHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6WipeHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseAddHandler(), isc::dhcp::SanityChecker::leaseCheckingEnabled(), load(), isc::dhcp::ControlledDhcpv4Srv::loadConfigFile(), isc::dhcp::ControlledDhcpv6Srv::loadConfigFile(), main(), isc::stat_cmds::LeaseStatCmdsImpl::makeResultSet4(), isc::stat_cmds::LeaseStatCmdsImpl::makeResultSet6(), isc::dhcp::SrvConfig::merge(), isc::dhcp::Dhcp4to6Ipc::open(), isc::dhcp::Dhcp6to4Ipc::open(), isc::dhcp::CompatibilityParser::parse(), isc::dhcp::SharedNetwork4Parser::parse(), isc::dhcp::SharedNetwork6Parser::parse(), isc::dhcp::Subnet4ConfigParser::parse(), isc::dhcp::Subnet6ConfigParser::parse(), isc::dhcp::Dhcpv4Srv::postAllocateNameUpdate(), isc::dhcp::Dhcpv6Srv::processClientFqdn(), isc::dhcp::Dhcpv4Srv::processClientName(), isc::dhcp::ControlledDhcpv4Srv::processConfig(), isc::dhcp::ControlledDhcpv6Srv::processConfig(), isc::dhcp::processDhcp4Config(), isc::dhcp::processDhcp6Config(), isc::dhcp::Dhcpv6Srv::processLocalizedQuery6(), isc::dhcp::Dhcpv4Srv::processRelease(), isc::dhcp::Dhcpv6Srv::processRSOO(), isc::dhcp::queueNCR(), isc::dhcp::queueNCR(), isc::dhcp::LeaseMgr::recountLeaseStats4(), isc::dhcp::LeaseMgr::recountLeaseStats6(), isc::dhcp::Dhcpv4Srv::recoverStashedAgentOption(), isc::dhcp::Dhcpv6Srv::releaseIA_NA(), isc::dhcp::Dhcpv6Srv::releaseIA_PD(), isc::dhcp::Dhcpv4Exchange::removeDependentEvaluatedClasses(), isc::dhcp::Dhcpv6Srv::removeDependentEvaluatedClasses(), isc::dhcp::Dhcpv4Srv::selectSubnet(), isc::dhcp::Dhcpv6Srv::selectSubnet(), isc::dhcp::Dhcpv4Srv::selectSubnet4o6(), isc::dhcp::Dhcpv4Srv::serverDecline(), isc::dhcp::Dhcpv4Srv::setFixedFields(), isc::dhcp::Dhcpv4Exchange::setHostIdentifiers(), isc::dhcp::Dhcpv6Srv::setHostIdentifiers(), isc::dhcp::Dhcpv4Srv::startD2(), isc::dhcp::Dhcpv6Srv::startD2(), isc::dhcp::Dhcpv4Srv::stopD2(), isc::dhcp::Dhcpv6Srv::stopD2(), isc::dhcp::CfgHosts::toElement(), isc::dhcp::ClientClassDef::toElement(), isc::dhcp::SrvConfig::toElement(), isc::dhcp::AllocEngine::updateLease4ExtendedInfo(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnAdd(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnAdd(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnDelete(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnDelete(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnUpdate(), isc::lease_cmds::LeaseCmdsImpl::updateStatsOnUpdate(), and isc::ha::HAConfig::validate().
void isc::dhcp::CfgMgr::mergeIntoCurrentCfg | ( | const uint32_t | seq | ) |
Merges external configuration with the given sequence number into the current configuration.
After the merge, the source configuration is discarded from the CfgMgr
as it should not be used anymore.
seq | Source configuration sequence number. |
BadValue | if the external configuration with the given sequence number doesn't exist. |
Definition at line 147 of file cfgmgr.cc.
References getCurrentCfg(), and isc::dhcp::LibDHCP::setRuntimeOptionDefs().
Referenced by isc::dhcp::CBControlDHCPv4::databaseConfigApply(), and isc::dhcp::CBControlDHCPv6::databaseConfigApply().
void isc::dhcp::CfgMgr::mergeIntoStagingCfg | ( | const uint32_t | seq | ) |
Merges external configuration with the given sequence number into the staging configuration.
After the merge, the source configuration is discarded from the CfgMgr
as it should not be used anymore.
seq | Source configuration sequence number. |
BadValue | if the external configuration with the given sequence number doesn't exist. |
Definition at line 142 of file cfgmgr.cc.
References getStagingCfg().
Referenced by isc::dhcp::CBControlDHCPv4::databaseConfigApply(), and isc::dhcp::CBControlDHCPv6::databaseConfigApply().
void isc::dhcp::CfgMgr::setD2ClientConfig | ( | D2ClientConfigPtr & | new_config | ) |
Updates the DHCP-DDNS client configuration to the given value.
Passes the new configuration to the D2ClientMgr instance, d2_client_mgr_, which will attempt to apply the new configuration by shutting down its sender and opening a new connection per the new configuration (see D2ClientMgr::setD2ClientConfig()
).
new_config | pointer to the new client configuration. |
Underlying | method(s) will throw D2ClientError if given an empty pointer. |
Definition at line 44 of file cfgmgr.cc.
Referenced by clear(), isc::dhcp::configureDhcp4Server(), and isc::dhcp::configureDhcp6Server().
void isc::dhcp::CfgMgr::setDataDir | ( | const std::string & | datadir, |
bool | unspecified = true ) |
|
inline |