2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-30 05:27:55 +00:00

[#1307] kea-dhcp6 supports parked-packet-limit

src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/json_config_parser.cc
src/lib/dhcpsrv/parsers/simple_parser6.cc
doc/examples/kea6/all-keys.json
    Added parked-packet-limit

src/bin/dhcp6/dhcp6_messages.*
    DHCP6_HOOK_LEASES6_PARKING_LOT_FULL

src/bin/dhcp6/dhcp6_srv.cc
    Dhcpv6Srv::processDhcp6Query() - drops the packet if the parking
    lot is full

src/bin/dhcp6/tests/get_config_unittest.cc
    updated
This commit is contained in:
Thomas Markwalder 2021-09-03 14:44:53 -04:00
parent 9e3ad66c13
commit c9f19c5322
15 changed files with 4905 additions and 5377 deletions

View File

@ -505,7 +505,7 @@
// DHCPREQUESTs) that may be parked while waiting for hook library
// work to complete, prior to a response (e.g. DHCPACK) being sent
// back to the client. A typical example is when kea-dhcp4 parks a
// DHCPREQUEST while it sends the requesite lease update(s) to its
// DHCPREQUEST while it sends the requisite lease update(s) to its
// HA peer(s). The packet is unparked once the update(s) have been
// acknowledged. This value limits the number of packets that can
// be held pending the updates. In times of heavy client traffic,

View File

@ -503,6 +503,18 @@
}
],
// Global value which limits the number of client packets (e.g.
// REQUESTs,RENEWs...) that may be parked while waiting for
// hook library work to complete, prior to a response (e.g. REPLY)
// being sent back to the client. A typical example is when kea-dhcp6
// parks a REQUEST while it sends the requisite lease update(s) to its
// HA peer(s). The packet is unparked once the update(s) have been
// acknowledged. This value limits the number of packets that can
// be held pending the updates. In times of heavy client traffic,
// this value can keep kea-dhcp6 from building an insurmountable
// backlog of updates.
"parked-packet-limit": 128,
// Global (default) value of the preferred lifetime.
"preferred-lifetime": 50,

File diff suppressed because it is too large Load Diff

View File

@ -939,6 +939,15 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu]
}
}
\"parked-packet-limit\" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
return isc::dhcp::Dhcp6Parser::make_PARKED_PACKET_LIMIT(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("parked-packet-limit", driver.loc_);
}
}
\"statistic-default-sample-count\" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:

View File

