"code": 103,
"type": "string"
}],
- "option-data": [{
+ "option-data": [{
"space": "vendor-4491",
"code": 101,
"csv-format": true,
// Add the ORO sub-option requesting all three sub-options.
boost::shared_ptr<OptionUint8Array> vendor_oro(new OptionUint8Array(Option::V4,
DOCSIS3_V4_ORO));
- vendor_oro->addValue(101);
+ vendor_oro->addValue(101);
vendor_oro->addValue(102);
vendor_oro->addValue(103);
vendor->addOption(vendor_oro);
EXPECT_TRUE(vendor_resp->getOption(103));
}
-// Verifies that a requested VIVCO suboption can be gated by
+// Verifies that a requested VIVCO suboption can be gated by
// option class tagging.
TEST_F(ClassifyTest, vivcoOptionClassTagTest) {
IfaceMgrTestConfig test_config(true);
ASSERT_FALSE(tmp);
}
-// Verifies that requested VIVSO suboption can be gated by
+// Verifies that requested VIVSO suboption can be gated by
// option class tagging.
TEST_F(ClassifyTest, vivsoOptionClassTagTest) {
IfaceMgrTestConfig test_config(true);
tmp = response1->getOption(DHO_DOMAIN_NAME_SERVERS);
EXPECT_TRUE(tmp);
- // Verify that server id is present and is the configured value.
+ // Verify that server id is present and is the configured value.
checkServerIdentifier(response1, "192.0.2.0");
// Try again with a client id that does not match "melon".
}
}
-//This test verifies that duplicates in option-data.client-classes
+// This test verifies that class tagging can occur at any scope.
+TEST_F(Dhcp4ParserTest, classTagging) {
+ std::string config = "{ " + genIfaceConfig() + ","
+ R"^(
+ "option-data": [{
+ "name": "domain-name",
+ "data": "example.com",
+ "client-classes": [ "in-global" ]
+ }],
+ "valid-lifetime": 4000,
+ "rebind-timer": 2000,
+ "renew-timer": 1000,
+ "shared-networks": [{
+ "name": "foo",
+ "subnet4": [{
+ "id": 1,
+ "subnet": "192.0.2.0/24",
+ "option-data": [{
+ "name": "domain-name",
+ "data": "example.com",
+ "client-classes": [ "in-subnet" ]
+ }],
+ "pools": [{
+ "pool": "192.0.2.0/28",
+ "option-data": [{
+ "name": "domain-name",
+ "data": "example.com",
+ "client-classes": [ "in-pool" ]
+ }]
+ }],
+ "reservations": [{
+ "hw-address": "AA:BB:CC:DD:EE:FF",
+ "option-data": [{
+ "name": "domain-name",
+ "data": "example.com",
+ "client-classes": [ "in-reservation" ]
+ }]
+ }]
+ }],
+ "option-data": [{
+ "name": "domain-name",
+ "data": "example.com",
+ "client-classes": [ "in-network" ]
+ }]
+ }],
+ "client-classes": [{
+ "name": "foo",
+ "option-data": [{
+ "name": "domain-name",
+ "data": "example.com",
+ "client-classes": [ "in-class" ]
+ }]
+ }]
+ })^";
+
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP4(config));
+ extractConfig(config);
+
+ ConstElementPtr status;
+ ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+ checkResult(status, 0);
+}
+
+// This test verifies that duplicates in option-data.client-classes
// are ignored and do not affect class order.
TEST_F(Dhcp4ParserTest, optionClientClassesDuplicateCheck) {
std::string config = "{ " + genIfaceConfig() + ","
" }\n"
" ],\n"
" \"valid-lifetime\": 4000\n"
+" }\n",
+ // CONFIGURATION 78
+"{\n"
+" \"client-classes\": [\n"
+" {\n"
+" \"name\": \"foo\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-class\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\"\n"
+" }\n"
+" ]\n"
+" }\n"
+" ],\n"
+" \"interfaces-config\": {\n"
+" \"interfaces\": [ \"*\" ],\n"
+" \"re-detect\": false\n"
+" },\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-global\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\"\n"
+" }\n"
+" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
+" \"shared-networks\": [\n"
+" {\n"
+" \"name\": \"foo\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-network\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\"\n"
+" }\n"
+" ],\n"
+" \"subnet4\": [\n"
+" {\n"
+" \"id\": 1,\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-subnet\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\"\n"
+" }\n"
+" ],\n"
+" \"pools\": [\n"
+" {\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-pool\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\"\n"
+" }\n"
+" ],\n"
+" \"pool\": \"192.0.2.0/28\"\n"
+" }\n"
+" ],\n"
+" \"reservations\": [\n"
+" {\n"
+" \"hw-address\": \"AA:BB:CC:DD:EE:FF\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-reservation\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\"\n"
+" }\n"
+" ]\n"
+" }\n"
+" ],\n"
+" \"subnet\": \"192.0.2.0/24\"\n"
+" }\n"
+" ]\n"
+" }\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
+" }\n",
+ // CONFIGURATION 79
+"{\n"
+" \"interfaces-config\": {\n"
+" \"interfaces\": [ \"*\" ],\n"
+" \"re-detect\": false\n"
+" },\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"foo\", \"bar\", \"foo\", \"bar\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\"\n"
+" }\n"
+" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
+" \"subnet4\": [ ],\n"
+" \"valid-lifetime\": 400\n"
" }\n"
};
" \"t1-percent\": 0.5,\n"
" \"t2-percent\": 0.875,\n"
" \"valid-lifetime\": 4000\n"
+" }\n",
+ // CONFIGURATION 78
+"{\n"
+" \"allocator\": \"iterative\",\n"
+" \"authoritative\": false,\n"
+" \"boot-file-name\": \"\",\n"
+" \"calculate-tee-times\": false,\n"
+" \"client-classes\": [\n"
+" {\n"
+" \"boot-file-name\": \"\",\n"
+" \"name\": \"foo\",\n"
+" \"next-server\": \"0.0.0.0\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-class\" ],\n"
+" \"code\": 15,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp4\"\n"
+" }\n"
+" ],\n"
+" \"option-def\": [ ],\n"
+" \"server-hostname\": \"\"\n"
+" }\n"
+" ],\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-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-ring4\"\n"
+" },\n"
+" \"dhcp4o6-port\": 0,\n"
+" \"early-global-reservations-lookup\": false,\n"
+" \"echo-client-id\": true,\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\", \"circuit-id\", \"client-id\" ],\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"
+" \"match-client-id\": true,\n"
+" \"multi-threading\": {\n"
+" \"enable-multi-threading\": true,\n"
+" \"packet-queue-size\": 64,\n"
+" \"thread-pool-size\": 0\n"
+" },\n"
+" \"next-server\": \"0.0.0.0\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-global\" ],\n"
+" \"code\": 15,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp4\"\n"
+" }\n"
+" ],\n"
+" \"option-def\": [ ],\n"
+" \"parked-packet-limit\": 256,\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\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-hostname\": \"\",\n"
+" \"server-tag\": \"\",\n"
+" \"shared-networks\": [\n"
+" {\n"
+" \"allocator\": \"iterative\",\n"
+" \"calculate-tee-times\": false,\n"
+" \"max-valid-lifetime\": 4000,\n"
+" \"min-valid-lifetime\": 4000,\n"
+" \"name\": \"foo\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-network\" ],\n"
+" \"code\": 15,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp4\"\n"
+" }\n"
+" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"relay\": {\n"
+" \"ip-addresses\": [ ]\n"
+" },\n"
+" \"renew-timer\": 1000,\n"
+" \"store-extended-info\": false,\n"
+" \"subnet4\": [\n"
+" {\n"
+" \"4o6-interface\": \"\",\n"
+" \"4o6-interface-id\": \"\",\n"
+" \"4o6-subnet\": \"\",\n"
+" \"allocator\": \"iterative\",\n"
+" \"calculate-tee-times\": false,\n"
+" \"id\": 1,\n"
+" \"max-valid-lifetime\": 4000,\n"
+" \"min-valid-lifetime\": 4000,\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-subnet\" ],\n"
+" \"code\": 15,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp4\"\n"
+" }\n"
+" ],\n"
+" \"pools\": [\n"
+" {\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-pool\" ],\n"
+" \"code\": 15,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp4\"\n"
+" }\n"
+" ],\n"
+" \"pool\": \"192.0.2.0/28\"\n"
+" }\n"
+" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"relay\": {\n"
+" \"ip-addresses\": [ ]\n"
+" },\n"
+" \"renew-timer\": 1000,\n"
+" \"reservations\": [\n"
+" {\n"
+" \"boot-file-name\": \"\",\n"
+" \"client-classes\": [ ],\n"
+" \"hostname\": \"\",\n"
+" \"hw-address\": \"aa:bb:cc:dd:ee:ff\",\n"
+" \"next-server\": \"0.0.0.0\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-reservation\" ],\n"
+" \"code\": 15,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp4\"\n"
+" }\n"
+" ],\n"
+" \"server-hostname\": \"\"\n"
+" }\n"
+" ],\n"
+" \"store-extended-info\": false,\n"
+" \"subnet\": \"192.0.2.0/24\",\n"
+" \"t1-percent\": 0.5,\n"
+" \"t2-percent\": 0.875,\n"
+" \"valid-lifetime\": 4000\n"
+" }\n"
+" ],\n"
+" \"t1-percent\": 0.5,\n"
+" \"t2-percent\": 0.875,\n"
+" \"valid-lifetime\": 4000\n"
+" }\n"
+" ],\n"
+" \"stash-agent-options\": false,\n"
+" \"statistic-default-sample-age\": 0,\n"
+" \"statistic-default-sample-count\": 20,\n"
+" \"store-extended-info\": false,\n"
+" \"subnet4\": [ ],\n"
+" \"t1-percent\": 0.5,\n"
+" \"t2-percent\": 0.875,\n"
+" \"valid-lifetime\": 4000\n"
+" }\n",
+ // CONFIGURATION 79
+"{\n"
+" \"allocator\": \"iterative\",\n"
+" \"authoritative\": false,\n"
+" \"boot-file-name\": \"\",\n"
+" \"calculate-tee-times\": false,\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-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-ring4\"\n"
+" },\n"
+" \"dhcp4o6-port\": 0,\n"
+" \"early-global-reservations-lookup\": false,\n"
+" \"echo-client-id\": true,\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\", \"circuit-id\", \"client-id\" ],\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"
+" \"match-client-id\": true,\n"
+" \"multi-threading\": {\n"
+" \"enable-multi-threading\": true,\n"
+" \"packet-queue-size\": 64,\n"
+" \"thread-pool-size\": 0\n"
+" },\n"
+" \"next-server\": \"0.0.0.0\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"foo\", \"bar\" ],\n"
+" \"code\": 15,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-name\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp4\"\n"
+" }\n"
+" ],\n"
+" \"option-def\": [ ],\n"
+" \"parked-packet-limit\": 256,\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\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-hostname\": \"\",\n"
+" \"server-tag\": \"\",\n"
+" \"shared-networks\": [ ],\n"
+" \"stash-agent-options\": false,\n"
+" \"statistic-default-sample-age\": 0,\n"
+" \"statistic-default-sample-count\": 20,\n"
+" \"store-extended-info\": false,\n"
+" \"subnet4\": [ ],\n"
+" \"t1-percent\": 0.5,\n"
+" \"t2-percent\": 0.875,\n"
+" \"valid-lifetime\": 400\n"
" }\n"
};
oro->addValue(1251);
query->addOption(oro);
- // Classify the query.
+ // Classify the query.
srv.classifyPacket(query);
// Verify query is in class "right".
OptionPtr clientid2(new Option(Option::V6, D6O_CLIENTID, buf));
query->addOption(clientid2);
- // Classify the query.
+ // Classify the query.
srv.classifyPacket(query);
// Verify query is in class "melon".
// Create a SOLICIT that does not match class "right".
query = createSolicit();
- // Classify the query.
+ // Classify the query.
srv.classifyPacket(query);
// Verify query is in not class "melon".
}
// Verifies that D6O_VENDOR_OPTS option can be gated by option class
-// tagging. Note that class-tagging only suppresses this option when
+// tagging. Note that class-tagging only suppresses this option when
// none of the vendor's sub-options are being returned.
TEST_F(ClassifyTest, persistedVendorOptsOptionClassTag) {
IfaceMgrTestConfig test_config(true);
// Create a SOLICIT that does not match class.
Pkt6Ptr query = createSolicit();
- // Classify the query.
+ // Classify the query.
srv.classifyPacket(query);
// Verify query is not in class "melon".
OptionPtr clientid2(new Option(Option::V6, D6O_CLIENTID, buf));
query->addOption(clientid2);
- // Classify the query.
+ // Classify the query.
srv.classifyPacket(query);
// Verify query is in class "melon".
"code": 103,
"type": "string"
}],
- "option-data": [{
+ "option-data": [{
"space": "vendor-4491",
"code": 101,
"csv-format": true,
vendor_oro->addValue(103);
vendor->addOption(vendor_oro);
- // Classify the query.
+ // Classify the query.
srv.classifyPacket(query);
// Verify query is in class "melon".
}
}
+// This test verifies that class tagging can occur at any scope.
+TEST_F(Dhcp6ParserTest, classTagging) {
+ std::string config = "{ " + genIfaceConfig() + ","
+ R"^(
+ "option-data": [{
+ "name": "domain-search",
+ "data": "example.com",
+ "client-classes": [ "in-global" ]
+ }],
+ "valid-lifetime": 4000,
+ "preferred-lifetime": 3000,
+ "rebind-timer": 2000,
+ "renew-timer": 1000,
+ "shared-networks": [{
+ "name": "foo",
+ "subnet6": [{
+ "id": 1,
+ "subnet": "2001:db8::/32",
+ "option-data": [{
+ "name": "domain-search",
+ "data": "example.com",
+ "client-classes": [ "in-subnet" ]
+ }],
+ "pools": [{
+ "pool": "2001:db8::/64",
+ "option-data": [{
+ "name": "domain-search",
+ "data": "example.com",
+ "client-classes": [ "in-pool" ]
+ }]
+ }],
+ "pd-pools": [{
+ "prefix": "3001:db8::",
+ "prefix-len": 56,
+ "delegated-len": 64,
+ "option-data": [{
+ "name": "domain-search",
+ "data": "example.com",
+ "client-classes": [ "in-pd-pool" ]
+ }]
+ }],
+ "reservations": [{
+ "hw-address": "AA:BB:CC:DD:EE:FF",
+ "option-data": [{
+ "name": "domain-search",
+ "data": "example.com",
+ "client-classes": [ "in-reservation" ]
+ }]
+ }]
+ }],
+ "option-data": [{
+ "name": "domain-search",
+ "data": "example.com",
+ "client-classes": [ "in-network" ]
+ }]
+ }],
+ "client-classes": [{
+ "name": "foo",
+ "option-data": [{
+ "name": "domain-search",
+ "data": "example.com",
+ "client-classes": [ "in-class" ]
+ }]
+ }]
+ })^";
+
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ extractConfig(config);
+
+ ConstElementPtr status;
+ ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+ checkResult(status, 0);
+}
+
// This test verifies that duplicates in option-data.client-classes
// are ignored and do not affect class order.
TEST_F(Dhcp6ParserTest, optionClientClassesDuplicateCheck) {
" }\n"
" ],\n"
" \"valid-lifetime\": 4000\n"
+" }\n",
+ // CONFIGURATION 76
+"{\n"
+" \"client-classes\": [\n"
+" {\n"
+" \"name\": \"foo\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-class\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ]\n"
+" }\n"
+" ],\n"
+" \"interfaces-config\": {\n"
+" \"interfaces\": [ \"*\" ],\n"
+" \"re-detect\": false\n"
+" },\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-global\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
+" \"shared-networks\": [\n"
+" {\n"
+" \"name\": \"foo\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-network\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ],\n"
+" \"subnet6\": [\n"
+" {\n"
+" \"id\": 1,\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-subnet\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ],\n"
+" \"pd-pools\": [\n"
+" {\n"
+" \"delegated-len\": 64,\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-pd-pool\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ],\n"
+" \"prefix\": \"3001:db8::\",\n"
+" \"prefix-len\": 56\n"
+" }\n"
+" ],\n"
+" \"pools\": [\n"
+" {\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-pool\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ],\n"
+" \"pool\": \"2001:db8::/64\"\n"
+" }\n"
+" ],\n"
+" \"reservations\": [\n"
+" {\n"
+" \"hw-address\": \"AA:BB:CC:DD:EE:FF\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"in-reservation\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ]\n"
+" }\n"
+" ],\n"
+" \"subnet\": \"2001:db8::/32\"\n"
+" }\n"
+" ]\n"
+" }\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
+" }\n",
+ // CONFIGURATION 77
+"{\n"
+" \"interfaces-config\": {\n"
+" \"interfaces\": [ \"*\" ],\n"
+" \"re-detect\": false\n"
+" },\n"
+" \"option-data\": [\n"
+" {\n"
+" \"client-classes\": [ \"foo\", \"bar\", \"foo\", \"bar\" ],\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\"\n"
+" }\n"
+" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 400\n"
" }\n"
};
" \"t1-percent\": 0.5,\n"
" \"t2-percent\": 0.8,\n"
" \"valid-lifetime\": 4000\n"
+" }\n",
+ // CONFIGURATION 76
+"{\n"
+" \"allocator\": \"iterative\",\n"
+" \"calculate-tee-times\": true,\n"
+" \"client-classes\": [\n"
+" {\n"
+" \"name\": \"foo\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-class\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ]\n"
+" }\n"
+" ],\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-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"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-global\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ],\n"
+" \"option-def\": [ ],\n"
+" \"parked-packet-limit\": 256,\n"
+" \"pd-allocator\": \"iterative\",\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
+" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\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"
+" \"max-preferred-lifetime\": 3000,\n"
+" \"max-valid-lifetime\": 4000,\n"
+" \"min-preferred-lifetime\": 3000,\n"
+" \"min-valid-lifetime\": 4000,\n"
+" \"name\": \"foo\",\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-network\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ],\n"
+" \"pd-allocator\": \"iterative\",\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rapid-commit\": false,\n"
+" \"rebind-timer\": 2000,\n"
+" \"relay\": {\n"
+" \"ip-addresses\": [ ]\n"
+" },\n"
+" \"renew-timer\": 1000,\n"
+" \"store-extended-info\": false,\n"
+" \"subnet6\": [\n"
+" {\n"
+" \"allocator\": \"iterative\",\n"
+" \"calculate-tee-times\": true,\n"
+" \"id\": 1,\n"
+" \"max-preferred-lifetime\": 3000,\n"
+" \"max-valid-lifetime\": 4000,\n"
+" \"min-preferred-lifetime\": 3000,\n"
+" \"min-valid-lifetime\": 4000,\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-subnet\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ],\n"
+" \"pd-allocator\": \"iterative\",\n"
+" \"pd-pools\": [\n"
+" {\n"
+" \"delegated-len\": 64,\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-pd-pool\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ],\n"
+" \"prefix\": \"3001:db8::\",\n"
+" \"prefix-len\": 56\n"
+" }\n"
+" ],\n"
+" \"pools\": [\n"
+" {\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-pool\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ],\n"
+" \"pool\": \"2001:db8::/64\"\n"
+" }\n"
+" ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
+" \"relay\": {\n"
+" \"ip-addresses\": [ ]\n"
+" },\n"
+" \"renew-timer\": 1000,\n"
+" \"reservations\": [\n"
+" {\n"
+" \"client-classes\": [ ],\n"
+" \"hostname\": \"\",\n"
+" \"hw-address\": \"aa:bb:cc:dd:ee:ff\",\n"
+" \"ip-addresses\": [ ],\n"
+" \"option-data\": [\n"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"in-reservation\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ],\n"
+" \"prefixes\": [ ]\n"
+" }\n"
+" ],\n"
+" \"store-extended-info\": false,\n"
+" \"subnet\": \"2001:db8::/32\",\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 77
+"{\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-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"
+" {\n"
+" \"always-send\": false,\n"
+" \"client-classes\": [ \"foo\", \"bar\" ],\n"
+" \"code\": 24,\n"
+" \"csv-format\": true,\n"
+" \"data\": \"example.com\",\n"
+" \"name\": \"domain-search\",\n"
+" \"never-send\": false,\n"
+" \"space\": \"dhcp6\"\n"
+" }\n"
+" ],\n"
+" \"option-def\": [ ],\n"
+" \"parked-packet-limit\": 256,\n"
+" \"pd-allocator\": \"iterative\",\n"
+" \"rebind-timer\": 2000,\n"
+" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\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"
+" \"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\": 400\n"
" }\n"
};