SrvConfigPtr srv_cfg = CfgMgr::instance().getStagingCfg();
+ // Preserve all scalar global parameters
+ srv_cfg->extractConfiguredGlobals(config_set);
+
// This is a way to convert ConstElementPtr to ElementPtr.
// We need a config that can be edited, because we will insert
// default values and will insert derived values as well.
" ],\n"
" \"rebind-timer\": 2,\n"
" \"relay\": {\n"
-" \"ip-addresses\": [ \"192.0.2.123\", \"192.0.2.124\" ]\n"
+" \"ip-addresses\": [ \"192.0.3.123\", \"192.0.3.124\" ]\n"
" },\n"
" \"renew-timer\": 1,\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
-" \"subnet4\": [ ]\n"
+" \"subnet4\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 1
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 2
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 3
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 4
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.5.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 5
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.5.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 6
"{\n"
+" \"boot-file-name\": \"bar\",\n"
" \"decline-probation-period\": 86400,\n"
" \"dhcp-ddns\": {\n"
" \"always-include-fqdn\": false,\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
" },\n"
+" \"next-server\": \"1.2.3.4\",\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
+" \"server-hostname\": \"foo\",\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 7
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 8
"{\n"
+" \"boot-file-name\": \"nofile\",\n"
" \"decline-probation-period\": 86400,\n"
" \"dhcp-ddns\": {\n"
" \"always-include-fqdn\": false,\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
" },\n"
+" \"next-server\": \"192.0.0.1\",\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
+" \"server-hostname\": \"nohost\",\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 9
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 10
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 11
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.3.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 12
"{\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
" },\n"
+" \"match-client-id\": true,\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.3.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 13
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 14
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.3.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 15
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 16
"{\n"
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 24
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 25
"{\n"
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 26
"{\n"
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
-" \"subnet4\": [ ]\n"
+" \"subnet4\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 27
"{\n"
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 3000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 3000\n"
" }\n",
// CONFIGURATION 28
"{\n"
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 29
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.3.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 30
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 31
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 32
"{\n"
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 33
"{\n"
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
-" \"subnet4\": [ ]\n"
+" \"subnet4\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 34
"{\n"
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 3000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 3000\n"
" }\n",
// CONFIGURATION 35
"{\n"
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 36
"{\n"
" \"type\": \"string\"\n"
" }\n"
" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 37
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
-" \"subnet4\": [ ]\n"
+" \"subnet4\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 38
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
-" \"subnet4\": [ ]\n"
+" \"subnet4\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 39
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 40
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 41
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" ],\n"
" \"rebind-timer\": 2,\n"
" \"relay\": {\n"
-" \"ip-addresses\": [ \"192.0.2.123\", \"192.0.2.124\" ]\n"
+" \"ip-addresses\": [ \"192.0.3.123\", \"192.0.3.124\" ]\n"
" },\n"
" \"renew-timer\": 1,\n"
" \"reservation-mode\": \"all\",\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 42
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.5.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 43
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.0.0/16\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 44
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.4.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 45
"{\n"
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.3.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 46
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.5.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 47
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 52
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 53
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 54
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 55
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 56
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 57
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 58
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 59
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 60
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
" \"subnet4\": [\n"
" {\n"
" \"subnet\": \"192.0.2.0/24\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 61
"{\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"rebind-timer\": 2000,\n"
+" \"renew-timer\": 1000,\n"
" \"shared-networks\": [ ],\n"
-" \"subnet4\": [ ]\n"
+" \"subnet4\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 62
"{\n"
SrvConfigPtr srv_config = CfgMgr::instance().getStagingCfg();
+ // Preserve all scalar global parameters
+ srv_config->extractConfiguredGlobals(config_set);
+
// Set all default values if not specified by the user.
SimpleParser6::setAllDefaults(mutable_cfg);
" }\n"
" ],\n"
" \"relay\": {\n"
-" \"ip-addresses\": [ \"2001:db8:1::abcd\", \"2001:db8:1::abce\" ]\n"
+" \"ip-addresses\": [ \"2001:db9::abcd\", \"2001:db9::abce\" ]\n"
" },\n"
" \"subnet\": \"2001:db8:1::/64\"\n"
" }\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 1
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 2
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:4::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 3
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:4::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 4
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:4::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 5
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 6
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 7
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 8
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:2::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 9
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 10
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 20
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 21
"{\n"
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 22
"{\n"
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 23
"{\n"
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 24
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:2::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 25
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 26
"{\n"
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 27
"{\n"
" \"type\": \"string\"\n"
" }\n"
" ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 28
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 29
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 30
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 31
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"rapid-commit\": false,\n"
" \"rebind-timer\": 2000,\n"
" \"relay\": {\n"
-" \"ip-addresses\": [ \"2001:db8:1::abcd\", \"2001:db8:1::abce\" ]\n"
+" \"ip-addresses\": [ \"2001:db9::abcd\", \"2001:db9::abce\" ]\n"
" },\n"
" \"renew-timer\": 1000,\n"
" \"reservation-mode\": \"all\",\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 32
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:4::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 33
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/40\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 34
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 35
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 36
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:3::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 37
"{\n"
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:2::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 38
"{\n"
" \"mac-sources\": [ \"client-link-addr-option\", \"remote-id\", \"subscriber-id\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 39
"{\n"
" \"mac-sources\": [ \"client-link-addr-option\", \"remote-id\", \"subscriber-id\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 40
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:4::/48\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 41
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"23\", \"37\", \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 42
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 47
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/32\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 48
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/32\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 49
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/32\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 50
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/32\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 51
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/32\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 52
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/32\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 53
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"subnet\": \"2001:db8::/32\",\n"
" \"valid-lifetime\": 4000\n"
" }\n"
-" ]\n"
+" ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 54
"{\n"
" \"mac-sources\": [ \"any\" ],\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
+" \"preferred-lifetime\": 3000,\n"
+" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
+" \"renew-timer\": 1000,\n"
" \"server-id\": {\n"
" \"enterprise-id\": 0,\n"
" \"htype\": 0,\n"
" \"type\": \"LLT\"\n"
" },\n"
" \"shared-networks\": [ ],\n"
-" \"subnet6\": [ ]\n"
+" \"subnet6\": [ ],\n"
+" \"valid-lifetime\": 4000\n"
" }\n",
// CONFIGURATION 55
"{\n"
cfg_host_operations6_(CfgHostOperations::createConfig6()),
class_dictionary_(new ClientClassDictionary()),
decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
- d2_client_config_(new D2ClientConfig()) {
+ d2_client_config_(new D2ClientConfig()),
+ configured_globals_(Element::createMap()) {
}
SrvConfig::SrvConfig(const uint32_t sequence)
cfg_host_operations6_(CfgHostOperations::createConfig6()),
class_dictionary_(new ClientClassDictionary()),
decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
- d2_client_config_(new D2ClientConfig()) {
+ d2_client_config_(new D2ClientConfig()),
+ configured_globals_(Element::createMap()) {
}
std::string
}
}
+void
+SrvConfig::extractConfiguredGlobals(isc::data::ConstElementPtr config) {
+ if (config->getType() != Element::map) {
+ isc_throw(BadValue, "extractConfiguredGlobals must be given a map element");
+ }
+
+ const std::map<std::string, ConstElementPtr>& values = config->mapValue();
+ for (auto value = values.begin(); value != values.end(); ++value) {
+ if (value->second->getType() != Element::list &&
+ value->second->getType() != Element::map) {
+ addConfiguredGlobal(value->first, value->second);
+ }
+ }
+}
+
ElementPtr
SrvConfig::toElement() const {
// Get family for the configuration manager
ElementPtr result = Element::createMap();
// DhcpX global map
ElementPtr dhcp = Element::createMap();
+
+ // Add in explicitly configured globals.
+ dhcp->setValue(configured_globals_->mapValue());
+
// Set user-context
contextToElement(dhcp);
+
// Set decline-probation-period
dhcp->set("decline-probation-period",
Element::create(static_cast<long long>(decline_timer_)));
// Set dhcp4o6-port
dhcp->set("dhcp4o6-port",
Element::create(static_cast<int>(dhcp4o6_port_)));
+
// Set dhcp-ddns
dhcp->set("dhcp-ddns", d2_client_config_->toElement());
// Set interfaces-config
static const uint32_t CFGSEL_DDNS = 0x00000010;
/// Number of all subnets
static const uint32_t CFGSEL_SUBNET = 0x00000003;
+ /// Configured globals
+ static const uint32_t CFGSEL_GLOBALS = 0x00000020;
/// IPv4 related config
- static const uint32_t CFGSEL_ALL4 = 0x00000015;
+ static const uint32_t CFGSEL_ALL4 = 0x00000035;
/// IPv6 related config
- static const uint32_t CFGSEL_ALL6 = 0x0000001A;
+ static const uint32_t CFGSEL_ALL6 = 0x0000003A;
/// Whole config
static const uint32_t CFGSEL_ALL = 0xFFFFFFFF;
//@}
d2_client_config_ = d2_client_config;
}
+ /// @brief Returns pointer to configured global parameters
+ isc::data::ConstElementPtr getConfiguredGlobals() const {
+ return (isc::data::ConstElementPtr(configured_globals_));
+ }
+
+ /// @brief Saves scalar elements from the global scope of a configuration
+ void extractConfiguredGlobals(isc::data::ConstElementPtr config);
+
+ /// @brief Adds a parameter to the collection configured globals
+ /// @param name std::string name of the global to add
+ /// @param value ElementPtr containing the value of the global
+ void addConfiguredGlobal(const std::string& name, isc::data::ConstElementPtr value) {
+ configured_globals_->set(name, value);
+ }
+
/// @brief Unparse a configuration object
///
/// @return a pointer to unparsed configuration
/// this socket is bound and connected to this port and port + 1
uint16_t dhcp4o6_port_;
+ /// @brief Stores D2 client configuration
D2ClientConfigPtr d2_client_config_;
+
+ /// @brief Stores the global parameters specified via configuration
+ isc::data::ElementPtr configured_globals_;
};
/// @name Pointers to the @c SrvConfig object.
EXPECT_TRUE(copied.getHooksConfig().equal(conf.getHooksConfig()));
}
+// Verifies basic functions of configured global handling.
+TEST_F(SrvConfigTest, configuredGlobals) {
+ // Create an instance.
+ SrvConfig conf(32);
+
+ // The map of configured globals should be empty.
+ ConstElementPtr srv_globals = conf.getConfiguredGlobals();
+ ASSERT_TRUE(srv_globals);
+ ASSERT_EQ(Element::map, srv_globals->getType());
+ ASSERT_TRUE(srv_globals->mapValue().empty());
+
+ // Attempting to extract globals from a non-map should throw.
+ ASSERT_THROW(conf.extractConfiguredGlobals(Element::create(777)), isc::BadValue);
+
+ // Now let's create a configuration from which to extract global scalars.
+ // Extraction (currently) has no business logic, so the elements we use
+ // can be arbitrary.
+ ConstElementPtr global_cfg;
+ std::string global_cfg_str =
+ "{\n"
+ " \"astring\": \"okay\",\n"
+ " \"amap\": { \"not-this\":777, \"not-that\": \"poo\" },\n"
+ " \"anint\": 444,\n"
+ " \"alist\": [ 1, 2, 3 ],\n"
+ " \"abool\": true\n"
+ "}\n";
+ ASSERT_NO_THROW(global_cfg = Element::fromJSON(global_cfg_str));
+
+ // Extract globals from the config.
+ ASSERT_NO_THROW(conf.extractConfiguredGlobals(global_cfg));
+
+ // Now see if the extract was correct.
+ srv_globals = conf.getConfiguredGlobals();
+ ASSERT_TRUE(srv_globals);
+ ASSERT_EQ(Element::map, srv_globals->getType());
+ ASSERT_FALSE(srv_globals->mapValue().empty());
+
+ // Maps and lists should be excluded.
+ auto globals = srv_globals->mapValue();
+ for (auto global = globals.begin(); global != globals.end(); ++global) {
+ if (global->first == "astring") {
+ ASSERT_EQ(Element::string, global->second->getType());
+ EXPECT_EQ("okay", global->second->stringValue());
+ } else if (global->first == "anint") {
+ ASSERT_EQ(Element::integer, global->second->getType());
+ EXPECT_EQ(444, global->second->intValue());
+ } else if (global->first == "abool") {
+ ASSERT_EQ(Element::boolean, global->second->getType());
+ EXPECT_TRUE(global->second->boolValue());
+ } else {
+ ADD_FAILURE() << "unexpected element found:" << global->first;
+ }
+ }
+}
+
// Verifies that the toElement method works well (tests limited to
// direct parameters)
TEST_F(SrvConfigTest, unparse) {
defaults += conf.getCfgExpiration()->toElement()->str() + ",\n";
defaults += "\"lease-database\": { \"type\": \"memfile\" },\n";
defaults += "\"hooks-libraries\": [ ],\n";
- defaults += "\"dhcp-ddns\": \n";
- defaults += conf.getD2ClientConfig()->toElement()->str() + ",\n";
+ defaults += "\"dhcp-ddns\": \n"; defaults += conf.getD2ClientConfig()->toElement()->str() + ",\n";
std::string defaults4 = "\"echo-client-id\": true,\n";
defaults4 += "\"shared-networks\": [ ],\n";
isc::test::runToElementTest<SrvConfig>
(header6 + defaults + defaults6 + trailer, conf);
- // Verify direct non-default parameters
+ // Verify direct non-default parameters and configured globals
CfgMgr::instance().setFamily(AF_INET);
conf.setEchoClientId(false);
conf.setDhcp4o6Port(6767);
+ // Add "configured globals"
+ conf.addConfiguredGlobal("renew-timer", Element::create(777));
+ conf.addConfiguredGlobal("foo", Element::create("bar"));
params = "\"echo-client-id\": false,\n";
- params += "\"dhcp4o6-port\": 6767\n";
+ params += "\"dhcp4o6-port\": 6767,\n";
+ params += "\"renew-timer\": 777,\n";
+ params += "\"foo\": \"bar\"\n";
isc::test::runToElementTest<SrvConfig>
(header4 + defaults + defaults4 + params + trailer, conf);
-}
+
+ // Verify direct non-default parameters and configured globals
+ CfgMgr::instance().setFamily(AF_INET6);
+ params = ",\"dhcp4o6-port\": 6767,\n";
+ params += "\"renew-timer\": 777,\n";
+ params += "\"foo\": \"bar\"\n";
+ isc::test::runToElementTest<SrvConfig>
+ (header6 + defaults + defaults6 + params + trailer, conf);
+}
// Verifies that the toElement method does not miss host reservations
TEST_F(SrvConfigTest, unparseHR) {