13 #include <boost/pointer_cast.hpp> 23 if (containsAddress(addr)) {
28 addresses_.push_back(addr);
32 Network::RelayInfo::hasAddresses()
const {
33 return (!addresses_.empty());
38 for (
auto address = addresses_.begin(); address != addresses_.end();
40 if ((*address) == addr) {
49 Network::RelayInfo::getAddresses()
const {
55 relay_.addAddress(addr);
59 Network::hasRelays()
const {
60 return (relay_.hasAddresses());
65 return (relay_.containsAddress(addr));
69 Network::getRelayAddresses()
const {
70 return (relay_.getAddresses());
75 if (client_class_.empty()) {
81 return (classes.
contains(client_class_));
86 client_class_ = class_name;
91 if (!required_classes_.contains(class_name)) {
92 required_classes_.insert(class_name);
97 Network::getRequiredClasses()
const {
98 return (required_classes_);
102 Network::toElement()
const {
106 contextToElement(map);
109 const std::string& iface = getIface();
110 if (!iface.empty()) {
111 map->set(
"interface", Element::create(iface));
115 ElementPtr address_list = Element::createList();
117 for (
auto address = addresses.begin(); address != addresses.end(); ++address) {
118 address_list->add(Element::create((*address).toText()));
121 relay_map->set(
"ip-addresses", address_list);
122 map->set(
"relay", relay_map);
126 if (!cclass.empty()) {
127 map->set(
"client-class", Element::create(cclass));
132 if (!classes.
empty()) {
133 ElementPtr class_list = Element::createList();
135 it != classes.
cend(); ++it) {
136 class_list->add(Element::create(*it));
138 map->set(
"require-client-classes", class_list);
144 if (!getT1().unspecified()) {
145 map->set(
"renew-timer",
146 Element::create(static_cast<long long>(getT1().get())));
150 if (!getT2().unspecified()) {
151 map->set(
"rebind-timer",
152 Element::create(static_cast<long long>(getT2().get())));
156 if (!getValid().unspecified()) {
157 map->set(
"valid-lifetime",
158 Element::create(static_cast<long long>
159 (getValid().get())));
170 mode =
"out-of-pool";
180 "invalid host reservation mode: " << hrmode);
182 map->set(
"reservation-mode", Element::create(mode));
186 map->set(
"option-data", opts->toElement());
192 Network4::toElement()
const {
196 map->set(
"match-client-id", Element::create(getMatchClientId()));
199 map->set(
"authoritative", Element::create(getAuthoritative()));
205 Network4::getServerId()
const {
207 OptionCustomPtr opt_server_id = boost::dynamic_pointer_cast<OptionCustom>
210 return (opt_server_id->readAddress());
212 }
catch (
const std::exception&) {
220 Network6::toElement()
const {
224 map->set(
"preferred-lifetime",
225 Element::create(static_cast<long long>
226 (getPreferred().get())));
229 const OptionPtr& ifaceid = getInterfaceId();
231 std::vector<uint8_t> bin = ifaceid->getData();
233 ifid.resize(bin.size());
235 std::memcpy(&ifid[0], &bin[0], bin.size());
237 map->set(
"interface-id", Element::create(ifid));
241 bool rapid_commit = getRapidCommit();
242 map->set(
"rapid-commit", Element::create(rapid_commit));
std::vector< isc::asiolink::IOAddress > IOAddressList
List of IOAddresses.
boost::shared_ptr< OptionCustom > OptionCustomPtr
A pointer to the OptionCustom object.
bool contains(const ClientClass &x) const
returns if class x belongs to the defined classes
boost::shared_ptr< const CfgOption > ConstCfgOptionPtr
Const pointer.
boost::shared_ptr< Option > OptionPtr
boost::shared_ptr< Element > ElementPtr
const_iterator cbegin() const
Iterator to the first element.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
std::list< ClientClass >::const_iterator const_iterator
Type of iterators.
static const IOAddress & IPV4_ZERO_ADDRESS()
Returns an address set to all zeros.
#define DHCP4_OPTION_SPACE
bool empty() const
Check if classes is empty.
HRMode
Specifies allowed host reservation mode.
Defines the logger used by the top-level component of kea-dhcp-ddns.
std::string toText() const
Convert the address to a string.
const_iterator cend() const
Iterator to the past the end element.
std::string ClientClass
Defines a single class name.
The IOAddress class represents an IP addresses (version agnostic)
Container for storing client class names.