diff options
Diffstat (limited to 'src/bin/dhcp6/tests')
-rw-r--r-- | src/bin/dhcp6/tests/config_parser_unittest.cc | 183 | ||||
-rw-r--r-- | src/bin/dhcp6/tests/fqdn_unittest.cc | 128 | ||||
-rw-r--r-- | src/bin/dhcp6/tests/get_config_unittest.cc | 592 |
3 files changed, 871 insertions, 32 deletions
diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index 015c697152..b534825560 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -9284,4 +9284,187 @@ TEST_F(Dhcp6ParserTest, deprecatedClientClassesCheck) { " and 'client-classes'. Use only the latter."); } +// Verifies ddns-ttl-percent is supported at global, +// shared-network, and subnet scopes. +TEST_F(Dhcp6ParserTest, ddnsTtlPercent) { + string config = R"( + { + "ddns-ttl-percent": 0.75, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl-percent": 0.50, + "subnet6": [{ + "id": 1, + "subnet": "2001:db8:1::/64", + "ddns-ttl-percent": 0.25 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP6(config)); + extractConfig(config); + + ConstElementPtr status; + ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json)); + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet6Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets6()->selectSubnet(IOAddress("2001:db8:1::")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtlPercent(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(0.25, subnet->getDdnsTtlPercent(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtlPercent(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(0.50, subnet->getDdnsTtlPercent(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtlPercent(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(0.75, subnet->getDdnsTtlPercent(Network::Inheritance::GLOBAL).get()); +} + +// Verifies ddns-ttl is supported at global, +// shared-network, and subnet scopes. +TEST_F(Dhcp6ParserTest, ddnsTtl) { + string config = R"( + { + "ddns-ttl": 750, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl": 500, + "subnet6": [{ + "id": 1, + "subnet": "2001:db8:1::/64", + "ddns-ttl": 250 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP6(config)); + extractConfig(config); + + ConstElementPtr status; + ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json)); + + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet6Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets6()->selectSubnet(IOAddress("2001:db8:1::")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtl(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(250, subnet->getDdnsTtl(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtl(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(500, subnet->getDdnsTtl(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtl(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(750, subnet->getDdnsTtl(Network::Inheritance::GLOBAL).get()); +} + +// Verifies ddns-ttl-min is supported at global, +// shared-network, and subnet scopes. +TEST_F(Dhcp6ParserTest, ddnsTtlMin) { + string config = R"( + { + "ddns-ttl-min": 750, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl-min": 500, + "subnet6": [{ + "id": 1, + "subnet": "2001:db8:1::/64", + "ddns-ttl-min": 250 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP6(config)); + extractConfig(config); + + ConstElementPtr status; + ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json)); + + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet6Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets6()->selectSubnet(IOAddress("2001:db8:1::")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtlMin(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(250, subnet->getDdnsTtlMin(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMin(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(500, subnet->getDdnsTtlMin(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMin(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(750, subnet->getDdnsTtlMin(Network::Inheritance::GLOBAL).get()); +} + +// Verifies ddns-ttl-max is supported at global, +// shared-network, and subnet scopes. +TEST_F(Dhcp6ParserTest, ddnsTtlMax) { + string config = R"( + { + "ddns-ttl-max": 750, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl-max": 500, + "subnet6": [{ + "id": 1, + "subnet": "2001:db8:1::/64", + "ddns-ttl-max": 250 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP6(config)); + extractConfig(config); + + ConstElementPtr status; + ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json)); + + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet6Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets6()->selectSubnet(IOAddress("2001:db8:1::")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtlMax(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(250, subnet->getDdnsTtlMax(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMax(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(500, subnet->getDdnsTtlMax(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMax(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(750, subnet->getDdnsTtlMax(Network::Inheritance::GLOBAL).get()); +} + } // namespace diff --git a/src/bin/dhcp6/tests/fqdn_unittest.cc b/src/bin/dhcp6/tests/fqdn_unittest.cc index dfc977ba70..8634e79005 100644 --- a/src/bin/dhcp6/tests/fqdn_unittest.cc +++ b/src/bin/dhcp6/tests/fqdn_unittest.cc @@ -617,6 +617,9 @@ public: /// @param exp_cr_mode expected value of NCR::conflict_resolution_mode_ /// @param ddns_ttl_percent expected value of ddns_ttl_percent used for /// the NCR + /// @param exp_ddns_ttl expected configured value for ddns-ttl + /// @param exp_ddns_ttl_min expected configured value for ddns-ttl-min + /// @param exp_ddns_ttl_max expected configured value for ddns-ttl-max void verifyNameChangeRequest(const isc::dhcp_ddns::NameChangeType type, const bool reverse, const bool forward, const std::string& addr, @@ -626,7 +629,10 @@ public: const std::string& fqdn = "", const ConflictResolutionMode exp_cr_mode = CHECK_WITH_DHCID, util::Optional<double> exp_ddns_ttl_percent - = util::Optional<double>()) { + = util::Optional<double>(), + Optional<uint32_t> exp_ddns_ttl = Optional<uint32_t>(), + Optional<uint32_t> exp_ddns_ttl_min = Optional<uint32_t>(), + Optional<uint32_t> exp_ddns_ttl_max = Optional<uint32_t>()) { NameChangeRequestPtr ncr; ASSERT_NO_THROW(ncr = d2_mgr_.peekAt(0)); ASSERT_TRUE(ncr); @@ -639,7 +645,8 @@ public: EXPECT_EQ(dhcid, ncr->getDhcid().toStr()); } - uint32_t ttl = calculateDdnsTtl(valid_lft, exp_ddns_ttl_percent); + uint32_t ttl = calculateDdnsTtl(valid_lft, exp_ddns_ttl_percent, exp_ddns_ttl, + exp_ddns_ttl_min, exp_ddns_ttl_max); if (expires != 0) { EXPECT_EQ(expires + ttl, ncr->getLeaseExpiresOn()); } @@ -688,6 +695,66 @@ public: ASSERT_TRUE(pool); } + /// @brief Verifies that DDNS TTL parameters are used when specified. + /// + /// @param valid_flt lease life time + /// @param ddns_ttl_percent expected configured value for ddns-ttl-percent + /// @param ddns_ttl expected configured value for ddns-ttl + /// @param ddns_ttl_min expected configured value for ddns-ttl-min + /// @param ddns_ttl_max expected configured value for ddns-ttl-max + void testDdnsTtlParameters(uint32_t valid_lft, + Optional<double> ddns_ttl_percent = Optional<double>(), + Optional<uint32_t> ddns_ttl = Optional<uint32_t>(), + Optional<uint32_t> ddns_ttl_min = Optional<uint32_t>(), + Optional<uint32_t> ddns_ttl_max = Optional<uint32_t>()) { + + // Create Reply message with Client Id and Server id. + Pkt6Ptr answer = generateMessageWithIds(DHCPV6_REPLY); + + // Create NameChangeRequest for the first allocated address. + AllocEngine::ClientContext6 ctx; + subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid"); + subnet_->setDdnsTtlPercent(ddns_ttl_percent); + subnet_->setDdnsTtl(ddns_ttl); + subnet_->setDdnsTtlMin(ddns_ttl_min); + subnet_->setDdnsTtlMax(ddns_ttl_max); + + ctx.subnet_ = subnet_; + ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true; + + // Create an IA. + Option6IAPtr opt_ia = generateIA(D6O_IA_NA, 1234, 1500, 3000); + Option6IAAddrPtr opt_iaaddr(new Option6IAAddr(D6O_IAADDR, + IOAddress("2001:db8:1::1"), + valid_lft, valid_lft)); + opt_ia->addOption(opt_iaaddr); + answer->addOption(opt_ia); + ctx.createIAContext(); + ctx.currentIA().ia_rsp_ = opt_ia; + + // Use domain name in upper case. It should be converted to lower-case + // before DHCID is calculated. So, we should get the same result as if + // we typed domain name in lower-case. + Option6ClientFqdnPtr fqdn = createClientFqdn(Option6ClientFqdn::FLAG_S, + "MYHOST.EXAMPLE.COM", + Option6ClientFqdn::FULL); + answer->addOption(fqdn); + + ASSERT_NO_THROW(srv_->createNameChangeRequests(answer, ctx)); + ASSERT_EQ(1, d2_mgr_.getQueueSize()); + + // Verify that NameChangeRequest is correct. + verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true, + "2001:db8:1::1", + "000201415AA33D1187D148275136FA30300478" + "FAAAA3EBD29826B5C907B2C9268A6F52", + 0, valid_lft, "", NO_CHECK_WITH_DHCID, + ddns_ttl_percent, + ddns_ttl, + ddns_ttl_min, + ddns_ttl_max); + } + /// Pointer to Dhcpv6Srv that is used in tests boost::scoped_ptr<NakedDhcpv6Srv> srv_; @@ -2161,39 +2228,36 @@ TEST_F(FqdnDhcpv6SrvTest, processRequestRenew) { } } -// Verify that when specified ddns-ttl-percent is used to calculate -// the lease length in an NCR. -TEST_F(FqdnDhcpv6SrvTest, ddnsTtlPercent) { - // Create Reply message with Client Id and Server id. - Pkt6Ptr answer = generateMessageWithIds(DHCPV6_REPLY); - - // Create NameChangeRequest for the first allocated address. - AllocEngine::ClientContext6 ctx; - subnet_->setDdnsConflictResolutionMode("no-check-with-dhcid"); - subnet_->setDdnsTtlPercent(Optional<double>(0.10)); - ctx.subnet_ = subnet_; - ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true; - - // Create an IA. - addIA(1234, IOAddress("2001:db8:1::1"), answer, ctx); +// Verify the ddns-ttl-percent is used when specified. +TEST_F(FqdnDhcpv6SrvTest, ddnsTtlPercentTest) { + testDdnsTtlParameters(2100, 0.5); +} - // Use domain name in upper case. It should be converted to lower-case - // before DHCID is calculated. So, we should get the same result as if - // we typed domain name in lower-case. - Option6ClientFqdnPtr fqdn = createClientFqdn(Option6ClientFqdn::FLAG_S, - "MYHOST.EXAMPLE.COM", - Option6ClientFqdn::FULL); - answer->addOption(fqdn); +// Verify the ddns-ttl is used when specified. +TEST_F(FqdnDhcpv6SrvTest, ddnsTtlTest) { + testDdnsTtlParameters(2100, // valid lft + Optional<double>(), // percent + 999, // ttl + Optional<uint32_t>(), // min + Optional<uint32_t>()); // max +} - ASSERT_NO_THROW(srv_->createNameChangeRequests(answer, ctx)); - ASSERT_EQ(1, d2_mgr_.getQueueSize()); +// Verify the ddns-ttl-min is used when specified. +TEST_F(FqdnDhcpv6SrvTest, ddnsTtlMinTest) { + testDdnsTtlParameters(2100, // valid lft + Optional<double>(), // percent + Optional<uint32_t>(), // ttl + 800, // ttl-min + Optional<uint32_t>()); // ttl-max +} - // Verify that NameChangeRequest is correct. - verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true, - "2001:db8:1::1", - "000201415AA33D1187D148275136FA30300478" - "FAAAA3EBD29826B5C907B2C9268A6F52", - 0, 500, "", NO_CHECK_WITH_DHCID, subnet_->getDdnsTtlPercent()); +// Verify the ddns-ttl-max is used when specified. +TEST_F(FqdnDhcpv6SrvTest, ddnsTtlMaxTest) { + testDdnsTtlParameters(2100, // valid lft + Optional<double>(), // percent + Optional<uint32_t>(), // ttl + Optional<uint32_t>(), // ttl-min + 500); // ttl-max } } // end of anonymous namespace diff --git a/src/bin/dhcp6/tests/get_config_unittest.cc b/src/bin/dhcp6/tests/get_config_unittest.cc index e5d68b562d..f68e3464d0 100644 --- a/src/bin/dhcp6/tests/get_config_unittest.cc +++ b/src/bin/dhcp6/tests/get_config_unittest.cc @@ -2627,6 +2627,78 @@ const char* EXTRACTED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"subnet6\": [ ],\n" " \"valid-lifetime\": 400\n" +" }\n", + // CONFIGURATION 80 +"{\n" +" \"ddns-ttl-percent\": 0.75,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl-percent\": 0.5,\n" +" \"name\": \"net\",\n" +" \"subnet6\": [\n" +" {\n" +" \"ddns-ttl-percent\": 0.25,\n" +" \"id\": 1,\n" +" \"subnet\": \"2001:db8:1::/64\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 81 +"{\n" +" \"ddns-ttl\": 750,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl\": 500,\n" +" \"name\": \"net\",\n" +" \"subnet6\": [\n" +" {\n" +" \"ddns-ttl\": 250,\n" +" \"id\": 1,\n" +" \"subnet\": \"2001:db8:1::/64\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 82 +"{\n" +" \"ddns-ttl-min\": 750,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl-min\": 500,\n" +" \"name\": \"net\",\n" +" \"subnet6\": [\n" +" {\n" +" \"ddns-ttl-min\": 250,\n" +" \"id\": 1,\n" +" \"subnet\": \"2001:db8:1::/64\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 83 +"{\n" +" \"ddns-ttl-max\": 750,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl-max\": 500,\n" +" \"name\": \"net\",\n" +" \"subnet6\": [\n" +" {\n" +" \"ddns-ttl-max\": 250,\n" +" \"id\": 1,\n" +" \"subnet\": \"2001:db8:1::/64\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" " }\n" }; @@ -13577,6 +13649,526 @@ const char* UNPARSED_CONFIGS[] = { " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.8,\n" " \"valid-lifetime\": 400\n" +" }\n", + // CONFIGURATION 80 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl-percent\": 0.75,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring6\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"mac-sources\": [ \"any\" ],\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" +" \"relay-supplied-options\": [ \"65\" ],\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-id\": {\n" +" \"enterprise-id\": 0,\n" +" \"htype\": 0,\n" +" \"identifier\": \"\",\n" +" \"persist\": true,\n" +" \"time\": 0,\n" +" \"type\": \"LLT\"\n" +" },\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl-percent\": 0.5,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"rapid-commit\": false,\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl-percent\": 0.25,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"pd-pools\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"2001:db8:1::/64\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 81 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl\": 750,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring6\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"mac-sources\": [ \"any\" ],\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" +" \"relay-supplied-options\": [ \"65\" ],\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-id\": {\n" +" \"enterprise-id\": 0,\n" +" \"htype\": 0,\n" +" \"identifier\": \"\",\n" +" \"persist\": true,\n" +" \"time\": 0,\n" +" \"type\": \"LLT\"\n" +" },\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl\": 500,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"rapid-commit\": false,\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl\": 250,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"pd-pools\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"2001:db8:1::/64\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 82 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl-min\": 750,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring6\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"mac-sources\": [ \"any\" ],\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" +" \"relay-supplied-options\": [ \"65\" ],\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-id\": {\n" +" \"enterprise-id\": 0,\n" +" \"htype\": 0,\n" +" \"identifier\": \"\",\n" +" \"persist\": true,\n" +" \"time\": 0,\n" +" \"type\": \"LLT\"\n" +" },\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl-min\": 500,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"rapid-commit\": false,\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl-min\": 250,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"pd-pools\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"2001:db8:1::/64\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 83 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl-max\": 750,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring6\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"mac-sources\": [ \"any\" ],\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" +" \"relay-supplied-options\": [ \"65\" ],\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-id\": {\n" +" \"enterprise-id\": 0,\n" +" \"htype\": 0,\n" +" \"identifier\": \"\",\n" +" \"persist\": true,\n" +" \"time\": 0,\n" +" \"type\": \"LLT\"\n" +" },\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl-max\": 500,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"rapid-commit\": false,\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"ddns-ttl-max\": 250,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"pd-pools\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"2001:db8:1::/64\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 4000\n" " }\n" }; |