16#ifndef HAVE_PRE_0_7_6_SYSREPO
17using namespace sysrepo;
54 if (
model_ == IETF_DHCPV6_SERVER) {
56 }
else if (
model_ == KEA_DHCP4_SERVER) {
58 }
else if (
model_ == KEA_DHCP6_SERVER) {
61 }
catch (
const sysrepo_exception& ex) {
65 "getConfig not implemented for the model: " <<
model_);
72 result->set(
"Dhcp6", dhcp6);
73 string xpath =
"/" +
model_ +
":server/server-config";
76 if (ranges && !ranges->empty()) {
77 dhcp6->set(
"subnet6", ranges);
87 result->set(
"Dhcp4", dhcp);
90 dhcp->remove(
"loggers");
93 logging->set(
"loggers", loggers);
94 result->set(
"Logging", logging);
103 result->set(
"Dhcp6", dhcp);
106 dhcp->remove(
"loggers");
109 logging->set(
"loggers", loggers);
110 result->set(
"Logging", logging);
117 const std::string& name) {
120 storage->set(name, x);
126 S_Iter_Value iter =
getIter(xpath +
"/hook-library");
130 const string& lib =
getNext(iter);
137 hook_lib->set(
"library", name);
140 string parameters = params->stringValue();
141 if (!parameters.empty()) {
142 hook_lib->set(
"parameters",
146 hook_libs->add(hook_lib);
149 if (!hook_libs->empty()) {
160 getParam(expired, xpath,
"reclaim-timer-wait-time");
161 getParam(expired, xpath,
"flush-reclaimed-timer-wait-time");
162 getParam(expired, xpath,
"hold-reclaimed-time");
163 getParam(expired, xpath,
"max-reclaim-leases");
164 getParam(expired, xpath,
"max-reclaim-time");
165 getParam(expired, xpath,
"unwarned-reclaim-cycles");
167 if (!expired->empty()) {
177 getParam(ddns, xpath,
"enable-updates");
178 getParam(ddns, xpath,
"qualifying-suffix");
180 getParam(ddns, xpath,
"server-port");
182 getParam(ddns, xpath,
"sender-port");
183 getParam(ddns, xpath,
"max-queue-size");
184 getParam(ddns, xpath,
"ncr-protocol");
185 getParam(ddns, xpath,
"ncr-format");
186 getParam(ddns, xpath,
"override-no-update");
187 getParam(ddns, xpath,
"override-client-update");
188 getParam(ddns, xpath,
"replace-client-name");
189 getParam(ddns, xpath,
"generated-prefix");
190 getParam(ddns, xpath,
"hostname-char-set");
191 getParam(ddns, xpath,
"hostname-char-replacement");
198 if (!ddns->empty()) {
211 if (databases && !databases->empty()) {
212 config_ctrl->set(
"config-databases", databases);
214 if (!config_ctrl->empty()) {
216 return (config_ctrl);
227 getParam(result, xpath,
"valid-lifetime");
228 getParam(result, xpath,
"renew-timer");
229 getParam(result, xpath,
"rebind-timer");
230 getParam(result, xpath,
"decline-probation-period");
233 if (networks && !networks->empty()) {
234 result->set(
"shared-networks", networks);
237 if (classes && !classes->empty()) {
238 result->set(
"client-classes", classes);
242 result->set(
"lease-database", database);
245 if (databases && !databases->empty()) {
246 result->set(
"hosts-databases", databases);
249 getItems(xpath +
"/host-reservation-identifiers");
251 result->set(
"host-reservation-identifiers", host_ids);
254 if (defs && !defs->empty()) {
255 result->set(
"option-def", defs);
258 if (options && !options->empty()) {
259 result->set(
"option-data", options);
262 if (hooks && !hooks->empty()) {
263 result->set(
"hooks-libraries", hooks);
268 result->set(
"expired-leases-processing", expired);
270 getParam(result, xpath,
"dhcp4o6-port");
273 result->set(
"control-socket", socket);
277 result->set(
"dhcp-ddns", ddns);
286 sanity->set(
"lease-checks", checks);
287 result->set(
"sanity-checks", sanity);
289 getParam(result, xpath,
"reservation-mode");
291 if (hosts && !hosts->empty()) {
292 result->set(
"reservations", hosts);
297 result->set(
"config-control", config_ctrl);
299 getParam(result, xpath,
"server-tag");
302 result->set(
"dhcp-queue-control",
306 if (loggers && !loggers->empty()) {
307 result->set(
"loggers", loggers);
314 string xpath =
"/kea-dhcp4-server:config";
318 if (subnets && !subnets->empty()) {
319 result->set(
"subnet4", subnets);
324 if (ifs && !ifs->empty()) {
325 if_config->set(
"interfaces", ifs);
327 getParam(if_config, xpath +
"/interfaces-config",
"dhcp-socket-type");
328 getParam(if_config, xpath +
"/interfaces-config",
"outbound-interface");
329 getParam(if_config, xpath +
"/interfaces-config",
"re-detect");
331 getItem(xpath +
"/interfaces-config/user-context");
333 if_config->set(
"user-context",
336 if (!if_config->empty()) {
337 result->set(
"interfaces-config", if_config);
340 getParam(result, xpath,
"echo-client-id");
341 getParam(result, xpath,
"match-client-id");
342 getParam(result, xpath,
"next-server");
343 getParam(result, xpath,
"server-hostname");
344 getParam(result, xpath,
"boot-file-name");
345 getParam(result, xpath,
"authoritative");
351 string xpath =
"/kea-dhcp6-server:config";
354 getParam(result, xpath,
"preferred-lifetime");
357 if (subnets && !subnets->empty()) {
358 result->set(
"subnet6", subnets);
363 if (ifs && !ifs->empty()) {
364 if_config->set(
"interfaces", ifs);
366 getParam(if_config, xpath +
"/interfaces-config",
"re-detect");
368 getItem(xpath +
"/interfaces-config/user-context");
370 if_config->set(
"user-context",
373 if (!if_config->empty()) {
374 result->set(
"interfaces-config", if_config);
379 result->set(
"relay-supplied-options", relay);
383 result->set(
"mac-sources", macs);
388 getParam(server_id, xpath +
"/server-id",
"type");
389 getParam(server_id, xpath +
"/server-id",
"identifier");
390 getParam(server_id, xpath +
"/server-id",
"time");
391 getParam(server_id, xpath +
"/server-id",
"htype");
392 getParam(server_id, xpath +
"/server-id",
"enterprise-id");
393 getParam(server_id, xpath +
"/server-id",
"persist");
394 context =
getItem(xpath +
"/server-id/user-context");
396 server_id->set(
"user-context",
399 if (!server_id->empty()) {
400 result->set(
"server-id", server_id);
408 if (
model_ == IETF_DHCPV6_SERVER) {
415 }
else if (
model_ == KEA_DHCP4_SERVER) {
422 }
else if (
model_ == KEA_DHCP6_SERVER) {
431 "setConfig not implemented for the model: " <<
model_);
433 }
catch (
const sysrepo_exception& ex) {
435 "sysrepo error setting config '" << elem->str()
436 <<
"': " << ex.
what());
447 string xpath =
"/" +
model_ +
":server/server-config";
453 if (ranges && !ranges->empty()) {
454 setSubnets(xpath +
"/network-ranges", ranges);
493 setItem(xpath +
"/valid-lifetime", valid, SR_UINT32_T);
497 setItem(xpath +
"/renew-timer", renew, SR_UINT32_T);
501 setItem(xpath +
"/rebind-timer", rebind, SR_UINT32_T);
505 setItem(xpath +
"/decline-probation-period", period, SR_UINT32_T);
512 if (classes && !classes->empty()) {
520 if (databases && !databases->empty()) {
524 database = elem->get(
"hosts-database");
527 list->add(
copy(database));
534 setItem(xpath +
"/host-reservation-identifiers",
id, SR_ENUM_T);
538 if (defs && !defs->empty()) {
542 if (options && !options->empty()) {
552 ostringstream hook_lib;
553 hook_lib << xpath <<
"/hook-library[library='"
554 << name->stringValue() <<
"']";
557 hook_lib <<
"/parameters";
562 setItem(hook_lib.str(), list, SR_LIST_T);
570 setItem(xpath +
"/expired-leases-processing/reclaim-timer-wait-time",
571 reclaim, SR_UINT32_T);
574 expired->get(
"flush-reclaimed-timer-wait-time");
576 setItem(xpath +
"/expired-leases-processing/flush-reclaimed-timer-wait-time",
581 setItem(xpath +
"/expired-leases-processing/hold-reclaimed-time",
586 setItem(xpath +
"/expired-leases-processing/max-reclaim-leases",
587 max_leases, SR_UINT32_T);
591 setItem(xpath +
"/expired-leases-processing/max-reclaim-time",
592 max_time, SR_UINT32_T);
596 setItem(xpath +
"/expired-leases-processing/unwarned-reclaim-cycles",
597 unwarned, SR_UINT32_T);
602 setItem(xpath +
"/dhcp4o6-port", port, SR_UINT16_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);
647 setItem(xpath +
"/dhcp-ddns/ncr-format", format, 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()) {
706 databases = config_ctrl->get(
"config-databases");
707 if (databases && !databases->empty()) {
708 setDatabases(xpath +
"/config-control/config-database", databases);
713 setItem(xpath +
"/server-tag", server_tag, SR_STRING_T);
718 setItem(xpath +
"/dhcp-queue-control", repr, SR_STRING_T);
724 string xpath =
"/kea-dhcp4-server:config";
733 if (ifs && !ifs->empty()) {
735 setItem(xpath +
"/interfaces-config/interfaces",
741 setItem(xpath +
"/interfaces-config/dhcp-socket-type",
746 setItem(xpath +
"/interfaces-config/outbound-interface",
751 setItem(xpath +
"/interfaces-config/re-detect",
752 redetect, SR_BOOL_T);
756 setItem(xpath +
"/interfaces-config/user-context",
762 setItem(xpath +
"/echo-client-id", echo, SR_BOOL_T);
766 setItem(xpath +
"/match-client-id", match, SR_BOOL_T);
770 setItem(xpath +
"/next-server", next, SR_STRING_T);
774 setItem(xpath +
"/server-hostname", hostname, SR_STRING_T);
778 setItem(xpath +
"/boot-file-name", boot, SR_STRING_T);
782 setItem(xpath +
"/authoritative", auth, SR_BOOL_T);
788 string xpath =
"/kea-dhcp6-server:config";
792 setItem(xpath +
"/preferred-lifetime", preferred, SR_UINT32_T);
801 if (ifs && !ifs->empty()) {
803 setItem(xpath +
"/interfaces-config/interfaces",
809 setItem(xpath +
"/interfaces-config/re-detect",
810 redetect, SR_BOOL_T);
814 setItem(xpath +
"/interfaces-config/user-context",
821 setItem(xpath +
"/relay-supplied-options", addr, SR_STRING_T);
827 setItem(xpath +
"/mac-sources", source, SR_STRING_T);
834 setItem(xpath +
"/server-id/type", id_type, SR_ENUM_T);
838 setItem(xpath +
"/server-id/identifier", id_id, SR_STRING_T);
842 setItem(xpath +
"/server-id/time", id_time, SR_UINT32_T);
846 setItem(xpath +
"/server-id/htype", id_htype, SR_UINT16_T);
850 setItem(xpath +
"/server-id/enterprise-id", id_ent_id,
855 setItem(xpath +
"/server-id/persist", id_persist, SR_BOOL_T);
860 setItem(xpath +
"/server-id/user-context", repr, SR_STRING_T);
867 string xpath =
"/" +
model_ +
":config";
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 ElementPtr create(const Position &pos=ZERO_POSITION())
static ElementPtr fromJSON(const std::string &in, bool preproc=false)
These functions will parse the given string (JSON) representation of a compound element.
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement type ElementPtr.
static ElementPtr createList(const Position &pos=ZERO_POSITION())
Creates an empty ListElement type ElementPtr.
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.
std::string getNext(sysrepo::S_Iter_Value iter)
Get xpath of the next YANG list item.
isc::data::ElementPtr getItem(const std::string &xpath)
Get and translate basic value from YANG to JSON.
sysrepo::S_Iter_Value getIter(const std::string &xpath)
List iterator methods keeping the session private.
std::string model_
The model.
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.
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.
void setServerKeaLogging(isc::data::ConstElementPtr elem)
set Logging part for kea-*:config.
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.
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
Defines the logger used by the top-level component of kea-dhcp-ddns.