possible reasons for such a failure. Additional messages will indicate the
reason.
+% DHCP4_LEASE_DATABASE_TIMERS_EXEC_FAIL failed to execute the timers for lease database: %1
+A warning message executed when a server process is unable to execute
+the periodic actions for the lease database. An example of the periodic
+action is a Lease File Cleanup. One of the reasons for the failure is
+a misconfiguration of the lease database, whereby the lease database
+hasn't been selected.
+
% DHCP4_NAME_GEN_UPDATE_FAIL failed to update the lease after generating name for a client: %1
This message indicates the failure when trying to update the lease and/or
options in the server's response with the hostname generated by the server
-// Copyright (C) 2011-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
#include <hooks/hooks_manager.h>
#include <util/strutil.h>
+#include <asio.hpp>
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
bool
Dhcpv4Srv::run() {
while (!shutdown_) {
- /// @todo: calculate actual timeout once we have lease database
+ /// @todo Currently we're using the fixed value of the timeout for
+ /// select. This value shouldn't be changed. Keeping it at 1s
+ /// guarantees that the main loop will be executed at least once
+ /// a seconds allowing for executing the interval timers associated
+ /// with the lease database backend in use. The intervals for these
+ /// timers are configured using the unit of 1 second. Bumping up
+ /// the select timeout would cause the timers to go out of sync
+ /// with the configured value.
+ /// Probing for the packets at this pace should not cause a
+ /// significant rise of the CPU usage. However, in the future we
+ /// should adjust the select timeout to the value reported by the
+ /// lease database backend as a minimal poll interval.
//cppcheck-suppress variableScope This is temporary anyway
- const int timeout = 1000;
+ const int timeout = 1;
// client's message and server's response
Pkt4Ptr query;
// terminate.
handleSignal();
+ // Execute ready timers for the lease database, e.g. Lease File Cleanup.
+ try {
+ LeaseMgrFactory::instance().getIOService()->get_io_service().poll();
+
+ } catch (const std::exception& ex) {
+ LOG_WARN(dhcp4_logger, DHCP4_LEASE_DATABASE_TIMERS_EXEC_FAIL)
+ .arg(ex.what());
+ }
+
// Timeout may be reached or signal received, which breaks select()
// with no reception ocurred
if (!query) {
be many reasons for such failure. Each failure is logged in a separate
log entry.
+% DHCP6_LEASE_DATABASE_TIMERS_EXEC_FAIL failed to execute the timers for lease database: %1
+A warning message executed when a server process is unable to execute
+the periodic actions for the lease database. An example of the periodic
+action is a Lease File Cleanup. One of the reasons for the failure is
+a misconfiguration of the lease database, whereby the lease database
+hasn't been selected.
+
% DHCP6_LEASE_NA_WITHOUT_DUID address lease for address %1 does not have a DUID
This error message indicates a database consistency problem. The lease
database has an entry indicating that the given address is in use,
-// Copyright (C) 2011-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
#include <util/io_utilities.h>
#include <util/range_utilities.h>
+#include <asio.hpp>
+
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
bool Dhcpv6Srv::run() {
while (!shutdown_) {
- /// @todo Calculate actual timeout to the next event (e.g. lease
- /// expiration) once we have lease database. The idea here is that
- /// it is possible to do everything in a single process/thread.
- /// For now, we are just calling select for 1000 seconds. There
- /// were some issues reported on some systems when calling select()
- /// with too large values. Unfortunately, I don't recall the details.
+ /// @todo Currently we're using the fixed value of the timeout for
+ /// select. This value shouldn't be changed. Keeping it at 1s
+ /// guarantees that the main loop will be executed at least once
+ /// a seconds allowing for executing the interval timers associated
+ /// with the lease database backend in use. The intervals for these
+ /// timers are configured using the unit of 1 second. Bumping up
+ /// the select timeout would cause the timers to go out of sync
+ /// with the configured value.
+ /// Probing for the packets at this pace should not cause a
+ /// significant rise of the CPU usage. However, in the future we
+ /// should adjust the select timeout to the value reported by the
+ /// lease database backend as a minimal poll interval.
//cppcheck-suppress variableScope This is temporary anyway
- const int timeout = 1000;
+ const int timeout = 1;
// client's message and server's response
Pkt6Ptr query;
// terminate.
handleSignal();
+ // Execute ready timers for the lease database, e.g. Lease File Cleanup.
+ try {
+ LeaseMgrFactory::instance().getIOService()->get_io_service().poll();
+
+ } catch (const std::exception& ex) {
+ LOG_WARN(dhcp6_logger, DHCP6_LEASE_DATABASE_TIMERS_EXEC_FAIL)
+ .arg(ex.what());
+ }
+
// Timeout may be reached or signal received, which breaks select()
// with no packet received
if (!query) {
A debug message issued when DHCPv6 lease is being loaded from the file to
memory.
+% DHCPSRV_MEMFILE_LFC_SETUP setting up the Lease File Cleanup interval to %1 sec
+An info message logged when the Memfile lease database backend configures
+the LFC to be executed periodically. An argument holds the interval in seconds
+in which the LFC will be executed.
+
% DHCPSRV_MEMFILE_LFC_START starting Lease File Cleanup
An info message issued when the Memfile lease database backend starts the
periodic Lease File Cleanup.
if (lfc_interval > 0) {
asiolink::IntervalTimer::Callback cb =
boost::bind(&Memfile_LeaseMgr::lfcCallback, this);
+ LOG_INFO(dhcpsrv_logger, DHCPSRV_MEMFILE_LFC_SETUP).arg(lfc_interval);
lfc_timer_.setup(cb, lfc_interval * 1000);
}
}