diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 12:15:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 12:15:43 +0000 |
commit | f5f56e1a1c4d9e9496fcb9d81131066a964ccd23 (patch) | |
tree | 49e44c6f87febed37efb953ab5485aa49f6481a7 /src/lib/yang/translator_option_data.h | |
parent | Initial commit. (diff) | |
download | isc-kea-f5f56e1a1c4d9e9496fcb9d81131066a964ccd23.tar.xz isc-kea-f5f56e1a1c4d9e9496fcb9d81131066a964ccd23.zip |
Adding upstream version 2.4.1.upstream/2.4.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/lib/yang/translator_option_data.h')
-rw-r--r-- | src/lib/yang/translator_option_data.h | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/src/lib/yang/translator_option_data.h b/src/lib/yang/translator_option_data.h new file mode 100644 index 0000000..d8d4f60 --- /dev/null +++ b/src/lib/yang/translator_option_data.h @@ -0,0 +1,195 @@ +// Copyright (C) 2018-2023 Internet Systems Consortium, Inc. ("ISC") +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef ISC_TRANSLATOR_OPTION_DATA_H +#define ISC_TRANSLATOR_OPTION_DATA_H 1 + +#include <yang/translator.h> + +namespace isc { +namespace yang { + +/// Option data translation between YANG and JSON +/// +/// JSON syntax for Kea DHCP with command channel is: +/// @code +/// { +/// "code": <code>, +/// "name": <name>, +/// "space": <space>, +/// "csv-format": <csv format flag>, +/// "data": <value>, +/// "always-send": <always send flag>, +/// "never-send": <never send flag>, +/// "user-context": { <json map> }, +/// "comment": "<comment>" +/// } +/// @endcode +/// +/// YANG syntax for kea-dhcp[46] with code and space as keys is: +/// @code +/// +--rw option-data* [code space] +/// +--rw code uint8 +/// +--rw space string +/// +--rw name? string +/// +--rw data? string +/// +--rw csv-format? boolean +/// +--rw always-send? boolean +/// +--rw never-send? boolean +/// +--rw user-context? user-context +/// @endcode +/// +/// An example in JSON and YANG formats: +/// @code +/// [ +/// { +/// "code": 100, +/// "space": "dns", +/// "csv-format": false, +/// "data": "12121212", +/// "always-send": false, +/// "never-send": false +/// } +/// ] +/// @endcode +/// @code +/// /kea-dhcp6-server:config (container) +/// /kea-dhcp6-server:config/ +/// option-data[code='100'][space='dns'] (list instance) +/// /kea-dhcp6-server:config/ +/// option-data[code='100'][space='dns']/code = 100 +/// /kea-dhcp6-server:config/ +/// option-data[code='100'][space='dns']/space = dns +/// /kea-dhcp6-server:config/ +/// option-data[code='100'][space='dns']/data = 12121212 +/// /kea-dhcp6-server:config/ +/// option-data[code='100'][space='dns']/csv-format = false +/// /kea-dhcp6-server:config/ +/// option-data[code='100'][space='dns']/always-send = false +/// /kea-dhcp6-server:config/ +/// option-data[code='100'][space='dns']/never-send = false +/// @endcode + +/// @brief A translator class for converting an option data between +/// YANG and JSON. +/// +/// Currently supports on kea-dhcp[46]-server, not yet ietf-dhcpv6-server. +class TranslatorOptionData : virtual public Translator { +public: + /// @brief Constructor. + /// + /// @param session Sysrepo session. + /// @param model Model name. + TranslatorOptionData(sysrepo::Session session, const std::string& model); + + /// @brief Destructor. + virtual ~TranslatorOptionData() = default; + + /// @brief Translate an option data from YANG to JSON. + /// + /// @param data_node the YANG node representing the option data + /// + /// @return the JSON representation of the option data + /// + /// @throw NetconfError when sysrepo raises an error. + isc::data::ElementPtr getOptionData(libyang::DataNode const& data_node); + + /// @brief Translate an option data from YANG to JSON. + /// + /// @param xpath The xpath of the option data. + /// + /// @return JSON representation of the option data. + /// + /// @throw NetconfError when sysrepo raises an error. + isc::data::ElementPtr getOptionDataFromAbsoluteXpath(std::string const& xpath); + + /// @brief Translate and set option data from JSON to YANG. + /// + /// @param xpath The xpath of the option data. + /// @param elem The JSON element. + void setOptionData(const std::string& xpath, + isc::data::ConstElementPtr elem); + +protected: + /// @brief getOptionData JSON for kea-dhcp[46]. + /// + /// @param data_node the YANG node representing the option data + /// + /// @return JSON representation of the option data. + /// + /// @throw NetconfError when sysrepo raises an error. + isc::data::ElementPtr getOptionDataKea(libyang::DataNode const& data_node); + + /// @brief setOptionData for kea-dhcp[46]. + /// + /// @param xpath The xpath of the option data. + /// @param elem The JSON element. + void setOptionDataKea(const std::string& xpath, + isc::data::ConstElementPtr elem); +}; // TranslatorOptionData + +/// @brief A translator class for converting an option data list between +/// YANG and JSON. +/// +/// Currently supports on kea-dhcp[46]-server, not yet ietf-dhcpv6-server. +class TranslatorOptionDataList : virtual public TranslatorOptionData { +public: + /// @brief Constructor. + /// + /// @param session Sysrepo session. + /// @param model Model name. + TranslatorOptionDataList(sysrepo::Session session, + const std::string& model); + + /// @brief Destructor. + virtual ~TranslatorOptionDataList() = default; + + /// @brief Translate option data list from YANG to JSON. + /// + /// @param data_node the YANG node representing the list of option data + /// + /// @return the JSON representation of the list of option data + /// + /// @throw NetconfError when sysrepo raises an error. + isc::data::ConstElementPtr getOptionDataList(libyang::DataNode const& data_node); + + /// @brief Translate option data list from YANG to JSON. + /// + /// @param xpath The xpath of the option data list. + /// + /// @return the JSON representation of the list of option data + /// + /// @throw NetconfError when sysrepo raises an error. + isc::data::ConstElementPtr getOptionDataListFromAbsoluteXpath(std::string const& xpath); + + /// @brief Translate and set option data list from JSON to YANG. + /// + /// @param xpath The xpath of the option data list. + /// @param elem The JSON element. + void setOptionDataList(const std::string& xpath, + isc::data::ConstElementPtr elem); + +protected: + /// @brief getOptionDataList for kea-dhcp[46]. + /// + /// @param data_node the YANG node representing the list of option data + /// + /// @throw NetconfError when sysrepo raises an error. + isc::data::ConstElementPtr getOptionDataListKea(libyang::DataNode const& data_node); + + /// @brief setOptionDataList for kea-dhcp[46]. + /// + /// @param xpath The xpath of the option data list. + /// @param elem The JSON element. + /// @throw BadValue on option data without code or space. + void setOptionDataListKea(const std::string& xpath, + isc::data::ConstElementPtr elem); +}; // TranslatorOptionDataList + +} // namespace yang +} // namespace isc + +#endif // ISC_TRANSLATOR_OPTION_DATA_H |