/// instantiates ControlledDhcpv4Srv class that is responsible for establishing
/// connection with msgq (receiving commands and configuration) and also
/// creating Dhcpv4 server object as well.
+///
+/// For detailed explanation or relations between main(), ControlledDhcpv4Srv,
+/// Dhcpv4Srv and other classes, see \ref dhcpv4Session.
namespace {
<< "(useful for testing only)" << endl;
exit(EXIT_FAILURE);
}
-} // end of anonymous namespace
+} // namespace
int
main(int argc, char* argv[]) {
config_file = optarg;
break;
- case 'p':
+ case 'p': // server port number
try {
server_port_number = boost::lexical_cast<int>(optarg);
} catch (const boost::bad_lexical_cast &) {
}
break;
- case 'P':
+ case 'P': // client port number
try {
client_port_number = boost::lexical_cast<int>(optarg);
} catch (const boost::bad_lexical_cast &) {
usage();
}
-
// Configuration file is required.
if (config_file.empty()) {
cerr << "Configuration file not specified." << endl;
if (check_mode) {
try {
-
// We need to initialize logging, in case any error messages are to be printed.
// This is just a test, so we don't care about lockfile.
setenv("KEA_LOCKFILE_DIR", "none", 0);
LOG_INFO(dhcp4_logger, DHCP4_STARTING).arg(VERSION);
// Create the server instance.
- ControlledDhcpv4Srv server(server_port_number, client_port_number);
+ ControlledDhcpv4Srv server(server_port_number, client_port_number, true);
// Remember verbose-mode
server.setVerbose(verbose_mode);
- // Create our PID file.
+ // Create our PID file
server.setProcName(DHCP4_NAME);
server.setConfigFile(config_file);
server.createPIDFile();
<< "(useful for testing only)" << endl;
exit(EXIT_FAILURE);
}
-} // end of anonymous namespace
+} // namespace
int
main(int argc, char* argv[]) {
cerr << "Error encountered: " << answer->stringValue() << endl;
return (EXIT_FAILURE);
}
-
-
- return (EXIT_SUCCESS);
} catch (const std::exception& ex) {
- cerr << "Syntax check failed with " << ex.what() << endl;
+ cerr << "Syntax check failed with: " << ex.what() << endl;
}
return (EXIT_FAILURE);
}
// Initialize logging. If verbose, we'll use maximum verbosity.
Daemon::loggerInit(DHCP6_LOGGER_NAME, verbose_mode);
-
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_START, DHCP6_START_INFO)
.arg(getpid())
.arg(server_port_number)
LOG_INFO(dhcp6_logger, DHCP6_STARTING).arg(VERSION);
// Create the server instance.
- ControlledDhcpv6Srv server(server_port_number, client_port_number);
+ ControlledDhcpv6Srv server(server_port_number, client_port_number, true);
// Remember verbose-mode
server.setVerbose(verbose_mode);
server.createPIDFile();
try {
- // Initialize the server, e.g. establish control session
- // Read a configuration file
+ // Initialize the server.
server.init(config_file);
-
} catch (const std::exception& ex) {
try {
LOG_ERROR(dhcp6_logger, DHCP6_INIT_FAIL).arg(ex.what());
} catch (...) {
// The exception thrown during the initialization could
- // originate from logger subsystem. Therefore LOG_ERROR() may
- // fail as well.
+ // originate from logger subsystem. Therefore LOG_ERROR()
+ // may fail as well.
cerr << "Failed to initialize server: " << ex.what() << endl;
}
}
ret = EXIT_FAILURE;
} catch (const std::exception& ex) {
-
// First, we print the error on stderr (that should always work)
cerr << DHCP6_NAME << "Fatal error during start up: " << ex.what()
<< endl;