]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[master] Finished merge of trac5033 (migrate D2client)
authorFrancis Dupont <fdupont@isc.org>
Mon, 16 Jan 2017 12:49:43 +0000 (13:49 +0100)
committerFrancis Dupont <fdupont@isc.org>
Mon, 16 Jan 2017 12:49:43 +0000 (13:49 +0100)
17 files changed:
1  2 
doc/guide/dhcp4-srv.xml
doc/guide/dhcp6-srv.xml
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/parser_context.cc
src/bin/dhcp4/parser_context.h
src/bin/dhcp4/tests/parser_unittest.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/parser_context.cc
src/bin/dhcp6/parser_context.h
src/bin/dhcp6/tests/parser_unittest.cc
src/lib/dhcpsrv/parsers/dhcp_parsers.cc
src/lib/dhcpsrv/parsers/dhcp_parsers.h
src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc

Simple merge
Simple merge
Simple merge
index 730e4de45c261c956a325312ce1666df88e0a491,4594faef7c3481a4a9e72035976853e1234a9a51..34f9e8b261e5b52f8f8413c89641bc52e8e4a94f
@@@ -193,7 -188,8 +196,9 @@@ using namespace std
  %token <bool> BOOLEAN "boolean"
  
  %type <ElementPtr> value
 +%type <ElementPtr> socket_type
+ %type <ElementPtr> ncr_protocol_value
+ %type <ElementPtr> replace_client_name_value
  
  %printer { yyoutput << $$; } <*>;
  
index bd78f531f2a7d4638517a7699d8a8c9c3c3707a0,1f78e40396da542ec56ff6a8ef6562ac39bfbb91..b8eb27b2f154f82604a5c184cac18fad2469fe83
@@@ -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)
              // 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());
Simple merge
Simple merge
Simple merge
index 03d3b3893ec25907dd375ae527cffecaf56bcae8,d6672013ffbc5de669d3fd0c35922de9ba5213c2..107bb1b4b8f334015e1a5f0e38c70e4d3ba6e8b3
@@@ -194,7 -188,8 +197,9 @@@ using namespace std
  %token <bool> BOOLEAN "boolean"
  
  %type <ElementPtr> value
 +%type <ElementPtr> duid_type
+ %type <ElementPtr> ncr_protocol_value
+ %type <ElementPtr> replace_client_name_value
  
  %printer { yyoutput << $$; } <*>;
  
index a038682438ac2a8d3836903fbeafe1c6c4b277ff,2117db63e247c0f28d5a9c6646fa1b1b4df328a4..16cc495ae1fbd1a902589450c0dfb19a48ca7152
@@@ -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)
              // 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());
Simple merge
Simple merge
index 821ad2de2a31ec488d4497c56504d3003662b29a,d8faa8c0078078d6d1a1aec2255aa3fd35b1ee65..d0262225c91d0ad745d01b4f56c256e96e92e295
@@@ -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<configs.size(); i++) {
 -        testFile(string(CFG_EXAMPLES) + "/" + configs[i], false);
 +        testFile(string(CFG_EXAMPLES) + "/" + configs[i]);
      }
  }