network.cc 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright (C) 2017 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/network.h>
  7. using namespace isc::data;
  8. namespace isc {
  9. namespace dhcp {
  10. bool
  11. Network::clientSupported(const isc::dhcp::ClientClasses& classes) const {
  12. if (white_list_.empty()) {
  13. // There is no class defined for this network, so we do
  14. // support everyone.
  15. return (true);
  16. }
  17. for (ClientClasses::const_iterator it = white_list_.begin();
  18. it != white_list_.end(); ++it) {
  19. if (classes.contains(*it)) {
  20. return (true);
  21. }
  22. }
  23. return (false);
  24. }
  25. void
  26. Network::allowClientClass(const isc::dhcp::ClientClass& class_name) {
  27. white_list_.insert(class_name);
  28. }
  29. ElementPtr
  30. Network::toElement() const {
  31. ElementPtr map = Element::createMap();
  32. // Set interface
  33. const std::string& iface = getIface();
  34. if (!iface.empty()) {
  35. map->set("interface", Element::create(iface));
  36. }
  37. // Set relay info
  38. const RelayInfo& relay_info = getRelayInfo();
  39. ElementPtr relay = Element::createMap();
  40. relay->set("ip-address", Element::create(relay_info.addr_.toText()));
  41. map->set("relay", relay);
  42. // Set client-class
  43. const ClientClasses& cclasses = getClientClasses();
  44. if (cclasses.size() > 1) {
  45. isc_throw(ToElementError, "client-class has too many items: "
  46. << cclasses.size());
  47. } else if (!cclasses.empty()) {
  48. map->set("client-class", Element::create(*cclasses.cbegin()));
  49. }
  50. // Set renew-timer
  51. map->set("renew-timer",
  52. Element::create(static_cast<long long>
  53. (getT1().get())));
  54. // Set rebind-timer
  55. map->set("rebind-timer",
  56. Element::create(static_cast<long long>
  57. (getT2().get())));
  58. // Set valid-lifetime
  59. map->set("valid-lifetime",
  60. Element::create(static_cast<long long>
  61. (getValid().get())));
  62. // Set options
  63. ConstCfgOptionPtr opts = getCfgOption();
  64. map->set("option-data", opts->toElement());
  65. return (map);
  66. }
  67. } // end of namespace isc::dhcp
  68. } // end of namespace isc