cfg_expiration.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this
  5. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
  6. #include <dhcpsrv/cfg_expiration.h>
  7. #include <exceptions/exceptions.h>
  8. #include <limits>
  9. namespace isc {
  10. namespace dhcp {
  11. // Default values
  12. const uint16_t CfgExpiration::DEFAULT_RECLAIM_TIMER_WAIT_TIME = 10;
  13. const uint16_t CfgExpiration::DEFAULT_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 25;
  14. const uint32_t CfgExpiration::DEFAULT_HOLD_RECLAIMED_TIME = 3600;
  15. const uint32_t CfgExpiration::DEFAULT_MAX_RECLAIM_LEASES = 100;
  16. const uint16_t CfgExpiration::DEFAULT_MAX_RECLAIM_TIME = 250;
  17. const uint16_t CfgExpiration::DEFAULT_UNWARNED_RECLAIM_CYCLES = 5;
  18. // Maximum values.
  19. const uint16_t CfgExpiration::LIMIT_RECLAIM_TIMER_WAIT_TIME =
  20. std::numeric_limits<uint16_t>::max();
  21. const uint16_t CfgExpiration::LIMIT_FLUSH_RECLAIMED_TIMER_WAIT_TIME =
  22. std::numeric_limits<uint16_t>::max();
  23. const uint32_t CfgExpiration::LIMIT_HOLD_RECLAIMED_TIME =
  24. std::numeric_limits<uint32_t>::max();
  25. const uint32_t CfgExpiration::LIMIT_MAX_RECLAIM_LEASES =
  26. std::numeric_limits<uint32_t>::max();
  27. const uint16_t CfgExpiration::LIMIT_MAX_RECLAIM_TIME = 10000;
  28. const uint16_t CfgExpiration::LIMIT_UNWARNED_RECLAIM_CYCLES =
  29. std::numeric_limits<uint16_t>::max();
  30. // Timers' names
  31. const std::string CfgExpiration::RECLAIM_EXPIRED_TIMER_NAME =
  32. "reclaim-expired-leases";
  33. const std::string CfgExpiration::FLUSH_RECLAIMED_TIMER_NAME =
  34. "flush-reclaimed-leases";
  35. CfgExpiration::CfgExpiration(const bool test_mode)
  36. : reclaim_timer_wait_time_(DEFAULT_RECLAIM_TIMER_WAIT_TIME),
  37. flush_reclaimed_timer_wait_time_(DEFAULT_FLUSH_RECLAIMED_TIMER_WAIT_TIME),
  38. hold_reclaimed_time_(DEFAULT_HOLD_RECLAIMED_TIME),
  39. max_reclaim_leases_(DEFAULT_MAX_RECLAIM_LEASES),
  40. max_reclaim_time_(DEFAULT_MAX_RECLAIM_TIME),
  41. unwarned_reclaim_cycles_(DEFAULT_UNWARNED_RECLAIM_CYCLES),
  42. timer_mgr_(TimerMgr::instance()),
  43. test_mode_(test_mode) {
  44. }
  45. void
  46. CfgExpiration::setReclaimTimerWaitTime(const int64_t reclaim_timer_wait_time) {
  47. rangeCheck(reclaim_timer_wait_time, LIMIT_RECLAIM_TIMER_WAIT_TIME,
  48. "reclaim-timer-wait-time");
  49. reclaim_timer_wait_time_ = reclaim_timer_wait_time;
  50. }
  51. void
  52. CfgExpiration::setFlushReclaimedTimerWaitTime(const int64_t flush_reclaimed_wait_time) {
  53. rangeCheck(flush_reclaimed_wait_time, LIMIT_FLUSH_RECLAIMED_TIMER_WAIT_TIME,
  54. "flush-reclaimed-timer-wait-time");
  55. flush_reclaimed_timer_wait_time_ = flush_reclaimed_wait_time;
  56. }
  57. void
  58. CfgExpiration::setHoldReclaimedTime(const int64_t hold_reclaimed_time) {
  59. rangeCheck(hold_reclaimed_time, LIMIT_HOLD_RECLAIMED_TIME, "hold-reclaimed-time");
  60. hold_reclaimed_time_ = hold_reclaimed_time;
  61. }
  62. void
  63. CfgExpiration::setMaxReclaimLeases(const int64_t max_reclaim_leases) {
  64. rangeCheck(max_reclaim_leases, LIMIT_MAX_RECLAIM_LEASES, "max-reclaim-leases");
  65. max_reclaim_leases_ = max_reclaim_leases;
  66. }
  67. void
  68. CfgExpiration::setMaxReclaimTime(const int64_t max_reclaim_time) {
  69. rangeCheck(max_reclaim_time, LIMIT_MAX_RECLAIM_TIME, "max-reclaim-time");
  70. max_reclaim_time_ = max_reclaim_time;
  71. }
  72. void
  73. CfgExpiration::setUnwarnedReclaimCycles(const int64_t unwarned_reclaim_cycles) {
  74. rangeCheck(unwarned_reclaim_cycles, LIMIT_UNWARNED_RECLAIM_CYCLES,
  75. "unwarned-reclaim-cycles");
  76. unwarned_reclaim_cycles_ = unwarned_reclaim_cycles;
  77. }
  78. void
  79. CfgExpiration::rangeCheck(const int64_t value, const uint64_t max_value,
  80. const std::string& config_parameter_name) const {
  81. if (value < 0) {
  82. isc_throw(OutOfRange, "value for configuration parameter '"
  83. << config_parameter_name << "' must not be negtive");
  84. } else if (value > max_value) {
  85. isc_throw(OutOfRange, "out range value '" << value << "' for configuration"
  86. " parameter '" << config_parameter_name << "', expected maximum"
  87. " value of '" << max_value << "'");
  88. }
  89. }
  90. }
  91. }