blob: e90aea6f43b750758991e5b64e22ff89aac7978a [file] [log] [blame]
Radek Krejci206fcd62015-10-07 15:42:48 +02001/**
2 * \file messages_p.h
3 * \author Radek Krejci <rkrejci@cesnet.cz>
4 * \brief libnetconf2's private functions and structures of NETCONF messages.
5 *
6 * Copyright (c) 2015 CESNET, z.s.p.o.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
16 * distribution.
17 * 3. Neither the name of the Company nor the names of its contributors
18 * may be used to endorse or promote products derived from this
19 * software without specific prior written permission.
20 *
21 */
22
23#ifndef NC_MESSAGES_P_H_
24#define NC_MESSAGES_P_H_
25
26#include <libyang/libyang.h>
27
Radek Krejci43390242015-10-08 15:34:04 +020028#include "messages.h"
29
Michal Vaskoad928112015-11-25 15:52:10 +010030extern const char *rpcedit_dfltop2str[];
31extern const char *rpcedit_testopt2str[];
32extern const char *rpcedit_erropt2str[];
33
Radek Krejci695d4fa2015-10-22 13:23:54 +020034typedef enum {
Michal Vaskoad611702015-12-03 13:41:51 +010035 NC_RPC_GENERIC, /**< user-defined generic RPC with content as data. */
36 NC_RPC_GENERIC_XML, /**< user-defined generic RPC with content as an XML string. */
Michal Vaskoad928112015-11-25 15:52:10 +010037
38 /* ietf-netconf */
Michal Vaskoad611702015-12-03 13:41:51 +010039 NC_RPC_GETCONFIG, /**< \<get-config\> RPC. */
40 NC_RPC_EDIT, /**< \<edit-config\> RPC. */
41 NC_RPC_COPY, /**< \<copy-config\> RPC. */
42 NC_RPC_DELETE, /**< \<delete-config\> RPC. */
43 NC_RPC_LOCK, /**< \<lock\> RPC. */
44 NC_RPC_UNLOCK, /**< \<unlock\> RPC. */
45 NC_RPC_GET, /**< \<get\> RPC. */
Radek Krejci695d4fa2015-10-22 13:23:54 +020046 /* NC_RPC_CLOSE is not defined since sending \<close-session\> is done by nc_session_free() */
Michal Vaskoad611702015-12-03 13:41:51 +010047 NC_RPC_KILL, /**< \<kill-session\> RPC. */
48 NC_RPC_COMMIT, /**< \<commit\> RPC. */
49 NC_RPC_DISCARD, /**< \<discard-changes\> RPC. */
50 NC_RPC_CANCEL, /**< \<cancel-commit\> RPC. */
51 NC_RPC_VALIDATE, /**< \<validate\> RPC. */
Michal Vaskoad928112015-11-25 15:52:10 +010052
53 /* ietf-netconf-monitoring */
Michal Vaskoad611702015-12-03 13:41:51 +010054 NC_RPC_GETSCHEMA, /**< \<get-schema\> RPC. */
Michal Vaskoad928112015-11-25 15:52:10 +010055
56 /* notifications */
Michal Vaskoad611702015-12-03 13:41:51 +010057 NC_RPC_SUBSCRIBE /**< \<create-subscription\> RPC. */
Radek Krejci695d4fa2015-10-22 13:23:54 +020058} NC_RPC_TYPE;
59
Radek Krejci8800a492015-10-31 17:51:27 +010060typedef enum {
Michal Vaskoad611702015-12-03 13:41:51 +010061 NC_ERR_EMPTY,
62 NC_ERR_IN_USE,
63 NC_ERR_INVALID_VALUE,
64 NC_ERR_TOO_BIG,
65 NC_ERR_MISSING_ATTR,
66 NC_ERR_BAD_ATTR,
67 NC_ERR_UNKNOWN_ATTR,
68 NC_ERR_MISSING_ELEM,
69 NC_ERR_BAD_ELEM,
70 NC_ERR_UNKNOWN_ELEM,
71 NC_ERR_UNKNOWN_NS,
72 NC_ERR_ACCESS_DENIED,
73 NC_ERR_LOCK_DENIED,
74 NC_ERR_RES_DENIED,
75 NC_ERR_ROLLBACK_FAILED,
76 NC_ERR_DATA_EXISTS,
77 NC_ERR_DATA_MISSING,
78 NC_ERR_OP_NOT_SUPPORTED,
79 NC_ERR_OP_FAILED,
80 NC_ERR_MALFORMED_MSG
81} NC_ERR;
Radek Krejci695d4fa2015-10-22 13:23:54 +020082
Radek Krejci206fcd62015-10-07 15:42:48 +020083struct nc_rpc {
Radek Krejci695d4fa2015-10-22 13:23:54 +020084 NC_RPC_TYPE type;
85};
86
Michal Vaskoad611702015-12-03 13:41:51 +010087struct nc_server_rpc {
Radek Krejci695d4fa2015-10-22 13:23:54 +020088 struct lyxml_elem *root; /**< RPC element of the received XML message */
89 struct lyd_node *tree; /**< libyang data tree of the message (NETCONF operation) */
90};
91
Michal Vasko2a3eef02015-12-11 14:38:34 +010092struct nc_rpc {
93 NC_RPC_TYPE type;
Michal Vaskoad928112015-11-25 15:52:10 +010094};
95
Michal Vasko2a3eef02015-12-11 14:38:34 +010096struct nc_rpc_generic {
97 NC_RPC_TYPE type; /**< NC_RPC_GENERIC */
98 int has_data; /**< 1 for content.data, 0 for content.xml_str */
99 union {
100 struct lyd_node *data; /**< parsed RPC data */
101 char *xml_str; /**< raw XML string */
102 } content;
Michal Vaskoad611702015-12-03 13:41:51 +0100103 char free;
Radek Krejci926a5742015-10-31 17:50:49 +0100104};
105
Radek Krejci695d4fa2015-10-22 13:23:54 +0200106struct nc_rpc_getconfig {
107 NC_RPC_TYPE type; /**< NC_RPC_GETCONFIG */
108 NC_DATASTORE source; /**< NETCONF datastore being queried */
Michal Vaskoad611702015-12-03 13:41:51 +0100109 char *filter; /**< either XML subtree (starts with '<') or an XPath (starts with '/' or an alpha) */
Michal Vasko807be232015-12-09 15:24:55 +0100110 NC_WD_MODE wd_mode;
Michal Vaskoad611702015-12-03 13:41:51 +0100111 char free;
Radek Krejci695d4fa2015-10-22 13:23:54 +0200112};
113
Michal Vaskoad928112015-11-25 15:52:10 +0100114struct nc_rpc_edit {
115 NC_RPC_TYPE type; /**< NC_RPC_EDIT */
116 NC_DATASTORE target;
117 NC_RPC_EDIT_DFLTOP default_op;
118 NC_RPC_EDIT_TESTOPT test_opt;
119 NC_RPC_EDIT_ERROPT error_opt;
120 char *edit_cont; /**< either URL (starts with aplha) or config (starts with '<') */
Michal Vaskoad611702015-12-03 13:41:51 +0100121 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100122};
123
124struct nc_rpc_copy {
125 NC_RPC_TYPE type; /**< NC_RPC_COPY */
126 NC_DATASTORE target;
127 char *url_trg;
128 NC_DATASTORE source;
129 char *url_config_src; /**< either URL (starts with aplha) or config (starts with '<') */
Michal Vasko807be232015-12-09 15:24:55 +0100130 NC_WD_MODE wd_mode;
Michal Vaskoad611702015-12-03 13:41:51 +0100131 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100132};
133
134struct nc_rpc_delete {
135 NC_RPC_TYPE type; /**< NC_RPC_DELETE */
136 NC_DATASTORE target;
137 char *url;
Michal Vaskoad611702015-12-03 13:41:51 +0100138 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100139};
140
Radek Krejci695d4fa2015-10-22 13:23:54 +0200141struct nc_rpc_lock {
142 NC_RPC_TYPE type; /**< NC_RPC_LOCK or NC_RPC_UNLOCK */
143 NC_DATASTORE target;
Radek Krejci206fcd62015-10-07 15:42:48 +0200144};
145
Michal Vaskoad928112015-11-25 15:52:10 +0100146struct nc_rpc_get {
147 NC_RPC_TYPE type; /**< NC_RPC_GET */
Michal Vaskoad611702015-12-03 13:41:51 +0100148 char *filter; /**< either XML subtree (starts with '<') or an XPath (starts with '/' or an alpha) */
Michal Vasko807be232015-12-09 15:24:55 +0100149 NC_WD_MODE wd_mode;
Michal Vaskoad611702015-12-03 13:41:51 +0100150 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100151};
152
153struct nc_rpc_kill {
154 NC_RPC_TYPE type; /**< NC_RPC_KILL */
155 uint32_t sid;
156};
157
158struct nc_rpc_commit {
159 NC_RPC_TYPE type; /**< NC_RPC_COMMIT */
160 int confirmed;
161 uint32_t confirm_timeout;
162 char *persist;
163 char *persist_id;
Michal Vaskoad611702015-12-03 13:41:51 +0100164 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100165};
166
167struct nc_rpc_cancel {
168 NC_RPC_TYPE type; /**< NC_RPC_CANCEL */
169 char *persist_id;
Michal Vaskoad611702015-12-03 13:41:51 +0100170 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100171};
172
173struct nc_rpc_validate {
174 NC_RPC_TYPE type; /**< NC_RPC_VALIDATE */
175 NC_DATASTORE source;
176 char *url_config_src; /**< either URL (starts with alpha) or config (starts with '<') */
Michal Vaskoad611702015-12-03 13:41:51 +0100177 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100178};
179
180struct nc_rpc_getschema {
181 NC_RPC_TYPE type; /**< NC_RPC_GETSCHEMA */
182 char *identifier; /**< requested model identifier */
183 char *version; /**< either YANG version (1.0/1.1) or revision date */
184 char *format; /**< model format */
Michal Vaskoad611702015-12-03 13:41:51 +0100185 char free;
Michal Vaskoad928112015-11-25 15:52:10 +0100186};
187
188struct nc_rpc_subscribe {
189 NC_RPC_TYPE type; /**< NC_RPC_SUBSCRIBE */
190 char *stream; /**< stream name */
Michal Vaskoad611702015-12-03 13:41:51 +0100191 char *filter; /**< either XML subtree (starts with '<') or an XPath (starts with '/' or an alpha) */
Michal Vaskoad928112015-11-25 15:52:10 +0100192 char *start;
193 char *stop;
Michal Vaskoad611702015-12-03 13:41:51 +0100194 char free;
Radek Krejci5686ff72015-10-09 13:33:56 +0200195};
196
Radek Krejci206fcd62015-10-07 15:42:48 +0200197#endif /* NC_MESSAGES_P_H_ */