 |
Kea
1.5.0
|
Go to the documentation of this file.
16 #ifndef HAVE_PRE_0_7_6_SYSREPO
17 using namespace sysrepo;
23 TranslatorConfig::TranslatorConfig(S_Session session,
const string& model)
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",
143 Element::fromJSON(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");
195 ddns->set(
"user-context", Element::fromJSON(context->stringValue()));
198 if (!ddns->empty()) {
209 ElementPtr config_ctrl = Element::createMap();
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);
281 result->set(
"user-context", Element::fromJSON(context->stringValue()));
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",
303 Element::fromJSON(queue_ctrl->stringValue()));
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",
334 Element::fromJSON(context->stringValue()));
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",
371 Element::fromJSON(context->stringValue()));
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",
397 Element::fromJSON(context->stringValue()));
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";
558 setItem(hook_lib.str(), Element::create(params->str()),
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);
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",
757 Element::create(context->str()), SR_STRING_T);
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",
815 Element::create(context->str()), SR_STRING_T);
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 translator class for converting an option data list between YANG and JSON.
isc::data::ElementPtr getServerKeaDhcp4()
getServer for kea-dhcp4-server:config.
A translator class for converting a logger list between YANG and JSON.
void setControlSocket(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set control socket from JSON to YANG.
ElementPtr copy(ConstElementPtr from, int level)
Copy the data up to a nesting level.
isc::data::ElementPtr getServerKeaDhcp6()
getServer for kea-dhcp6-server:config.
void setServerKeaDhcp6(isc::data::ConstElementPtr elem)
setServer for kea-dhcp6-server:config.
sysrepo::S_Iter_Value getIter(const std::string &xpath)
List iterator methods keeping the session private.
void setConfigIetf6(isc::data::ConstElementPtr elem)
setConfig for ietf-dhcpv6-server.
static void preProcess4(isc::data::ConstElementPtr config)
Pre process a DHCPv4 configuration.
isc::data::ConstElementPtr getOptionDataList(const std::string &xpath)
Get and translate option data list from YANG to JSON.
static void preProcess6(isc::data::ConstElementPtr config)
Pre process a DHCPv6 configuration.
void delConfigIetf6()
delConfig for ietf-dhcpv6-server.
void setServerKeaDhcp4(isc::data::ConstElementPtr elem)
setServer for kea-dhcp4-server:config.
Translation between YANG and JSON for a single host reservation.
void setOptionDefList(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set option definition list from JSON to YANG.
A translator class for converting a subnet list between YANG and JSON.
void setConfigKea4(isc::data::ConstElementPtr elem)
setConfig for kea-dhcp[46]-server.
A translator class for converting a shared network list between YANG and JSON.
A translator class for converting a pool between YANG and JSON.
isc::data::ElementPtr getConfigKea6()
getConfig for kea-dhcp6-server.
void setServerKeaDhcpCommon(const std::string &xpath, isc::data::ConstElementPtr elem)
setServer common part for kea-dhcp[46]-server:config.
Subnet (aka network range) translation between YANG and JSON.
void setLoggers(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set loggeres from JSON to YANG.
isc::data::ElementPtr getDatabase(const std::string &xpath)
Get and translate a database access from YANG to JSON.
std::string getNext(sysrepo::S_Iter_Value iter)
Get xpath of the next YANG list item.
A translator class for converting a client class list between YANG and JSON.
virtual ~TranslatorConfig()
Destructor.
void setSharedNetworks(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set shared networks from JSON to YANG.
void setConfigKea6(isc::data::ConstElementPtr elem)
setConfig for kea-dhcp6-server.
isc::data::ConstElementPtr getDatabases(const std::string &xpath)
Get and translate database accesses from YANG to JSON.
isc::data::ElementPtr getItem(const std::string &xpath)
Get and translate basic value from YANG to JSON.
void setClasses(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set client classes from JSON to YANG.
Logger translation between YANG and JSON.
Option definition translation between YANG and JSON.
Control socket translation between YANG and JSON.
isc::data::ElementPtr getItems(const std::string &xpath)
Get and translate a list of basic values from YANG to JSON.
Shared network translation between YANG and JSON.
isc::data::ElementPtr getConfigControlKea(const std::string &xpath)
Retrieves configuration control from sysrepo.
Option data translation between YANG and JSON.
Defines the logger used by the top-level component of kea-dhcp-ddns.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
A translator class for converting pools between YANG and JSON.
#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...
A translator class for converting host reservations list between YANG and JSON.
std::string format(const std::string &format, const std::vector< std::string > &args)
Apply Formatting.
void setSubnets(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set subnets from JSON to YANG.
isc::data::ElementPtr getDdnsKea(const std::string &xpath)
Retrieves DDNS configuration from sysrepo.
isc::data::ElementPtr getConfig()
Get and translate the whole DHCP server configuration from YANG to JSON.
void setOptionDataList(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set option data list from JSON to YANG.
isc::data::ConstElementPtr getClasses(const std::string &xpath)
Get and translate client classes from YANG to JSON.
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.
void setDatabases(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set database accesses from JSON to YANG.
isc::data::ElementPtr getServerKeaDhcpCommon(const std::string &xpath)
getServer common part for kea-dhcp[46]-server:config.
A translator class for converting a pd-pool list between YANG and JSON.
isc::data::ElementPtr getConfigIetf6()
getConfig for ietf-dhcpv6-server.
isc::data::ElementPtr getHooksKea(const std::string &xpath)
Retrieves hooks configuration from sysrepo.
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 getSharedNetworks(const std::string &xpath)
Get and translate shared networks from YANG to JSON.
isc::data::ElementPtr getSubnets(const std::string &xpath)
Get and translate subnets from YANG to JSON.
Between YANG and JSON translator class for basic values.
void setServerKeaLogging(isc::data::ConstElementPtr elem)
set Logging part for kea-*:config.
A translator class for converting a database access list between YANG and JSON.
void getParam(isc::data::ElementPtr &storage, const std::string &xpath, const std::string &name)
Retrieves an item and stores in the specified storage.
isc::data::ConstElementPtr getLoggers(const std::string &xpath)
Get and translate loggeres from YANG to JSON.
Currently supports kea-dhcp[46]-server models.
void setHosts(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set (address) host reservations from JSON to YANG.
isc::data::ElementPtr getExpiredKea(const std::string &xpath)
Retrieves expired leases processing parameters from sysrepo.
isc::data::ElementPtr getHosts(const std::string &xpath)
Get and translate host reservations from YANG to JSON.
Prefix delegation pool translation between YANG and JSON.
boost::shared_ptr< Element > ElementPtr
A generic exception that is thrown when a function is not implemented.
isc::data::ConstElementPtr getControlSocket(const std::string &xpath)
Get and translate a control socket from YANG to JSON.
Client class translation between YANG and JSON.
boost::shared_ptr< const Element > ConstElementPtr
void delConfigKea()
delConfig for kea-dhcp[46]-server.
std::string model_
The model.
static isc::data::ConstElementPtr getContext(isc::data::ConstElementPtr parent)
Get user context.
isc::data::ConstElementPtr getOptionDefList(const std::string &xpath)
Get and translate option definition list from YANG to JSON.
isc::data::ElementPtr getConfigKea4()
getConfig for kea-dhcp4-server.
Database access translation between YANG and JSON.
void setConfig(isc::data::ConstElementPtr elem)
Translate and sets the DHCP server configuration from JSON to YANG.