Kea 2.6.2
isc::yang::TranslatorClass Class Reference

Client class translation between YANG and JSON. More...

#include <translator_class.h>

+ Inheritance diagram for isc::yang::TranslatorClass:

Public Member Functions

 TranslatorClass (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~TranslatorClass ()=default
 Destructor.
 
isc::data::ElementPtr getClass (libyang::DataNode const &data_node)
 Translate a client class from YANG to JSON.
 
isc::data::ElementPtr getClassFromAbsoluteXpath (std::string const &xpath)
 Translate a client class from YANG to JSON.
 
void setClass (const std::string &xpath, isc::data::ConstElementPtr elem)
 Translate and set client class from JSON to YANG.
 
- Public Member Functions inherited from isc::yang::TranslatorOptionDataList
 TranslatorOptionDataList (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~TranslatorOptionDataList ()=default
 Destructor.
 
isc::data::ConstElementPtr getOptionDataList (libyang::DataNode const &data_node)
 Translate option data list from YANG to JSON.
 
isc::data::ConstElementPtr getOptionDataListFromAbsoluteXpath (std::string const &xpath)
 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.
 
- Public Member Functions inherited from isc::yang::TranslatorOptionData
 TranslatorOptionData (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~TranslatorOptionData ()=default
 Destructor.
 
isc::data::ElementPtr getOptionData (libyang::DataNode const &data_node)
 Translate an option data from YANG to JSON.
 
isc::data::ElementPtr getOptionDataFromAbsoluteXpath (std::string const &xpath)
 Translate an option data from YANG to JSON.
 
void setOptionData (const std::string &xpath, isc::data::ConstElementPtr elem)
 Translate and set option data from JSON to YANG.
 
- Public Member Functions inherited from isc::yang::Translator
 Translator (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~Translator ()=default
 Destructor.
 
template<typename T>
void checkAndGet (isc::data::ElementPtr const &storage, libyang::DataNode const &data_node, std::string const &xpath, T translate) const
 Calls {translate} for the element found at {xpath} relative to {data_node} and sets the result in {storage} with the {xpath} key.
 
void checkAndGetAndJsonifyLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, const std::string &name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node, converts it from string to JSON and stores it in the specified storage.
 
template<typename T>
void checkAndGetDiverging (isc::data::ElementPtr const &storage, libyang::DataNode const &data_node, std::string const &key, std::string const &xpath, T translate) const
 Calls {translate} for the element found at {xpath} relative to {data_node} and sets the result in {storage} with the {key} key.
 
void checkAndGetDivergingLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name, std::string const &yang_name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node and stores it in the specified storage.
 
void checkAndGetLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node and stores it in the specified storage.
 
void checkAndSetDivergingLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, std::string const &yang_name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void checkAndSetLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void checkAndSetLeafList (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath as a leaf-list.
 
void checkAndSetUserContext (isc::data::ConstElementPtr const &from, std::string const &xpath)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void checkAndStringifyAndSetLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void deleteItem (const std::string &xpath)
 Delete basic value from YANG.
 
libyang::DataNode findXPath (std::string const &xpath) const
 Retrieves a YANG data node by xpath.
 
template<typename functor_t>
void forAll (std::string const &xpath, functor_t f) const
 Run a function for a node and all its children.
 
std::optional< libyang::DataNode > getData (std::string const &xpath) const
 Get a YANG data node found at the given absolute xpath.
 
isc::data::ElementPtr getItem (libyang::DataNode const &data_node, std::string const &xpath) const
 Translate a basic value from YANG to JSON for a given xpath that is relative to the given source node.
 
isc::data::ElementPtr getItemFromAbsoluteXpath (std::string const &xpath) const
 Translate a basic value from YANG to JSON for a given absolute xpath.
 
template<typename T>
isc::data::ElementPtr getList (libyang::DataNode const &data_node, std::string const &xpath, T &t, isc::data::ElementPtr(T::*f)(libyang::DataNode const &)) const
 Retrieve a list as ElementPtr from sysrepo from a certain xpath.
 
void getMandatoryDivergingLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name, std::string const &yang_name) const
 Retrieves a child YANG data node identified by one name from the given parent YANG container node and stores it in the specified storage under a different name.
 
void getMandatoryLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node and stores it in the specified storage.
 
bool schemaNodeExists (std::string const &xpath) const
 Checks whether a YANG node exists in the schema.
 
void setItem (const std::string &xpath, isc::data::ConstElementPtr const elem, libyang::LeafBaseType const type)
 Translate and set basic value from JSON to YANG.
 
void setMandatoryDivergingLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, std::string const &yang_name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void setMandatoryLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
- Public Member Functions inherited from isc::yang::TranslatorOptionDefList
 TranslatorOptionDefList (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~TranslatorOptionDefList ()=default
 Destructor.
 
isc::data::ConstElementPtr getOptionDefList (libyang::DataNode const &data_node)
 Translate option definition list from YANG to JSON.
 
isc::data::ConstElementPtr getOptionDefListFromAbsoluteXpath (std::string const &xpath)
 Translate option definition list from YANG to JSON.
 
void setOptionDefList (const std::string &xpath, isc::data::ConstElementPtr elem)
 Translate and set option definition list from JSON to YANG.
 
- Public Member Functions inherited from isc::yang::TranslatorOptionDef
 TranslatorOptionDef (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~TranslatorOptionDef ()=default
 Destructor.
 
isc::data::ElementPtr getOptionDef (libyang::DataNode const &data_node)
 Translate an option definition from YANG to JSON.
 
isc::data::ElementPtr getOptionDefFromAbsoluteXpath (std::string const &xpath)
 Translate an option definition from YANG to JSON.
 
void setOptionDef (const std::string &xpath, isc::data::ConstElementPtr elem)
 Translate and set option definition from JSON to YANG.
 

Protected Member Functions

isc::data::ElementPtr getClassKea (libyang::DataNode const &data_node)
 getClass JSON for kea-dhcp[46].
 
void setClassKea (const std::string &xpath, isc::data::ConstElementPtr elem)
 setClass for kea-dhcp[46].
 
- Protected Member Functions inherited from isc::yang::TranslatorOptionDataList
isc::data::ConstElementPtr getOptionDataListKea (libyang::DataNode const &data_node)
 getOptionDataList for kea-dhcp[46].
 
void setOptionDataListKea (const std::string &xpath, isc::data::ConstElementPtr elem)
 setOptionDataList for kea-dhcp[46].
 
- Protected Member Functions inherited from isc::yang::TranslatorOptionData
isc::data::ElementPtr getOptionDataKea (libyang::DataNode const &data_node)
 getOptionData JSON for kea-dhcp[46].
 
void setOptionDataKea (const std::string &xpath, isc::data::ConstElementPtr elem)
 setOptionData for kea-dhcp[46].
 
- Protected Member Functions inherited from isc::yang::TranslatorOptionDefList
isc::data::ConstElementPtr getOptionDefListKea (libyang::DataNode const &data_node)
 getOptionDefList implementation specific to kea-dhcp[46]-server models.
 
void setOptionDefListKea (const std::string &xpath, isc::data::ConstElementPtr elem)
 setOptionDefList implementation specific to kea-dhcp[46]-server models.
 
- Protected Member Functions inherited from isc::yang::TranslatorOptionDef
isc::data::ElementPtr getOptionDefKea (libyang::DataNode const &data_node)
 getOptionDef implementation specific to kea-dhcp[46]-server models.
 
void setOptionDefKea (const std::string &xpath, isc::data::ConstElementPtr elem)
 setOptionDef implementation specific to kea-dhcp[46]-server models.
 

Additional Inherited Members

- Static Public Member Functions inherited from isc::yang::Translator
static isc::data::ElementPtr translateFromYang (std::optional< libyang::DataNode > data_node)
 Translate basic value from the given YANG data node to JSON element.
 
static std::optional< std::string > translateToYang (isc::data::ConstElementPtr const &elem, libyang::LeafBaseType const type)
 Translate basic value from JSON to YANG.
 
- Protected Types inherited from isc::yang::Translator
using Deserializer
 Maps YANG types to functions that transform a YANG type into an ElementPtr.
 
using Serializer
 Maps YANG types to functions that transform the string representation of an Element into a string that can be passed into Session::setItem().
 
- Static Protected Member Functions inherited from isc::yang::Translator
static std::string decode64 (std::string const &input)
 Decode a YANG element of binary type to a string that can be stored in an Element::string JSON.
 
static std::string encode64 (std::string const &input)
 Encode a string such that it can be stored in a YANG element of binary type.
 
static Deserializer initializeDeserializer ()
 Initializes the deserializer which is used to translate a YANG node to an ElementPtr.
 
static Serializer initializeSerializer ()
 Initializes the serializer which is used to translate the string value of an Element to a string that can be passed into Session::setItem().
 
- Protected Attributes inherited from isc::yang::Translator
std::string model_
 The model.
 
sysrepo::Session session_
 The sysrepo session.
 

Detailed Description

Client class translation between YANG and JSON.

JSON syntax for all Kea servers with client class is:

{
"name": <name>,
"test": <test expression>,
"only-if-required": <only if required flag>,
"option-data": <option data list>,
(DHCPv4 only)
"option-def": <option definition list>,
"next-server": <next server address>,
"server-hostname": <server hostname>,
"boot-file-name": <boot filename>,
"user-context": { <json map> },
"comment": <comment>
}
it forwards queries to a single upstream resolver and passes the answers back to the client It is constructed with the address of the forward server Queries are initiated with the question to ask the forward server
Definition asiodns.dox:60

YANG syntax for kea-dhcp[46] is with the name as the list key:

+--rw client-class* [name]
+--rw name string
+--rw test? string
+--rw only-if-required? boolean
+--rw option-def* [code space]
+--rw option-data* [code space]
+--rw next-server? inet:ipv4-address
+--rw server-hostname? string
+--rw boot-file-name? string
+--rw valid-lifetime? uint32
+--rw min-valid-lifetime? uint32
+--rw max-valid-lifetime? uint32
+--rw user-context? user-context

An example in JSON and YANG formats:

[
{
"name": "foo",
"test": "''==''",
"only-if-required": false
}
]
/kea-dhcp6-server:config (container)
/kea-dhcp6-server:config/client-class[name='foo'] (list instance)
/kea-dhcp6-server:config/client-class[name='foo']/name = foo
/kea-dhcp6-server:config/client-class[name='foo']/test = ''==''
/kea-dhcp6-server:config/client-class[name='foo']/only-if-required = false
if(!(yy_init))

A translator class for converting a client class between YANG and JSON.

Currently supports only kea-dhcp[46]-server. Ietf-dhcpv6-server does not define client class contents.

Definition at line 75 of file translator_class.h.

Constructor & Destructor Documentation

◆ TranslatorClass()

isc::yang::TranslatorClass::TranslatorClass ( sysrepo::Session session,
const std::string & model )

Constructor.

Parameters
sessionSysrepo session.
modelModel name.

Definition at line 22 of file translator_class.cc.

References isc::yang::TranslatorOptionDataList::TranslatorOptionDataList(), and isc::yang::TranslatorOptionDefList::TranslatorOptionDefList().

Referenced by isc::yang::TranslatorClasses::TranslatorClasses().

+ Here is the call graph for this function:

◆ ~TranslatorClass()

virtual isc::yang::TranslatorClass::~TranslatorClass ( )
virtualdefault

Destructor.

Member Function Documentation

◆ getClass()

ElementPtr isc::yang::TranslatorClass::getClass ( libyang::DataNode const & data_node)

Translate a client class from YANG to JSON.

Parameters
data_nodethe YANG node representing the class
Returns
the JSON representation of the class
Exceptions
NetconfErrorwhen sysrepo raises an error.

Definition at line 31 of file translator_class.cc.

References getClassKea(), isc_throw, isc::yang::Translator::model_, and isc::Exception::what().

Referenced by isc::yang::TranslatorClasses::getClassesKea(), and getClassFromAbsoluteXpath().

+ Here is the call graph for this function:

◆ getClassFromAbsoluteXpath()

ElementPtr isc::yang::TranslatorClass::getClassFromAbsoluteXpath ( std::string const & xpath)

Translate a client class from YANG to JSON.

Note
This is a computationally expensive operation that makes a lookup in the sysrepo datastore by calling Session::getData(). It should be used sparingly in production code, mainly to get an initial data node to work with. It may be used at will in unit tests. Use getClass(libyang::DataNode) as a scalable alternative.
Parameters
xpaththe xpath of the class
Returns
JSON representation of the class
Exceptions
NetconfErrorwhen sysrepo raises an error.

Definition at line 47 of file translator_class.cc.

References isc::yang::Translator::findXPath(), and getClass().

+ Here is the call graph for this function:

◆ getClassKea()

ElementPtr isc::yang::TranslatorClass::getClassKea ( libyang::DataNode const & data_node)
protected

getClass JSON for kea-dhcp[46].

Parameters
data_nodethe YANG node representing the client class
Returns
JSON representation of the class
Exceptions
NetconfErrorwhen sysrepo raises an error.

Definition at line 56 of file translator_class.cc.

References isc::yang::Translator::checkAndGetAndJsonifyLeaf(), isc::yang::Translator::checkAndGetLeaf(), Element::createMap(), isc::yang::Translator::getMandatoryLeaf(), isc::yang::TranslatorOptionDataList::getOptionDataList(), isc::yang::TranslatorOptionDefList::getOptionDefList(), isc::yang::Translator::model_, and result.

Referenced by getClass().

+ Here is the call graph for this function:

◆ setClass()

void isc::yang::TranslatorClass::setClass ( const std::string & xpath,
isc::data::ConstElementPtr elem )

Translate and set client class from JSON to YANG.

Parameters
xpathThe xpath of the client class.
elemThe JSON element.

Definition at line 95 of file translator_class.cc.

References isc_throw, isc::yang::Translator::model_, setClassKea(), and isc::Exception::what().

Referenced by isc::yang::TranslatorClasses::setClassesKea().

+ Here is the call graph for this function:

◆ setClassKea()

void isc::yang::TranslatorClass::setClassKea ( const std::string & xpath,
isc::data::ConstElementPtr elem )
protected

setClass for kea-dhcp[46].

Parameters
xpathThe xpath of the client class.
elemThe JSON element.

Definition at line 112 of file translator_class.cc.

References isc::yang::Translator::checkAndSetLeaf(), isc::yang::Translator::checkAndSetUserContext(), isc::yang::Translator::model_, isc::yang::Translator::setItem(), isc::yang::TranslatorOptionDataList::setOptionDataList(), and isc::yang::TranslatorOptionDefList::setOptionDefList().

Referenced by setClass().

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: