/// configuration is valid, or specifying details about the error otherwise.
///
/// @param config_set the configuration being processed
-/// @param check_only whether the processing is only for testing the
-/// configuration, in which case some configuration elements, such as
-/// interfaces, might be left uncommitted or unprocessed
isc::data::ConstElementPtr
-processDhcp4Config(isc::data::ConstElementPtr config_set, bool const check_only) {
+processDhcp4Config(isc::data::ConstElementPtr config_set) {
// Before starting any subnet operations, let's reset the subnet-id counter,
// so newly recreated configuration starts with first subnet-id equal 1.
Subnet::resetSubnetID();
parser.parse(hr_identifiers);
}
- // Interfaces are parsed one more time with test_mode=false in the
- // caller context. Presumably, this would make it possible to create
- // IfacesConfigParser with test_mode=false here, since if the result of
- // processDhcp4Config is a success, the interfaces get applied there.
- // However test_mode influences redetection which can influence the
- // result of processDhcp4Config, so let's keep test_mode=check_only.
- ConstElementPtr ifaces_config = mutable_cfg->get("interfaces-config");
- if (ifaces_config) {
- parameter_name = "interfaces-config";
- IfacesConfigParser parser(AF_INET, check_only);
- CfgIfacePtr cfg_iface = srv_config->getCfgIface();
- parser.parse(cfg_iface, ifaces_config);
- }
-
ConstElementPtr sanity_checks = mutable_cfg->get("sanity-checks");
if (sanity_checks) {
parameter_name = "sanity-checks";
LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND, DHCP4_CONFIG_START)
.arg(server.redactConfig(config_set)->str());
- auto answer = processDhcp4Config(config_set, check_only);
+ auto answer = processDhcp4Config(config_set);
int status_code = CONTROL_RESULT_SUCCESS;
isc::config::parseAnswer(status_code, answer);
}
}
} else {
- string parameter_name;
- ElementPtr mutable_cfg;
-
// disable multi-threading (it will be applied by new configuration)
// this must be done in order to properly handle MT to ST transition
// when 'multi-threading' structure is missing from new config and
TimerMgr::instance()->unregisterTimers();
server.discardPackets();
server.getCBControl()->reset();
+ }
+ if (status_code == CONTROL_RESULT_SUCCESS) {
+ string parameter_name;
+ ElementPtr mutable_cfg;
try {
-
// Get the staging configuration.
srv_config = CfgMgr::instance().getStagingCfg();
ConstElementPtr ifaces_config = mutable_cfg->get("interfaces-config");
if (ifaces_config) {
parameter_name = "interfaces-config";
- IfacesConfigParser parser(AF_INET, false);
+ IfacesConfigParser parser(AF_INET, check_only);
CfgIfacePtr cfg_iface = srv_config->getCfgIface();
cfg_iface->reset();
parser.parse(cfg_iface, ifaces_config);
/// configuration is valid, or specifying details about the error otherwise.
///
/// @param config_set the configuration being processed
-/// @param check_only whether the processing is only for testing the
-/// configuration, in which case some configuration elements, such as
-/// interfaces, might be left uncommitted or unprocessed
isc::data::ConstElementPtr
-processDhcp6Config(isc::data::ConstElementPtr config_set, bool const check_only) {
+processDhcp6Config(isc::data::ConstElementPtr config_set) {
// Before starting any subnet operations, let's reset the subnet-id counter,
// so newly recreated configuration starts with first subnet-id equal 1.
Subnet::resetSubnetID();
parser.parse(cfg, server_id);
}
- // Interfaces are parsed one more time with test_mode=false in the
- // caller context. Presumably, this would make it possible to create
- // IfacesConfigParser with test_mode=false here, since if the result of
- // processDhcp6Config is a success, the interfaces get applied there.
- // However test_mode influences redetection which can influence the
- // result of processDhcp6Config, so let's keep test_mode=check_only.
- ConstElementPtr ifaces_config = mutable_cfg->get("interfaces-config");
- if (ifaces_config) {
- parameter_name = "interfaces-config";
- IfacesConfigParser parser(AF_INET6, check_only);
- CfgIfacePtr cfg_iface = srv_config->getCfgIface();
- parser.parse(cfg_iface, ifaces_config);
- }
-
ConstElementPtr sanity_checks = mutable_cfg->get("sanity-checks");
if (sanity_checks) {
parameter_name = "sanity-checks";
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND, DHCP6_CONFIG_START)
.arg(server.redactConfig(config_set)->str());
- auto answer = processDhcp6Config(config_set, check_only);
+ auto answer = processDhcp6Config(config_set);
int status_code = CONTROL_RESULT_SUCCESS;
isc::config::parseAnswer(status_code, answer);
}
}
} else {
- string parameter_name;
- ElementPtr mutable_cfg;
-
// disable multi-threading (it will be applied by new configuration)
// this must be done in order to properly handle MT to ST transition
// when 'multi-threading' structure is missing from new config and
TimerMgr::instance()->unregisterTimers();
server.discardPackets();
server.getCBControl()->reset();
+ }
+ if (status_code == CONTROL_RESULT_SUCCESS) {
+ string parameter_name;
+ ElementPtr mutable_cfg;
try {
-
// Get the staging configuration.
srv_config = CfgMgr::instance().getStagingCfg();
ConstElementPtr ifaces_config = mutable_cfg->get("interfaces-config");
if (ifaces_config) {
parameter_name = "interfaces-config";
- IfacesConfigParser parser(AF_INET6, false);
+ IfacesConfigParser parser(AF_INET6, check_only);
CfgIfacePtr cfg_iface = srv_config->getCfgIface();
cfg_iface->reset();
parser.parse(cfg_iface, ifaces_config);