@ -73,6 +73,7 @@ extern const isc::log::MessageID DHCP6_HOOK_LEASE6_RELEASE_NA_SKIP = "DHCP6_HOOK
extern const isc::log::MessageID DHCP6_HOOK_LEASE6_RELEASE_PD_SKIP = "DHCP6_HOOK_LEASE6_RELEASE_PD_SKIP";
extern const isc::log::MessageID DHCP6_HOOK_LEASES6_COMMITTED_DROP = "DHCP6_HOOK_LEASES6_COMMITTED_DROP";
extern const isc::log::MessageID DHCP6_HOOK_LEASES6_COMMITTED_PARK = "DHCP6_HOOK_LEASES6_COMMITTED_PARK";
extern const isc::log::MessageID DHCP6_HOOK_LEASES6_PARKING_LOT_FULL = "DHCP6_HOOK_LEASES6_PARKING_LOT_FULL";
extern const isc::log::MessageID DHCP6_HOOK_PACKET_RCVD_SKIP = "DHCP6_HOOK_PACKET_RCVD_SKIP";
extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_DROP = "DHCP6_HOOK_PACKET_SEND_DROP";
extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_SKIP = "DHCP6_HOOK_PACKET_SEND_SKIP";
@ -229,6 +230,7 @@ const char* values[] = {
"DHCP6_HOOK_LEASE6_RELEASE_PD_SKIP", "%1: prefix lease was not released because a callout set the next step to SKIP",
"DHCP6_HOOK_LEASES6_COMMITTED_DROP", "%1: packet is dropped, because a callout set the next step to DROP",
"DHCP6_HOOK_LEASES6_COMMITTED_PARK", "%1: packet is parked, because a callout set the next step to PARK",
"DHCP6_HOOK_LEASES6_PARKING_LOT_FULL", "The parked-packet-limit %1, has been reached, dropping query: %2",
"DHCP6_HOOK_PACKET_RCVD_SKIP", "%1: packet is dropped, because a callout set the next step to SKIP",
"DHCP6_HOOK_PACKET_SEND_DROP", "%1: prepared DHCPv6 response was not sent because a callout set the next ste to DROP",
"DHCP6_HOOK_PACKET_SEND_SKIP", "%1: prepared DHCPv6 response is not built because a callout set the next step to SKIP",

View File

@ -74,6 +74,7 @@ extern const isc::log::MessageID DHCP6_HOOK_LEASE6_RELEASE_NA_SKIP;
extern const isc::log::MessageID DHCP6_HOOK_LEASE6_RELEASE_PD_SKIP;
extern const isc::log::MessageID DHCP6_HOOK_LEASES6_COMMITTED_DROP;
extern const isc::log::MessageID DHCP6_HOOK_LEASES6_COMMITTED_PARK;
extern const isc::log::MessageID DHCP6_HOOK_LEASES6_PARKING_LOT_FULL;
extern const isc::log::MessageID DHCP6_HOOK_PACKET_RCVD_SKIP;
extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_DROP;
extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_SKIP;

View File

@ -422,6 +422,14 @@ not build the wire data (pack) because it was already done by the
book. The argument specifies the client and transaction identification
information.
% DHCP6_HOOK_LEASES6_PARKING_LOT_FULL The parked-packet-limit %1, has been reached, dropping query: %2
This debug message occurs when the parking lot used to hold client queries
while hook library work for them completes has reached or exceeded the
limit set by the parked-packet-limit global parameter. This can occur when
kea-dhcp6 is using hook libraries (e.g. HA) that implement the
"leases6-committed" callout and client queries are arriving faster than
those callouts can fulfill them.
% DHCP6_HOOK_SUBNET6_SELECT_DROP %1: packet was dropped because a callout set the drop flag
This debug message is printed when a callout installed on the
subnet6_select hook point set the drop flag. For this particular hook

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -129,6 +129,7 @@ using namespace std;
RECORD_TYPES "record-types"
ENCAPSULATE "encapsulate"
ARRAY "array"
PARKED_PACKET_LIMIT "parked-packet-limit"
SHARED_NETWORKS "shared-networks"
@ -528,6 +529,7 @@ global_param: data_directory
| dhcp_multi_threading
| ip_reservations_unique
| compatibility
| parked_packet_limit
| unknown_map_entry
;
@ -744,6 +746,12 @@ server_tag: SERVER_TAG {
ctx.leave();
};
parked_packet_limit: PARKED_PACKET_LIMIT COLON INTEGER {
ctx.unique("parked-packet-limit", ctx.loc2pos(@1));
ElementPtr ppl(new IntElement($3, ctx.loc2pos(@3)));
ctx.stack_.back()->set("parked-packet-limit", ppl);
};
ip_reservations_unique: IP_RESERVATIONS_UNIQUE COLON BOOLEAN {
ctx.unique("ip-reservations-unique", ctx.loc2pos(@1));
ElementPtr unique(new BoolElement($3, ctx.loc2pos(@3)));

View File

@ -1027,6 +1027,30 @@ Dhcpv6Srv::processDhcp6Query(Pkt6Ptr& query, Pkt6Ptr& rsp) {
}
callout_handle->setArgument("deleted_leases6", deleted_leases);
// Get the parking limit. Parsing should ensure the value is present.
uint32_t parked_packet_limit = 0;
data::ConstElementPtr ppl = CfgMgr::instance().
getCurrentCfg()->getConfiguredGlobal("parked-packet-limit");
if (ppl) {
parked_packet_limit = ppl->intValue();
}
if (parked_packet_limit) {
const auto& parking_lot = ServerHooks::getServerHooks().
getParkingLotPtr("leases6_committed");
if (parking_lot && (parking_lot->size() >= parked_packet_limit)) {
// We can't park it so we're going to throw it on the floor.
LOG_DEBUG(packet6_logger, DBGLVL_PKT_HANDLING,
DHCP6_HOOK_LEASES6_PARKING_LOT_FULL)
.arg(parked_packet_limit)
.arg(query->getLabel());
isc::stats::StatsMgr::instance().addValue("pkt6-receive-drop",
static_cast<int64_t>(1));
rsp.reset();
return;
}
}
// We proactively park the packet. We'll unpark it without invoking
// the callback (i.e. drop) unless the callout status is set to
// NEXT_STEP_PARK. Otherwise the callback we bind here will be

View File

@ -802,7 +802,8 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
(config_pair.first == "store-extended-info") ||
(config_pair.first == "statistic-default-sample-count") ||
(config_pair.first == "statistic-default-sample-age") ||
(config_pair.first == "ip-reservations-unique")) {
(config_pair.first == "ip-reservations-unique") ||
(config_pair.first == "parked-packet-limit")) {
CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
config_pair.second);
continue;

View File

@ -1,8 +1,8 @@
// A Bison parser, made by GNU Bison 3.7.6.
// A Bison parser, made by GNU Bison 3.3.1.
// Locations for Bison parsers in C++
// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@ -15,7 +15,7 @@
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
@ -38,6 +38,7 @@
#ifndef YY_PARSER6_LOCATION_HH_INCLUDED
# define YY_PARSER6_LOCATION_HH_INCLUDED
# include <algorithm> // std::max
# include <iostream>
# include <string>
@ -53,23 +54,17 @@
# endif
# endif
#line 14 "dhcp6_parser.yy"
#line 14 "dhcp6_parser.yy" // location.cc:339
namespace isc { namespace dhcp {
#line 59 "location.hh"
#line 60 "location.hh" // location.cc:339
/// A point in a source file.
class position
{
public:
/// Type for file name.
typedef const std::string filename_type;
/// Type for line and column numbers.
typedef int counter_type;
/// Construct a position.
explicit position (filename_type* f = YY_NULLPTR,
counter_type l = 1,
counter_type c = 1)
explicit position (std::string* f = YY_NULLPTR,
unsigned l = 1u,
unsigned c = 1u)
: filename (f)
, line (l)
, column (c)
@ -77,9 +72,9 @@ namespace isc { namespace dhcp {
/// Initialization.
void initialize (filename_type* fn = YY_NULLPTR,
counter_type l = 1,
counter_type c = 1)
void initialize (std::string* fn = YY_NULLPTR,
unsigned l = 1u,
unsigned c = 1u)
{
filename = fn;
line = l;
@ -89,40 +84,41 @@ namespace isc { namespace dhcp {
/** \name Line and Column related manipulators
** \{ */
/// (line related) Advance to the COUNT next lines.
void lines (counter_type count = 1)
void lines (int count = 1)
{
if (count)
{
column = 1;
column = 1u;
line = add_ (line, count, 1);
}
}
/// (column related) Advance to the COUNT next columns.
void columns (counter_type count = 1)
void columns (int count = 1)
{
column = add_ (column, count, 1);
}
/** \} */
/// File name to which this position refers.
filename_type* filename;
std::string* filename;
/// Current line number.
counter_type line;
unsigned line;
/// Current column number.
counter_type column;
unsigned column;
private:
/// Compute max (min, lhs+rhs).
static counter_type add_ (counter_type lhs, counter_type rhs, counter_type min)
static unsigned add_ (unsigned lhs, int rhs, int min)
{
return lhs + rhs < min ? min : lhs + rhs;
return static_cast<unsigned> (std::max (min,
static_cast<int> (lhs) + rhs));
}
};
/// Add \a width columns, in place.
inline position&
operator+= (position& res, position::counter_type width)
operator+= (position& res, int width)
{
res.columns (width);
return res;
@ -130,25 +126,43 @@ namespace isc { namespace dhcp {
/// Add \a width columns.
inline position
operator+ (position res, position::counter_type width)
operator+ (position res, int width)
{
return res += width;
}
/// Subtract \a width columns, in place.
inline position&
operator-= (position& res, position::counter_type width)
operator-= (position& res, int width)
{
return res += -width;
}
/// Subtract \a width columns.
inline position
operator- (position res, position::counter_type width)
operator- (position res, int width)
{
return res -= width;
}
/// Compare two position objects.
inline bool
operator== (const position& pos1, const position& pos2)
{
return (pos1.line == pos2.line
&& pos1.column == pos2.column
&& (pos1.filename == pos2.filename
|| (pos1.filename && pos2.filename
&& *pos1.filename == *pos2.filename)));
}
/// Compare two position objects.
inline bool
operator!= (const position& pos1, const position& pos2)
{
return !(pos1 == pos2);
}
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param pos a reference to the position to redirect
@ -166,10 +180,6 @@ namespace isc { namespace dhcp {
class location
{
public:
/// Type for file name.
typedef position::filename_type filename_type;
/// Type for line and column numbers.
typedef position::counter_type counter_type;
/// Construct a location from \a b to \a e.
location (const position& b, const position& e)
@ -184,18 +194,18 @@ namespace isc { namespace dhcp {
{}
/// Construct a 0-width location in \a f, \a l, \a c.
explicit location (filename_type* f,
counter_type l = 1,
counter_type c = 1)
explicit location (std::string* f,
unsigned l = 1u,
unsigned c = 1u)
: begin (f, l, c)
, end (f, l, c)
{}
/// Initialization.
void initialize (filename_type* f = YY_NULLPTR,
counter_type l = 1,
counter_type c = 1)
void initialize (std::string* f = YY_NULLPTR,
unsigned l = 1u,
unsigned c = 1u)
{
begin.initialize (f, l, c);
end = begin;
@ -211,13 +221,13 @@ namespace isc { namespace dhcp {
}
/// Extend the current location to the COUNT next columns.
void columns (counter_type count = 1)
void columns (int count = 1)
{
end += count;
}
/// Extend the current location to the COUNT next lines.
void lines (counter_type count = 1)
void lines (int count = 1)
{
end.lines (count);
}
@ -232,49 +242,57 @@ namespace isc { namespace dhcp {
};
/// Join two locations, in place.
inline location&
operator+= (location& res, const location& end)
inline location& operator+= (location& res, const location& end)
{
res.end = end.end;
return res;
}
/// Join two locations.
inline location
operator+ (location res, const location& end)
inline location operator+ (location res, const location& end)
{
return res += end;
}
/// Add \a width columns to the end position, in place.
inline location&
operator+= (location& res, location::counter_type width)
inline location& operator+= (location& res, int width)
{
res.columns (width);
return res;
}
/// Add \a width columns to the end position.
inline location
operator+ (location res, location::counter_type width)
inline location operator+ (location res, int width)
{
return res += width;
}
/// Subtract \a width columns to the end position, in place.
inline location&
operator-= (location& res, location::counter_type width)
inline location& operator-= (location& res, int width)
{
return res += -width;
}
/// Subtract \a width columns to the end position.
inline location
operator- (location res, location::counter_type width)
inline location operator- (location res, int width)
{
return res -= width;
}
/// Compare two location objects.
inline bool
operator== (const location& loc1, const location& loc2)
{
return loc1.begin == loc2.begin && loc1.end == loc2.end;
}
/// Compare two location objects.
inline bool
operator!= (const location& loc1, const location& loc2)
{
return !(loc1 == loc2);
}
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param loc a reference to the location to redirect
@ -285,8 +303,7 @@ namespace isc { namespace dhcp {
std::basic_ostream<YYChar>&
operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
{
location::counter_type end_col
= 0 < loc.end.column ? loc.end.column - 1 : 0;
unsigned end_col = 0 < loc.end.column ? loc.end.column - 1 : 0;
ostr << loc.begin;
if (loc.end.filename
&& (!loc.begin.filename
@ -299,8 +316,7 @@ namespace isc { namespace dhcp {
return ostr;
}
#line 14 "dhcp6_parser.yy"
#line 14 "dhcp6_parser.yy" // location.cc:339
} } // isc::dhcp
#line 305 "location.hh"
#line 322 "location.hh" // location.cc:339
#endif // !YY_PARSER6_LOCATION_HH_INCLUDED

View File

@ -11,6 +11,7 @@
#include <cc/simple_parser.h>
#include <cc/cfg_to_element.h>
#include <testutils/user_context_utils.h>
#include <testutils/user_context_utils.h>
#include <dhcp/tests/iface_mgr_test_config.h>
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/parsers/simple_parser6.h>
@ -69,6 +70,7 @@ namespace {
///@{
/// @brief extracted configurations
const char* EXTRACTED_CONFIGS[] = {
/// put this after const char* EXTRACTED_CONFIGS[] = {
// CONFIGURATION 0
"{\n"
" \"interfaces-config\": {\n"
@ -2012,11 +2014,43 @@ const char* EXTRACTED_CONFIGS[] = {
" \"thread-pool-size\": 48\n"
" },\n"
" \"subnet6\": [ ]\n"
" }\n",
// CONFIGURATION 63
"{\n"
" \"client-classes\": [\n"
" {\n"
" \"max-preferred-lifetime\": 6000,\n"
" \"max-valid-lifetime\": 3000,\n"
" \"min-preferred-lifetime\": 4000,\n"
" \"min-valid-lifetime\": 1000,\n"
" \"name\": \"one\",\n"
" \"preferred-lifetime\": 5000,\n"
" \"valid-lifetime\": 2000\n"
" },\n"
" {\n"
" \"name\": \"two\"\n"
" }\n"
" ],\n"
" \"interfaces-config\": {\n"
" \"interfaces\": [ \"*\" ],\n"
" \"re-detect\": false\n"
" },\n"
" \"subnet6\": [\n"
" {\n"
" \"pools\": [\n"
" {\n"
" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n"
" }\n"
" ],\n"
" \"subnet\": \"2001:db8:1::/64\"\n"
" }\n"
" ]\n"
" }\n"
};
/// @brief unparsed configurations
const char* UNPARSED_CONFIGS[] = {
///put this after const char* UNPARSED_CONFIGS[] = {
// CONFIGURATION 0
"{\n"
" \"calculate-tee-times\": true,\n"
@ -2073,6 +2107,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -2161,6 +2196,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -2275,6 +2311,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -2460,6 +2497,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -2645,6 +2683,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -2834,6 +2873,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -2948,6 +2988,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3059,6 +3100,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3170,6 +3212,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3313,6 +3356,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3423,6 +3467,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3535,6 +3580,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3649,6 +3695,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3778,6 +3825,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -3900,6 +3948,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"ipv6-address\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -3992,6 +4041,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"record\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -4093,6 +4143,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -4185,6 +4236,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -4277,6 +4329,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -4376,6 +4429,7 @@ const char* UNPARSED_CONFIGS[] = {
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -4486,6 +4540,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -4640,6 +4695,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -4786,6 +4842,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -4923,6 +4980,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"ipv4-address\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5033,6 +5091,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5186,6 +5245,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5364,6 +5424,7 @@ const char* UNPARSED_CONFIGS[] = {
" }\n"
" ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5493,6 +5554,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"string\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5603,6 +5665,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5687,6 +5750,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5771,6 +5835,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5881,6 +5946,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -5991,6 +6057,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -6179,6 +6246,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -6304,6 +6372,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -6437,6 +6506,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -6547,6 +6617,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -6657,6 +6728,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -6767,6 +6839,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -7012,6 +7085,7 @@ const char* UNPARSED_CONFIGS[] = {
" \"type\": \"uint32\"\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -7135,6 +7209,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -7219,6 +7294,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -7303,6 +7379,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -7579,6 +7656,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -7717,6 +7795,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"23\", \"37\", \"65\" ],\n"
@ -7801,6 +7880,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -7883,6 +7963,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -7965,6 +8046,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -8047,6 +8129,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -8143,6 +8226,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -8253,6 +8337,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -8363,6 +8448,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -8474,6 +8560,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -8590,6 +8677,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -8706,6 +8794,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -8818,6 +8907,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -8931,6 +9021,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -9063,6 +9154,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -9207,6 +9299,7 @@ const char* UNPARSED_CONFIGS[] = {
" }\n"
" }\n"
" ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -9377,6 +9470,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -9579,6 +9673,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3000,\n"
" \"rebind-timer\": 2000,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
@ -9663,6 +9758,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -9745,6 +9841,7 @@ const char* UNPARSED_CONFIGS[] = {
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
@ -9770,6 +9867,129 @@ const char* UNPARSED_CONFIGS[] = {
" \"t1-percent\": 0.5,\n"
" \"t2-percent\": 0.8,\n"
" \"valid-lifetime\": 7200\n"
" }\n",
// CONFIGURATION 63
"{\n"
" \"calculate-tee-times\": true,\n"
" \"client-classes\": [\n"
" {\n"
" \"max-preferred-lifetime\": 6000,\n"
" \"max-valid-lifetime\": 3000,\n"
" \"min-preferred-lifetime\": 4000,\n"
" \"min-valid-lifetime\": 1000,\n"
" \"name\": \"one\",\n"
" \"option-data\": [ ],\n"
" \"preferred-lifetime\": 5000,\n"
" \"valid-lifetime\": 2000\n"
" },\n"
" {\n"
" \"name\": \"two\",\n"
" \"option-data\": [ ]\n"
" }\n"
" ],\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"
" \"ddns-use-conflict-resolution\": true,\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"
" \"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\": false,\n"
" \"packet-queue-size\": 64,\n"
" \"thread-pool-size\": 0\n"
" },\n"
" \"option-data\": [ ],\n"
" \"option-def\": [ ],\n"
" \"parked-packet-limit\": 256,\n"
" \"preferred-lifetime\": 3600,\n"
" \"relay-supplied-options\": [ \"65\" ],\n"
" \"reservations-global\": false,\n"
" \"reservations-in-subnet\": true,\n"
" \"reservations-out-of-pool\": false,\n"
" \"sanity-checks\": {\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"
" {\n"
" \"calculate-tee-times\": true,\n"
" \"id\": 1,\n"
" \"option-data\": [ ],\n"
" \"pd-pools\": [ ],\n"
" \"pools\": [\n"
" {\n"
" \"option-data\": [ ],\n"
" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n"
" }\n"
" ],\n"
" \"preferred-lifetime\": 3600,\n"
" \"rapid-commit\": false,\n"
" \"relay\": {\n"
" \"ip-addresses\": [ ]\n"
" },\n"
" \"reservations\": [ ],\n"
" \"store-extended-info\": false,\n"
" \"subnet\": \"2001:db8:1::/64\",\n"
" \"t1-percent\": 0.5,\n"
" \"t2-percent\": 0.8,\n"
" \"valid-lifetime\": 7200\n"
" }\n"
" ],\n"
" \"t1-percent\": 0.5,\n"
" \"t2-percent\": 0.8,\n"
" \"valid-lifetime\": 7200\n"
" }\n"
};

View File

@ -97,6 +97,7 @@ const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = {
{ "ddns-update-on-renew", Element::boolean },
{ "ddns-use-conflict-resolution", Element::boolean },
{ "compatibility", Element::map },
{ "parked-packet-limit", Element::integer },
};
/// @brief This table defines default global values for DHCPv6
@ -129,7 +130,8 @@ const SimpleDefaults SimpleParser6::GLOBAL6_DEFAULTS = {
{ "statistic-default-sample-age", Element::integer, "0" },
{ "ip-reservations-unique", Element::boolean, "true" },
{ "ddns-update-on-renew", Element::boolean, "false" },
{ "ddns-use-conflict-resolution", Element::boolean, "true" }
{ "ddns-use-conflict-resolution", Element::boolean, "true" },
{ "parked-packet-limit", Element::integer, "256" }
};
/// @brief This table defines all option definition parameters.