]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[3604] Use new interface configuration format where applicable.
authorMarcin Siodelski <marcin@isc.org>
Mon, 9 Feb 2015 12:50:17 +0000 (13:50 +0100)
committerMarcin Siodelski <marcin@isc.org>
Mon, 9 Feb 2015 12:50:17 +0000 (13:50 +0100)
Also, renamed interface-config to interfaces-config (plural form).

33 files changed:
doc/examples/kea4/multiple-options.json
doc/examples/kea4/reservations.json
doc/examples/kea4/several-subnets.json
doc/examples/kea4/single-subnet.json
doc/examples/kea6/advanced.json
doc/examples/kea6/multiple-options.json
doc/examples/kea6/several-subnets.json
doc/examples/kea6/simple.json
doc/examples/kea6/stateless.json
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/d2_unittest.cc
src/bin/dhcp4/tests/dhcp4_process_tests.sh.in
src/bin/dhcp4/tests/dhcp4_srv_unittest.cc
src/bin/dhcp4/tests/direct_client_unittest.cc
src/bin/dhcp4/tests/dora_unittest.cc
src/bin/dhcp4/tests/inform_unittest.cc
src/bin/dhcp4/tests/kea_controller_unittest.cc
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/confirm_unittest.cc
src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/d2_unittest.cc
src/bin/dhcp6/tests/dhcp6_process_tests.sh.in
src/bin/dhcp6/tests/dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/hooks_unittest.cc
src/bin/dhcp6/tests/infrequest_unittest.cc
src/bin/dhcp6/tests/kea_controller_unittest.cc
src/bin/dhcp6/tests/rebind_unittest.cc
src/bin/dhcp6/tests/sarr_unittest.cc
src/bin/keactrl/kea.conf.pre
src/bin/keactrl/tests/keactrl_tests.sh.in
src/lib/dhcpsrv/parsers/ifaces_config_parser.h

