From: Francis Dupont Date: Mon, 16 Jan 2017 12:49:43 +0000 (+0100) Subject: [master] Finished merge of trac5033 (migrate D2client) X-Git-Tag: trac5112_base~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=decb4105096a4fd3b09cf571c1ae44b23d50b466;p=thirdparty%2Fkea.git [master] Finished merge of trac5033 (migrate D2client) --- decb4105096a4fd3b09cf571c1ae44b23d50b466 diff --cc src/bin/dhcp4/dhcp4_parser.yy index 730e4de45c,4594faef7c..34f9e8b261 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@@ -193,7 -188,8 +196,9 @@@ using namespace std %token BOOLEAN "boolean" %type value +%type socket_type + %type ncr_protocol_value + %type replace_client_name_value %printer { yyoutput << $$; } <*>; diff --cc src/bin/dhcp4/json_config_parser.cc index bd78f531f2,1f78e40396..b8eb27b2f1 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@@ -429,18 -432,21 +429,17 @@@ DhcpConfigParser* createGlobalDhcp4Conf 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: " @@@ -634,39 -636,17 +633,50 @@@ configureDhcp4Server(Dhcpv4Srv&, isc::d 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) @@@ -751,7 -742,14 +761,12 @@@ // 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()); diff --cc src/bin/dhcp6/dhcp6_parser.yy index 03d3b3893e,d6672013ff..107bb1b4b8 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@@ -194,7 -188,8 +197,9 @@@ using namespace std %token BOOLEAN "boolean" %type value +%type duid_type + %type ncr_protocol_value + %type replace_client_name_value %printer { yyoutput << $$; } <*>; diff --cc src/bin/dhcp6/json_config_parser.cc index a038682438,2117db63e2..16cc495ae1 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@@ -709,18 -714,24 +709,17 @@@ DhcpConfigParser* createGlobal6DhcpConf 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: " @@@ -903,52 -910,17 +902,63 @@@ configureDhcp6Server(Dhcpv6Srv&, isc::d 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) @@@ -1035,7 -1019,14 +1045,12 @@@ // 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()); diff --cc src/bin/dhcp6/tests/parser_unittest.cc index 821ad2de2a,d8faa8c007..d0262225c9 --- a/src/bin/dhcp6/tests/parser_unittest.cc +++ b/src/bin/dhcp6/tests/parser_unittest.cc @@@ -257,9 -241,10 +257,10 @@@ TEST(ParserTest, file) 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