Commit 4563925f authored by Marcin Siodelski's avatar Marcin Siodelski

[master] Merge branch 'trac5074'

parents cbba4ee6 bd7aa52f
......@@ -1513,7 +1513,6 @@ AC_CONFIG_FILES([compatcheck/Makefile
src/Makefile
src/bin/Makefile
src/bin/d2/Makefile
src/bin/d2/spec_config.h.pre
src/bin/d2/tests/Makefile
src/bin/d2/tests/d2_process_tests.sh
src/bin/d2/tests/test_data_files_config.h
......@@ -1600,6 +1599,10 @@ AC_CONFIG_FILES([compatcheck/Makefile
src/lib/log/tests/logger_lock_test.sh
src/lib/log/tests/severity_test.sh
src/lib/log/tests/tempdir.h
src/lib/process/Makefile
src/lib/process/spec_config.h.pre
src/lib/process/tests/Makefile
src/lib/process/testutils/Makefile
src/lib/testutils/Makefile
src/lib/testutils/dhcp_test_lib.sh
src/lib/stats/Makefile
......
......@@ -784,6 +784,7 @@ INPUT = ../src/bin/d2 \
../src/lib/log \
../src/lib/log/compiler \
../src/lib/log/interprocess \
../src/lib/process \
../src/lib/stats \
../src/lib/testutils \
../src/lib/util \
......
......@@ -71,8 +71,10 @@
* - @subpage dhcpv6SignalBasedReconfiguration
* - @subpage dhcpv6Other
* - @subpage dhcpv4o6Dhcp6
* - @subpage libprocess
* - @subpage cpl
* - @subpage cplSignals
* - @subpage d2
* - @subpage d2CPL
* - @subpage d2ProcessDerivation
* - @subpage d2ConfigMgt
* - @subpage d2NCRReceipt
......
......@@ -439,12 +439,18 @@
</simpara>
</listitem>
<listitem>
<simpara>
<command>kea-dhcp-ddns.dctl</command> - the logger used by the
kea-dhcp-ddns daemon for logging basic information about the
process, received signals and triggered reconfigurations.
</simpara>
</listitem>
<listitem>
<simpara>
<command>kea-dhcp-ddns.dhcpddns</command> - the logger used by the
kea-dhcp-ddns daemon for logging configuration and global event
information. This logger does not specify logging settings for
libraries used by the daemon.
kea-dhcp-ddns daemon for logging events related to DDNS operations.
</simpara>
</listitem>
......
......@@ -2,6 +2,4 @@
/kea-dhcp-ddns.8
/d2_messages.cc
/d2_messages.h
/spec_config.h
/spec_config.h.pre
/s-messages
......@@ -19,7 +19,7 @@ if USE_STATIC_LINK
AM_LDFLAGS = -static
endif
CLEANFILES = *.gcno *.gcda spec_config.h d2_messages.h d2_messages.cc s-messages
CLEANFILES = *.gcno *.gcda d2_messages.h d2_messages.cc s-messages
man_MANS = kea-dhcp-ddns.8
DISTCLEANFILES = $(man_MANS)
......@@ -47,25 +47,19 @@ $(man_MANS):
endif
spec_config.h: spec_config.h.pre
$(SED) -e "s|@@LOCALSTATEDIR@@|$(localstatedir)|" spec_config.h.pre >$@
d2_messages.h d2_messages.cc: s-messages
s-messages: d2_messages.mes
$(top_builddir)/src/lib/log/compiler/kea-msg-compiler $(top_srcdir)/src/bin/d2/d2_messages.mes
touch $@
BUILT_SOURCES = spec_config.h d2_messages.h d2_messages.cc
BUILT_SOURCES = d2_messages.h d2_messages.cc
# convenience archive
noinst_LTLIBRARIES = libd2.la
libd2_la_SOURCES =
libd2_la_SOURCES += d_process.h
libd2_la_SOURCES += d_controller.cc d_controller.h
libd2_la_SOURCES += d_cfg_mgr.cc d_cfg_mgr.h
libd2_la_SOURCES += d2_log.cc d2_log.h
libd2_la_SOURCES += d2_process.cc d2_process.h
libd2_la_SOURCES += d2_config.cc d2_config.h
......@@ -75,13 +69,11 @@ libd2_la_SOURCES += d2_update_message.cc d2_update_message.h
libd2_la_SOURCES += d2_update_mgr.cc d2_update_mgr.h
libd2_la_SOURCES += d2_zone.cc d2_zone.h
libd2_la_SOURCES += dns_client.cc dns_client.h
libd2_la_SOURCES += io_service_signal.cc io_service_signal.h
libd2_la_SOURCES += labeled_value.cc labeled_value.h
libd2_la_SOURCES += nc_add.cc nc_add.h
libd2_la_SOURCES += nc_remove.cc nc_remove.h
libd2_la_SOURCES += nc_trans.cc nc_trans.h
libd2_la_SOURCES += state_model.cc state_model.h
libd2_la_SOURCES += d2_controller.cc d2_controller.h
nodist_libd2_la_SOURCES = d2_messages.h d2_messages.cc
......@@ -93,6 +85,7 @@ kea_dhcp_ddns_SOURCES = main.cc
kea_dhcp_ddns_LDADD = libd2.la
kea_dhcp_ddns_LDADD += $(top_builddir)/src/lib/cfgrpt/libcfgrpt.la
kea_dhcp_ddns_LDADD += $(top_builddir)/src/lib/process/libkea-process.la
kea_dhcp_ddns_LDADD += $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la
kea_dhcp_ddns_LDADD += $(top_builddir)/src/lib/eval/libkea-eval.la
kea_dhcp_ddns_LDADD += $(top_builddir)/src/lib/dhcp_ddns/libkea-dhcp_ddns.la
......
// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -29,165 +29,6 @@ already, its background color will be blue and/or its details may not be shown.
sometimes through a small chain of typedefs. These typedefs are shown for
accuracy but are unimportant to a general discussion.
@section d2CPL Controllable Process Layer (CPL)
D2 is built upon an abstract set of classes referred to as the Controllable
Process Layer or CPL. This layer provides the essentials for a controllable,
configurable, asynchronous process. They are the result of an effort to
distill the common facets of process control currently duplicated in Kea's
DHCP servers into a reusable construct. The classes which form this abstract
base are shown in the following class diagram:
@image html abstract_app_classes.svg "Controllable Process Layer Classes"
- isc::d2::DControllerBase - provides all of the services necessary to manage
an application process class derived from isc::d2::DProcess. These services include:
- Command line argument handling
- Process instantiation and initialization
- Support for stand-alone execution
- Process event loop invocation and shutdown
It creates and manages an instance of isc::d2::DProcessBase. The CPL is
designed for asynchronous event processing applications. It is constructed
to use ASIO library for IO processing. @c DControllerBase owns an
isc::asiolink::IOService instance and it passes this into the @c
DProcessBase constructor. It is this @c IOService that is used to drive the
process's event loop. The controller is designed to provide any interfaces
between the process it controls and the outside world.
@c DControllerBase provides configuration for its process via a JSON file
specified as a mandatory command line argument. The file structure is
expected be as follows:
{ "<module-name>": {<module-config>} }
where:
- module-name : is a label which uniquely identifies the
configuration data for the (i.e. the controlled process.)
It is the value returned by @ref
isc::d2::DControllerBase::getAppName()
- module-config: a set of zero or more JSON elements which comprise
application's configuration values. Element syntax is governed
by those elements supported in isc::cc.
The file may contain an arbitrary number of other modules.
@todo Eventually, some sort of secure socket interface which supports remote
control operations such as configuration changes or status reporting will
likely be implemented.
- isc::d2::DProcessBase - defines an asynchronous-event processor (i.e.
application) which provides a uniform interface to:
- Instantiate and initialize a process instance
- "Run" the application by starting its event loop
- Inject events to control the process
It owns an instance of @c DCfgMgrBase.
- isc::d2::DCfgMgrBase - provides the mechanisms for managing an application's
configuration. This includes services for parsing sets of configuration
values, storing the parsed information in its converted form, and retrieving
the information on demand. It owns an instance of @c DCfgContextBase, which
provides a "global" context for information that is accessible before, during,
and after parsing.
- isc::d2::DCfgContextBase - implements a container for configuration
information or "context". It provides a single enclosure for the storage of
configuration parameters or any other information that needs to accessible
within a given context.
The following sequence diagram shows how a configuration from file moves
through the CPL layer:
@image html config_from_file_sequence.svg "CPL Configuration From File Sequence"
The CPL classes will likely move into a common library.
@subsection cplSignals CPL Signal Handling
CPL supports interaction with the outside world via OS signals. The default
implementation supports the following signal driven behavior:
- SIGHUP receipt of this signal will cause a reloading of the configuration
file.
- SIGINT/SIGTERM receipt of either of these signals will initiate an
orderly shutdown.
CPL applications wait for for process asynchronous IO events through
isc::asiolink::IOService::run() or its variants. These calls are not
interrupted upon signal receipt as is the select() function and while
boost::asio provides a signal mechanism it requires linking in additional
libraries. Therefore, CPL provides its own signal handling mechanism to
propagate an OS signal such as SIGHUP to an IOSerivce as a ready event with a
callback.
isc::d2::DControllerBase uses two mechanisms to carry out signal handling. It
uses isc::util::SignalSet to catch OS signals, and isc::d2:IOSignalQueue to
propagate them to its isc::asiolink::IOService as instances of
isc::d2::IOSignal.
This CPL signaling class hierarchy is illustrated in the following diagram:
@image html cpl_signal_classes.svg "CPL Signal Classes"
The mechanics of isc::d2::IOSignal are straight forward. Upon construction it
is given the target isc::asiolink::IOService, the value of the OS signal to
send (e.g. SIGINT, SIGHUP...), and an isc::d2::IOSignalHandler. This handler
should contain the logic the caller would normally execute in its OS signal
handler. Each isc::d2::IOSignal instance has a unique identifier called its
sequence_id.
Internally, IOSignal creates a 1 ms, one-shot timer, on the given
IOService. When the timer expires its event handler invokes the caller's
IOSignalHandler passing it the sequence_id of the IOSignal.
Sending IOSignals is done through an isc::d2::IOSignalQueue. This class is
used to create the signals, house them until they are delivered, and dequeue
them so they can be been handled. To generate an IOSignal when an OS signal
arrives, the process's OS signal handler need only call
isc::d2::IOSignalQueue::pushSignal() with the appropriate values.
To dequeue the IOSignal inside the caller's IOSignalHandler, one simply
invokes isc::d2::IOSignalQueue::popSignal() passing it the sequence_id
parameter passed to the handler. This method returns a pointer to
instigating IOSignal from which the value of OS signal (i.e. SIGINT,
SIGUSR1...) can be obtained. Note that calling popSignal() removes the
IOSignalPtr from the queue, which should reduce its reference count to
zero upon exiting the handler (unless a deliberate copy of it is made).
A typical isc::d2::IOSignalHandler might be structured as follows:
@code
void processSignal(IOSignalId sequence_id) {
// Pop the signal instance off the queue.
IOSignalPtr signal = io_signal_queue_->popSignal(sequence_id);
int os_signal_value = signal->getSignum();
:
// logic based on the signal value
:
}
@endcode
IOSignal's handler invocation code will catch, log ,and then swallow any
exceptions thrown by an IOSignalHandler. This is done to protect the integrity
IOService context.
CPL integrates the use of the two mechanisms by registering the method,
isc::d2::DControllerBase::osSignalHandler(), as the
isc::util::SignalSet::onreceipt_handler_. This configures SignalSet's internal
handler to invoke the method each time a signal arrives. When invoked, this
method will call isc::d2::IOSignalQueue::pushSignal() to create an
isc::d2::IOSignal, passing in the OS signal received and
isc::d2::DControllerBase::ioSignalHandler() to use as the IOSignal's
ready event handler
The following sequence diagram depicts the initialization of signal handling
during startup and the subsequent receipt of a SIGHUP:
@image html cpl_signal_sequence.svg "CPL Signal Handling Sequence"
@section d2ProcessDerivation D2's CPL Derivations
D2's core application classes are DDNS-specific derivations of the CPL as show
......
// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -12,6 +12,8 @@
#include <boost/foreach.hpp>
using namespace isc::process;
namespace isc {
namespace d2 {
......
// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -10,8 +10,8 @@
#include <asiolink/io_service.h>
#include <cc/data.h>
#include <exceptions/exceptions.h>
#include <d2/d_cfg_mgr.h>
#include <d2/d2_config.h>
#include <process/d_cfg_mgr.h>
#include <stdint.h>
#include <string>
......@@ -30,7 +30,7 @@ typedef boost::shared_ptr<D2CfgContext> D2CfgContextPtr;
/// and any other DHCP-DDNS specific information that needs to be accessible
/// during configuration parsing as well as to the application as a whole.
/// It is derived from the context base class, DCfgContextBase.
class D2CfgContext : public DCfgContextBase {
class D2CfgContext : public process::DCfgContextBase {
public:
/// @brief Constructor
D2CfgContext();
......@@ -41,8 +41,8 @@ public:
/// @brief Creates a clone of this context object.
///
/// @return returns a pointer to the new clone.
virtual DCfgContextBasePtr clone() {
return (DCfgContextBasePtr(new D2CfgContext(*this)));
virtual process::DCfgContextBasePtr clone() {
return (process::DCfgContextBasePtr(new D2CfgContext(*this)));
}
/// @brief Fetches a reference to the D2Params
......@@ -103,7 +103,7 @@ typedef boost::shared_ptr<DdnsDomainListMgr> DdnsDomainListMgrPtr;
/// configuration. This includes services for parsing sets of configuration
/// values, storing the parsed information in its converted form,
/// and retrieving the information on demand.
class D2CfgMgr : public DCfgMgrBase {
class D2CfgMgr : public process::DCfgMgrBase {
public:
/// @brief Reverse zone suffix added to IPv4 addresses for reverse lookups
/// @todo This should be configurable.
......@@ -294,7 +294,7 @@ protected:
/// error.
///
/// @return Returns a DCfgContextBasePtr to the new context instance.
virtual DCfgContextBasePtr createNewContext();
virtual process::DCfgContextBasePtr createNewContext();
};
/// @brief Defines a shared pointer to D2CfgMgr.
......
// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -20,6 +20,8 @@
#include <sstream>
#include <string>
using namespace isc::process;
namespace isc {
namespace d2 {
......
// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -9,10 +9,10 @@
#include <asiolink/io_service.h>
#include <cc/data.h>
#include <d2/d_cfg_mgr.h>
#include <dhcpsrv/parsers/dhcp_parsers.h>
#include <dns/tsig.h>
#include <exceptions/exceptions.h>
#include <process/d_cfg_mgr.h>
#include <boost/foreach.hpp>
......@@ -701,7 +701,7 @@ typedef boost::shared_ptr<DdnsDomainListMgr> DdnsDomainListMgrPtr;
///
/// This class implements a concrete version of the base class by supplying a
/// "clone" method.
class DScalarContext : public DCfgContextBase {
class DScalarContext : public process::DCfgContextBase {
public:
/// @brief Constructor
......@@ -715,8 +715,8 @@ public:
/// @brief Creates a clone of a DStubContext.
///
/// @return returns a pointer to the new clone.
virtual DCfgContextBasePtr clone() {
return (DCfgContextBasePtr(new DScalarContext(*this)));
virtual process::DCfgContextBasePtr clone() {
return (process::DCfgContextBasePtr(new DScalarContext(*this)));
}
protected:
......
// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -8,10 +8,12 @@
#include <d2/d2_controller.h>
#include <d2/d2_process.h>
#include <d2/spec_config.h>
#include <process/spec_config.h>
#include <stdlib.h>
using namespace isc::process;
namespace isc {
namespace d2 {
......
// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -7,7 +7,7 @@
#ifndef D2_CONTROLLER_H
#define D2_CONTROLLER_H
#include <d2/d_controller.h>
#include <process/d_controller.h>
namespace isc {
namespace d2 {
......@@ -22,14 +22,14 @@ namespace d2 {
/// DControllerBase a templated class but the labor savings versus the
/// potential number of virtual methods which may be overridden didn't seem
/// worth the clutter at this point.
class D2Controller : public DControllerBase {
class D2Controller : public process::DControllerBase {
public:
/// @brief Static singleton instance method. This method returns the
/// base class singleton instance member. It instantiates the singleton
/// and sets the base class instance member upon first invocation.
///
/// @return returns the pointer reference to the singleton instance.
static DControllerBasePtr& instance();
static process::DControllerBasePtr& instance();
/// @brief Destructor.
virtual ~D2Controller();
......@@ -51,7 +51,7 @@ private:
/// Note the caller is responsible for destructing the process. This
/// is handled by the base class, which wraps this pointer with a smart
/// pointer.
virtual DProcessBase* createProcess();
virtual process::DProcessBase* createProcess();
/// @brief Constructor is declared private to maintain the integrity of
/// the singleton instance.
......
// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -12,7 +12,7 @@ namespace isc {
namespace d2 {
/// @brief Defines the logger used within D2.
isc::log::Logger dctl_logger("dhcpddns");
isc::log::Logger d2_logger("dhcpddns");
isc::log::Logger dhcp_to_d2_logger("dhcp-to-d2");
isc::log::Logger d2_to_dns_logger("d2-to-dns");
......
......@@ -15,7 +15,7 @@ namespace isc {
namespace d2 {
/// Define the loggers for the "d2" logging.
extern isc::log::Logger dctl_logger;
extern isc::log::Logger d2_logger;
extern isc::log::Logger dhcp_to_d2_logger;
extern isc::log::Logger d2_to_dns_logger;
......
# Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
......@@ -6,83 +6,6 @@
$NAMESPACE isc::d2
% DCTL_CCSESSION_ENDING %1 ending control channel session
This debug message is issued just before the controller attempts
to disconnect from its session with the Kea control channel.
% DCTL_CCSESSION_STARTING %1 starting control channel session, specfile: %2
This debug message is issued just before the controller attempts
to establish a session with the Kea control channel.
% DCTL_COMMAND_RECEIVED %1 received command: %2, arguments: %3
A debug message listing the command (and possible arguments) received
from the Kea control system by the controller.
% DCTL_CONFIG_COMPLETE server has completed configuration: %1
This is an informational message announcing the successful processing of a
new configuration. It is output during server startup, and when an updated
configuration is committed by the administrator. Additional information
may be provided.
% DCTL_CONFIG_FILE_LOAD_FAIL %1 reason: %2
This fatal error message indicates that the application attempted to load its
initial configuration from file and has failed. The service will exit.
% DCTL_CONFIG_LOAD_FAIL %1 configuration failed to load: %2
This critical error message indicates that the initial application
configuration has failed. The service will start, but will not
process requests until the configuration has been corrected.
% DCTL_CONFIG_START parsing new configuration: %1
A debug message indicating that the application process has received an
updated configuration and has passed it to its configuration manager
for parsing.
% DCTL_CONFIG_STUB %1 configuration stub handler called
This debug message is issued when the dummy handler for configuration
events is called. This only happens during initial startup.
% DCTL_CONFIG_UPDATE %1 updated configuration received: %2
A debug message indicating that the controller has received an
updated configuration from the Kea configuration system.
% DCTL_INIT_PROCESS %1 initializing the application
This debug message is issued just before the controller attempts
to create and initialize its application instance.
% DCTL_INIT_PROCESS_FAIL %1 application initialization failed: %2
This error message is issued if the controller could not initialize the
application and will exit.
% DCTL_NOT_RUNNING %1 application instance is not running
A warning message is issued when an attempt is made to shut down the
application when it is not running.
% DCTL_PARSER_FAIL : %1
On receipt of a new configuration, the server failed to create a parser to
decode the contents of the named configuration element, or the creation
succeeded but the parsing actions and committal of changes failed.
The reason for the failure is given in the message.
% DCTL_PROCESS_FAILED %1 application execution failed: %2
The controller has encountered a fatal error while running the
application and is terminating. The reason for the failure is
included in the message.
% DCTL_RUN_PROCESS %1 starting application event loop
This debug message is issued just before the controller invokes
the application run method.
% DCTL_SESSION_FAIL %1 controller failed to establish Kea session: %1
The controller has failed to establish communication with the rest of
Kea and will exit.
% DCTL_STANDALONE %1 skipping message queue, running standalone
This is a debug message indicating that the controller is running in the
application in standalone mode. This means it will not connected to the Kea
message queue. Standalone mode is only useful during program development,
and should not be used in a production environment.
% DHCP_DDNS_ADD_FAILED DHCP_DDNS Request ID %1: Transaction outcome %2
This is an error message issued after DHCP_DDNS attempts to submit DNS mapping
entry additions have failed. The precise reason for the failure should be
......@@ -106,16 +29,6 @@ the DHCP_DDNS process name, the second contains the PID and PID file.
This is a debug message that indicates that the application has DHCP_DDNS
requests in the queue but is working as many concurrent requests as allowed.
% DHCP_DDNS_CFG_FILE_RELOAD_ERROR configuration reload failed: %1, reverting to current configuration.
This is an error message indicating that the application attempted to reload
its configuration from file and encountered an error. This is likely due to
invalid content in the configuration file. The application should continue
to operate under its current configuration.
% DHCP_DDNS_CFG_FILE_RELOAD_SIGNAL_RECVD OS signal %1 received, reloading configuration from file: %2
This is an informational message indicating the application has received a signal
instructing it to reload its configuration from file.
% DHCP_DDNS_CLEARED_FOR_SHUTDOWN application has met shutdown criteria for shutdown type: %1
This is a debug message issued when the application has been instructed
to shutdown and has met the required criteria to exit.
......@@ -280,15 +193,6 @@ no configured DDNS domains in the DHCP_DDNS configuration. Either the DHCP_DDNS
configuration needs to be updated or the source of the FQDN itself should be
investigated.
% DHCP_DDNS_PID_FILE_ERROR %1 could not create a PID file: %2
This is an error message that occurs when DHCP_DDNS is unable to create
its PID file. The log message should contain details sufficient to
determine the underlying cause. The most likely culprits are that
some portion of the pathname does not exist or a permissions issue. The
default path is determined by --localstatedir configure parameter but
may be overridden by setting environment variable, KEA_PIDFILE_DIR. The
first argument is the DHCP_DDNS process name.
% DHCP_DDNS_PROCESS_INIT application init invoked
This is a debug message issued when the DHCP-DDNS application enters
its initialization method.
......@@ -448,33 +352,15 @@ reverse update will not performed.
This is a debug message issued when the DHCP-DDNS server exits its
event lo
% DHCP_DDNS_SHUTDOWN DHCP-DDNS has shut down
This is an informational message indicating that the DHCP-DDNS service
has shut down.
% DHCP_DDNS_SHUTDOWN_COMMAND application received shutdown command with args: %1
This is a debug message issued when the application has been instructed
to shut down by the controller.
% DHCP_DDNS_SHUTDOWN_SIGNAL_RECVD OS signal %1 received, starting shutdown
This is a debug message indicating the application has received a signal
instructing it to shutdown.
% DHCP_DDNS_SIGNAL_ERROR signal handler for signal %1, threw an unexpected exception: %2
This is an error message indicating that the application encountered an unexpected
error after receiving a signal. This is a programmatic error and should be
reported. While The application will likely continue to operating, it may be
unable to respond correctly to signals.
% DHCP_DDNS_STARTED Kea DHCP-DDNS server version %1 started
This informational message indicates that the DHCP-DDNS server has
processed all configuration information and is ready to begin processing.
The version is also printed.
% DHCP_DDNS_STARTING DHCP-DDNS starting, pid: %1, version: %2
This is an informational message issued when controller for the
service first starts. Version is also reported.