index 4130e4c5e611a88d3e1009766d0b773812cb6fd1..6dbd9c789d7b03984983171e917c8a3fdb21ca37 100644 (file)
@@ -5,7 +5,9 @@
 
 {
 # Kea is told to listen on ethX interface only.
-  "interfaces": [ "ethX" ],
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index 804ae0ab13a2413c7544b261a6f8f5bd3d3dc954..30d0e8df709a94162c9ec6c14402c29119b02a71 100644 (file)
@@ -4,8 +4,10 @@
 { "Dhcp4":
 
 {
-# Kea is told to listen on eth0 interface only.
-  "interfaces": [ "eth0" ],
+# Kea is told to listen on ethX interface only.
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index b8576a9f23525a950951bee4ada6bab3088ed91a..2f2ecfb488b5deca7e75d57c9b48e545866f2307 100644 (file)
@@ -6,7 +6,9 @@
 
 {
 # Kea is told to listen on ethX interface only.
-  "interfaces": [ "ethX" ],
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index 28368939d14b059b696e42319269545f1e858e6b..bc6f1d82884e7d96ae16b7ffb2d150ea74176a60 100644 (file)
@@ -6,7 +6,9 @@
 
 {
 # Kea is told to listen on ethX interface only.
-  "interfaces": [ "ethX" ],
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index 19230646574669a2715e27e3f8a29db150f0b5eb..7652b4e91a0c4dfdf865bdd693503e7a20487ed2 100644 (file)
@@ -11,7 +11,9 @@
 
 {
 # Kea is told to listen on ethX network interface only.
-  "interfaces": [ "ethX" ],
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index e30cf9d3038626f118e0526d9e94d04303373c41..436816ac29208b8305753625682f7787c379fa9c 100644 (file)
@@ -5,7 +5,9 @@
 
 {
 # Kea is told to listen on ethX interface only.
-  "interfaces": [ "ethX" ],
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index d9744053fe3b1160f391c32677bcb80176f3d5c6..3be0b0bd02693e855cf62b734a40be83f1a7ccc1 100644 (file)
@@ -6,7 +6,9 @@
 
 {
 # Kea is told to listen on ethX interface only.
-  "interfaces": [ "ethX" ],
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index cffec39f02b65def290ad872094f44e6c8da2777..31c3f5270948ab7fd33be7aaa13a705fda4d29af 100644 (file)
@@ -7,7 +7,9 @@
 
 { 
 # Kea is told to listen on ethX interface only.
-  "interfaces": [ "ethX" ],
+  "interfaces-config:" {
+    "interfaces": [ "ethX" ]
+  },
 
 # We need to specify lease type. As of May 2014, three backends are supported:
 # memfile, mysql and pgsql. We'll just use memfile, because it doesn't require
index 1424174b979b57b50059570a881b652b9e0d0513..f33ea815b4f861faf4ba1ea2d4a02d22270b9e68 100644 (file)
@@ -7,7 +7,9 @@
 
 {
 "Dhcp6": {
-    "interfaces": [ "ethX" ],
+    "interfaces-config:" {
+        "interfaces": [ "ethX" ]
+    },
 
 # This is the list of options that will be granted to all clients that ask.
     "option-data": [ {
index 5b3da4273fcf40d72350346ed39f713c0ce35417..1908758820001e44728fc66a9cbdf940f2283664 100644 (file)
@@ -370,7 +370,7 @@ namespace dhcp {
         (config_id.compare("rebind-timer") == 0))  {
         parser = new Uint32Parser(config_id,
                                  globalContext()->uint32_values_);
-    } else if (config_id.compare("interfaces") == 0) {
+    } else if (config_id.compare("interfaces-config") == 0) {
         parser = new IfacesConfigParser4();
     } else if (config_id.compare("subnet4") == 0) {
         parser = new Subnets4ListConfigParser(config_id);
@@ -476,7 +476,7 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) {
                 subnet_parser = parser;
             } else if (config_pair.first == "option-data") {
                 option_parser = parser;
-            } else if (config_pair.first == "interface-config") {
+            } else if (config_pair.first == "interfaces-config") {
                 // The interface parser is independent from any other
                 // parser and can be run here before any other parsers.
                 iface_parser = parser;
index b7674132b189cab5b3f4f8fab7f031db850f819a..aa73ed401475269638c9f4cc75123d8312b30090 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -124,6 +124,14 @@ public:
         unlink(UNLOAD_MARKER_FILE);
     };
 
+    /// @brief Returns an interface configuration used by the most of the
+    /// unit tests.
+    std::string genIfaceConfig() const {
+        return ("\"interfaces-config\": {"
+                "  \"interfaces\": [ \"*\" ]"
+                "}");
+    }
+
     /// @brief Create the simple configuration with single option.
     ///
     /// This function allows to set one of the parameters that configure
@@ -183,7 +191,7 @@ public:
     /// describing an option.
     std::string createConfigWithOption(const std::map<std::string, std::string>& params) {
         std::ostringstream stream;
-        stream << "{ \"interfaces\": [ \"*\" ],"
+        stream << "{ " << genIfaceConfig() << "," <<
             "\"rebind-timer\": 2000, "
             "\"renew-timer\": 1000, "
             "\"subnet4\": [ { "
@@ -446,7 +454,7 @@ public:
     /// contents of the database do not affect result of
     /// subsequent tests.
     void resetConfiguration() {
-        string config = "{ \"interfaces\": [ \"*\" ],"
+        string config = "{ " + genIfaceConfig() + "," +
             "\"hooks-libraries\": [ ], "
             "\"valid-lifetime\": 4000, "
             "\"subnet4\": [ ], "
@@ -500,7 +508,7 @@ TEST_F(Dhcp4ParserTest, emptySubnet) {
     ConstElementPtr status;
 
     EXPECT_NO_THROW(status = configureDhcp4Server(*srv_,
-                    Element::fromJSON("{ \"interfaces\": [ \"*\" ],"
+                    Element::fromJSON("{ " + genIfaceConfig() + "," +
                                       "\"rebind-timer\": 2000, "
                                       "\"renew-timer\": 1000, "
                                       "\"subnet4\": [  ], "
@@ -519,7 +527,7 @@ TEST_F(Dhcp4ParserTest, emptySubnet) {
 TEST_F(Dhcp4ParserTest, unspecifiedRenewTimer) {
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"subnet4\": [ { "
         "    \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
@@ -553,7 +561,7 @@ TEST_F(Dhcp4ParserTest, unspecifiedRenewTimer) {
 TEST_F(Dhcp4ParserTest, unspecifiedRebindTimer) {
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
         "    \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
@@ -587,7 +595,7 @@ TEST_F(Dhcp4ParserTest, subnetGlobalDefaults) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -622,7 +630,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) {
     ConstElementPtr x;
     // Collection of four subnets for which subnet ids should be
     // autogenerated - ids are unspecified or set to 0.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -676,7 +684,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) {
 TEST_F(Dhcp4ParserTest, multipleSubnetsExplicitIDs) {
     ConstElementPtr x;
     // Four subnets with arbitrary subnet ids.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -730,7 +738,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnetsExplicitIDs) {
 TEST_F(Dhcp4ParserTest, multipleSubnetsOverlapingIDs) {
     ConstElementPtr x;
     // Four subnets, two of them having the same id.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -768,7 +776,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
     ConstElementPtr x;
 
     // All four subnets
-    string config4 = "{ \"interfaces\": [ \"*\" ],"
+    string config4 = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -794,7 +802,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
         "\"valid-lifetime\": 4000 }";
 
     // Three subnets (the last one removed)
-    string config_first3 = "{ \"interfaces\": [ \"*\" ],"
+    string config_first3 = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -815,7 +823,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
         "\"valid-lifetime\": 4000 }";
 
     // Second subnet removed
-    string config_second_removed = "{ \"interfaces\": [ \"*\" ],"
+    string config_second_removed = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -899,7 +907,7 @@ TEST_F(Dhcp4ParserTest, nextServerGlobal) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"next-server\": \"1.2.3.4\", "
@@ -929,7 +937,7 @@ TEST_F(Dhcp4ParserTest, nextServerSubnet) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -960,7 +968,7 @@ TEST_F(Dhcp4ParserTest, nextServerNegative) {
     ConstElementPtr status;
 
     // Config with junk instead of next-server address
-    string config_bogus1 = "{ \"interfaces\": [ \"*\" ],"
+    string config_bogus1 = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -972,7 +980,7 @@ TEST_F(Dhcp4ParserTest, nextServerNegative) {
         "\"valid-lifetime\": 4000 }";
 
     // Config with IPv6 next server address
-    string config_bogus2 = "{ \"interfaces\": [ \"*\" ],"
+    string config_bogus2 = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -984,7 +992,7 @@ TEST_F(Dhcp4ParserTest, nextServerNegative) {
         "\"valid-lifetime\": 4000 }";
 
     // Config with empty next server address
-    string config_bogus3 = "{ \"interfaces\": [ \"*\" ],"
+    string config_bogus3 = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -1019,7 +1027,7 @@ TEST_F(Dhcp4ParserTest, nextServerOverride) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"next-server\": \"192.0.0.1\", "
@@ -1049,7 +1057,7 @@ TEST_F(Dhcp4ParserTest, echoClientId) {
 
     ConstElementPtr status;
 
-    string config_false = "{ \"interfaces\": [ \"*\" ],"
+    string config_false = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"echo-client-id\": false,"
@@ -1058,7 +1066,7 @@ TEST_F(Dhcp4ParserTest, echoClientId) {
         "    \"subnet\": \"192.0.2.0/24\" } ],"
         "\"valid-lifetime\": 4000 }";
 
-    string config_true = "{ \"interfaces\": [ \"*\" ],"
+    string config_true = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"echo-client-id\": true,"
@@ -1093,7 +1101,7 @@ TEST_F(Dhcp4ParserTest, subnetLocal) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -1124,7 +1132,7 @@ TEST_F(Dhcp4ParserTest, subnetLocal) {
 TEST_F(Dhcp4ParserTest, multiplePools) {
 
     // Collection with two subnets, each with 2 pools.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -1183,7 +1191,7 @@ TEST_F(Dhcp4ParserTest, poolOutOfSubnet) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -1208,7 +1216,7 @@ TEST_F(Dhcp4ParserTest, poolPrefixLen) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -1785,7 +1793,7 @@ TEST_F(Dhcp4ParserTest, optionStandardDefOverride) {
 // configuration does not include options configuration.
 TEST_F(Dhcp4ParserTest, optionDataDefaults) {
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
         "\"option-data\": [ {"
@@ -1857,7 +1865,7 @@ TEST_F(Dhcp4ParserTest, optionDataTwoSpaces) {
     // The definition is not required for the option that
     // belongs to the 'dhcp4' option space as it is the
     // standard option.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"valid-lifetime\": 4000,"
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
@@ -1937,7 +1945,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
     // at the very end (when all other parameters are configured).
 
     // Starting stage 1. Configure sub-options and their definitions.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"valid-lifetime\": 4000,"
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
@@ -1989,7 +1997,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
     // the configuration from the stage 2 is repeated because BIND
     // configuration manager sends whole configuration for the lists
     // where at least one element is being modified or added.
-    config = "{ \"interfaces\": [ \"*\" ],"
+    config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
         "\"option-data\": [ {"
@@ -2085,7 +2093,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
 // option setting.
 TEST_F(Dhcp4ParserTest, optionDataInSingleSubnet) {
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"option-data\": [ {"
@@ -2239,7 +2247,7 @@ TEST_F(Dhcp4ParserTest, optionDataBoolean) {
 // for multiple subnets.
 TEST_F(Dhcp4ParserTest, optionDataInMultipleSubnets) {
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -2513,7 +2521,7 @@ TEST_F(Dhcp4ParserTest, stdOptionDataEncapsulate) {
     // In the first stage we create definitions of suboptions
     // that we will add to the base option.
     // Let's create some dummy options: foo and foo2.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"valid-lifetime\": 4000,"
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
@@ -2569,7 +2577,7 @@ TEST_F(Dhcp4ParserTest, stdOptionDataEncapsulate) {
     // We add our dummy options to this option space and thus
     // they should be included as sub-options in the 'vendor-opts'
     // option.
-    config = "{ \"interfaces\": [ \"*\" ],"
+    config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
         "\"option-data\": [ {"
@@ -2676,7 +2684,7 @@ TEST_F(Dhcp4ParserTest, vendorOptionsHex) {
     // This configuration string is to configure two options
     // sharing the code 1 and belonging to the different vendor spaces.
     // (different vendor-id values).
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"valid-lifetime\": 4000,"
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
@@ -2735,7 +2743,7 @@ TEST_F(Dhcp4ParserTest, vendorOptionsCsv) {
     // This configuration string is to configure two options
     // sharing the code 1 and belonging to the different vendor spaces.
     // (different vendor-id values).
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"valid-lifetime\": 4000,"
         "\"rebind-timer\": 2000,"
         "\"renew-timer\": 1000,"
@@ -2799,7 +2807,9 @@ buildHooksLibrariesConfig(const std::vector<std::string>& libraries) {
 
     // Create the first part of the configuration string.
     string config =
-        "{ \"interfaces\": [ \"*\" ],"
+        "{  \"interfaces-config\": {"
+            "    \"interfaces\": [ \"*\" ]"
+            "},"
             "\"hooks-libraries\": [";
 
     // Append the libraries (separated by commas if needed)
@@ -2939,7 +2949,9 @@ TEST_F(Dhcp4ParserTest, selectedInterfaces) {
     IfaceMgrTestConfig test_config(true);
 
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"eth0\", \"eth1\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"eth0\", \"eth1\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"valid-lifetime\": 4000 }";
@@ -2976,7 +2988,9 @@ TEST_F(Dhcp4ParserTest, allInterfaces) {
     // but it also includes asterisk. The asterisk switches server into the
     // mode when it listens on all interfaces regardless of what interface names
     // were specified in the "interfaces" parameter.
-    string config = "{ \"interfaces\": [ \"eth0\", \"*\", \"eth1\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"eth0\", \"*\", \"eth1\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"valid-lifetime\": 4000 }";
@@ -3008,7 +3022,9 @@ TEST_F(Dhcp4ParserTest, selectedInterfacesAndAddresses) {
     IfaceMgrTestConfig test_config(true);
 
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"eth0/10.0.0.1\", \"eth1/192.0.2.3\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"eth0/10.0.0.1\", \"eth1/192.0.2.3\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"valid-lifetime\": 4000 }";
@@ -3053,7 +3069,7 @@ TEST_F(Dhcp4ParserTest, d2ClientConfig) {
     // Verify that the convenience method agrees.
     ASSERT_FALSE(CfgMgr::instance().ddnsEnabled());
 
-    string config_str = "{ \"interfaces\": [ \"*\" ],"
+    string config_str = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -3118,7 +3134,7 @@ TEST_F(Dhcp4ParserTest, invalidD2ClientConfig) {
 
     // Configuration string with an invalid D2 client config,
     // "server-ip" is invalid.
-    string config_str = "{ \"interfaces\": [ \"*\" ],"
+    string config_str = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -3164,7 +3180,7 @@ TEST_F(Dhcp4ParserTest, subnetRelayInfo) {
     ConstElementPtr status;
 
     // A config with relay information.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -3195,7 +3211,7 @@ TEST_F(Dhcp4ParserTest, subnetRelayInfo) {
 // with defined client classes.
 TEST_F(Dhcp4ParserTest, classifySubnets) {
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -3281,7 +3297,7 @@ TEST_F(Dhcp4ParserTest, classifySubnets) {
 // respective IPv4 subnets.
 TEST_F(Dhcp4ParserTest, reservations) {
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ "
@@ -3401,7 +3417,7 @@ TEST_F(Dhcp4ParserTest, reservations) {
 TEST_F(Dhcp4ParserTest, reservationBogus) {
     // Case 1: misspelled hw-address parameter.
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ "
@@ -3427,7 +3443,7 @@ TEST_F(Dhcp4ParserTest, reservationBogus) {
     checkResult(x, 1);
 
     // Case 2: DUID and HW Address both specified.
-    config = "{ \"interfaces\": [ \"*\" ],"
+    config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ "
@@ -3455,7 +3471,7 @@ TEST_F(Dhcp4ParserTest, reservationBogus) {
     checkResult(x, 1);
 
     // Case 3: Neither ip address nor hostname specified.
-    config = "{ \"interfaces\": [ \"*\" ],"
+    config = "{ " + genIfaceConfig() + "," +
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ "
index 53cb7a6033f2ce703ecb5264d4f15b69038bb95c..636fc01abc46b4c93d62d2d136511a83b5827f15 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -74,7 +74,9 @@ Dhcp4SrvD2Test::buildTestNcr(uint32_t dhcid_id_num) {
 
 void
 Dhcp4SrvD2Test::reset() {
-    std::string config = "{ \"interfaces\": [ \"*\" ],"
+    std::string config = "{ \"interfaces-config\": {"
+            "    \"interfaces\": [ \"*\" ]"
+            "},"
             "\"hooks-libraries\": [ ], "
             "\"rebind-timer\": 2000, "
             "\"renew-timer\": 1000, "
@@ -95,7 +97,9 @@ Dhcp4SrvD2Test::configureD2(bool enable_d2, const bool exp_result,
                             const size_t max_queue_size) {
     std::ostringstream config;
     config <<
-        "{ \"interfaces\": [ \"*\" ],"
+        "{ \"interfaces-config\": {"
+        "      \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
index a42d50c96df1a14dd7b008dae37380ab90bda0b4..4bf8fb67b1abe69f0b34ee230e11d731f199324c 100755 (executable)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 #
 # Permission to use, copy, modify, and/or distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -22,7 +22,9 @@ EXPECTED_VERSION="@PACKAGE_VERSION@"
 CONFIG="{
     \"Dhcp4\":
     {
-        \"interfaces\": [ ],
+        \"interfaces-config\": {
+            \"interfaces\": [ ]
+        },
         \"valid-lifetime\": 4000,
         \"renew-timer\": 1000,
         \"rebind-timer\": 2000,
@@ -58,7 +60,9 @@ CONFIG="{
 CONFIG_INVALID="{
     \"Dhcp4\":
     {
-        \"interfaces\": [ ],
+        \"interfaces-config\": {
+            \"interfaces\": [ ]
+        },
         \"valid-lifetime\": -3,
         \"renew-timer\": 1000,
         \"rebind-timer\": 2000,
index 5db09cf910e609c4c9043999c65f0624a601103e..d433f4200d67de7f826dc2f85cb5cb65b6450bd9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -1142,7 +1142,9 @@ TEST_F(Dhcpv4SrvTest, relayAgentInfoEcho) {
     // subnet 10.254.226.0/24 is in use, because this packet
     // contains the giaddr which belongs to this subnet and
     // this giaddr is used to select the subnet
-    std::string config = "{ \"interfaces\": [ \"*\" ],"
+    std::string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -1202,7 +1204,9 @@ TEST_F(Dhcpv4SrvTest, vendorOptionsDocsis) {
 
     NakedDhcpv4Srv srv(0);
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "    \"option-data\": [ {"
@@ -1460,7 +1464,9 @@ TEST_F(Dhcpv4SrvTest, nextServerOverride) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"next-server\": \"192.0.0.1\", "
@@ -1507,7 +1513,9 @@ TEST_F(Dhcpv4SrvTest, nextServerGlobal) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"next-server\": \"192.0.0.1\", "
@@ -2501,7 +2509,9 @@ TEST_F(HooksDhcpv4SrvTest, subnet4SelectSimple) {
 
     // Configure 2 subnets, both directly reachable over local interface
     // (let's not complicate the matter with relays)
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -2570,7 +2580,9 @@ TEST_F(HooksDhcpv4SrvTest, subnet4SelectChange) {
 
     // Configure 2 subnets, both directly reachable over local interface
     // (let's not complicate the matter with relays)
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -2987,7 +2999,9 @@ TEST_F(Dhcpv4SrvTest, vendorOptionsORO) {
     NakedDhcpv4Srv srv(0);
 
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "    \"option-data\": [ {"
@@ -3074,7 +3088,9 @@ TEST_F(Dhcpv4SrvTest, vendorOptionsORO) {
 // src/lib/dhcp/docsis3_option_defs.h.
 TEST_F(Dhcpv4SrvTest, vendorOptionsDocsisDefinitions) {
     ConstElementPtr x;
-    string config_prefix = "{ \"interfaces\": [ \"*\" ],"
+    string config_prefix = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "    \"option-data\": [ {"
@@ -3163,7 +3179,9 @@ TEST_F(Dhcpv4SrvTest, clientClassify2) {
     // The second subnet does not play any role here. The client's
     // IP address belongs to the first subnet, so only that first
     // subnet it being tested.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ "
@@ -3211,7 +3229,9 @@ TEST_F(Dhcpv4SrvTest, relayOverride) {
     // defined. Both are not belonging to the subnets. That is
     // important, because if the relay belongs to the subnet, there's
     // no need to specify relay override.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ "
@@ -3287,7 +3307,9 @@ TEST_F(Dhcpv4SrvTest, relayOverrideAndClientClass) {
     // This test configures 2 subnets. They both are on the same link, so they
     // have the same relay-ip address. Furthermore, the first subnet is
     // reserved for clients that belong to class "foo".
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ "
index 8554d20c3ca2d9fc1136758334815a8736e23536..f1af89a4a3268ca68442b019460fc4eb4862c24c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -116,7 +116,9 @@ DirectClientTest::DirectClientTest() : Dhcpv4SrvTest() {
 void
 DirectClientTest::configureSubnet(const std::string& prefix) {
     std::ostringstream config;
-    config << "{ \"interfaces\": [ \"*\" ],"
+    config << "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"option-data\": [ ],"
@@ -137,7 +139,9 @@ void
 DirectClientTest::configureTwoSubnets(const std::string& prefix1,
                                       const std::string& prefix2) {
     std::ostringstream config;
-    config << "{ \"interfaces\": [ \"*\" ],"
+    config << "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"option-data\": [ ],"
index 8716259564a16cad03c1b39ae3007c5dc8134d6f..9062a57f15c9c23908cfa2d2ebb7be7966720b17 100644 (file)
@@ -59,7 +59,9 @@ namespace {
 ///     aa:bb:cc:dd:ee:ff, reserved address 10.0.0.7
 const char* DORA_CONFIGS[] = {
 // Configuration 0
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "      \"interfaces\": [ \"*\" ]"
+        "},"
         "\"valid-lifetime\": 600,"
         "\"subnet4\": [ { "
         "    \"subnet\": \"10.0.0.0/24\", "
@@ -97,7 +99,10 @@ const char* DORA_CONFIGS[] = {
     "}",
 
 // Configuration 1
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "      \"interfaces\": [ \"*\" ]"
+        "},"
+
         "\"valid-lifetime\": 600,"
         "\"subnet4\": [ { "
         "    \"subnet\": \"192.0.2.0/24\", "
@@ -133,7 +138,9 @@ const char* DORA_CONFIGS[] = {
     "}",
 
 // Configuration 2
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "      \"interfaces\": [ \"*\" ]"
+        "},"
         "\"valid-lifetime\": 600,"
         "\"subnet4\": [ { "
         "    \"subnet\": \"10.0.0.0/24\", "
index dca20c3fda4f4a4240d62edc54b1ab639376a888..5dfa543d8ed0a09acb93d508db42a82ada042ab1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014  Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -48,7 +48,9 @@ namespace {
 ///   - Quotes Servers option present: 192.0.2.202, 192.0.2.203.
 const char* INFORM_CONFIGS[] = {
 // Configuration 0
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "      \"interfaces\": [ \"*\" ]"
+        "},"
         "\"valid-lifetime\": 600,"
         "\"subnet4\": [ { "
         "    \"subnet\": \"10.0.0.0/24\", "
@@ -85,7 +87,9 @@ const char* INFORM_CONFIGS[] = {
     "}",
 
 // Configuration 1
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "      \"interfaces\": [ \"*\" ]"
+        "},"
         "\"valid-lifetime\": 600,"
         "\"subnet4\": [ { "
         "    \"subnet\": \"192.0.2.0/24\", "
index 1bdeb548338a0e1dd9240ec00aa3ed7541faa36f..d98621ed0e962a261cd4df56a018c351a218a4d9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -87,7 +87,10 @@ const char* JSONFileBackendTest::TEST_FILE  = "test-config.json";
 TEST_F(JSONFileBackendTest, jsonFile) {
 
     // Prepare configuration file.
-    string config = "{ \"Dhcp4\": { \"interfaces\": [ \"*\" ],"
+    string config = "{ \"Dhcp4\": {"
+        "\"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet4\": [ { "
@@ -162,7 +165,10 @@ TEST_F(JSONFileBackendTest, comments) {
 
     string config_hash_comments = "# This is a comment. It should be \n"
         "#ignored. Real config starts in line below\n"
-        "{ \"Dhcp4\": { \"interfaces\": [ \"*\" ],"
+        "{ \"Dhcp4\": {"
+        "\"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, \n"
         "# comments in the middle should be ignored, too\n"
index 920842c9b246be68acebc064dfa49106fc055a74..a6a36b6167358b05d896bfb123f56891f05d7855 100644 (file)
@@ -597,7 +597,7 @@ namespace dhcp {
         (config_id.compare("rebind-timer") == 0))  {
         parser = new Uint32Parser(config_id,
                                  globalContext()->uint32_values_);
-    } else if (config_id.compare("interface-config") == 0) {
+    } else if (config_id.compare("interfaces-config") == 0) {
         parser = new IfacesConfigParser6();
     } else if (config_id.compare("subnet6") == 0) {
         parser = new Subnets6ListConfigParser(config_id);
@@ -697,7 +697,7 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) {
                 // committed.
                 hooks_parser = parser;
                 hooks_parser->build(config_pair.second);
-            } else if (config_pair.first == "interface-config") {
+            } else if (config_pair.first == "interfaces-config") {
                 // The interface parser is independent from any other parser and
                 // can be run here before other parsers.
                 parser->build(config_pair.second);
index 28f02a648ec172d78c9e6295edd5703bd044e4cc..3d39c56d0d8499036b291511f09c24a2e009091f 100644 (file)
@@ -129,7 +129,7 @@ public:
     /// @brief Returns an interface configuration used by the most of the
     /// unit tests.
     std::string genIfaceConfig() const {
-        return ("\"interface-config\": {"
+        return ("\"interfaces-config\": {"
                 "  \"interfaces\": [ \"*\" ]"
                 "}");
     }
@@ -1402,7 +1402,7 @@ TEST_F(Dhcp6ParserTest, invalidPdPools) {
 
     const char *config[] =  {
         // No prefix.
-        "{ \"interface-config\": { },"
+        "{ \"interfaces-config\": { },"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -1416,7 +1416,7 @@ TEST_F(Dhcp6ParserTest, invalidPdPools) {
         "\"valid-lifetime\": 4000 }"
         "] }",
         // No prefix-len.
-        "{ \"interface-config\": { },"
+        "{ \"interfaces-config\": { },"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -1429,7 +1429,7 @@ TEST_F(Dhcp6ParserTest, invalidPdPools) {
         "\"valid-lifetime\": 4000 }"
         "] }",
         // No delegated-len.
-        "{ \"interface-config\": { },"
+        "{ \"interfaces-config\": { },"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -1442,7 +1442,7 @@ TEST_F(Dhcp6ParserTest, invalidPdPools) {
         "\"valid-lifetime\": 4000 }"
         "] }",
         // Delegated length is too short.
-        "{ \"interface-config\": { },"
+        "{ \"interfaces-config\": { },"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -2939,7 +2939,7 @@ buildHooksLibrariesConfig(const std::vector<std::string>& libraries) {
 
     // Create the first part of the configuration string.
     string config =
-        "{ \"interface-config\": { },"
+        "{ \"interfaces-config\": { },"
            "\"hooks-libraries\": [";
 
     // Append the libraries (separated by commas if needed)
@@ -3087,7 +3087,7 @@ TEST_F(Dhcp6ParserTest, selectedInterfaces) {
 
     ConstElementPtr status;
 
-    string config = "{ \"interface-config\": {"
+    string config = "{ \"interfaces-config\": {"
         "  \"interfaces\": [ \"eth0\" ]"
         "},"
         "\"preferred-lifetime\": 3000,"
@@ -3126,7 +3126,7 @@ TEST_F(Dhcp6ParserTest, allInterfaces) {
     // but also includes '*'. This keyword switches server into the
     // mode when it listens on all interfaces regardless of what interface names
     // were specified in the "interfaces" parameter.
-    string config = "{ \"interface-config\": {"
+    string config = "{ \"interfaces-config\": {"
         "  \"interfaces\": [ \"eth0\", \"eth1\", \"*\" ]"
         "},"
         "\"preferred-lifetime\": 3000,"
index d70c9001f9abcf8b88b7ac80eab110551813b336..bad423c22f651ba01441a8e234984dceae210987 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -42,7 +42,9 @@ namespace {
 ///
 const char* CONFIRM_CONFIGS[] = {
 // Configuration 0
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -61,7 +63,9 @@ const char* CONFIRM_CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
 // Configuration 1
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
index cfabee58d483d03eef175bc2a614c81458294022..110adc8fbb99052dfa9f21ab5adff85bff290c11 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2013 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2013,2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -160,7 +160,9 @@ TEST_F(CtrlDhcpv6SrvTest, configReload) {
 
     // Use empty parameters list
     // Prepare configuration file.
-    string config_txt = "{ \"interfaces\": [ \"*\" ],"
+    string config_txt = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
index 34ffd71c364a941a1e6edde8f77d3638189cb694..a2896e229b620a176a4b6cc1488448f5c7e844ab 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -75,7 +75,9 @@ Dhcp6SrvD2Test::buildTestNcr(uint32_t dhcid_id_num) {
 
 void
 Dhcp6SrvD2Test::reset() {
-    std::string config = "{ \"interfaces\": [ \"*\" ],"
+    std::string config = "{ \"interfaces-config\": {"
+            "  \"interfaces\": [ \"*\" ]"
+            "},"
             "\"hooks-libraries\": [ ],"
             "\"preferred-lifetime\": 3000,"
             "\"rebind-timer\": 2000, "
@@ -97,7 +99,9 @@ Dhcp6SrvD2Test::configureD2(bool enable_d2, const bool exp_result,
                             const size_t max_queue_size) {
     std::ostringstream config;
     config <<
-        "{ \"interfaces\": [ \"*\" ],"
+        "{ \"interfaces-config\": {"
+        "    \"interfaces\": [ \"*\" ]"
+        "},"
         "\"hooks-libraries\": [ ],"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
index 15aaa794c45509d590e3a93699887598aadfbeb1..fd3e6065db9012e55812d00ec90639a76ce80d9e 100755 (executable)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 #
 # Permission to use, copy, modify, and/or distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -21,8 +21,9 @@ EXPECTED_VERSION="@PACKAGE_VERSION@"
 # Kea configuration to be stored in the configuration file.
 CONFIG="{
     \"Dhcp6\":
-    {
-        \"interfaces\": [ ],
+    {   \"interfaces-config\": {
+          \"interfaces\": [ ]
+        },
         \"preferred-lifetime\": 3000,
         \"valid-lifetime\": 4000,
         \"renew-timer\": 1000,
index f47b84bb3fffa80c38245a20d11ef6278c140867..869be4c72898c73889646814ce160d5caae5786a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2015  Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -286,7 +286,9 @@ TEST_F(Dhcpv6SrvTest, advertiseOptions) {
     IfaceMgrTestConfig test_config(true);
 
     ConstElementPtr x;
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -1569,7 +1571,9 @@ TEST_F(Dhcpv6SrvTest, vendorOptionsORO) {
 
     IfaceMgrTestConfig test_config(true);
 
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -1654,7 +1658,9 @@ TEST_F(Dhcpv6SrvTest, vendorOptionsORO) {
 // src/lib/dhcp/docsis3_option_defs.h.
 TEST_F(Dhcpv6SrvTest, vendorOptionsDocsisDefinitions) {
     ConstElementPtr x;
-    string config_prefix = "{ \"interfaces\": [ \"*\" ],"
+    string config_prefix = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -1820,7 +1826,9 @@ TEST_F(Dhcpv6SrvTest, clientClassify2) {
     // The second subnet does not play any role here. The client's
     // IP address belongs to the first subnet, so only that first
     // subnet it being tested.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -1925,7 +1933,9 @@ TEST_F(Dhcpv6SrvTest, relayOverride) {
     // defined. Both are not belonging to the subnets. That is
     // important, because if the relay belongs to the subnet, there's
     // no need to specify relay override.
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -2001,7 +2011,9 @@ TEST_F(Dhcpv6SrvTest, relayOverrideAndClientClass) {
     // This test configures 2 subnets. They both are on the same link, so they
     // have the same relay-ip address. Furthermore, the first subnet is
     // reserved for clients that belong to class "foo".
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
index ec1ac067a0af27b89d48ac368d60e9615f9ced9f..40c3de83cfc9a005968001d228f785fbfd4fd517 100644 (file)
@@ -900,7 +900,9 @@ TEST_F(HooksDhcpv6SrvTest, subnet6_select) {
 
     // Configure 2 subnets, both directly reachable over local interface
     // (let's not complicate the matter with relays)
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -971,7 +973,9 @@ TEST_F(HooksDhcpv6SrvTest, subnet_select_change) {
 
     // Configure 2 subnets, both directly reachable over local interface
     // (let's not complicate the matter with relays)
-    string config = "{ \"interfaces\": [ \"*\" ],"
+    string config = "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
index 9571ed9e8c8aeaafe9f46bfda12dbae5b806b42e..ead363642ddb464a44af44344f40489f309a4f18 100644 (file)
@@ -45,7 +45,9 @@ namespace {
 ///   - no subnets defined
 const char* CONFIGS[] = {
     // Configuration 0
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -66,7 +68,9 @@ const char* CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
     // Configuration 1
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -81,7 +85,9 @@ const char* CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
     // Configuration 2
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -100,7 +106,9 @@ const char* CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
     // Configuration 3
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"option-data\": [ {"
         "    \"name\": \"nis-servers\","
         "    \"data\": \"2001:db8::1, 2001:db8::2\""
index ba78cdcb4222fe10c2e75f00cd72c0a742b338a9..dfed9fc4d10afffba1bf4714ffe6fb677f8b6160 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -75,7 +75,10 @@ const char* JSONFileBackendTest::TEST_FILE = "test-config.json";
 TEST_F(JSONFileBackendTest, jsonFile) {
 
     // Prepare configuration file.
-    string config = "{ \"Dhcp6\": { \"interfaces\": [ \"*\" ],"
+    string config = "{ \"Dhcp6\": {"
+        "\"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -150,7 +153,10 @@ TEST_F(JSONFileBackendTest, comments) {
 
     string config_hash_comments = "# This is a comment. It should be \n"
         "#ignored. Real config starts in line below\n"
-        "{ \"Dhcp6\": { \"interfaces\": [ \"*\" ],"
+        "{ \"Dhcp6\": {"
+        "\"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, \n"
index 5a47c3972bc170015c6ce35cbf1dfc1f8655f321..bef34911c4772613cc2c184f21b58e8162cdcd92 100644 (file)
@@ -64,7 +64,9 @@ namespace {
 ///   - this specific configuration is used by tests which don't use relays
 const char* REBIND_CONFIGS[] = {
 // Configuration 0
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -83,7 +85,9 @@ const char* REBIND_CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
 // Configuration 1
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -102,7 +106,9 @@ const char* REBIND_CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
 // Configuration 2
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -121,7 +127,9 @@ const char* REBIND_CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
 // Configuration 3
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -140,7 +148,9 @@ const char* REBIND_CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
 // Configuration 4
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
@@ -167,7 +177,9 @@ const char* REBIND_CONFIGS[] = {
         "\"valid-lifetime\": 4000 }",
 
 // Configuration 5
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
index cd74d8f47d6ee3801e3461d285e8b1ba4f742b0e..caec258eb1c3edf8f6eaddbdfad5e6f0b7355498 100644 (file)
@@ -34,7 +34,9 @@ namespace {
 ///     match the subnet prefix
 const char* CONFIGS[] = {
     // Configuration 0
-    "{ \"interfaces\": [ \"*\" ],"
+    "{ \"interfaces-config\": {"
+        "  \"interfaces\": [ \"*\" ]"
+        "},"
         "\"preferred-lifetime\": 3000,"
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
index 526b6da91a7f500ab24a78bdd015489c6e10a51d..32737b22929687405cad0540931649e182789cfa 100644 (file)
@@ -9,7 +9,9 @@
 "Dhcp4":
 {
 # Add names of interfaces to listen on.
-  "interfaces": [ ],
+  "interfaces-config:" {
+    "interfaces": [ ]
+  },
 
 # Use Memfile lease database backend to store leases in a CSV file.
   "lease-database": {
@@ -34,7 +36,9 @@
 "Dhcp6":
 {
 # Add names of interfaces to listen on.
-  "interfaces": [ ],
+  "interfaces-config:" {
+    "interfaces": [ ]
+  },
 
 # Use Memfile lease database backend to store leases in a CSV file.
   "lease-database": {
index 79ab7129c110eb4e3843f9c2dc9b2b42709aacb2..ca849397d3c507c77343604d973f4f5260153772 100644 (file)
@@ -35,7 +35,9 @@ d2_name="${wildcard_name}-ddns"
 config="{
     \"Dhcp4\":
     {
-        \"interfaces\": [ ],
+        \"interfaces-config\": {
+            \"interfaces\": [ ]
+        },
         \"valid-lifetime\": 4000,
         \"renew-timer\": 1000,
         \"rebind-timer\": 2000,
@@ -52,7 +54,9 @@ config="{
     },
     \"Dhcp6\":
     {
-        \"interfaces\": [ ],
+        \"interfaces-config\": {
+            \"interfaces\": [ ]
+        },
         \"preferred-lifetime\": 3000,
         \"valid-lifetime\": 4000,
         \"renew-timer\": 1000,
index 6f2037e86649e3b370cc5edb8ba71d88b6948026..8e997589ac93edf04b69318536ab0b945eae9c62 100644 (file)
@@ -24,8 +24,8 @@ namespace dhcp {
 
 /// @brief Parser for interface list definition.
 ///
-/// This parser handles Dhcp4/interface-config/interfaces and
-/// Dhcp6/interface-config/interfaces entries.
+/// This parser handles Dhcp4/interfaces-config/interfaces and
+/// Dhcp6/interfaces-config/interfaces entries.
 /// It contains a list of network interfaces that the server listens on.
 /// In particular, it can contain an "*" that designates all interfaces.
 class InterfaceListConfigParser : public DhcpConfigParser {
@@ -66,7 +66,7 @@ private:
 
 /// @brief Parser for the configuration of interfaces.
 ///
-/// This parser parses the "interface-config" parameter which holds the
+/// This parser parses the "interfaces-config" parameter which holds the
 /// full configuration of the DHCP server with respect to the use of
 /// interfaces, sockets and alike.
 ///
@@ -84,9 +84,9 @@ public:
     /// @param protocol AF_INET for DHCPv4 and AF_INET6 for DHCPv6.
     IfacesConfigParser(const int protocol);
 
-    /// @brief Parses generic parameters in "interface-config".
+    /// @brief Parses generic parameters in "interfaces-config".
     ///
-    /// The generic parameters in the "interface-config" map are
+    /// The generic parameters in the "interfaces-config" map are
     /// the ones that are common for DHCPv4 and DHCPv6.
     ///
     /// @param ifaces_config A data element holding configuration of
@@ -116,7 +116,7 @@ private:
 };
 
 
-/// @brief Parser for the "interface-config" parameter of the DHCPv4 server.
+/// @brief Parser for the "interfaces-config" parameter of the DHCPv4 server.
 class IfacesConfigParser4 : public IfacesConfigParser {
 public:
 
@@ -139,7 +139,7 @@ public:
 
 };
 
-/// @brief Parser for the "interface-config" parameter of the DHCPv4 server.
+/// @brief Parser for the "interfaces-config" parameter of the DHCPv4 server.
 class IfacesConfigParser6 : public IfacesConfigParser {
 public: