%token <bool> BOOLEAN "boolean"
%type <ElementPtr> value
+%type <ElementPtr> socket_type
+ %type <ElementPtr> ncr_protocol_value
+ %type <ElementPtr> replace_client_name_value
%printer { yyoutput << $$; } <*>;
parser = new DbAccessParser(config_id, DbAccessParser::LEASE_DB);
} else if (config_id.compare("hosts-database") == 0) {
parser = new DbAccessParser(config_id, DbAccessParser::HOSTS_DB);
- } else if (config_id.compare("hooks-libraries") == 0) {
- parser = new HooksLibrariesParser(config_id);
+ // hooks-libraries are now migrated to SimpleParser.
} else if (config_id.compare("echo-client-id") == 0) {
parser = new BooleanParser(config_id, globalContext()->boolean_values_);
- } else if (config_id.compare("dhcp-ddns") == 0) {
- parser = new D2ClientConfigParser(config_id);
+ // dhcp-ddns has been converted to SimpleParser.
} else if (config_id.compare("match-client-id") == 0) {
parser = new BooleanParser(config_id, globalContext()->boolean_values_);
- } else if (config_id.compare("control-socket") == 0) {
- parser = new ControlSocketParser(config_id);
- } else if (config_id.compare("expired-leases-processing") == 0) {
- parser = new ExpirationConfigParser();
+ // control-socket has been converted to SimpleParser already.
+ // expired-leases-processing has been converted to SimpleParser already.
} else if (config_id.compare("client-classes") == 0) {
parser = new ClientClassDefListParser(config_id, globalContext());
- } else if (config_id.compare("host-reservation-identifiers") == 0) {
- parser = new HostReservationIdsParser4();
+ // host-reservation-identifiers have been converted to SimpleParser already.
} else {
isc_throw(DhcpConfigError,
"unsupported global configuration parameter: "
continue;
}
+ if (config_pair.first == "control-socket") {
+ ControlSocketParser parser;
+ SrvConfigPtr srv_cfg = CfgMgr::instance().getStagingCfg();
+ parser.parse(*srv_cfg, config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "host-reservation-identifiers") {
+ HostReservationIdsParser4 parser;
+ parser.parse(config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "interfaces-config") {
+ IfacesConfigParser parser(AF_INET);
+ CfgIfacePtr cfg_iface = CfgMgr::instance().getStagingCfg()->getCfgIface();
+ parser.parse(cfg_iface, config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "expired-leases-processing") {
+ ExpirationConfigParser parser;
+ parser.parse(config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "hooks-libraries") {
+ hooks_parser.parse(config_pair.second);
+ hooks_parser.verifyLibraries();
+ continue;
+ }
+
+ // Legacy DhcpConfigParser stuff below
+ if (config_pair.first == "dhcp-ddns") {
+ // Apply defaults if not in short cut
+ if (!D2ClientConfigParser::isShortCutDisabled(config_pair.second)) {
+ D2ClientConfigParser::setAllDefaults(config_pair.second);
+ }
+ D2ClientConfigParser parser;
+ D2ClientConfigPtr cfg = parser.parse(config_pair.second);
+ CfgMgr::instance().getStagingCfg()->setD2ClientConfig(cfg);
+ continue;
+ }
+
ParserPtr parser(createGlobalDhcp4ConfigParser(config_pair.first,
config_pair.second));
LOG_DEBUG(dhcp4_logger, DBG_DHCP4_DETAIL, DHCP4_PARSER_CREATED)
// This occurs last as if it succeeds, there is no easy way
// revert it. As a result, the failure to commit a subsequent
// change causes problems when trying to roll back.
- if (hooks_parser) {
- hooks_parser->commit();
- }
+ hooks_parser.loadLibraries();
+
+ // Apply the staged D2ClientConfig, used to be done by parser commit
+ D2ClientConfigPtr cfg;
+ cfg = CfgMgr::instance().getStagingCfg()->getD2ClientConfig();
+ CfgMgr::instance().setD2ClientConfig(cfg);
}
catch (const isc::Exception& ex) {
LOG_ERROR(dhcp4_logger, DHCP4_PARSER_COMMIT_FAIL).arg(ex.what());
%token <bool> BOOLEAN "boolean"
%type <ElementPtr> value
+%type <ElementPtr> duid_type
+ %type <ElementPtr> ncr_protocol_value
+ %type <ElementPtr> replace_client_name_value
%printer { yyoutput << $$; } <*>;
parser = new DbAccessParser(config_id, DbAccessParser::LEASE_DB);
} else if (config_id.compare("hosts-database") == 0) {
parser = new DbAccessParser(config_id, DbAccessParser::HOSTS_DB);
- } else if (config_id.compare("hooks-libraries") == 0) {
- parser = new HooksLibrariesParser(config_id);
+ // hooks-libraries is now converted to SimpleParser.
- } else if (config_id.compare("dhcp-ddns") == 0) {
- parser = new D2ClientConfigParser(config_id);
+ // mac-source has been converted to SimpleParser.
+ // dhcp-ddns has been converted to SimpleParser
- } else if (config_id.compare("mac-sources") == 0) {
- parser = new MACSourcesListConfigParser(config_id,
- globalContext());
} else if (config_id.compare("relay-supplied-options") == 0) {
parser = new RSOOListConfigParser(config_id);
- } else if (config_id.compare("control-socket") == 0) {
- parser = new ControlSocketParser(config_id);
- } else if (config_id.compare("expired-leases-processing") == 0) {
- parser = new ExpirationConfigParser();
+ // control-socket has been converted to SimpleParser.
+ // expired-leases-processing has been converted to SimpleParser.
} else if (config_id.compare("client-classes") == 0) {
parser = new ClientClassDefListParser(config_id, globalContext());
- } else if (config_id.compare("server-id") == 0) {
- parser = new DUIDConfigParser();
- } else if (config_id.compare("host-reservation-identifiers") == 0) {
- parser = new HostReservationIdsParser6();
+ // host-reservation-identifiers have been converted to SimpleParser already.
+ // server-id has been migrated to SimpleParser
} else {
isc_throw(DhcpConfigError,
"unsupported global configuration parameter: "
continue;
}
+ if (config_pair.first == "mac-sources") {
+ MACSourcesListConfigParser parser;
+ CfgMACSource& mac_source = CfgMgr::instance().getStagingCfg()->getMACSources();
+ parser.parse(mac_source, config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "control-socket") {
+ ControlSocketParser parser;
+ SrvConfigPtr srv_config = CfgMgr::instance().getStagingCfg();
+ parser.parse(*srv_config, config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "host-reservation-identifiers") {
+ HostReservationIdsParser6 parser;
+ parser.parse(config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "server-id") {
+ DUIDConfigParser parser;
+ const CfgDUIDPtr& cfg = CfgMgr::instance().getStagingCfg()->getCfgDUID();
+ parser.parse(cfg, config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "interfaces-config") {
+ IfacesConfigParser parser(AF_INET6);
+ CfgIfacePtr cfg_iface = CfgMgr::instance().getStagingCfg()->getCfgIface();
+ parser.parse(cfg_iface, config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "expired-leases-processing") {
+ ExpirationConfigParser parser;
+ parser.parse(config_pair.second);
+ continue;
+ }
+
+ if (config_pair.first == "hooks-libraries") {
+ hooks_parser.parse(config_pair.second);
+ hooks_parser.verifyLibraries();
+ continue;
+ }
+
+ if (config_pair.first == "dhcp-ddns") {
+ // Apply defaults if not in short cut
+ if (!D2ClientConfigParser::isShortCutDisabled(config_pair.second)) {
+ D2ClientConfigParser::setAllDefaults(config_pair.second);
+ }
+ D2ClientConfigParser parser;
+ D2ClientConfigPtr cfg = parser.parse(config_pair.second);
+ CfgMgr::instance().getStagingCfg()->setD2ClientConfig(cfg);
+ continue;
+ }
+
ParserPtr parser(createGlobal6DhcpConfigParser(config_pair.first,
config_pair.second));
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL, DHCP6_PARSER_CREATED)
// This occurs last as if it succeeds, there is no easy way to
// revert it. As a result, the failure to commit a subsequent
// change causes problems when trying to roll back.
- if (hooks_parser) {
- hooks_parser->commit();
- }
+ hooks_parser.loadLibraries();
+
+ // Apply staged D2ClientConfig, used to be done by parser commit
+ D2ClientConfigPtr cfg;
+ cfg = CfgMgr::instance().getStagingCfg()->getD2ClientConfig();
+ CfgMgr::instance().setD2ClientConfig(cfg);
}
catch (const isc::Exception& ex) {
LOG_ERROR(dhcp6_logger, DHCP6_PARSER_COMMIT_FAIL).arg(ex.what());
configs.push_back("several-subnets.json");
configs.push_back("simple.json");
configs.push_back("stateless.json");
+ configs.push_back("with-ddns.json");
for (int i = 0; i<configs.size(); i++) {
- testFile(string(CFG_EXAMPLES) + "/" + configs[i], false);
+ testFile(string(CFG_EXAMPLES) + "/" + configs[i]);
}
}