2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-30 13:37:55 +00:00

[82-improve-kea-test-capabilities] Made "server" port

This commit is contained in:
Francis Dupont
2018-12-27 16:15:30 +01:00
committed by Tomek Mrugalski
parent 102feb5bdb
commit 0487f6fc96
17 changed files with 69 additions and 59 deletions

View File

@@ -38,7 +38,7 @@
</listitem> </listitem>
<listitem> <listitem>
<simpara> <simpara>
<command>-p <replaceable>port</replaceable></command> - <command>-p <replaceable>server-port</replaceable></command> -
specifies UDP port on which the server will listen. This is only specifies UDP port on which the server will listen. This is only
useful during testing, as a DHCPv4 server listening on useful during testing, as a DHCPv4 server listening on
ports other than the standard ones will not be able to ports other than the standard ones will not be able to

View File

@@ -38,7 +38,7 @@
</listitem> </listitem>
<listitem> <listitem>
<simpara> <simpara>
<command>-p <replaceable>port</replaceable></command> - <command>-p <replaceable>server-port</replaceable></command> -
specifies UDP port on which the server will listen. This is only specifies UDP port on which the server will listen. This is only
useful during testing, as a DHCPv6 server listening on useful during testing, as a DHCPv6 server listening on
ports other than the standard ones will not be able to ports other than the standard ones will not be able to

View File

