cfg_expiration.cc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  8. // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  9. // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  10. // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  11. // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  12. // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  13. // PERFORMANCE OF THIS SOFTWARE.
  14. #include <dhcpsrv/cfg_expiration.h>
  15. #include <exceptions/exceptions.h>
  16. #include <limits>
  17. namespace isc {
  18. namespace dhcp {
  19. // Default values
  20. const uint16_t CfgExpiration::DEFAULT_RECLAIM_TIMER_WAIT_TIME = 10;
  21. const uint16_t CfgExpiration::DEFAULT_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 25;
  22. const uint32_t CfgExpiration::DEFAULT_HOLD_RECLAIMED_TIME = 3600;
  23. const uint32_t CfgExpiration::DEFAULT_MAX_RECLAIM_LEASES = 100;
  24. const uint16_t CfgExpiration::DEFAULT_MAX_RECLAIM_TIME = 250;
  25. const uint16_t CfgExpiration::DEFAULT_UNWARNED_RECLAIM_CYCLES = 5;
  26. // Maximum values.
  27. const uint16_t CfgExpiration::LIMIT_RECLAIM_TIMER_WAIT_TIME =
  28. std::numeric_limits<uint16_t>::max();
  29. const uint16_t CfgExpiration::LIMIT_FLUSH_RECLAIMED_TIMER_WAIT_TIME =
  30. std::numeric_limits<uint16_t>::max();
  31. const uint32_t CfgExpiration::LIMIT_HOLD_RECLAIMED_TIME =
  32. std::numeric_limits<uint32_t>::max();
  33. const uint32_t CfgExpiration::LIMIT_MAX_RECLAIM_LEASES =
  34. std::numeric_limits<uint32_t>::max();
  35. const uint16_t CfgExpiration::LIMIT_MAX_RECLAIM_TIME = 10000;
  36. const uint16_t CfgExpiration::LIMIT_UNWARNED_RECLAIM_CYCLES =
  37. std::numeric_limits<uint16_t>::max();
  38. // Timers' names
  39. const std::string CfgExpiration::RECLAIM_EXPIRED_TIMER_NAME =
  40. "reclaim-expired-leases";
  41. const std::string CfgExpiration::FLUSH_RECLAIMED_TIMER_NAME =
  42. "flush-reclaimed-leases";
  43. CfgExpiration::CfgExpiration(const bool test_mode)
  44. : reclaim_timer_wait_time_(DEFAULT_RECLAIM_TIMER_WAIT_TIME),
  45. flush_reclaimed_timer_wait_time_(DEFAULT_FLUSH_RECLAIMED_TIMER_WAIT_TIME),
  46. hold_reclaimed_time_(DEFAULT_HOLD_RECLAIMED_TIME),
  47. max_reclaim_leases_(DEFAULT_MAX_RECLAIM_LEASES),
  48. max_reclaim_time_(DEFAULT_MAX_RECLAIM_TIME),
  49. unwarned_reclaim_cycles_(DEFAULT_UNWARNED_RECLAIM_CYCLES),
  50. timer_mgr_(TimerMgr::instance()),
  51. test_mode_(test_mode) {
  52. }
  53. void
  54. CfgExpiration::setReclaimTimerWaitTime(const int64_t reclaim_timer_wait_time) {
  55. rangeCheck(reclaim_timer_wait_time, LIMIT_RECLAIM_TIMER_WAIT_TIME,
  56. "reclaim-timer-wait-time");
  57. reclaim_timer_wait_time_ = reclaim_timer_wait_time;
  58. }
  59. void
  60. CfgExpiration::setFlushReclaimedTimerWaitTime(const int64_t flush_reclaimed_wait_time) {
  61. rangeCheck(flush_reclaimed_wait_time, LIMIT_FLUSH_RECLAIMED_TIMER_WAIT_TIME,
  62. "flush-reclaimed-timer-wait-time");
  63. flush_reclaimed_timer_wait_time_ = flush_reclaimed_wait_time;
  64. }
  65. void
  66. CfgExpiration::setHoldReclaimedTime(const int64_t hold_reclaimed_time) {
  67. rangeCheck(hold_reclaimed_time, LIMIT_HOLD_RECLAIMED_TIME, "hold-reclaimed-time");
  68. hold_reclaimed_time_ = hold_reclaimed_time;
  69. }
  70. void
  71. CfgExpiration::setMaxReclaimLeases(const int64_t max_reclaim_leases) {
  72. rangeCheck(max_reclaim_leases, LIMIT_MAX_RECLAIM_LEASES, "max-reclaim-leases");
  73. max_reclaim_leases_ = max_reclaim_leases;
  74. }
  75. void
  76. CfgExpiration::setMaxReclaimTime(const int64_t max_reclaim_time) {
  77. rangeCheck(max_reclaim_time, LIMIT_MAX_RECLAIM_TIME, "max-reclaim-time");
  78. max_reclaim_time_ = max_reclaim_time;
  79. }
  80. void
  81. CfgExpiration::setUnwarnedReclaimCycles(const int64_t unwarned_reclaim_cycles) {
  82. rangeCheck(unwarned_reclaim_cycles, LIMIT_UNWARNED_RECLAIM_CYCLES,
  83. "unwarned-reclaim-cycles");
  84. unwarned_reclaim_cycles_ = unwarned_reclaim_cycles;
  85. }
  86. void
  87. CfgExpiration::rangeCheck(const int64_t value, const uint64_t max_value,
  88. const std::string& config_parameter_name) const {
  89. if (value < 0) {
  90. isc_throw(OutOfRange, "value for configuration parameter '"
  91. << config_parameter_name << "' must not be negtive");
  92. } else if (value > max_value) {
  93. isc_throw(OutOfRange, "out range value '" << value << "' for configuration"
  94. " parameter '" << config_parameter_name << "', expected maximum"
  95. " value of '" << max_value << "'");
  96. }
  97. }
  98. }
  99. }