47namespace ph = std::placeholders;
52struct CtrlDhcp4Hooks {
53 int hooks_index_dhcp4_srv_configured_;
77void signalHandler(
int signo) {
79 if (signo == SIGHUP) {
81 }
else if ((signo == SIGTERM) || (signo == SIGINT)) {
96 start_ = boost::posix_time::second_clock::universal_time();
104 string reason = comment ? comment->stringValue() :
105 "no details available";
134 if (file_name.empty()) {
137 " Please use -c command line option.");
151 "a map, i.e., start with { and end with } and contain "
152 "at least an entry called 'Dhcp4' that itself is a map. "
154 <<
" is a valid JSON, but its top element is not a map."
155 " Did you forget to add { } around your configuration?");
165 "process command \"config-set\"");
173 string reason = comment ? comment->stringValue() :
174 "no details available";
177 }
catch (
const std::exception& ex) {
183 .arg(file_name).arg(ex.what());
185 << file_name <<
"': " << ex.
what());
197ControlledDhcpv4Srv::commandShutdownHandler(
const string&,
ConstElementPtr args) {
214 "parameter 'exit-value' is not an integer"));
217 exit_value = param->intValue();
226ControlledDhcpv4Srv::commandConfigReloadHandler(
const string&,
235 }
catch (
const std::exception& ex) {
242 "Config reload failed: " +
string(ex.what())));
247ControlledDhcpv4Srv::commandConfigGetHandler(
const string&,
257ControlledDhcpv4Srv::commandConfigHashGetHandler(
const string&,
269ControlledDhcpv4Srv::commandConfigWriteHandler(
const string&,
278 if (filename_param) {
281 "passed parameter 'filename' is not a string"));
283 filename = filename_param->stringValue();
287 if (filename.empty()) {
293 if (filename.empty()) {
295 "Please specify filename explicitly."));
318 + filename +
" successful", params));
322ControlledDhcpv4Srv::commandConfigSetHandler(
const string&,
331 message =
"Missing mandatory 'arguments' parameter.";
333 dhcp4 = args->get(
"Dhcp4");
335 message =
"Missing mandatory 'Dhcp4' parameter.";
337 message =
"'Dhcp4' parameter expected to be a map.";
342 if (message.empty()) {
343 for (
auto const& obj : args->mapValue()) {
344 const string& obj_name = obj.first;
345 if (obj_name !=
"Dhcp4") {
348 if (message.empty()) {
349 message =
"Unsupported '" + obj_name +
"' parameter";
351 message +=
" (and '" + obj_name +
"')";
355 if (!message.empty()) {
360 if (!message.empty()) {
417 }
catch (
const std::exception& ex) {
418 std::ostringstream err;
419 err <<
"Error initializing hooks: "
428ControlledDhcpv4Srv::commandConfigTestHandler(
const string&,
437 message =
"Missing mandatory 'arguments' parameter.";
439 dhcp4 = args->get(
"Dhcp4");
441 message =
"Missing mandatory 'Dhcp4' parameter.";
443 message =
"'Dhcp4' parameter expected to be a map.";
448 if (message.empty()) {
449 for (
auto const& obj : args->mapValue()) {
450 const string& obj_name = obj.first;
451 if (obj_name !=
"Dhcp4") {
454 if (message.empty()) {
455 message =
"Unsupported '" + obj_name +
"' parameter";
457 message +=
" (and '" + obj_name +
"')";
461 if (!message.empty()) {
466 if (!message.empty()) {
486ControlledDhcpv4Srv::commandDhcpDisableHandler(
const std::string&,
488 std::ostringstream message;
489 int64_t max_period = 0;
501 message <<
"arguments for the 'dhcp-disable' command must be a map";
506 if (max_period_element) {
509 message <<
"'max-period' argument must be a number";
513 max_period = max_period_element->intValue();
514 if (max_period <= 0) {
515 message <<
"'max-period' must be positive integer";
528 if (origin_id_element) {
530 type = origin_id_element->intValue();
532 message <<
"'origin-id' argument must be a number";
534 }
else if (origin_element) {
535 switch (origin_element->getType()) {
537 origin = origin_element->stringValue();
538 if (origin ==
"ha-partner") {
540 }
else if (origin !=
"user") {
541 if (origin.empty()) {
542 origin =
"(empty string)";
544 message <<
"invalid value used for 'origin' parameter: "
549 type = origin_element->intValue();
553 message <<
"'origin' argument must be a string or a number";
560 if (message.tellp() == 0) {
561 message <<
"DHCPv4 service disabled";
562 if (max_period > 0) {
563 message <<
" for " << max_period <<
" seconds";
568 network_state_->delayedEnableService(
static_cast<unsigned>(max_period),
582ControlledDhcpv4Srv::commandDhcpEnableHandler(
const std::string&,
584 std::ostringstream message;
595 message <<
"arguments for the 'dhcp-enable' command must be a map";
607 if (origin_id_element) {
609 type = origin_id_element->intValue();
611 message <<
"'origin-id' argument must be a number";
613 }
else if (origin_element) {
614 switch (origin_element->getType()) {
616 origin = origin_element->stringValue();
617 if (origin ==
"ha-partner") {
619 }
else if (origin !=
"user") {
620 if (origin.empty()) {
621 origin =
"(empty string)";
623 message <<
"invalid value used for 'origin' parameter: "
628 type = origin_element->intValue();
632 message <<
"'origin' argument must be a string or a number";
639 if (message.tellp() == 0) {
644 "DHCP service successfully enabled"));
652ControlledDhcpv4Srv::commandVersionGetHandler(
const string&,
ConstElementPtr) {
655 arguments->set(
"extended", extended);
663ControlledDhcpv4Srv::commandBuildReportHandler(
const string&,
671ControlledDhcpv4Srv::commandLeasesReclaimHandler(
const string&,
678 message =
"Missing mandatory 'remove' parameter.";
682 message =
"Missing mandatory 'remove' parameter.";
684 message =
"'remove' parameter expected to be a boolean.";
686 bool remove_lease = remove_name->boolValue();
687 server_->alloc_engine_->reclaimExpiredLeases4(0, 0, remove_lease);
689 message =
"Reclamation of expired leases is complete.";
697ControlledDhcpv4Srv::commandServerTagGetHandler(
const std::string&,
699 const std::string& tag =
708ControlledDhcpv4Srv::commandConfigBackendPullHandler(
const std::string&,
730 server_->getCBControl()->databaseConfigFetch(srv_cfg, mode);
731 }
catch (
const std::exception& ex) {
735 "On demand configuration update failed: " +
739 "On demand configuration update successful."));
743ControlledDhcpv4Srv::commandStatusGetHandler(
const string&,
748 auto now = boost::posix_time::second_clock::universal_time();
750 if (!
start_.is_not_a_date_time()) {
751 auto uptime = now -
start_;
756 if (!last_commit.is_not_a_date_time()) {
757 auto reload = now - last_commit;
762 if (mt_mgr.getMode()) {
769 queue_stats->add(
Element::create(mt_mgr.getThreadPool().getQueueStat(10)));
770 queue_stats->add(
Element::create(mt_mgr.getThreadPool().getQueueStat(100)));
771 queue_stats->add(
Element::create(mt_mgr.getThreadPool().getQueueStat(1000)));
772 status->set(
"packet-queue-statistics", queue_stats);
781 for (std::string
const&
error : interface->getErrors()) {
788 if (socket_errors->empty()) {
793 if (reconnect_ctl && reconnect_ctl->retriesLeft()) {
798 sockets->set(
"errors", socket_errors);
800 status->set(
"sockets", sockets);
808ControlledDhcpv4Srv::commandStatisticSetMaxSampleCountAllHandler(
const string&,
811 ConstElementPtr answer = stats_mgr.statisticSetMaxSampleCountAllHandler(args);
813 long max_samples = stats_mgr.getMaxSampleCountDefault();
820ControlledDhcpv4Srv::commandStatisticSetMaxSampleAgeAllHandler(
const string&,
823 ConstElementPtr answer = stats_mgr.statisticSetMaxSampleAgeAllHandler(args);
825 auto duration = stats_mgr.getMaxSampleAgeDefault();
841 std::ostringstream err;
844 err <<
"Server object not initialized, can't process config.";
849 .arg(srv->redactConfig(config)->str());
861 }
catch (
const std::exception& ex) {
862 err <<
"Failed to process configuration:" << ex.what();
869 std::bind(&ControlledDhcpv4Srv::dbLostCallback, srv, ph::_1);
872 std::bind(&ControlledDhcpv4Srv::dbRecoveredCallback, srv, ph::_1);
875 std::bind(&ControlledDhcpv4Srv::dbFailedCallback, srv, ph::_1);
878 string params =
"universe=4";
879 cfg_db->setAppendedParameters(params);
880 cfg_db->createManagers();
882 srv->getNetworkState()->resetForDbConnection();
883 srv->getNetworkState()->resetForLocalCommands();
884 srv->getNetworkState()->resetForRemoteCommands();
885 }
catch (
const std::exception& ex) {
886 err <<
"Unable to open database: " << ex.what();
893 }
catch (
const std::exception& ex) {
894 err <<
"Error starting DHCP_DDNS client after server reconfiguration: "
902 }
catch (
const std::exception& ex) {
903 err <<
"error starting DHCPv4-over-DHCPv6 IPC "
904 " after server reconfiguration: " << ex.what();
917 }
catch (
const std::exception& ex) {
918 err <<
"Error setting packet queue controls after server reconfiguration: "
926 std::bind(&ControlledDhcpv4Srv::openSocketsFailedCallback, srv, ph::_1);
936 openSockets(AF_INET, srv->getServerPort(),
942 setupTimers(&ControlledDhcpv4Srv::reclaimExpiredLeases,
943 &ControlledDhcpv4Srv::deleteExpiredReclaimedLeases,
946 }
catch (
const std::exception& ex) {
947 err <<
"unable to setup timers for periodically running the"
948 " reclamation of the expired leases: "
956 long fetch_time =
static_cast<long>(ctl_info->getConfigFetchWaitTime());
959 if (fetch_time > 0) {
965 if (!server_->inTestMode()) {
966 fetch_time = 1000 * fetch_time;
969 boost::shared_ptr<unsigned> failure_count(
new unsigned(0));
971 registerTimer(
"Dhcp4CBFetchTimer",
972 std::bind(&ControlledDhcpv4Srv::cbFetchUpdates,
986 if (notify_libraries) {
987 return (notify_libraries);
995 CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->initAllocatorsAfterConfigure();
997 }
catch (
const std::exception& ex) {
998 err <<
"Error initializing the lease allocators: "
1009 }
catch (
const std::exception& ex) {
1010 err <<
"Error applying multi threading settings: "
1029 callout_handle->setArgument(
"io_context", srv->getIOService());
1030 callout_handle->setArgument(
"network_state", srv->getNetworkState());
1031 callout_handle->setArgument(
"json_config", config);
1032 callout_handle->setArgument(
"server_config",
CfgMgr::instance().getStagingCfg());
1041 callout_handle->getArgument(
"error",
error);
1043 error =
"unknown error";
1058 "Server object not initialized, can't process config.");
1063 .arg(srv->redactConfig(config)->str());
1069 uint16_t client_port )
1073 "There is another Dhcpv4Srv instance already.");
1092 std::bind(&ControlledDhcpv4Srv::commandBuildReportHandler,
this, ph::_1, ph::_2));
1095 std::bind(&ControlledDhcpv4Srv::commandConfigBackendPullHandler,
this, ph::_1, ph::_2));
1098 std::bind(&ControlledDhcpv4Srv::commandConfigGetHandler,
this, ph::_1, ph::_2));
1101 std::bind(&ControlledDhcpv4Srv::commandConfigHashGetHandler,
this, ph::_1, ph::_2));
1104 std::bind(&ControlledDhcpv4Srv::commandConfigReloadHandler,
this, ph::_1, ph::_2));
1107 std::bind(&ControlledDhcpv4Srv::commandConfigSetHandler,
this, ph::_1, ph::_2));
1110 std::bind(&ControlledDhcpv4Srv::commandConfigTestHandler,
this, ph::_1, ph::_2));
1113 std::bind(&ControlledDhcpv4Srv::commandConfigWriteHandler,
this, ph::_1, ph::_2));
1116 std::bind(&ControlledDhcpv4Srv::commandDhcpEnableHandler,
this, ph::_1, ph::_2));
1119 std::bind(&ControlledDhcpv4Srv::commandDhcpDisableHandler,
this, ph::_1, ph::_2));
1122 std::bind(&ControlledDhcpv4Srv::commandLeasesReclaimHandler,
this, ph::_1, ph::_2));
1125 std::bind(&ControlledDhcpv4Srv::commandServerTagGetHandler,
this, ph::_1, ph::_2));
1128 std::bind(&ControlledDhcpv4Srv::commandShutdownHandler,
this, ph::_1, ph::_2));
1131 std::bind(&ControlledDhcpv4Srv::commandStatusGetHandler,
this, ph::_1, ph::_2));
1134 std::bind(&ControlledDhcpv4Srv::commandVersionGetHandler,
this, ph::_1, ph::_2));
1159 std::bind(&ControlledDhcpv4Srv::commandStatisticSetMaxSampleAgeAllHandler,
this, ph::_1, ph::_2));
1165 std::bind(&ControlledDhcpv4Srv::commandStatisticSetMaxSampleCountAllHandler,
this, ph::_1, ph::_2));
1186 timer_mgr_->unregisterTimers();
1232ControlledDhcpv4Srv::reclaimExpiredLeases(
const size_t max_leases,
1233 const uint16_t timeout,
1234 const bool remove_lease,
1235 const uint16_t max_unwarned_cycles) {
1237 server_->alloc_engine_->reclaimExpiredLeases4(max_leases, timeout,
1239 max_unwarned_cycles);
1240 }
catch (
const std::exception& ex) {
1249ControlledDhcpv4Srv::deleteExpiredReclaimedLeases(
const uint32_t secs) {
1250 server_->alloc_engine_->deleteExpiredReclaimedLeases4(secs);
1256ControlledDhcpv4Srv::dbLostCallback(
ReconnectCtlPtr db_reconnect_ctl) {
1257 if (!db_reconnect_ctl) {
1264 if (db_reconnect_ctl->retriesLeft() == db_reconnect_ctl->maxRetries() &&
1265 db_reconnect_ctl->alterServiceState()) {
1273 if (!db_reconnect_ctl->retriesLeft() ||
1274 !db_reconnect_ctl->retryInterval()) {
1276 .arg(db_reconnect_ctl->retriesLeft())
1277 .arg(db_reconnect_ctl->retryInterval());
1278 if (db_reconnect_ctl->exitOnFailure()) {
1288ControlledDhcpv4Srv::dbRecoveredCallback(
ReconnectCtlPtr db_reconnect_ctl) {
1289 if (!db_reconnect_ctl) {
1296 if (db_reconnect_ctl->alterServiceState()) {
1302 db_reconnect_ctl->resetRetries();
1308ControlledDhcpv4Srv::dbFailedCallback(
ReconnectCtlPtr db_reconnect_ctl) {
1309 if (!db_reconnect_ctl) {
1316 .arg(db_reconnect_ctl->maxRetries());
1318 if (db_reconnect_ctl->exitOnFailure()) {
1326ControlledDhcpv4Srv::openSocketsFailedCallback(
ReconnectCtlPtr reconnect_ctl) {
1327 if (!reconnect_ctl) {
1334 .arg(reconnect_ctl->maxRetries());
1336 if (reconnect_ctl->exitOnFailure()) {
1342ControlledDhcpv4Srv::cbFetchUpdates(
const SrvConfigPtr& srv_cfg,
1343 boost::shared_ptr<unsigned> failure_count) {
1349 server_->getCBControl()->databaseConfigFetch(srv_cfg,
1351 (*failure_count) = 0;
1353 }
catch (
const std::exception& ex) {
1360 if (++(*failure_count) > 10) {
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
A generic exception that is thrown if a function is called in a prohibited way.
static IOServiceMgr & instance()
Access the IOServiceMgr singleton instance.
Implements an asynchronous "signal" for IOService driven processing.
static void setIOService(isc::asiolink::IOServicePtr io_service)
Set the I/O service.
static std::string getHash(const isc::data::ConstElementPtr &config)
returns a hash of a given Element structure
static CommandMgr & instance()
CommandMgr is a singleton class.
static ElementPtr create(const Position &pos=ZERO_POSITION())
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement type ElementPtr.
static ElementPtr createList(const Position &pos=ZERO_POSITION())
Creates an empty ListElement type ElementPtr.
static void setIOService(const isc::asiolink::IOServicePtr &io_service)
Sets IO service to be used by the database backends.
static DbCallback db_recovered_callback_
Optional callback function to invoke if an opened connection recovery succeeded.
static DbCallback db_failed_callback_
Optional callback function to invoke if an opened connection recovery failed.
static DbCallback db_lost_callback_
Optional callback function to invoke if an opened connection is lost.
RAII class to enable DB reconnect retries on server startup.
static const std::string FLUSH_RECLAIMED_TIMER_NAME
Name of the timer for flushing reclaimed leases.
static const std::string RECLAIM_EXPIRED_TIMER_NAME
Name of the timer for reclaiming expired leases.
static OpenSocketsFailedCallback open_sockets_failed_callback_
Optional callback function to invoke if all retries of the opening sockets fail.
static CfgMgr & instance()
returns a single instance of Configuration Manager
static void apply(data::ConstElementPtr value)
apply multi threading configuration
Controlled version of the DHCPv4 server.
virtual ~ControlledDhcpv4Srv()
Destructor.
static isc::data::ConstElementPtr finishConfigHookLibraries(isc::data::ConstElementPtr config)
Configuration checker for hook libraries.
isc::data::ConstElementPtr loadConfigFile(const std::string &file_name)
Configure DHCPv4 server using the configuration file specified.
void cleanup()
Performs cleanup, immediately before termination.
ControlledDhcpv4Srv(uint16_t server_port=DHCP4_SERVER_PORT, uint16_t client_port=0)
Constructor.
static isc::data::ConstElementPtr checkConfig(isc::data::ConstElementPtr config)
Configuration checker.
void init(const std::string &config_file)
Initializes the server.
static isc::data::ConstElementPtr processConfig(isc::data::ConstElementPtr config)
Configuration processor.
static ControlledDhcpv4Srv * getInstance()
Returns pointer to the sole instance of Dhcpv4Srv.
virtual void shutdownServer(int exit_value)
Initiates shutdown procedure for the whole DHCPv4 server.
static Dhcp4to6Ipc & instance()
Returns pointer to the sole instance of Dhcp4to6Ipc.
void shutdown() override
Instructs the server to shut down.
asiolink::IOServicePtr & getIOService()
Returns pointer to the IO service used by the server.
static std::string getVersion(bool extended)
returns Kea version on stdout and exit.
bool useBroadcast() const
Return bool value indicating that broadcast flags should be set on sockets.
NetworkStatePtr network_state_
Holds information about disabled DHCP service and/or disabled subnet/network scopes.
static void create()
Creates new instance of the HostMgr.
Handles network interfaces, transmission and reception.
static IfaceMgr & instance()
IfaceMgr is a singleton class.
static void destroy()
Destroy lease manager.
static void commitRuntimeOptionDefs()
Commits runtime option definitions.
static const unsigned int DB_CONNECTION
The network state is being altered by the DB connection recovery mechanics.
static const unsigned int USER_COMMAND
Origin of the network state transition.
static const unsigned int HA_REMOTE_COMMAND
The network state is being altered by a "dhcp-disable" or "dhcp-enable" command sent by a HA partner.
Evaluation context, an interface to the expression evaluation.
isc::data::ElementPtr parseFile(const std::string &filename, ParserType parser_type)
Run the parser on the file specified.
@ PARSER_DHCP4
This parser will parse the content as Dhcp4 config wrapped in a map (that's the regular config file)
Manages a pool of asynchronous interval timers.
static const TimerMgrPtr & instance()
Returns pointer to the sole instance of the TimerMgr.
@ NEXT_STEP_DROP
drop the packet
static int registerHook(const std::string &name)
Register Hook.
static bool calloutsPresent(int index)
Are callouts present?
static boost::shared_ptr< CalloutHandle > createCalloutHandle()
Return callout handle.
static void callCallouts(int index, CalloutHandle &handle)
Calls the callouts for a given hook.
std::string getConfigFile() const
Returns config file name.
virtual size_t writeConfigFile(const std::string &config_file, isc::data::ConstElementPtr cfg=isc::data::ConstElementPtr()) const
Writes current configuration to specified file.
isc::asiolink::IOSignalSetPtr signal_set_
A pointer to the object installing custom signal handlers.
boost::posix_time::ptime start_
Timestamp of the start of the daemon.
void setExitValue(int value)
Sets the exit value.
Statistics Manager class.
static StatsMgr & instance()
Statistics Manager accessor method.
RAII class creating a critical section.
static MultiThreadingMgr & instance()
Returns a single instance of Multi Threading Manager.
This file contains several functions and constants that are used for handling commands and responses ...
Contains declarations for loggers used by the DHCPv4 server component.
Defines the Dhcp4o6Ipc class.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
static isc::data::ConstElementPtr statisticResetHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-reset command.
static isc::data::ConstElementPtr statisticGetAllHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-get-all command.
static isc::data::ConstElementPtr statisticRemoveHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-remove command.
static isc::data::ConstElementPtr statisticGetHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-get command.
static isc::data::ConstElementPtr statisticResetAllHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-reset-all command.
static isc::data::ConstElementPtr statisticSetMaxSampleAgeHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-sample-age-set command.
static isc::data::ConstElementPtr statisticRemoveAllHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-remove-all command.
static isc::data::ConstElementPtr statisticSetMaxSampleCountHandler(const std::string &name, const isc::data::ConstElementPtr ¶ms)
Handles statistic-sample-count-set command.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
#define LOG_INFO(LOGGER, MESSAGE)
Macro to conveniently test info output and log it.
#define LOG_WARN(LOGGER, MESSAGE)
Macro to conveniently test warn output and log it.
#define LOG_FATAL(LOGGER, MESSAGE)
Macro to conveniently test fatal output and log it.
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
boost::shared_ptr< IOService > IOServicePtr
Defines a smart pointer to an IOService instance.
const int CONTROL_RESULT_EMPTY
Status code indicating that the specified command was completed correctly, but failed to produce any ...
ConstElementPtr createCommand(const std::string &command)
Creates a standard command message with no argument (of the form { "command": "my_command" })
const int CONTROL_RESULT_ERROR
Status code indicating a general failure.
ConstElementPtr createAnswer()
Creates a standard config/command level success answer message (i.e.
ConstElementPtr parseAnswer(int &rcode, const ConstElementPtr &msg)
const int CONTROL_RESULT_SUCCESS
Status code indicating a successful operation.
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
std::string getConfigReport()
const isc::log::MessageID DHCP4_NOT_RUNNING
const isc::log::MessageID DHCP4_DYNAMIC_RECONFIGURATION_FAIL
const isc::log::MessageID DHCP4_CONFIG_RECEIVED
const isc::log::MessageID DHCP4_DYNAMIC_RECONFIGURATION_SUCCESS
boost::shared_ptr< CfgDbAccess > CfgDbAccessPtr
A pointer to the CfgDbAccess.
boost::shared_ptr< Iface > IfacePtr
Type definition for the pointer to an Iface object.
const isc::log::MessageID DHCP4_DB_RECONNECT_NO_DB_CTL
const isc::log::MessageID DHCP4_CB_PERIODIC_FETCH_UPDATES_RETRIES_EXHAUSTED
const isc::log::MessageID DHCP4_CONFIG_PACKET_QUEUE
boost::shared_ptr< SrvConfig > SrvConfigPtr
Non-const pointer to the SrvConfig.
const isc::log::MessageID DHCP4_CB_ON_DEMAND_FETCH_UPDATES_FAIL
const isc::log::MessageID DHCP4_CONFIG_LOAD_FAIL
const int DBG_DHCP4_COMMAND
Debug level used to log receiving commands.
const isc::log::MessageID DHCP4_DB_RECONNECT_DISABLED
const isc::log::MessageID DHCP4_CONFIG_UNRECOVERABLE_ERROR
const isc::log::MessageID DHCP4_DB_RECONNECT_SUCCEEDED
isc::data::ConstElementPtr configureDhcp4Server(Dhcpv4Srv &server, isc::data::ConstElementPtr config_set, bool check_only, bool extra_checks)
Configure DHCPv4 server (Dhcpv4Srv) with a set of configuration values.
const isc::log::MessageID DHCP4_MULTI_THREADING_INFO
const isc::log::MessageID DHCP4_OPEN_SOCKETS_NO_RECONNECT_CTL
isc::log::Logger dhcp4_logger(DHCP4_APP_LOGGER_NAME)
Base logger for DHCPv4 server.
const isc::log::MessageID DHCP4_DB_RECONNECT_FAILED
const isc::log::MessageID DHCP4_OPEN_SOCKETS_FAILED
const isc::log::MessageID DHCP4_DYNAMIC_RECONFIGURATION
const isc::log::MessageID DHCP4_RECLAIM_EXPIRED_LEASES_FAIL
const isc::log::MessageID DHCP4_CONFIG_UNSUPPORTED_OBJECT
const isc::log::MessageID DHCP4_CB_PERIODIC_FETCH_UPDATES_FAIL
const isc::log::MessageID DHCP4_DB_RECONNECT_LOST_CONNECTION
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
long toSeconds(const StatsDuration &dur)
Returns the number of seconds in a duration.
boost::shared_ptr< ReconnectCtl > ReconnectCtlPtr
Pointer to an instance of ReconnectCtl.
Defines the logger used by the top-level component of kea-lfc.