@@ -657,7 +657,8 @@ ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) {
// is no need to rollback configuration if socket fails to open on any // is no need to rollback configuration if socket fails to open on any
// of the interfaces. // of the interfaces.
CfgMgr::instance().getStagingCfg()->getCfgIface()-> CfgMgr::instance().getStagingCfg()->getCfgIface()->
openSockets(AF_INET, srv->getPort(), getInstance()->useBroadcast()); openSockets(AF_INET, srv->getServerPort(),
getInstance()->useBroadcast());
// Install the timers for handling leases reclamation. // Install the timers for handling leases reclamation.
try { try {
@@ -715,8 +716,8 @@ ControlledDhcpv4Srv::checkConfig(isc::data::ConstElementPtr config) {
return (configureDhcp4Server(*srv, config, true)); return (configureDhcp4Server(*srv, config, true));
} }
ControlledDhcpv4Srv::ControlledDhcpv4Srv(uint16_t port /*= DHCP4_SERVER_PORT*/) ControlledDhcpv4Srv::ControlledDhcpv4Srv(uint16_t server_port /*= DHCP4_SERVER_PORT*/)
: Dhcpv4Srv(port), io_service_(), timer_mgr_(TimerMgr::instance()) { : Dhcpv4Srv(server_port), io_service_(), timer_mgr_(TimerMgr::instance()) {
if (getInstance()) { if (getInstance()) {
isc_throw(InvalidOperation, isc_throw(InvalidOperation,
"There is another Dhcpv4Srv instance already."); "There is another Dhcpv4Srv instance already.");

View File

@@ -27,8 +27,8 @@ public:
/// @brief Constructor /// @brief Constructor
/// ///
/// @param port UDP port to be opened for DHCP traffic /// @param server_port UDP port to be opened for DHCP traffic
ControlledDhcpv4Srv(uint16_t port = DHCP4_SERVER_PORT); ControlledDhcpv4Srv(uint16_t server_port = DHCP4_SERVER_PORT);
/// @brief Destructor. /// @brief Destructor.
~ControlledDhcpv4Srv(); ~ControlledDhcpv4Srv();

View File

@@ -421,7 +421,7 @@ This message is printed when the DHCPv4 server is attempting to open a
configuration database. The database access string with password redacted configuration database. The database access string with password redacted
is logged. is logged.
% DHCP4_OPEN_SOCKET opening sockets on port %1 % DHCP4_OPEN_SOCKET opening service sockets on port %1
A debug message issued during startup, this indicates that the DHCPv4 A debug message issued during startup, this indicates that the DHCPv4
server is about to open sockets on the specified port. server is about to open sockets on the specified port.
@@ -739,7 +739,7 @@ This informational message indicates that the DHCPv4 server has
processed any command-line switches and is starting. The version processed any command-line switches and is starting. The version
is also printed. is also printed.
% DHCP4_START_INFO pid: %1, port: %2, verbose: %3 % DHCP4_START_INFO pid: %1, server port: %2, verbose: %3
This is a debug message issued during the DHCPv4 server startup. This is a debug message issued during the DHCPv4 server startup.
It lists some information about the parameters with which the server It lists some information about the parameters with which the server
is running. is running.

View File

@@ -441,17 +441,19 @@ Dhcpv4Exchange::setReservedMessageFields() {
const std::string Dhcpv4Srv::VENDOR_CLASS_PREFIX("VENDOR_CLASS_"); const std::string Dhcpv4Srv::VENDOR_CLASS_PREFIX("VENDOR_CLASS_");
Dhcpv4Srv::Dhcpv4Srv(uint16_t port, const bool use_bcast, Dhcpv4Srv::Dhcpv4Srv(uint16_t server_port, const bool use_bcast,
const bool direct_response_desired) const bool direct_response_desired)
: io_service_(new IOService()), shutdown_(true), alloc_engine_(), port_(port), : io_service_(new IOService()), shutdown_(true), alloc_engine_(),
use_bcast_(use_bcast), network_state_(new NetworkState(NetworkState::DHCPv4)) { server_port_(server_port), use_bcast_(use_bcast),
network_state_(new NetworkState(NetworkState::DHCPv4)) {
LOG_DEBUG(dhcp4_logger, DBG_DHCP4_START, DHCP4_OPEN_SOCKET).arg(port); LOG_DEBUG(dhcp4_logger, DBG_DHCP4_START, DHCP4_OPEN_SOCKET)
.arg(server_port);
try { try {
// Port 0 is used for testing purposes where we don't open broadcast // Port 0 is used for testing purposes where we don't open broadcast
// capable sockets. So, set the packet filter handling direct traffic // capable sockets. So, set the packet filter handling direct traffic
// only if we are in non-test mode. // only if we are in non-test mode.
if (port) { if (server_port) {
// First call to instance() will create IfaceMgr (it's a singleton) // First call to instance() will create IfaceMgr (it's a singleton)
// it may throw something if things go wrong. // it may throw something if things go wrong.
// The 'true' value of the call to setMatchingPacketFilter imposes // The 'true' value of the call to setMatchingPacketFilter imposes

View File

@@ -219,11 +219,11 @@ public:
/// class for unit testing because features they enable require /// class for unit testing because features they enable require
/// root privileges. /// root privileges.
/// ///
/// @param port specifies port number to listen on /// @param server_port specifies port number to listen on
/// @param use_bcast configure sockets to support broadcast messages. /// @param use_bcast configure sockets to support broadcast messages.
/// @param direct_response_desired specifies if it is desired to /// @param direct_response_desired specifies if it is desired to
/// use direct V4 traffic. /// use direct V4 traffic.
Dhcpv4Srv(uint16_t port = DHCP4_SERVER_PORT, Dhcpv4Srv(uint16_t server_port = DHCP4_SERVER_PORT,
const bool use_bcast = true, const bool use_bcast = true,
const bool direct_response_desired = true); const bool direct_response_desired = true);
@@ -285,8 +285,8 @@ public:
/// for testing purposes only. /// for testing purposes only.
/// ///
/// @return UDP port on which server should listen. /// @return UDP port on which server should listen.
uint16_t getPort() const { uint16_t getServerPort() const {
return (port_); return (server_port_);
} }
/// @brief Return bool value indicating that broadcast flags should be set /// @brief Return bool value indicating that broadcast flags should be set
@@ -954,8 +954,11 @@ private:
/// @return Option that contains netmask information /// @return Option that contains netmask information
static OptionPtr getNetmaskOption(const Subnet4Ptr& subnet); static OptionPtr getNetmaskOption(const Subnet4Ptr& subnet);
uint16_t port_; ///< UDP port number on which server listens. /// UDP port number on which server listens.
bool use_bcast_; ///< Should broadcast be enabled on sockets (if true). uint16_t server_port_;
/// Should broadcast be enabled on sockets (if true).
bool use_bcast_;
protected: protected:

View File

@@ -49,7 +49,7 @@
<arg choice="opt" rep="norepeat"><option>-d</option></arg> <arg choice="opt" rep="norepeat"><option>-d</option></arg>
<arg choice="opt" rep="norepeat"><option>-c <replaceable class="parameter">config-file</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-c <replaceable class="parameter">config-file</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">config-file</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">config-file</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">port-number</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">server-port-number</replaceable></option></arg>
</cmdsynopsis> </cmdsynopsis>
</refsynopsisdiv> </refsynopsisdiv>
@@ -118,8 +118,8 @@
<varlistentry> <varlistentry>
<term><option>-p</option></term> <term><option>-p</option></term>
<listitem><para> <listitem><para>
Port number (1-65535) on which the server listens. This is useful Server port number (1-65535) on which the server listens.
for testing purposes only. This is useful for testing purposes only.
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>

View File

@@ -51,7 +51,7 @@ usage() {
cerr << " -d: debug mode with extra verbosity (former -v)" << endl; cerr << " -d: debug mode with extra verbosity (former -v)" << endl;
cerr << " -c file: specify configuration file" << endl; cerr << " -c file: specify configuration file" << endl;
cerr << " -t file: check the configuration file syntax and exit" << endl; cerr << " -t file: check the configuration file syntax and exit" << endl;
cerr << " -p number: specify non-standard port number 1-65535 " cerr << " -p number: specify non-standard server port number 1-65535 "
<< "(useful for testing only)" << endl; << "(useful for testing only)" << endl;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@@ -60,8 +60,8 @@ usage() {
int int
main(int argc, char* argv[]) { main(int argc, char* argv[]) {
int ch; int ch;
int port_number = DHCP4_SERVER_PORT; // The default. any other values are // The default. any other values are useful for testing only.
// useful for testing only. int server_port_number = DHCP4_SERVER_PORT;
bool verbose_mode = false; // Should server be verbose? bool verbose_mode = false; // Should server be verbose?
bool check_mode = false; // Check syntax bool check_mode = false; // Check syntax
@@ -96,13 +96,13 @@ main(int argc, char* argv[]) {
case 'p': case 'p':
try { try {
port_number = boost::lexical_cast<int>(optarg); server_port_number = boost::lexical_cast<int>(optarg);
} catch (const boost::bad_lexical_cast &) { } catch (const boost::bad_lexical_cast &) {
cerr << "Failed to parse port number: [" << optarg cerr << "Failed to parse port number: [" << optarg
<< "], 1-65535 allowed." << endl; << "], 1-65535 allowed." << endl;
usage(); usage();
} }
if (port_number <= 0 || port_number > 65535) { if (server_port_number <= 0 || server_port_number > 65535) {
cerr << "Failed to parse port number: [" << optarg cerr << "Failed to parse port number: [" << optarg
<< "], 1-65535 allowed." << endl; << "], 1-65535 allowed." << endl;
usage(); usage();
@@ -187,12 +187,13 @@ main(int argc, char* argv[]) {
// Initialize logging. If verbose, we'll use maximum verbosity. // Initialize logging. If verbose, we'll use maximum verbosity.
Daemon::loggerInit(DHCP4_ROOT_LOGGER_NAME, verbose_mode); Daemon::loggerInit(DHCP4_ROOT_LOGGER_NAME, verbose_mode);
LOG_DEBUG(dhcp4_logger, DBG_DHCP4_START, DHCP4_START_INFO) LOG_DEBUG(dhcp4_logger, DBG_DHCP4_START, DHCP4_START_INFO)
.arg(getpid()).arg(port_number).arg(verbose_mode ? "yes" : "no"); .arg(getpid()).arg(server_port_number)
.arg(verbose_mode ? "yes" : "no");
LOG_INFO(dhcp4_logger, DHCP4_STARTING).arg(VERSION); LOG_INFO(dhcp4_logger, DHCP4_STARTING).arg(VERSION);
// Create the server instance. // Create the server instance.
ControlledDhcpv4Srv server(port_number); ControlledDhcpv4Srv server(server_port_number);
// Remember verbose-mode // Remember verbose-mode
server.setVerbose(verbose_mode); server.setVerbose(verbose_mode);

View File

@@ -676,7 +676,8 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
// log warnings. Since we allow that this fails for some interfaces there // log warnings. Since we allow that this fails for some interfaces there
// is no need to rollback configuration if socket fails to open on any // is no need to rollback configuration if socket fails to open on any
// of the interfaces. // of the interfaces.
CfgMgr::instance().getStagingCfg()->getCfgIface()->openSockets(AF_INET6, srv->getPort()); CfgMgr::instance().getStagingCfg()->getCfgIface()->
openSockets(AF_INET6, srv->getServerPort());
// Install the timers for handling leases reclamation. // Install the timers for handling leases reclamation.
try { try {
@@ -737,8 +738,8 @@ ControlledDhcpv6Srv::checkConfig(isc::data::ConstElementPtr config) {
return (configureDhcp6Server(*srv, config, true)); return (configureDhcp6Server(*srv, config, true));
} }
ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t port) ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t server_port)
: Dhcpv6Srv(port), io_service_(), timer_mgr_(TimerMgr::instance()) { : Dhcpv6Srv(server_port), io_service_(), timer_mgr_(TimerMgr::instance()) {
if (server_) { if (server_) {
isc_throw(InvalidOperation, isc_throw(InvalidOperation,
"There is another Dhcpv6Srv instance already."); "There is another Dhcpv6Srv instance already.");

View File

@@ -27,8 +27,8 @@ public:
/// @brief Constructor /// @brief Constructor
/// ///
/// @param port UDP port to be opened for DHCP traffic /// @param server_port UDP port to be opened for DHCP traffic
ControlledDhcpv6Srv(uint16_t port = DHCP6_SERVER_PORT); ControlledDhcpv6Srv(uint16_t server_port = DHCP6_SERVER_PORT);
/// @brief Destructor. /// @brief Destructor.
virtual ~ControlledDhcpv6Srv(); virtual ~ControlledDhcpv6Srv();

View File

@@ -101,7 +101,7 @@ extern isc::log::Logger packet6_logger;
/// @brief Logger for options parser. /// @brief Logger for options parser.
/// ///
/// This logger is used to issue log messages related to processing of the /// This logger is used to issue log messages related to processing of the
/// DHCP options /// DHCP options.
extern isc::log::Logger options6_logger; extern isc::log::Logger options6_logger;
/// @brief Logger for Hostname or FQDN processing. /// @brief Logger for Hostname or FQDN processing.

View File

@@ -472,7 +472,7 @@ This warning message is issued when current server configuration specifies
no interfaces that server should listen on, or specified interfaces are not no interfaces that server should listen on, or specified interfaces are not
configured to receive the traffic. configured to receive the traffic.
% DHCP6_OPEN_SOCKET opening sockets on port %1 % DHCP6_OPEN_SOCKET opening service sockets on port %1
A debug message issued during startup, this indicates that the IPv6 DHCP A debug message issued during startup, this indicates that the IPv6 DHCP
server is about to open sockets on the specified port. server is about to open sockets on the specified port.
@@ -782,7 +782,7 @@ This informational message indicates that the IPv6 DHCP server has
processed any command-line switches and is starting. The version processed any command-line switches and is starting. The version
is also printed. is also printed.
% DHCP6_START_INFO pid: %1, port: %2, verbose: %3 % DHCP6_START_INFO pid: %1, server port: %2, verbose: %3
This is a debug message issued during the IPv6 DHCP server startup. This is a debug message issued during the IPv6 DHCP server startup.
It lists some information about the parameters with which the server It lists some information about the parameters with which the server
is running. is running.

View File

@@ -179,20 +179,21 @@ namespace dhcp {
const std::string Dhcpv6Srv::VENDOR_CLASS_PREFIX("VENDOR_CLASS_"); const std::string Dhcpv6Srv::VENDOR_CLASS_PREFIX("VENDOR_CLASS_");
Dhcpv6Srv::Dhcpv6Srv(uint16_t port) Dhcpv6Srv::Dhcpv6Srv(uint16_t server_port)
: io_service_(new IOService()), port_(port), serverid_(), shutdown_(true), : io_service_(new IOService()), server_port_(server_port), serverid_(),
alloc_engine_(), name_change_reqs_(), shutdown_(true), alloc_engine_(), name_change_reqs_(),
network_state_(new NetworkState(NetworkState::DHCPv6)) network_state_(new NetworkState(NetworkState::DHCPv6))
{ {
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_START, DHCP6_OPEN_SOCKET).arg(port); LOG_DEBUG(dhcp6_logger, DBG_DHCP6_START, DHCP6_OPEN_SOCKET)
.arg(server_port);
// Initialize objects required for DHCP server operation. // Initialize objects required for DHCP server operation.
try { try {
// Port 0 is used for testing purposes where in most cases we don't // Port 0 is used for testing purposes where in most cases we don't
// rely on the physical interfaces. Therefore, it should be possible // rely on the physical interfaces. Therefore, it should be possible
// to create an object even when there are no usable interfaces. // to create an object even when there are no usable interfaces.
if ((port > 0) && (IfaceMgr::instance().countIfaces() == 0)) { if ((server_port > 0) && (IfaceMgr::instance().countIfaces() == 0)) {
LOG_ERROR(dhcp6_logger, DHCP6_NO_INTERFACES); LOG_ERROR(dhcp6_logger, DHCP6_NO_INTERFACES);
return; return;
} }

View File

@@ -80,8 +80,8 @@ public:
/// network interaction. Will instantiate lease manager, and load /// network interaction. Will instantiate lease manager, and load
/// old or create new DUID. /// old or create new DUID.
/// ///
/// @param port port on will all sockets will listen /// @param server_port port on will all sockets will listen
Dhcpv6Srv(uint16_t port = DHCP6_SERVER_PORT); Dhcpv6Srv(uint16_t server_port = DHCP6_SERVER_PORT);
/// @brief Destructor. Used during DHCPv6 service shutdown. /// @brief Destructor. Used during DHCPv6 service shutdown.
virtual ~Dhcpv6Srv(); virtual ~Dhcpv6Srv();
@@ -138,8 +138,8 @@ public:
/// used for testing purposes. /// used for testing purposes.
/// ///
/// @return UDP port on which server should listen. /// @return UDP port on which server should listen.
uint16_t getPort() const { uint16_t getServerPort() const {
return (port_); return (server_port_);
} }
/// @brief Starts DHCP_DDNS client IO if DDNS updates are enabled. /// @brief Starts DHCP_DDNS client IO if DDNS updates are enabled.
@@ -941,7 +941,7 @@ private:
bool requestedInORO(const Pkt6Ptr& query, const uint16_t code) const; bool requestedInORO(const Pkt6Ptr& query, const uint16_t code) const;
/// UDP port number on which server listens. /// UDP port number on which server listens.
uint16_t port_; uint16_t server_port_;
public: public:
/// @note used by DHCPv4-over-DHCPv6 so must be public and static /// @note used by DHCPv4-over-DHCPv6 so must be public and static

View File

@@ -48,7 +48,7 @@
<arg choice="opt" rep="norepeat"><option>-d</option></arg> <arg choice="opt" rep="norepeat"><option>-d</option></arg>
<arg choice="opt" rep="norepeat"><option>-c <replaceable class="parameter">config-file</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-c <replaceable class="parameter">config-file</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">config-file</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">config-file</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">port-number</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">server-port-number</replaceable></option></arg>
</cmdsynopsis> </cmdsynopsis>
</refsynopsisdiv> </refsynopsisdiv>
@@ -118,8 +118,8 @@
<varlistentry> <varlistentry>
<term><option>-p</option></term> <term><option>-p</option></term>
<listitem><para> <listitem><para>
Port number (1-65535) on which the server listens. This is useful Server port number (1-65535) on which the server listens.
for testing purposes only. This is useful for testing purposes only.
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>

View File

@@ -49,14 +49,14 @@ usage() {
cerr << "Kea DHCPv6 server, version " << VERSION << endl; cerr << "Kea DHCPv6 server, version " << VERSION << endl;
cerr << endl; cerr << endl;
cerr << "Usage: " << DHCP6_NAME cerr << "Usage: " << DHCP6_NAME
<< " -[v|V|W] [-d] [-{c|t} cfgfile] [-p port_number]" << endl; << " -[v|V|W] [-d] [-{c|t} cfgfile] [-p server_port_number]" << endl;
cerr << " -v: print version number and exit." << endl; cerr << " -v: print version number and exit." << endl;
cerr << " -V: print extended version and exit" << endl; cerr << " -V: print extended version and exit" << endl;
cerr << " -W: display the configuration report and exit" << endl; cerr << " -W: display the configuration report and exit" << endl;
cerr << " -d: debug mode with extra verbosity (former -v)" << endl; cerr << " -d: debug mode with extra verbosity (former -v)" << endl;
cerr << " -c file: specify configuration file" << endl; cerr << " -c file: specify configuration file" << endl;
cerr << " -t file: check the configuration file syntax and exit" << endl; cerr << " -t file: check the configuration file syntax and exit" << endl;
cerr << " -p number: specify non-standard port number 1-65535 " cerr << " -p number: specify non-standard server port number 1-65535 "
<< "(useful for testing only)" << endl; << "(useful for testing only)" << endl;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@@ -65,8 +65,8 @@ usage() {
int int
main(int argc, char* argv[]) { main(int argc, char* argv[]) {
int ch; int ch;
int port_number = DHCP6_SERVER_PORT; // The default. Any other values are // The default. Any other values are useful for testing only.
// useful for testing only. int server_port_number = DHCP6_SERVER_PORT;
bool verbose_mode = false; // Should server be verbose? bool verbose_mode = false; // Should server be verbose?
bool check_mode = false; // Check syntax bool check_mode = false; // Check syntax
@@ -101,13 +101,13 @@ main(int argc, char* argv[]) {
case 'p': // port number case 'p': // port number
try { try {
port_number = boost::lexical_cast<int>(optarg); server_port_number = boost::lexical_cast<int>(optarg);
} catch (const boost::bad_lexical_cast &) { } catch (const boost::bad_lexical_cast &) {
cerr << "Failed to parse port number: [" << optarg cerr << "Failed to parse port number: [" << optarg
<< "], 1-65535 allowed." << endl; << "], 1-65535 allowed." << endl;
usage(); usage();
} }
if (port_number <= 0 || port_number > 65535) { if (server_port_number <= 0 || server_port_number > 65535) {
cerr << "Failed to parse port number: [" << optarg cerr << "Failed to parse port number: [" << optarg
<< "], 1-65535 allowed." << endl; << "], 1-65535 allowed." << endl;
usage(); usage();
@@ -194,12 +194,13 @@ main(int argc, char* argv[]) {
Daemon::loggerInit(DHCP6_LOGGER_NAME, verbose_mode); Daemon::loggerInit(DHCP6_LOGGER_NAME, verbose_mode);
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_START, DHCP6_START_INFO) LOG_DEBUG(dhcp6_logger, DBG_DHCP6_START, DHCP6_START_INFO)
.arg(getpid()).arg(port_number).arg(verbose_mode ? "yes" : "no"); .arg(getpid()).arg(server_port_number)
.arg(verbose_mode ? "yes" : "no");
LOG_INFO(dhcp6_logger, DHCP6_STARTING).arg(VERSION); LOG_INFO(dhcp6_logger, DHCP6_STARTING).arg(VERSION);
// Create the server instance. // Create the server instance.
ControlledDhcpv6Srv server(port_number); ControlledDhcpv6Srv server(server_port_number);
// Remember verbose-mode // Remember verbose-mode
server.setVerbose(verbose_mode); server.setVerbose(verbose_mode);