blob: 33df28239e4d3eb9881d52da5647e4bc051f410c [file] [log] [blame]
Michal Vasko7bcb48e2016-01-15 10:28:54 +01001/**
2 * \file messages_client.h
3 * \author Radek Krejci <rkrejci@cesnet.cz>
4 * \author Michal Vasko <mvasko@cesnet.cz>
5 * \brief libnetconf2's public functions and structures of NETCONF client messages.
6 *
7 * Copyright (c) 2015 CESNET, z.s.p.o.
8 *
Radek Krejci9b81f5b2016-02-24 13:14:49 +01009 * This source code is licensed under BSD 3-Clause License (the "License").
10 * You may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
Michal Vaskoafd416b2016-02-25 14:51:46 +010012 *
Radek Krejci9b81f5b2016-02-24 13:14:49 +010013 * https://opensource.org/licenses/BSD-3-Clause
Michal Vasko7bcb48e2016-01-15 10:28:54 +010014 */
15
16#ifndef NC_MESSAGES_CLIENT_H_
17#define NC_MESSAGES_CLIENT_H_
18
Michal Vaskoc09730e2019-01-17 10:07:26 +010019#ifdef __cplusplus
20extern "C" {
21#endif
22
Michal Vasko7bcb48e2016-01-15 10:28:54 +010023#include <stdint.h>
24
25#include "netconf.h"
26
Michal Vaskof0537d82016-01-29 14:42:38 +010027/**
Radek Krejci6799a052017-05-19 14:23:23 +020028 * @defgroup client_msg Client Messages
29 * @ingroup client
30 *
31 * @brief Functions to create NETCONF RPCs (or actions) and process replies received from the server.
32 * @{
33 */
34
35/**
Michal Vaskof0537d82016-01-29 14:42:38 +010036 * @brief Enumeration of RPC types
Radek Krejci6799a052017-05-19 14:23:23 +020037 *
38 * Note that NC_RPC_CLOSE is not defined since sending \<close-session\> is done implicitly by nc_session_free()
Michal Vaskof0537d82016-01-29 14:42:38 +010039 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010040typedef enum {
Michal Vasko7f1c78b2016-01-19 09:52:14 +010041 NC_RPC_UNKNOWN = 0, /**< invalid RPC. */
Michal Vasko90e8e692016-07-13 12:27:57 +020042 NC_RPC_ACT_GENERIC, /**< user-defined generic RPC/action. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010043
44 /* ietf-netconf */
45 NC_RPC_GETCONFIG, /**< \<get-config\> RPC. */
46 NC_RPC_EDIT, /**< \<edit-config\> RPC. */
47 NC_RPC_COPY, /**< \<copy-config\> RPC. */
48 NC_RPC_DELETE, /**< \<delete-config\> RPC. */
49 NC_RPC_LOCK, /**< \<lock\> RPC. */
50 NC_RPC_UNLOCK, /**< \<unlock\> RPC. */
51 NC_RPC_GET, /**< \<get\> RPC. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010052 NC_RPC_KILL, /**< \<kill-session\> RPC. */
53 NC_RPC_COMMIT, /**< \<commit\> RPC. */
54 NC_RPC_DISCARD, /**< \<discard-changes\> RPC. */
55 NC_RPC_CANCEL, /**< \<cancel-commit\> RPC. */
56 NC_RPC_VALIDATE, /**< \<validate\> RPC. */
57
58 /* ietf-netconf-monitoring */
59 NC_RPC_GETSCHEMA, /**< \<get-schema\> RPC. */
60
61 /* notifications */
Michal Vaskoc1171a42019-11-05 12:06:46 +010062 NC_RPC_SUBSCRIBE, /**< \<create-subscription\> RPC. */
63
64 /* ietf-netconf-nmda */
65 NC_RPC_GETDATA, /**< \<get-data\> RPC. */
66 NC_RPC_EDITDATA, /**< \<edit-data\> RPC. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010067} NC_RPC_TYPE;
68
Michal Vaskof0537d82016-01-29 14:42:38 +010069/**
70 * @brief Enumeration of \<edit-config\> default operation
71 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010072typedef enum {
Michal Vaskof0537d82016-01-29 14:42:38 +010073 NC_RPC_EDIT_DFLTOP_UNKNOWN = 0, /**< unknown default operation */
74 NC_RPC_EDIT_DFLTOP_MERGE, /**< default operation merge */
75 NC_RPC_EDIT_DFLTOP_REPLACE, /**< default operation replace */
76 NC_RPC_EDIT_DFLTOP_NONE /**< default operation none */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010077} NC_RPC_EDIT_DFLTOP;
78
Michal Vaskof0537d82016-01-29 14:42:38 +010079/**
80 * @brief Enumeration of \<edit-config\> test option
81 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010082typedef enum {
Michal Vaskof0537d82016-01-29 14:42:38 +010083 NC_RPC_EDIT_TESTOPT_UNKNOWN = 0, /**< unknown test option */
84 NC_RPC_EDIT_TESTOPT_TESTSET, /**< test-then-set option */
85 NC_RPC_EDIT_TESTOPT_SET, /**< set option */
86 NC_RPC_EDIT_TESTOPT_TEST /**< test-only option */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010087} NC_RPC_EDIT_TESTOPT;
88
Michal Vaskof0537d82016-01-29 14:42:38 +010089/**
90 * @brief Enumeration of \<edit-config\> error option
91 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010092typedef enum {
Michal Vaskof0537d82016-01-29 14:42:38 +010093 NC_RPC_EDIT_ERROPT_UNKNOWN = 0, /**< unknown error option */
94 NC_RPC_EDIT_ERROPT_STOP, /**< stop-on-error option */
95 NC_RPC_EDIT_ERROPT_CONTINUE, /**< continue-on-error option */
96 NC_RPC_EDIT_ERROPT_ROLLBACK /**< rollback-on-error option */
Michal Vasko7bcb48e2016-01-15 10:28:54 +010097} NC_RPC_EDIT_ERROPT;
98
99/**
100 * @brief NETCONF error structure representation
101 */
102struct nc_err {
Radek Krejci6799a052017-05-19 14:23:23 +0200103 /** @brief \<error-type\>, error layer where the error occurred. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100104 const char *type;
Radek Krejci6799a052017-05-19 14:23:23 +0200105 /** @brief \<error-tag\>. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100106 const char *tag;
Radek Krejci6799a052017-05-19 14:23:23 +0200107 /** @brief \<error-severity\>. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100108 const char *severity;
Radek Krejci6799a052017-05-19 14:23:23 +0200109 /** @brief \<error-app-tag\>, the data-model-specific or implementation-specific error condition, if one exists. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100110 const char *apptag;
Radek Krejci6799a052017-05-19 14:23:23 +0200111 /** @brief \<error-path\>, XPATH expression identifying the element with the error. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100112 const char *path;
Radek Krejci6799a052017-05-19 14:23:23 +0200113 /** @brief \<error-message\>, Human-readable description of the error. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100114 const char *message;
Radek Krejci6799a052017-05-19 14:23:23 +0200115 /** @brief xml:lang attribute of the error-message. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100116 const char *message_lang;
117
118 /* <error-info> */
119
Radek Krejci6799a052017-05-19 14:23:23 +0200120 /** @brief \<session-id\>, session ID of the session holding the requested lock. Part of \<error-info\>. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100121 const char *sid;
Radek Krejci6799a052017-05-19 14:23:23 +0200122 /** @brief \<bad-attr\>, array of the names of the data-model-specific XML attributes that caused the error. Part of \<error-info\>. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100123 const char **attr;
Radek Krejci6799a052017-05-19 14:23:23 +0200124 /** @brief \<bad-element\>, array of the names of the data-model-specific XML element that caused the error. Part of \<error-info\>. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100125 const char **elem;
Radek Krejci6799a052017-05-19 14:23:23 +0200126 /** @brief \<bad-namespace\>, array of the unexpected XML namespaces that caused the error. Part of \<error-info\>. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100127 const char **ns;
Radek Krejci6799a052017-05-19 14:23:23 +0200128 /** @brief Array of the remaining non-standard elements. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100129 struct lyxml_elem **other;
Radek Krejci6799a052017-05-19 14:23:23 +0200130
131 /** @brief Number of items in the attr array */
132 uint16_t attr_count;
133 /** @brief Number of items in the elem array */
134 uint16_t elem_count;
135 /** @brief Number of items in the ns array */
136 uint16_t ns_count;
137 /** @brief Number of items in the other array */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100138 uint16_t other_count;
139};
140
141/**
142 * @brief NETCONF client RPC object
143 */
144struct nc_rpc;
145
Michal Vasko1a38c862016-01-15 15:50:07 +0100146/**
147 * @brief NETCONF client rpc-reply object
148 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100149struct nc_reply {
Michal Vaskof0537d82016-01-29 14:42:38 +0100150 NC_RPL type; /**< reply type */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100151};
152
Michal Vasko1a38c862016-01-15 15:50:07 +0100153/**
154 * @brief NETCONF client data rpc-reply object
155 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100156struct nc_reply_data {
Michal Vasko12257e92016-11-22 09:30:37 +0100157 NC_RPL type; /**< NC_RPL_DATA */
Michal Vasko4a73f342016-11-22 09:32:10 +0100158 struct lyd_node *data; /**< libyang RPC reply data tree (output of an RPC),
Michal Vasko12257e92016-11-22 09:30:37 +0100159 \<get\> and \<get-config\> replies are special,
Michal Vasko1c042702018-11-29 08:27:51 +0100160 in those cases there is the configuration itself,
161 it should be validated as such (using \b LYD_OPT_GET or \b LYD_OPT_GETCONFIG),
162 and it can be NULL in a valid reply. */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100163};
164
Michal Vasko1a38c862016-01-15 15:50:07 +0100165/**
166 * @brief NETCONF client error rpc-reply object
167 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100168struct nc_reply_error {
Michal Vasko1a38c862016-01-15 15:50:07 +0100169 NC_RPL type; /**< NC_RPL_ERROR */
170 const struct nc_err *err; /**< errors, any of the values inside can be NULL */
171 uint32_t count; /**< number of error structures */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100172};
173
Michal Vasko1a38c862016-01-15 15:50:07 +0100174/**
175 * @brief NETCONF client notification object
176 */
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100177struct nc_notif {
178 NC_RPL type; /**< NC_RPL_NOTIF */
179 const char *datetime; /**< eventTime of the notification */
180 struct lyd_node *tree; /**< libyang data tree of the message */
181};
182
183/**
184 * @brief Get the type of the RPC
185 *
186 * @param[in] rpc RPC to check the type of.
187 * @return Type of \p rpc.
188 */
189NC_RPC_TYPE nc_rpc_get_type(const struct nc_rpc *rpc);
190
191/**
Michal Vasko90e8e692016-07-13 12:27:57 +0200192 * @brief Create a generic NETCONF RPC or action
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100193 *
194 * Note that created object can be sent via any NETCONF session that shares the context
195 * of the \p data.
196 *
197 * @param[in] data NETCONF RPC data as a data tree.
198 * @param[in] paramtype How to further manage data parameters.
199 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
200 */
Michal Vasko90e8e692016-07-13 12:27:57 +0200201struct nc_rpc *nc_rpc_act_generic(const struct lyd_node *data, NC_PARAMTYPE paramtype);
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100202
203/**
Michal Vasko90e8e692016-07-13 12:27:57 +0200204 * @brief Create a generic NETCONF RPC or action from an XML string
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100205 *
206 * Note that functions to create any RPC object do not check validity of the provided
207 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100208 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100209 * check. Created object can be sent via any NETCONF session which supports all the
210 * needed NETCONF capabilities for the RPC.
211 *
212 * @param[in] xml_str NETCONF RPC data as an XML string.
213 * @param[in] paramtype How to further manage data parameters.
214 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
215 */
Michal Vasko90e8e692016-07-13 12:27:57 +0200216struct nc_rpc *nc_rpc_act_generic_xml(const char *xml_str, NC_PARAMTYPE paramtype);
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100217
218/**
219 * @brief Create NETCONF RPC \<get-config\>
220 *
221 * Note that functions to create any RPC object do not check validity of the provided
222 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100223 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100224 * check. Created object can be sent via any NETCONF session which supports all the
225 * needed NETCONF capabilities for the RPC.
226 *
227 * @param[in] source Source datastore being queried.
Michal Vaskoc2389702017-08-09 10:16:49 +0200228 * @param[in] filter Optional filter data, an XML subtree or XPath expression (with JSON prefixes).
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100229 * @param[in] wd_mode Optional with-defaults capability mode.
230 * @param[in] paramtype How to further manage data parameters.
231 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
232 */
233struct nc_rpc *nc_rpc_getconfig(NC_DATASTORE source, const char *filter, NC_WD_MODE wd_mode,
234 NC_PARAMTYPE paramtype);
235
236/**
237 * @brief Create NETCONF RPC \<edit-config\>
238 *
239 * Note that functions to create any RPC object do not check validity of the provided
240 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100241 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100242 * check. Created object can be sent via any NETCONF session which supports all the
243 * needed NETCONF capabilities for the RPC.
244 *
245 * @param[in] target Target datastore being edited.
246 * @param[in] default_op Optional default operation.
247 * @param[in] test_opt Optional test option.
248 * @param[in] error_opt Optional error option.
249 * @param[in] edit_content Config or URL where the config to perform is to be found.
250 * @param[in] paramtype How to further manage data parameters.
251 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
252 */
253struct nc_rpc *nc_rpc_edit(NC_DATASTORE target, NC_RPC_EDIT_DFLTOP default_op, NC_RPC_EDIT_TESTOPT test_opt,
254 NC_RPC_EDIT_ERROPT error_opt, const char *edit_content, NC_PARAMTYPE paramtype);
255
256/**
257 * @brief Create NETCONF RPC \<copy-config\>
258 *
259 * Note that functions to create any RPC object do not check validity of the provided
260 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100261 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100262 * check. Created object can be sent via any NETCONF session which supports all the
263 * needed NETCONF capabilities for the RPC.
264 *
265 * @param[in] target Target datastore.
266 * @param[in] url_trg Used instead \p target if the target is an URL.
267 * @param[in] source Source datastore.
268 * @param[in] url_or_config_src Used instead \p source if the source is an URL or a config.
269 * @param[in] wd_mode Optional with-defaults capability mode.
270 * @param[in] paramtype How to further manage data parameters.
271 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
272 */
273struct nc_rpc *nc_rpc_copy(NC_DATASTORE target, const char *url_trg, NC_DATASTORE source,
274 const char *url_or_config_src, NC_WD_MODE wd_mode, NC_PARAMTYPE paramtype);
275
276/**
277 * @brief Create NETCONF RPC \<delete-config\>
278 *
279 * Note that functions to create any RPC object do not check validity of the provided
280 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100281 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100282 * check. Created object can be sent via any NETCONF session which supports all the
283 * needed NETCONF capabilities for the RPC.
284 *
285 * @param[in] target Target datastore to delete.
286 * @param[in] url Used instead \p target if the target is an URL.
287 * @param[in] paramtype How to further manage data parameters.
288 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
289 */
290struct nc_rpc *nc_rpc_delete(NC_DATASTORE target, const char *url, NC_PARAMTYPE paramtype);
291
292/**
293 * @brief Create NETCONF RPC \<lock\>
294 *
295 * Note that functions to create any RPC object do not check validity of the provided
296 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100297 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100298 * check. Created object can be sent via any NETCONF session which supports all the
299 * needed NETCONF capabilities for the RPC.
300 *
301 * @param[in] target Target datastore of the operation.
302 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
303 */
304struct nc_rpc *nc_rpc_lock(NC_DATASTORE target);
305
306/**
307 * @brief Create NETCONF RPC \<unlock\>
308 *
309 * Note that functions to create any RPC object do not check validity of the provided
310 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100311 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100312 * check. Created object can be sent via any NETCONF session which supports all the
313 * needed NETCONF capabilities for the RPC.
314 *
315 * @param[in] target Target datastore of the operation.
316 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
317 */
318struct nc_rpc *nc_rpc_unlock(NC_DATASTORE target);
319
320/**
321 * @brief Create NETCONF RPC \<get\>
322 *
323 * Note that functions to create any RPC object do not check validity of the provided
324 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100325 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100326 * check. Created object can be sent via any NETCONF session which supports all the
327 * needed NETCONF capabilities for the RPC.
328 *
Michal Vaskoc2389702017-08-09 10:16:49 +0200329 * @param[in] filter Optional filter data, an XML subtree or XPath expression (with JSON prefixes).
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100330 * @param[in] wd_mode Optional with-defaults capability mode.
331 * @param[in] paramtype How to further manage data parameters.
332 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
333 */
334struct nc_rpc *nc_rpc_get(const char *filter, NC_WD_MODE wd_mode, NC_PARAMTYPE paramtype);
335
336/**
337 * @brief Create NETCONF RPC \<kill-session\>
338 *
339 * Note that functions to create any RPC object do not check validity of the provided
340 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100341 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100342 * check. Created object can be sent via any NETCONF session which supports all the
343 * needed NETCONF capabilities for the RPC.
344 *
345 * @param[in] session_id Session ID of the session to kill.
346 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
347 */
348struct nc_rpc *nc_rpc_kill(uint32_t session_id);
349
350/**
351 * @brief Create NETCONF RPC \<commit\>
352 *
353 * Note that functions to create any RPC object do not check validity of the provided
354 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100355 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100356 * check. Created object can be sent via any NETCONF session which supports all the
357 * needed NETCONF capabilities for the RPC.
358 *
359 * @param[in] confirmed Whether the commit is to be confirmed.
360 * @param[in] confirm_timeout Optional confirm timeout.
361 * @param[in] persist Optional identification string of a new persistent confirmed commit.
362 * @param[in] persist_id Optional identification string of a persistent confirmed commit to be commited.
363 * @param[in] paramtype How to further manage data parameters.
364 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
365 */
366struct nc_rpc *nc_rpc_commit(int confirmed, uint32_t confirm_timeout, const char *persist, const char *persist_id,
367 NC_PARAMTYPE paramtype);
368
369/**
370 * @brief Create NETCONF RPC \<discard-changes\>
371 *
372 * Note that functions to create any RPC object do not check validity of the provided
373 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100374 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100375 * check. Created object can be sent via any NETCONF session which supports all the
376 * needed NETCONF capabilities for the RPC.
377 *
378 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
379 */
380struct nc_rpc *nc_rpc_discard(void);
381
382/**
383 * @brief Create NETCONF RPC \<cancel-commit\>
384 *
385 * Note that functions to create any RPC object do not check validity of the provided
386 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100387 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100388 * check. Created object can be sent via any NETCONF session which supports all the
389 * needed NETCONF capabilities for the RPC.
390 *
391 * @param[in] persist_id Optional identification string of a persistent confirmed commit.
392 * @param[in] paramtype How to further manage data parameters.
393 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
394 */
395struct nc_rpc *nc_rpc_cancel(const char *persist_id, NC_PARAMTYPE paramtype);
396
397/**
398 * @brief Create NETCONF RPC \<validate\>
399 *
400 * Note that functions to create any RPC object do not check validity of the provided
401 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100402 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100403 * check. Created object can be sent via any NETCONF session which supports all the
404 * needed NETCONF capabilities for the RPC.
405 *
406 * @param[in] source Source datastore being validated.
Michal Vasko4aade752016-02-18 13:24:38 +0100407 * @param[in] url_or_config Used instead \p source if the source is an URL or a config.
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100408 * @param[in] paramtype How to further manage data parameters.
409 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
410 */
411struct nc_rpc *nc_rpc_validate(NC_DATASTORE source, const char *url_or_config, NC_PARAMTYPE paramtype);
412
413/**
414 * @brief Create NETCONF RPC \<get-schema\>
415 *
416 * Note that functions to create any RPC object do not check validity of the provided
417 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100418 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100419 * check. Created object can be sent via any NETCONF session which supports all the
420 * needed NETCONF capabilities for the RPC.
421 *
422 * @param[in] identifier Requested model identifier.
423 * @param[in] version Optional model version, either YANG version (1.0/1.1) or revision date.
424 * @param[in] format Optional format of the model (default is YANG).
425 * @param[in] paramtype How to further manage data parameters.
426 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
427 */
428struct nc_rpc *nc_rpc_getschema(const char *identifier, const char *version, const char *format, NC_PARAMTYPE paramtype);
429
430/**
431 * @brief Create NETCONF RPC \<create-subscription\>
432 *
433 * Note that functions to create any RPC object do not check validity of the provided
434 * parameters. It is checked later while sending the RPC via a specific NETCONF session
Michal Vaskof0537d82016-01-29 14:42:38 +0100435 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100436 * check. Created object can be sent via any NETCONF session which supports all the
437 * needed NETCONF capabilities for the RPC.
438 *
439 * @param[in] stream_name Optional name of a NETCONF stream to subscribe to.
Michal Vaskoc2389702017-08-09 10:16:49 +0200440 * @param[in] filter Optional filter data, an XML subtree or XPath expression (with JSON prefixes).
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100441 * @param[in] start_time Optional YANG datetime identifying the start of the subscription.
442 * @param[in] stop_time Optional YANG datetime identifying the end of the subscription.
443 * @param[in] paramtype How to further manage data parameters.
444 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
445 */
446struct nc_rpc *nc_rpc_subscribe(const char *stream_name, const char *filter, const char *start_time,
Michal Vasko12257e92016-11-22 09:30:37 +0100447 const char *stop_time, NC_PARAMTYPE paramtype);
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100448
449/**
Michal Vaskoc1171a42019-11-05 12:06:46 +0100450 * @brief Create NETCONF RPC \<get-data\>
451 *
452 * Note that functions to create any RPC object do not check validity of the provided
453 * parameters. It is checked later while sending the RPC via a specific NETCONF session
454 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
455 * check. Created object can be sent via any NETCONF session which supports all the
456 * needed NETCONF capabilities for the RPC.
457 *
458 * @param[in] datastore Source datastore, foreign identity so a module name prefix is required.
459 * @param[in] filter Optional filter data, an XML subtree or XPath expression (with JSON prefixes).
460 * @param[in] config_filter Optional config filter, "true" for config-only data, "false" for state-only data.
461 * @param[in] origin_filter Optional origin filter array, selects only nodes of this or derived origin.
462 * @param[in] origin_filter_count Count of filters is \p origin_filter.
463 * @param[in] neg_origin_filter Whether origin filters are negated or not.
464 * @param[in] max_depth Maximum depth of returned subtrees, 0 for unlimited.
465 * @param[in] with_origin Whether return data origin.
466 * @param[in] wd_mode Optional with-defaults capability mode.
467 * @param[in] paramtype How to further manage data parameters.
468 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
469 */
470struct nc_rpc *nc_rpc_getdata(const char *datastore, const char *filter, const char *config_filter, char **origin_filter,
471 int origin_filter_count, int neg_origin_filter, uint16_t max_depth, int with_origin,
472 NC_WD_MODE wd_mode, NC_PARAMTYPE paramtype);
473
474/**
475 * @brief Create NETCONF RPC \<get-data\>
476 *
477 * Note that functions to create any RPC object do not check validity of the provided
478 * parameters. It is checked later while sending the RPC via a specific NETCONF session
479 * (#nc_send_rpc()) since the NETCONF capabilities of the session are needed for such a
480 * check. Created object can be sent via any NETCONF session which supports all the
481 * needed NETCONF capabilities for the RPC.
482 *
483 * @param[in] datastore Source datastore, foreign identity so a module name prefix is required.
484 * @param[in] default_op Optional default operation.
485 * @param[in] edit_content Config or URL where the config to perform is to be found.
486 * @param[in] paramtype How to further manage data parameters.
487 * @return Created RPC object to send via a NETCONF session or NULL in case of (memory allocation) error.
488 */
489struct nc_rpc *nc_rpc_editdata(const char *datastore, NC_RPC_EDIT_DFLTOP default_op, const char *edit_content,
490 NC_PARAMTYPE paramtype);
491
492/**
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100493 * @brief Free the NETCONF RPC object.
Michal Vaskof0537d82016-01-29 14:42:38 +0100494 *
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100495 * @param[in] rpc Object to free.
496 */
497void nc_rpc_free(struct nc_rpc *rpc);
498
499/**
500 * @brief Free the NETCONF RPC reply object.
Michal Vaskof0537d82016-01-29 14:42:38 +0100501 *
502 * @param[in] reply Object to free.
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100503 */
504void nc_reply_free(struct nc_reply *reply);
505
Michal Vasko1a38c862016-01-15 15:50:07 +0100506/**
507 * @brief Free the NETCONF Notification object.
Michal Vaskof0537d82016-01-29 14:42:38 +0100508 *
509 * @param[in] notif Object to free.
Michal Vasko1a38c862016-01-15 15:50:07 +0100510 */
511void nc_notif_free(struct nc_notif *notif);
512
Radek Krejci6799a052017-05-19 14:23:23 +0200513/**@} Client Messages */
514
Michal Vaskoc09730e2019-01-17 10:07:26 +0100515#ifdef __cplusplus
516}
517#endif
518
Michal Vasko7bcb48e2016-01-15 10:28:54 +0100519#endif /* NC_MESSAGES_CLIENT_H_ */