21 TranslatorHost::TranslatorHost(S_Session session,
const string& model)
33 if ((
model_ == KEA_DHCP4_SERVER) ||
34 (
model_ == KEA_DHCP6_SERVER)) {
37 }
catch (
const sysrepo_exception& ex) {
39 "sysrepo error getting host reservation at '" << xpath
40 <<
"': " << ex.
what());
43 "getHost not implemented for the model: " <<
model_);
50 if (!id_type || !
id) {
55 result->set(id_type->stringValue(), id);
58 result->set(
"hostname", hostname);
60 if (
model_ == KEA_DHCP4_SERVER) {
63 result->set(
"ip-address", address);
67 if (addresses && (addresses->size() > 0)) {
68 result->set(
"ip-addresses", addresses);
71 if (prefixes && (prefixes->size() > 0)) {
72 result->set(
"prefixes", prefixes);
76 if (options && (options->size() > 0)) {
77 result->set(
"option-data", options);
81 result->set(
"client-classes", classes);
83 if (
model_ == KEA_DHCP4_SERVER) {
86 result->set(
"next-server", next);
90 result->set(
"server-hostname", hostname);
94 result->set(
"boot-file-name", boot);
99 result->set(
"user-context", Element::fromJSON(context->stringValue()));
107 if ((
model_ == KEA_DHCP4_SERVER) ||
108 (
model_ == KEA_DHCP6_SERVER)) {
112 "setHost not implemented for the model: " <<
model_);
114 }
catch (
const sysrepo_exception& ex) {
116 "sysrepo error setting host reservation '" << elem->str()
117 <<
"' at '" << xpath <<
"': " << ex.
what());
126 setItem(xpath +
"/hostname", hostname, SR_STRING_T);
128 if (
model_ == KEA_DHCP4_SERVER) {
131 setItem(xpath +
"/ip-address", address, SR_STRING_T);
135 if (addresses && (addresses->size() > 0)) {
137 setItem(xpath +
"/ip-addresses", address, SR_STRING_T);
141 if (prefixes && (prefixes->size() > 0)) {
143 setItem(xpath +
"/prefixes", prefix, SR_STRING_T);
148 if (options && (options->size() > 0)) {
152 if (classes && (classes->size() > 0)) {
154 setItem(xpath +
"/client-classes", cclass, SR_STRING_T);
159 if (
model_ == KEA_DHCP4_SERVER) {
162 setItem(xpath +
"/next-server", next, SR_STRING_T);
166 setItem(xpath +
"/server-hostname", hostname, SR_STRING_T);
170 setItem(xpath +
"/boot-file-name", boot, SR_STRING_T);
177 setItem(xpath +
"/user-context", Element::create(context->str()),
194 return getList<TranslatorHost>(xpath +
"/host", *
this,
201 if ((
model_ == KEA_DHCP4_SERVER) ||
202 (
model_ == KEA_DHCP6_SERVER)) {
206 "setHosts not implemented for the model: " <<
model_);
208 }
catch (
const sysrepo_exception& ex) {
210 "sysrepo error setting host reservations '" << elem->str()
211 <<
"' at '" << xpath <<
"': " << ex.
what());
217 for (
size_t i = 0; i < elem->size(); ++i) {
218 string id_type =
"unknown";
222 id_type =
"hw-address";
225 id = host->get(
"duid");
230 if (
model_ == KEA_DHCP4_SERVER) {
231 id = host->get(
"circuit-id");
233 id_type =
"circuit-id";
236 id = host->get(
"client-id");
238 id_type =
"client-id";
242 id = host->get(
"flex-id");
249 if (id_type ==
"unknown") {
254 key << xpath <<
"/host[identifier-type='" << id_type
255 <<
"'][identifier='" <<
id->stringValue() <<
"']";
isc::data::ElementPtr getItems(const std::string &xpath)
Get and translate a list of basic values from YANG to JSON.
isc::data::ElementPtr getHostKea(const std::string &xpath)
getHost for kea-dhcp[46]-server models.
isc::data::ElementPtr getHosts(const std::string &xpath)
Get and translate host reservations from YANG to JSON.
void setHostsKea(const std::string &xpath, isc::data::ConstElementPtr elem)
setHosts for kea-dhcp[46].
A generic exception that is thrown when a function is not implemented.
Between YANG and JSON translator class for basic values.
boost::shared_ptr< Element > ElementPtr
virtual ~TranslatorHost()
Destructor.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
isc::data::ElementPtr getHost(const std::string &xpath)
Get and translate a host reservation from YANG to 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...
void setItem(const std::string &xpath, isc::data::ConstElementPtr elem, sr_type_t type)
Translate and set basic value from JSON to YANG.
Translation between YANG and JSON for a single host reservation.
A translator class for converting an option data list between YANG and JSON.
A generic exception that is thrown when an unexpected error condition occurs.
std::string model_
The model.
boost::shared_ptr< const Element > ConstElementPtr
static isc::data::ConstElementPtr getContext(isc::data::ConstElementPtr parent)
Get user context.
void setHostKea(const std::string &xpath, isc::data::ConstElementPtr elem)
setHost for kea-dhcp[46]-server models.
TranslatorHosts(sysrepo::S_Session session, const std::string &model)
Constructor.
Defines the logger used by the top-level component of kea-lfc.
isc::data::ConstElementPtr getOptionDataList(const std::string &xpath)
Get and translate option data list from YANG to JSON.
isc::data::ElementPtr getItem(const std::string &xpath)
Get and translate basic value from YANG to JSON.
virtual ~TranslatorHosts()
Destructor.
Option data translation between YANG and JSON.
void setOptionDataList(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set option data list from JSON to YANG.
void setHost(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set host reservation from JSON to YANG.
void setHosts(const std::string &xpath, isc::data::ConstElementPtr elem)
Translate and set (address) host reservations from JSON to YANG.