24    bool has_renew = network_data->contains(
"renew-timer");
 
   25    bool has_rebind = network_data->contains(
"rebind-timer");
 
   30        renew = 
getInteger(network_data, 
"renew-timer");
 
   33                      << renew << 
") must be a positive number");
 
   35        network->setT1(renew);
 
   39        rebind = 
getInteger(network_data, 
"rebind-timer");
 
   42                      << rebind << 
") must be a positive number");
 
   44        network->setT2(rebind);
 
   47    if (has_renew && has_rebind && (renew > rebind)) {
 
   52                 .arg(network->getLabel())
 
   59    if (network_data->contains(
"store-extended-info")) {
 
   60        network->setStoreExtendedInfo(
getBoolean(network_data,
 
   61                                                 "store-extended-info"));
 
   64    if (network_data->contains(
"reservations-global")) {
 
   65        network->setReservationsGlobal(
getBoolean(network_data,
 
   66                                                  "reservations-global"));
 
   69    if (network_data->contains(
"reservations-in-subnet")) {
 
   70        network->setReservationsInSubnet(
getBoolean(network_data,
 
   71                                                    "reservations-in-subnet"));
 
   74    if (network_data->contains(
"reservations-out-of-pool")) {
 
   75        network->setReservationsOutOfPool(
getBoolean(network_data,
 
   76                                                     "reservations-out-of-pool"));
 
 
   83    bool calculate_tee_times = network->getCalculateTeeTimes();
 
   84    if (network_data->contains(
"calculate-tee-times")) {
 
   85        calculate_tee_times = 
getBoolean(network_data, 
"calculate-tee-times");
 
   86        network->setCalculateTeeTimes(calculate_tee_times);
 
   90    if (network_data->contains(
"t2-percent")) {
 
   91        t2_percent = 
getDouble(network_data, 
"t2-percent");
 
   95    if (network_data->contains(
"t1-percent")) {
 
   96        t1_percent = 
getDouble(network_data, 
"t1-percent");
 
   98    if (calculate_tee_times) {
 
  100                                          (t2_percent.
get() >= 1.0))) {
 
  102                      << 
" is invalid, it must be greater than 0.0 and less than 1.0");
 
  106                                          (t1_percent.
get() >= 1.0))) {
 
  108                      << 
" is invalid it must be greater than 0.0 and less than 1.0");
 
  112            (t1_percent.
get() >= t2_percent.
get())) {
 
  114                      << 
" is invalid, it must be less than t2-percent: " 
  115                      << t2_percent.
get());
 
  119    network->setT2Percent(t2_percent);
 
  120    network->setT1Percent(t1_percent);
 
 
  126    if (network_data->contains(
"cache-threshold")) {
 
  127        double cache_threshold = 
getDouble(network_data, 
"cache-threshold");
 
  128        if ((cache_threshold < 0.0) || (cache_threshold >= 1.0)) {
 
  130                      << 
" is invalid, it must be greater than or equal to 0.0 and less than 1.0");
 
  132        network->setCacheThreshold(cache_threshold);
 
  135    if (network_data->contains(
"cache-max-age")) {
 
  136        network->setCacheMaxAge(
getInteger(network_data, 
"cache-max-age"));
 
 
  149    if (network_data->contains(
"allocator")) {
 
  150        auto allocator_type = 
getString(network_data, 
"allocator");
 
  151        if ((allocator_type != 
"iterative") && (allocator_type != 
"random") &&
 
  152            (allocator_type != 
"flq")) {
 
  156        network->setAllocatorType(allocator_type);
 
 
  163    if (network_data->contains(
"pd-allocator")) {
 
  164        auto allocator_type = 
getString(network_data, 
"pd-allocator");
 
  165        if ((allocator_type != 
"iterative") && (allocator_type != 
"random") &&
 
  166            (allocator_type != 
"flq")) {
 
  170        network->setPdAllocatorType(allocator_type);
 
 
  177    if (network_data->contains(
"offer-lifetime")) {
 
  178        auto value = 
getInteger(network_data, 
"offer-lifetime");
 
  181                      << value << 
"' must be a positive number (" 
  182                      << 
getPosition(
"offer-lifetime", network_data) << 
")");
 
  185        network->setOfferLft(value);
 
 
  193    ConstElementPtr req_class_list = params->get(
"require-client-classes");
 
  195    if (req_class_list) {
 
  201                      "cannot specify both 'require-client-classes' and " 
  202                      "'evaluate-additional-classes'. Use only the latter.");
 
  207        const std::vector<data::ElementPtr>& classes = 
class_list->listValue();
 
  208        for (
auto const& cclass : classes) {
 
  210                cclass->stringValue().empty()) {
 
  214            (adder_func)(cclass->stringValue());
 
 
  232            if (!class_elem->stringValue().empty()) {
 
  233                (adder_func)(class_elem->stringValue());
 
  237                      "cannot specify both 'client-class' and " 
  238                      "'client-classes'. Use only the latter.");
 
  243        for (
auto const& cclass : 
class_list->listValue()) {
 
  245                cclass->stringValue().empty()) {
 
  249            (adder_func)(cclass->stringValue());
 
 
int class_list(CalloutHandle &handle)
This is a command callout for 'class-list' command.
static const data::Element::Position & getPosition(const std::string &name, const data::ConstElementPtr parent)
Utility method that returns position of an element.
static double getDouble(const ConstElementPtr &scope, const std::string &name)
Returns a floating point parameter from a scope.
static std::string getString(isc::data::ConstElementPtr scope, const std::string &name)
Returns a string parameter from a scope.
const isc::util::Triplet< uint32_t > parseIntTriplet(const data::ConstElementPtr &scope, const std::string &name)
Parses an integer triplet.
static bool getBoolean(isc::data::ConstElementPtr scope, const std::string &name)
Returns a boolean parameter from a scope.
static int64_t getInteger(isc::data::ConstElementPtr scope, const std::string &name)
Returns an integer parameter from a scope.
void parseCacheParams(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters related to lease cache settings.
void parseAllocatorParams(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters pertaining to allocator selection.
static void getClientClassesElem(data::ConstElementPtr params, ClassAdderFunc adder_func)
Fetches the element for either 'client-classes' or deprecated 'client-class'.
void parseDdnsParams(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters pertaining to DDNS behavior.
void parseCommon(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses common parameters.
std::function< void(const isc::dhcp::ClientClass &)> ClassAdderFunc
void parseDdnsParameters(const data::ConstElementPtr &config, DdnsOwnerTypePtr owner)
Parses parameters pertaining to DDNS behavior.
static void getAdditionalClassesElem(data::ConstElementPtr params, ClassAdderFunc adder_func)
Fetches the element for either 'evaluate-additional-classes' or deprecated 'require-client-classes'.
void parseTeePercents(const data::ConstElementPtr &network_data, NetworkPtr &network)
Parses parameters related to "percent" timers settings.
void parsePdAllocatorParams(const data::ConstElementPtr &network_data, Network6Ptr &network)
Parses parameters pertaining to prefix delegation allocator selection.
void parseOfferLft(const data::ConstElementPtr &network_data, Network4Ptr &network)
Parses offer-lifetime parameter (v4 only)
To be removed. Please use ConfigError instead.
A template representing an optional value.
T get() const
Retrieves the encapsulated value.
void unspecified(bool unspecified)
Modifies the flag that indicates whether the value is specified or unspecified.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_WARN(LOGGER, MESSAGE)
Macro to conveniently test warn output and log it.
boost::shared_ptr< const Element > ConstElementPtr
isc::log::Logger dhcpsrv_logger("dhcpsrv")
DHCP server library Logger.
boost::shared_ptr< Network4 > Network4Ptr
Pointer to the Network4 object.
const isc::log::MessageID DHCPSRV_CFGMGR_RENEW_GTR_REBIND
boost::shared_ptr< Network6 > Network6Ptr
Pointer to the Network6 object.
const isc::log::MessageID DHCPSRV_CLIENT_CLASS_DEPRECATED
const isc::log::MessageID DHCPSRV_REQUIRE_CLIENT_CLASSES_DEPRECATED
boost::shared_ptr< Network > NetworkPtr
Pointer to the Network object.
Defines the logger used by the top-level component of kea-lfc.