16using namespace sysrepo;
52 if (
model_ == IETF_DHCPV6_SERVER) {
54 }
else if (
model_ == KEA_DHCP4_SERVER) {
56 }
else if (
model_ == KEA_DHCP6_SERVER) {
59 }
catch (
const sysrepo_exception& ex) {
63 "getConfig not implemented for the model: " <<
model_);
70 result->set(
"Dhcp6", dhcp6);
71 string xpath =
"/" +
model_ +
":server/server-config";
74 if (ranges && !ranges->empty()) {
75 dhcp6->set(
"subnet6", ranges);
85 result->set(
"Dhcp4", dhcp);
93 result->set(
"Dhcp6", dhcp);
99 const std::string& name) {
102 storage->set(name, x);
107 ElementPtr const& hook_library(Element::createMap());
110 hook_library->set(
"library", name);
113 hook_library->set(
"parameters",
114 Element::fromJSON(parameters->stringValue()));
129 getParam(expired, xpath,
"reclaim-timer-wait-time");
130 getParam(expired, xpath,
"flush-reclaimed-timer-wait-time");
131 getParam(expired, xpath,
"hold-reclaimed-time");
132 getParam(expired, xpath,
"max-reclaim-leases");
133 getParam(expired, xpath,
"max-reclaim-time");
134 getParam(expired, xpath,
"unwarned-reclaim-cycles");
136 if (!expired->empty()) {
146 getParam(ddns, xpath,
"enable-updates");
147 getParam(ddns, xpath,
"qualifying-suffix");
149 getParam(ddns, xpath,
"server-port");
151 getParam(ddns, xpath,
"sender-port");
152 getParam(ddns, xpath,
"max-queue-size");
153 getParam(ddns, xpath,
"ncr-protocol");
154 getParam(ddns, xpath,
"ncr-format");
155 getParam(ddns, xpath,
"override-no-update");
156 getParam(ddns, xpath,
"override-client-update");
157 getParam(ddns, xpath,
"replace-client-name");
158 getParam(ddns, xpath,
"generated-prefix");
159 getParam(ddns, xpath,
"hostname-char-set");
160 getParam(ddns, xpath,
"hostname-char-replacement");
164 ddns->set(
"user-context", Element::fromJSON(context->stringValue()));
167 if (!ddns->empty()) {
178 ElementPtr config_ctrl = Element::createMap();
179 getParam(config_ctrl, xpath,
"config-fetch-wait-time");
181 if (databases && !databases->empty()) {
182 config_ctrl->set(
"config-databases", databases);
184 if (!config_ctrl->empty()) {
186 return (config_ctrl);
197 getParam(result, xpath,
"valid-lifetime");
198 getParam(result, xpath,
"min-valid-lifetime");
199 getParam(result, xpath,
"max-valid-lifetime");
200 getParam(result, xpath,
"renew-timer");
201 getParam(result, xpath,
"rebind-timer");
202 getParam(result, xpath,
"calculate-tee-times");
203 getParam(result, xpath,
"t1-percent");
204 getParam(result, xpath,
"t2-percent");
205 getParam(result, xpath,
"decline-probation-period");
206 getParam(result, xpath,
"hostname-char-set");
207 getParam(result, xpath,
"hostname-char-replacement");
210 if (networks && !networks->empty()) {
211 result->set(
"shared-networks", networks);
214 if (classes && !classes->empty()) {
215 result->set(
"client-classes", classes);
219 result->set(
"lease-database", database);
222 if (databases && !databases->empty()) {
223 result->set(
"hosts-databases", databases);
226 getItems(xpath +
"/host-reservation-identifiers");
228 result->set(
"host-reservation-identifiers", host_ids);
231 if (defs && !defs->empty()) {
232 result->set(
"option-def", defs);
235 if (options && !options->empty()) {
236 result->set(
"option-data", options);
239 if (hooks && !hooks->empty()) {
240 result->set(
"hooks-libraries", hooks);
245 result->set(
"expired-leases-processing", expired);
247 getParam(result, xpath,
"dhcp4o6-port");
250 result->set(
"control-socket", socket);
254 result->set(
"dhcp-ddns", ddns);
258 result->set(
"user-context", Element::fromJSON(context->stringValue()));
263 sanity->set(
"lease-checks", checks);
264 result->set(
"sanity-checks", sanity);
266 getParam(result, xpath,
"reservation-mode");
268 if (hosts && !hosts->empty()) {
269 result->set(
"reservations", hosts);
274 result->set(
"config-control", config_ctrl);
276 getParam(result, xpath,
"server-tag");
279 result->set(
"dhcp-queue-control",
280 Element::fromJSON(queue_ctrl->stringValue()));
283 if (loggers && !loggers->empty()) {
284 result->set(
"loggers", loggers);
291 string xpath =
"/kea-dhcp4-server:config";
295 if (subnets && !subnets->empty()) {
296 result->set(
"subnet4", subnets);
301 if (ifs && !ifs->empty()) {
302 if_config->set(
"interfaces", ifs);
304 getParam(if_config, xpath +
"/interfaces-config",
"dhcp-socket-type");
305 getParam(if_config, xpath +
"/interfaces-config",
"outbound-interface");
306 getParam(if_config, xpath +
"/interfaces-config",
"re-detect");
308 getItem(xpath +
"/interfaces-config/user-context");
310 if_config->set(
"user-context",
311 Element::fromJSON(context->stringValue()));
313 if (!if_config->empty()) {
314 result->set(
"interfaces-config", if_config);
317 getParam(result, xpath,
"echo-client-id");
318 getParam(result, xpath,
"match-client-id");
319 getParam(result, xpath,
"next-server");
320 getParam(result, xpath,
"server-hostname");
321 getParam(result, xpath,
"boot-file-name");
322 getParam(result, xpath,
"authoritative");
328 string xpath =
"/kea-dhcp6-server:config";
331 getParam(result, xpath,
"data-directory");
332 getParam(result, xpath,
"preferred-lifetime");
333 getParam(result, xpath,
"min-preferred-lifetime");
334 getParam(result, xpath,
"max-preferred-lifetime");
337 if (subnets && !subnets->empty()) {
338 result->set(
"subnet6", subnets);
343 if (ifs && !ifs->empty()) {
344 if_config->set(
"interfaces", ifs);
346 getParam(if_config, xpath +
"/interfaces-config",
"re-detect");
348 getItem(xpath +
"/interfaces-config/user-context");
350 if_config->set(
"user-context",
351 Element::fromJSON(context->stringValue()));
353 if (!if_config->empty()) {
354 result->set(
"interfaces-config", if_config);
359 result->set(
"relay-supplied-options", relay);
363 result->set(
"mac-sources", macs);
368 getParam(server_id, xpath +
"/server-id",
"type");
369 getParam(server_id, xpath +
"/server-id",
"identifier");
370 getParam(server_id, xpath +
"/server-id",
"time");
371 getParam(server_id, xpath +
"/server-id",
"htype");
372 getParam(server_id, xpath +
"/server-id",
"enterprise-id");
373 getParam(server_id, xpath +
"/server-id",
"persist");
374 context =
getItem(xpath +
"/server-id/user-context");
376 server_id->set(
"user-context",
377 Element::fromJSON(context->stringValue()));
379 if (!server_id->empty()) {
380 result->set(
"server-id", server_id);
388 if (
model_ == IETF_DHCPV6_SERVER) {
395 }
else if (
model_ == KEA_DHCP4_SERVER) {
402 }
else if (
model_ == KEA_DHCP6_SERVER) {
411 "setConfig not implemented for the model: " <<
model_);
413 }
catch (
const sysrepo_exception& ex) {
415 "sysrepo error setting config '" << elem->str()
416 <<
"': " << ex.
what());
427 string xpath =
"/" +
model_ +
":server/server-config";
433 if (ranges && !ranges->empty()) {
434 setSubnets(xpath +
"/network-ranges", ranges);
465 setItem(xpath +
"/valid-lifetime", valid, SR_UINT32_T);
469 setItem(xpath +
"/min-valid-lifetime", min_valid, SR_UINT32_T);
473 setItem(xpath +
"/max-valid-lifetime", max_valid, SR_UINT32_T);
477 setItem(xpath +
"/renew-timer", renew, SR_UINT32_T);
481 setItem(xpath +
"/rebind-timer", rebind, SR_UINT32_T);
485 setItem(xpath +
"/calculate-tee-times", calculate, SR_BOOL_T);
489 setItem(xpath +
"/t1-percent", t1_percent, SR_DECIMAL64_T);
493 setItem(xpath +
"/t2-percent", t2_percent, SR_DECIMAL64_T);
497 setItem(xpath +
"/decline-probation-period", period, SR_UINT32_T);
504 if (classes && !classes->empty()) {
512 if (databases && !databases->empty()) {
516 database = elem->get(
"hosts-database");
519 list->add(
copy(database));
526 setItem(xpath +
"/host-reservation-identifiers",
id, SR_ENUM_T);
530 if (defs && !defs->empty()) {
534 if (options && !options->empty()) {
544 ostringstream hook_lib;
545 hook_lib << xpath <<
"/hook-library[library='"
546 << name->stringValue() <<
"']";
549 hook_lib <<
"/parameters";
550 setItem(hook_lib.str(), Element::create(params->str()),
554 setItem(hook_lib.str(), list, SR_LIST_T);
562 setItem(xpath +
"/expired-leases-processing/reclaim-timer-wait-time",
563 reclaim, SR_UINT32_T);
566 expired->get(
"flush-reclaimed-timer-wait-time");
568 setItem(xpath +
"/expired-leases-processing/flush-reclaimed-timer-wait-time",
573 setItem(xpath +
"/expired-leases-processing/hold-reclaimed-time",
578 setItem(xpath +
"/expired-leases-processing/max-reclaim-leases",
579 max_leases, SR_UINT32_T);
583 setItem(xpath +
"/expired-leases-processing/max-reclaim-time",
584 max_time, SR_UINT32_T);
588 setItem(xpath +
"/expired-leases-processing/unwarned-reclaim-cycles",
589 unwarned, SR_UINT32_T);
594 setItem(xpath +
"/dhcp4o6-port", port, SR_UINT16_T);
602 setItem(xpath +
"/hostname-char-set", char_set, SR_STRING_T);
606 setItem(xpath +
"/hostname-char-replacement", char_repl, SR_STRING_T);
612 setItem(xpath +
"/dhcp-ddns/enable-updates", enable, SR_BOOL_T);
616 setItem(xpath +
"/dhcp-ddns/qualifying-suffix", suffix,
621 setItem(xpath +
"/dhcp-ddns/server-ip", server_ip, SR_STRING_T);
625 setItem(xpath +
"/dhcp-ddns/server-port", server_port,
630 setItem(xpath +
"/dhcp-ddns/sender-ip", sender_ip, SR_STRING_T);
634 setItem(xpath +
"/dhcp-ddns/sender-port", sender_port,
639 setItem(xpath +
"/dhcp-ddns/max-queue-size", queue, SR_UINT32_T);
643 setItem(xpath +
"/dhcp-ddns/ncr-protocol", protocol, SR_ENUM_T);
651 setItem(xpath +
"/dhcp-ddns/override-no-update", no_up, SR_BOOL_T);
655 setItem(xpath +
"/dhcp-ddns/override-client-update", client,
660 setItem(xpath +
"/dhcp-ddns/replace-client-name", replace,
665 setItem(xpath +
"/dhcp-ddns/generated-prefix", generated,
670 setItem(xpath +
"/dhcp-ddns/hostname-char-set", char_set,
675 setItem(xpath +
"/dhcp-ddns/hostname-char-replacement", char_repl,
681 setItem(xpath +
"/dhcp-ddns/user-context", repr, SR_STRING_T);
687 setItem(xpath +
"/user-context", repr, SR_STRING_T);
693 setItem(xpath +
"/sanity-checks/lease-checks", checks, SR_ENUM_T);
698 setItem(xpath +
"/reservation-mode", hr_mode, SR_ENUM_T);
701 if (hosts && !hosts->empty()) {
705 if (config_ctrl && !config_ctrl->empty()) {
708 setItem(xpath +
"/config-control/config-fetch-wait-time", cfwt,
711 databases = config_ctrl->get(
"config-databases");
712 if (databases && !databases->empty()) {
713 setDatabases(xpath +
"/config-control/config-database", databases);
718 setItem(xpath +
"/server-tag", server_tag, SR_STRING_T);
723 setItem(xpath +
"/dhcp-queue-control", repr, SR_STRING_T);
733 string xpath =
"/kea-dhcp4-server:config";
742 if (ifs && !ifs->empty()) {
744 setItem(xpath +
"/interfaces-config/interfaces",
750 setItem(xpath +
"/interfaces-config/dhcp-socket-type",
755 setItem(xpath +
"/interfaces-config/outbound-interface",
760 setItem(xpath +
"/interfaces-config/re-detect",
761 redetect, SR_BOOL_T);
765 setItem(xpath +
"/interfaces-config/user-context",
766 Element::create(context->str()), SR_STRING_T);
771 setItem(xpath +
"/echo-client-id", echo, SR_BOOL_T);
775 setItem(xpath +
"/match-client-id", match, SR_BOOL_T);
779 setItem(xpath +
"/next-server", next, SR_STRING_T);
783 setItem(xpath +
"/server-hostname", hostname, SR_STRING_T);
787 setItem(xpath +
"/boot-file-name", boot, SR_STRING_T);
791 setItem(xpath +
"/authoritative", auth, SR_BOOL_T);
798 string xpath =
"/kea-dhcp6-server:config";
802 setItem(xpath +
"/data-directory", data_dir, SR_STRING_T);
806 setItem(xpath +
"/preferred-lifetime", preferred, SR_UINT32_T);
810 setItem(xpath +
"/min-preferred-lifetime", min_pref, SR_UINT32_T);
814 setItem(xpath +
"/max-preferred-lifetime", max_pref, SR_UINT32_T);
823 if (ifs && !ifs->empty()) {
825 setItem(xpath +
"/interfaces-config/interfaces",
831 setItem(xpath +
"/interfaces-config/re-detect",
832 redetect, SR_BOOL_T);
836 setItem(xpath +
"/interfaces-config/user-context",
837 Element::create(context->str()), SR_STRING_T);
843 setItem(xpath +
"/relay-supplied-options", addr, SR_STRING_T);
849 setItem(xpath +
"/mac-sources", source, SR_STRING_T);
856 setItem(xpath +
"/server-id/type", id_type, SR_ENUM_T);
860 setItem(xpath +
"/server-id/identifier", id_id, SR_STRING_T);
864 setItem(xpath +
"/server-id/time", id_time, SR_UINT32_T);
868 setItem(xpath +
"/server-id/htype", id_htype, SR_UINT16_T);
872 setItem(xpath +
"/server-id/enterprise-id", id_ent_id,
877 setItem(xpath +
"/server-id/persist", id_persist, SR_BOOL_T);
882 setItem(xpath +
"/server-id/user-context", repr, SR_STRING_T);
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
A generic exception that is thrown when a function is not implemented.
static void preProcess4(isc::data::ConstElementPtr config)
Pre process a DHCPv4 configuration.
static void preProcess6(isc::data::ConstElementPtr config)
Pre process a DHCPv6 configuration.
static isc::data::ConstElementPtr getContext(isc::data::ConstElementPtr parent)
Get user context.
Between YANG and JSON translator class for basic values.
isc::data::ElementPtr getItem(const std::string &xpath)
Get and translate basic value from YANG to JSON.
std::string model_
The model.
isc::data::ElementPtr getList(std::string const &xpath, T &t, isc::data::ElementPtr(T::*f)(std::string const &xpath))
Retrieve a list as ElementPtr from sysrepo from a certain xpath.
void delItem(const std::string &xpath)
Delete basic value from YANG.
void setItem(const std::string &xpath, isc::data::ConstElementPtr elem, sr_type_t type)
Translate and set basic value from JSON to YANG.
isc::data::ElementPtr getItems(const std::string &xpath)
Get and translate a list of basic values from YANG to JSON.
void checkAndSetLeaf(isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, sr_type_t const type)
Get an element from given ElementPtr node and set it in sysrepo at given xpath.
Client class translation between YANG and JSON.
A translator class for converting a client class list between YANG and JSON.
isc::data::ConstElementPtr getClasses(const std::string &xpath)
Get and translate client classes from YANG to JSON.
void setClasses(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set client classes from JSON to YANG.
isc::data::ElementPtr getConfigKea4()
getConfig for kea-dhcp4-server.
isc::data::ElementPtr getExpiredKea(const std::string &xpath)
Retrieves expired leases processing parameters from sysrepo.
void setServerKeaDhcpCommon(const std::string &xpath, isc::data::ConstElementPtr elem)
setServer common part for kea-dhcp[46]-server:config.
void delConfigKea()
delConfig for kea-dhcp[46]-server.
isc::data::ElementPtr getServerKeaDhcp4()
getServer for kea-dhcp4-server:config.
void setConfigKea6(isc::data::ConstElementPtr elem)
setConfig for kea-dhcp6-server.
isc::data::ElementPtr getHooksKea(const std::string &xpath)
Retrieves hooks configuration from sysrepo.
isc::data::ElementPtr getServerKeaDhcpCommon(const std::string &xpath)
getServer common part for kea-dhcp[46]-server:config.
void setConfigIetf6(isc::data::ConstElementPtr elem)
setConfig for ietf-dhcpv6-server.
isc::data::ElementPtr getDdnsKea(const std::string &xpath)
Retrieves DDNS configuration from sysrepo.
void getParam(isc::data::ElementPtr &storage, const std::string &xpath, const std::string &name)
Retrieves an item and stores in the specified storage.
void setConfigKea4(isc::data::ConstElementPtr elem)
setConfig for kea-dhcp[46]-server.
isc::data::ElementPtr getConfigControlKea(const std::string &xpath)
Retrieves configuration control from sysrepo.
void setServerKeaDhcp6(isc::data::ConstElementPtr elem)
setServer for kea-dhcp6-server:config.
void setConfig(isc::data::ConstElementPtr elem)
Translate and sets the DHCP server configuration from JSON to YANG.
isc::data::ElementPtr getConfigKea6()
getConfig for kea-dhcp6-server.
isc::data::ElementPtr getConfigIetf6()
getConfig for ietf-dhcpv6-server.
void setServerKeaDhcp4(isc::data::ConstElementPtr elem)
setServer for kea-dhcp4-server:config.
TranslatorConfig(sysrepo::S_Session session, const std::string &model)
Constructor.
isc::data::ElementPtr getServerKeaDhcp6()
getServer for kea-dhcp6-server:config.
isc::data::ElementPtr getHook(const std::string &xpath)
void delConfigIetf6()
delConfig for ietf-dhcpv6-server.
virtual ~TranslatorConfig()
Destructor.
isc::data::ElementPtr getConfig()
Get and translate the whole DHCP server configuration from YANG to JSON.
Control socket translation between YANG and JSON.
void setControlSocket(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set control socket from JSON to YANG.
isc::data::ConstElementPtr getControlSocket(const std::string &xpath)
Get and translate a control socket from YANG to JSON.
Database access translation between YANG and JSON.
void setDatabase(const std::string &xpath, isc::data::ConstElementPtr elem, bool skip=false)
Translate and set database access from JSON to YANG.
isc::data::ElementPtr getDatabase(const std::string &xpath)
Get and translate a database access from YANG to JSON.
A translator class for converting a database access list between YANG and JSON.
void setDatabases(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set database accesses from JSON to YANG.
isc::data::ConstElementPtr getDatabases(const std::string &xpath)
Get and translate database accesses from YANG to JSON.
Translation between YANG and JSON for a single host reservation.
A translator class for converting host reservations list between YANG and JSON.
isc::data::ElementPtr getHosts(const std::string &xpath)
Get and translate host reservations from YANG to JSON.
void setHosts(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set (address) host reservations from JSON to YANG.
Logger translation between YANG and JSON.
A translator class for converting a logger list between YANG and JSON.
void setLoggers(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set loggeres from JSON to YANG.
isc::data::ConstElementPtr getLoggers(const std::string &xpath)
Get and translate loggeres from YANG to JSON.
A translator class for converting an option data list between YANG and JSON.
isc::data::ConstElementPtr getOptionDataList(const std::string &xpath)
Get and translate option data list from YANG to JSON.
void setOptionDataList(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set option data list from JSON to YANG.
Option data translation between YANG and JSON.
Currently supports kea-dhcp[46]-server models.
void setOptionDefList(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set option definition list from JSON to YANG.
isc::data::ConstElementPtr getOptionDefList(const std::string &xpath)
Get and translate option definition list from YANG to JSON.
Option definition translation between YANG and JSON.
Prefix delegation pool translation between YANG and JSON.
A translator class for converting a pd-pool list between YANG and JSON.
A translator class for converting a pool between YANG and JSON.
A translator class for converting pools between YANG and JSON.
Shared network translation between YANG and JSON.
A translator class for converting a shared network list between YANG and JSON.
isc::data::ElementPtr getSharedNetworks(const std::string &xpath)
Get and translate shared networks from YANG to JSON.
void setSharedNetworks(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set shared networks from JSON to YANG.
Subnet (aka network range) translation between YANG and JSON.
A translator class for converting a subnet list between YANG and JSON.
void setSubnets(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set subnets from JSON to YANG.
isc::data::ElementPtr getSubnets(const std::string &xpath)
Get and translate subnets from YANG to JSON.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
ElementPtr copy(ConstElementPtr from, int level)
Copy the data up to a nesting level.
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
std::string format(const std::string &format, const std::vector< std::string > &args)
Apply Formatting.
Defines the logger used by the top-level component of kea-lfc.