Commit d996bf25 authored by Francis Dupont's avatar Francis Dupont

[3389a] Commit before regen

parent 4fa4c9a0
......@@ -719,6 +719,23 @@ temporarily override a list of interface names and listen on all interfaces.
supported on the particular OS, the server will issue a warning and
fall back to use IP/UDP sockets.</para>
</note>
<para>Interfaces are re-detected at each reconfiguration. This behavior
can be disabled by setting <command>re-detect</command> value to
<userinput>false</userinput>, for instance:
<screen>
"Dhcp4": {
"interfaces-config": {
"interfaces": [ <userinput>"eth1", "eth3"</userinput> ],
"re-detect": <userinput>false</userinput>
},
...
}
</screen>
Note interfaces are not re-detected during <command>config-test</command>.
</para>
</section>
<section id="dhcpinform-unicast-issues">
......
......@@ -625,6 +625,13 @@ for MySQL and PostgreSQL databases.</para></note>
It is anticipated that this will form of usage only be used where it is desired to
temporarily override a list of interface names and listen on all interfaces.
</para>
<para>As for the DHCPv4 server binding to specific addresses and
disabling re-detection of interfaces are supported. But
<command>dhcp-socket-type</command> is not because DHCPv6 uses
UDP/IPv6 sockets only.
</para>
</section>
<section id="ipv6-subnet-id">
......
......@@ -483,9 +483,18 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set,
}
if (config_pair.first == "interfaces-config") {
ElementPtr ifaces_cfg =
boost::const_pointer_cast<Element>(config_pair.second);
if (check_only) {
// No re-detection in check only mode
ifaces_cfg->set("re-detect", Element::create(false));
} else if (!ifaces_cfg->contains("re-detect")) {
// Else the default is to re-detect
ifaces_cfg->set("re-detect", Element::create(true));
}
IfacesConfigParser parser(AF_INET);
CfgIfacePtr cfg_iface = srv_cfg->getCfgIface();
parser.parse(cfg_iface, config_pair.second);
parser.parse(cfg_iface, ifaces_cfg);
continue;
}
......
......@@ -49,7 +49,9 @@ namespace {
class NakedControlledDhcpv4Srv: public ControlledDhcpv4Srv {
// "Naked" DHCPv4 server, exposes internal fields
public:
NakedControlledDhcpv4Srv():ControlledDhcpv4Srv(0) { }
NakedControlledDhcpv4Srv():ControlledDhcpv4Srv(0) {
CfgMgr::instance().setFamily(AF_INET);
}
/// Expose internal methods for the sake of testing
using Dhcpv4Srv::receivePacket;
......
......@@ -608,6 +608,9 @@ Dhcpv4SrvTest::configure(const std::string& config, NakedDhcpv4Srv& srv,
ASSERT_NO_THROW(json = parseJSON(config));
ConstElementPtr status;
// Patch the re-detect flag
patchIfacesReDetect(json);
// Configure the server and make sure the config is accepted
EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
ASSERT_TRUE(status);
......
......@@ -479,6 +479,18 @@ public:
NakedDhcpv4Srv srv_;
};
/// @brief Patch the server config to add interface-config/re-detect=false
/// @param json the server config
inline void
patchIfacesReDetect(isc::data::ConstElementPtr json) {
isc::data::ConstElementPtr ifaces_cfg = json->get("interfaces-config");
if (ifaces_cfg) {
isc::data::ElementPtr mutable_cfg =
boost::const_pointer_cast<isc::data::Element>(ifaces_cfg);
mutable_cfg->set("re-detect", isc::data::Element::create(false));
}
}
/// @brief Runs parser in JSON mode, useful for parser testing
///
/// @param in string to be parsed
......@@ -503,7 +515,10 @@ parseDHCP4(const std::string& in, bool verbose = false)
{
try {
isc::dhcp::Parser4Context ctx;
return (ctx.parseString(in, isc::dhcp::Parser4Context::SUBPARSER_DHCP4));
isc::data::ElementPtr json;
json = ctx.parseString(in, isc::dhcp::Parser4Context::SUBPARSER_DHCP4);
patchIfacesReDetect(json);
return (json);
}
catch (const std::exception& ex) {
if (verbose) {
......
......@@ -1517,7 +1517,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -1558,7 +1559,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -1624,7 +1626,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -1690,7 +1693,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -1756,7 +1760,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -1894,7 +1899,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2032,7 +2038,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2098,7 +2105,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2164,7 +2172,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2230,7 +2239,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2296,7 +2306,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2362,7 +2373,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2452,7 +2464,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2542,7 +2555,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2608,7 +2622,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2704,7 +2719,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2770,7 +2786,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2821,7 +2838,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2872,7 +2890,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2932,7 +2951,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -2983,7 +3003,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3034,7 +3055,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3085,7 +3107,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3136,7 +3159,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3217,7 +3241,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3298,7 +3323,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3389,7 +3415,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3464,7 +3491,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3580,7 +3608,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3669,7 +3698,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3775,7 +3805,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3850,7 +3881,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -3957,7 +3989,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4036,7 +4069,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4120,7 +4154,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"eth0\", \"eth1\" ]\n"
" \"interfaces\": [ \"eth0\", \"eth1\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4161,7 +4196,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\", \"eth0\", \"eth1\" ]\n"
" \"interfaces\": [ \"*\", \"eth0\", \"eth1\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4202,7 +4238,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4268,7 +4305,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4334,7 +4372,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4545,7 +4584,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4640,7 +4680,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ ]\n"
" \"interfaces\": [ ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4778,7 +4819,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4819,7 +4861,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4860,7 +4903,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4901,7 +4945,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -4942,7 +4987,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -5008,7 +5054,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -5074,7 +5121,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -5140,7 +5188,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ]\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"lease-database\": {\n"
" \"type\": \"memfile\"\n"
......@@ -5206,7 +5255,8 @@ const char* UNPARSED_CONFIGS[] = {
" \"hooks-libraries\": [ ],\n"
" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\" ],\n"
" \"interfaces-config\": {\n"