13 #include <boost/pointer_cast.hpp> 24 if (containsAddress(addr)) {
29 addresses_.push_back(addr);
33 Network::RelayInfo::hasAddresses()
const {
34 return (!addresses_.empty());
40 return (index.find(addr) != index.end());
44 Network::RelayInfo::getAddresses()
const {
50 relay_.addAddress(addr);
54 Network::hasRelays()
const {
55 return (relay_.hasAddresses());
60 return (relay_.containsAddress(addr));
64 Network::getRelayAddresses()
const {
65 return (relay_.getAddresses());
70 if (client_class_.empty()) {
76 return (classes.
contains(client_class_));
81 client_class_ = class_name;
86 if (!required_classes_.contains(class_name)) {
87 required_classes_.insert(class_name);
92 Network::getRequiredClasses()
const {
93 return (required_classes_);
98 const int global_index,
101 if ((global_index >= 0) && fetch_globals_fn_) {
106 std::string global_str = global_param->stringValue();
107 if (!global_str.empty()) {
117 Network::toElement()
const {
121 contextToElement(map);
124 if (!iface_name_.unspecified()) {
125 map->set(
"interface", Element::create(iface_name_.get()));
129 ElementPtr address_list = Element::createList();
131 for (
auto address = addresses.begin(); address != addresses.end(); ++address) {
132 address_list->add(Element::create((*address).toText()));
135 relay_map->set(
"ip-addresses", address_list);
136 map->set(
"relay", relay_map);
139 if (!client_class_.unspecified()) {
140 map->set(
"client-class", Element::create(client_class_.get()));
145 if (!classes.
empty()) {
146 ElementPtr class_list = Element::createList();
148 it != classes.
cend(); ++it) {
149 class_list->add(Element::create(*it));
151 map->set(
"require-client-classes", class_list);
157 if (!t1_.unspecified()) {
158 map->set(
"renew-timer",
159 Element::create(static_cast<long long>(t1_.get())));
163 if (!t2_.unspecified()) {
164 map->set(
"rebind-timer",
165 Element::create(static_cast<long long>(t2_.get())));
169 if (!valid_.unspecified()) {
170 map->set(
"valid-lifetime",
171 Element::create(static_cast<long long>(valid_.get())));
172 map->set(
"min-valid-lifetime",
173 Element::create(static_cast<long long>(valid_.getMin())));
174 map->set(
"max-valid-lifetime",
175 Element::create(static_cast<long long>(valid_.getMax())));
179 if (!reservations_global_.unspecified()) {
180 map->set(
"reservations-global",
181 Element::create(reservations_global_.get()));
185 if (!reservations_in_subnet_.unspecified()) {
186 map->set(
"reservations-in-subnet",
187 Element::create(reservations_in_subnet_.get()));
191 if (!reservations_out_of_pool_.unspecified()) {
192 map->set(
"reservations-out-of-pool",
193 Element::create(reservations_out_of_pool_.get()));
198 map->set(
"option-data", opts->toElement());
201 if (!calculate_tee_times_.unspecified()) {
202 map->set(
"calculate-tee-times", Element::create(calculate_tee_times_));
205 if (!t1_percent_.unspecified()) {
206 map->set(
"t1-percent", Element::create(t1_percent_));
209 if (!t2_percent_.unspecified()) {
210 map->set(
"t2-percent", Element::create(t2_percent_));
213 if (!ddns_send_updates_.unspecified()) {
214 map->set(
"ddns-send-updates", Element::create(ddns_send_updates_));
217 if (!ddns_override_no_update_.unspecified()) {
218 map->set(
"ddns-override-no-update", Element::create(ddns_override_no_update_));
221 if (!ddns_override_client_update_.unspecified()) {
222 map->set(
"ddns-override-client-update", Element::create(ddns_override_client_update_));
225 if (!ddns_replace_client_name_mode_.unspecified()) {
226 map->set(
"ddns-replace-client-name",
228 replaceClientNameModeToString(ddns_replace_client_name_mode_)));
231 if (!ddns_generated_prefix_.unspecified()) {
232 map->set(
"ddns-generated-prefix", Element::create(ddns_generated_prefix_));
235 if (!ddns_qualifying_suffix_.unspecified()) {
236 map->set(
"ddns-qualifying-suffix", Element::create(ddns_qualifying_suffix_));
239 if (!hostname_char_set_.unspecified()) {
240 map->set(
"hostname-char-set", Element::create(hostname_char_set_));
243 if (!hostname_char_replacement_.unspecified()) {
244 map->set(
"hostname-char-replacement", Element::create(hostname_char_replacement_));
247 if (!store_extended_info_.unspecified()) {
248 map->set(
"store-extended-info", Element::create(store_extended_info_));
251 if (!cache_threshold_.unspecified()) {
252 map->set(
"cache-threshold", Element::create(cache_threshold_));
255 if (!cache_max_age_.unspecified()) {
256 map->set(
"cache-max-age",
257 Element::create(static_cast<long long>(cache_max_age_)));
260 if (!ddns_update_on_renew_.unspecified()) {
261 map->set(
"ddns-update-on-renew", Element::create(ddns_update_on_renew_));
264 if (!ddns_use_conflict_resolution_.unspecified()) {
265 map->set(
"ddns-use-conflict-resolution", Element::create(ddns_use_conflict_resolution_));
268 if (!allocator_type_.unspecified()) {
269 map->set(
"allocator", Element::create(allocator_type_));
291 filename_ = filename;
295 Network4::toElement()
const {
299 if (!match_client_id_.unspecified()) {
300 map->set(
"match-client-id", Element::create(match_client_id_.get()));
304 if (!authoritative_.unspecified()) {
305 map->set(
"authoritative", Element::create(authoritative_.get()));
309 if (!siaddr_.unspecified()) {
310 map->set(
"next-server", Element::create(siaddr_.get().toText()));
314 if (!sname_.unspecified()) {
315 map->set(
"server-hostname", Element::create(sname_.get()));
319 if (!filename_.unspecified()) {
320 map->set(
"boot-file-name",Element::create(filename_.get()));
327 Network4::getServerId()
const {
332 return (opt_server_id->readAddress());
334 }
catch (
const std::exception&) {
342 Network6::toElement()
const {
346 if (!preferred_.unspecified()) {
347 map->set(
"preferred-lifetime",
348 Element::create(static_cast<long long>(preferred_.get())));
349 map->set(
"min-preferred-lifetime",
350 Element::create(static_cast<long long>(preferred_.getMin())));
351 map->set(
"max-preferred-lifetime",
352 Element::create(static_cast<long long>(preferred_.getMax())));
357 std::vector<uint8_t> bin = interface_id_->getData();
359 ifid.resize(bin.size());
361 std::memcpy(&ifid[0], &bin[0], bin.size());
363 map->set(
"interface-id", Element::create(ifid));
367 if (!rapid_commit_.unspecified()) {
368 map->set(
"rapid-commit", Element::create(rapid_commit_.get()));
372 if (!pd_allocator_type_.unspecified()) {
373 map->set(
"pd-allocator", Element::create(pd_allocator_type_));
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< const CfgGlobals > ConstCfgGlobalsPtr
Const shared pointer to a CfgGlobals instance.
T get() const
Retrieves the encapsulated value.
boost::shared_ptr< Element > ElementPtr
const_iterator cbegin() const
Iterators 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...
ClientClassContainer::const_iterator const_iterator
Type of iterators.
Acts as a storage vault for D2 client configuration.
static const IOAddress & IPV4_ZERO_ADDRESS()
Returns an address set to all zeros.
boost::shared_ptr< const Element > ConstElementPtr
bool isV4() const
Convenience function to check for an IPv4 address.
bool empty() const
Check if classes is empty.
boost::multi_index_container< asiolink::IOAddress, boost::multi_index::indexed_by< boost::multi_index::sequenced< boost::multi_index::tag< IOAddressListListTag > >, boost::multi_index::hashed_unique< boost::multi_index::tag< IOAddressListSetTag >, boost::multi_index::identity< asiolink::IOAddress > > >> IOAddressList
List of IO addresses.
Defines the logger used by the top-level component of kea-lfc.
std::string toText() const
Convert the address to a string.
#define DHCP4_OPTION_SPACE
global std option spaces
Tag for the list of IO addresses as a set.
const_iterator cend() const
Iterators to the past the end element.
std::string ClientClass
Defines a single class name.
The IOAddress class represents an IP addresses (version agnostic)
Option with defined data fields represented as buffers that can be accessed using data field index...
A template representing an optional value.
Container for storing client class names.