yumapro  21.10T-8
YumaPro SDK
cap.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008 - 2012, Andy Bierman, All Rights Reserved.
3  * Copyright (c) 2012 - 2021, YumaWorks, Inc., All Rights Reserved.
4  *
5  * Unless required by applicable law or agreed to in writing,
6  * software distributed under the License is distributed on an
7  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8  * KIND, either express or implied. See the License for the
9  * specific language governing permissions and limitations
10  * under the License.
11  */
12 #ifndef _H_cap
13 #define _H_cap
14 /* FILE: cap.h
15 *********************************************************************
16 * *
17 * P U R P O S E *
18 * *
19 *********************************************************************/
20 
26 /*********************************************************************
27 * *
28 * C H A N G E H I S T O R Y *
29 * *
30 *********************************************************************
31 
32 date init comment
33 ----------------------------------------------------------------------
34 28-apr-05 abb Begun.
35 */
36 #include <xmlstring.h>
37 
38 #ifndef _H_ncxtypes
39 #include "ncxtypes.h"
40 #endif
41 
42 #ifndef _H_status
43 #include "status.h"
44 #endif
45 
46 #ifndef _H_val
47 #include "val.h"
48 #endif
49 
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53 
54 
76 /********************************************************************
77 * *
78 * C O N S T A N T S *
79 * *
80 *********************************************************************/
81 
82 
83 #define MAX_STD_CAP_NAME_LEN 31
84 
85 #define CAP_VERSION_LEN 15
86 
88 #define CAP_BASE_URN ((const xmlChar *) \
89  "urn:ietf:params:netconf:base:1.0")
90 
92 #define CAP_BASE_URN11 ((const xmlChar *) \
93  "urn:ietf:params:netconf:base:1.1")
94 
96 #define CAP_URN ((const xmlChar *)"urn:ietf:params:netconf:capability:")
97 
99 #define CAP_REST_URN ((const xmlChar *)"urn:ietf:params:restconf:capability:")
100 
102 #define CAP_J_URN \
103  (const xmlChar *)"urn:ietf:params:xml:ns:netconf:capability:"
104 
105 #define CAP_JUNOS \
106  (const xmlChar *)"http://xml.juniper.net/netconf/junos/1.0"
107 
108 #define CAP_SEP_CH '/'
109 
110 
111 /************************************************************
112  * *
113  * The following 2 sets of definitions must be kept aligned *
114  * *
115  ************************************************************/
116 
117 /* fast lookup -- standard capability bit ID */
118 #define CAP_BIT_V1 bit0
119 #define CAP_BIT_WR_RUN bit1
120 #define CAP_BIT_CANDIDATE bit2
121 #define CAP_BIT_CONF_COMMIT bit3
122 #define CAP_BIT_ROLLBACK_ERR bit4
123 #define CAP_BIT_VALIDATE bit5
124 #define CAP_BIT_STARTUP bit6
125 #define CAP_BIT_URL bit7
126 #define CAP_BIT_XPATH bit8
127 #define CAP_BIT_NOTIFICATION bit9
128 #define CAP_BIT_INTERLEAVE bit10
129 #define CAP_BIT_PARTIAL_LOCK bit11
130 #define CAP_BIT_WITH_DEFAULTS bit12
131 #define CAP_BIT_V11 bit13
132 #define CAP_BIT_CONF_COMMIT11 bit14
133 #define CAP_BIT_VALIDATE11 bit15
134 #define CAP_BIT_DEPTH bit16
135 #define CAP_BIT_FIELDS bit17
136 #define CAP_BIT_FILTER bit18
137 #define CAP_BIT_REPLAY bit19
138 #define CAP_BIT_DEFAULTS bit20
139 #define CAP_BIT_YANGPATCH bit21
140 #define CAP_BIT_YANGLIB bit22
141 #define CAP_BIT_YANGLIB11 bit23
142 
143 
144 /* put the version numbers in the capability names for now */
145 #define CAP_NAME_V1 ((const xmlChar *)"base:1.0")
146 #define CAP_NAME_V11 ((const xmlChar *)"base:1.1")
147 #define CAP_NAME_CANDIDATE ((const xmlChar *)"candidate:1.0")
148 #define CAP_NAME_CONF_COMMIT ((const xmlChar *)"confirmed-commit:1.0")
149 #define CAP_NAME_CONF_COMMIT11 ((const xmlChar *)"confirmed-commit:1.1")
150 #define CAP_NAME_DEFAULTS ((const xmlChar *)"defaults:1.0")
151 #define CAP_NAME_DEPTH ((const xmlChar *)"depth:1.0")
152 #define CAP_NAME_FIELDS ((const xmlChar *)"fields:1.0")
153 #define CAP_NAME_FILTER ((const xmlChar *)"filter:1.0")
154 #define CAP_NAME_INTERLEAVE ((const xmlChar *)"interleave:1.0")
155 #define CAP_NAME_NOTIFICATION ((const xmlChar *)"notification:1.0")
156 #define CAP_NAME_PARTIAL_LOCK ((const xmlChar *)"partial-lock:1.0")
157 #define CAP_NAME_REPLAY ((const xmlChar *)"replay:1.0")
158 #define CAP_NAME_ROLLBACK_ERR ((const xmlChar *)"rollback-on-error:1.0")
159 #define CAP_NAME_STARTUP ((const xmlChar *)"startup:1.0")
160 #define CAP_NAME_URL ((const xmlChar *)"url:1.0")
161 #define CAP_NAME_VALIDATE ((const xmlChar *)"validate:1.0")
162 #define CAP_NAME_VALIDATE11 ((const xmlChar *)"validate:1.1")
163 #define CAP_NAME_WITH_DEFAULTS ((const xmlChar *)"with-defaults:1.0")
164 #define CAP_NAME_WR_RUN ((const xmlChar *)"writable-running:1.0")
165 #define CAP_NAME_XPATH ((const xmlChar *)"xpath:1.0")
166 #define CAP_NAME_YANGLIB ((const xmlChar *)"yang-library:1.0")
167 #define CAP_NAME_YANGLIB11 ((const xmlChar *)"yang-library:1.1")
168 #define CAP_NAME_YANGPATCH ((const xmlChar *)"yang-patch:1.0")
169 
170 
171 
172 /* some YANG capability details */
173 #define CAP_REVISION_EQ (const xmlChar *)"revision="
174 #define CAP_MODULE_EQ (const xmlChar *)"module="
175 #define CAP_FEATURES_EQ (const xmlChar *)"features="
176 #define CAP_DEVIATIONS_EQ (const xmlChar *)"deviations="
177 #define CAP_SCHEME_EQ (const xmlChar *)"scheme="
178 #define CAP_PROTOCOL_EQ (const xmlChar *)"protocol="
179 #define CAP_BASIC_EQ (const xmlChar *)"basic-mode="
180 #define CAP_SUPPORTED_EQ (const xmlChar *)"also-supported="
181 #define CAP_MODULESETID_EQ (const xmlChar *)"module-set-id="
182 #define CAP_CONTENTID_EQ (const xmlChar *)"content-id="
183 
184 #define CAP_YANGLIB_REVISION_PARAM (const xmlChar *)"revision=2016-06-21"
185 #define CAP_YANGLIB_REVISION (const xmlChar *)"2016-06-21"
186 
187 #define CAP_YANGLIB_NMDA_REVISION_PARAM (const xmlChar *)"revision=2019-01-04"
188 #define CAP_YANGLIB_NMDA_REVISION (const xmlChar *)"2019-01-04"
189 
190 /* yang-library module-set-id capability base string */
191 #define CAP_YANGLIB_BASE_URN \
192  (const xmlChar *)"urn:ietf:params:netconf:capability:yang-library:1.0"
193 
194 /* NMDA yang-library content-id capability base string */
195 #define CAP_YANGLIB_NMDA_BASE_URN \
196  (const xmlChar *)"urn:ietf:params:netconf:capability:yang-library:1.1"
197 
198 #define CAP_SCHEMA_RETRIEVAL \
199  (const xmlChar *)"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"
200 
201 
202 /********************************************************************
203 * *
204 * T Y P E S *
205 * *
206 *********************************************************************/
207 
209 typedef enum cap_subjtyp_t_ {
210  CAP_SUBJTYP_NONE,
215 } cap_subjtyp_t;
216 
217 
219 typedef enum cap_change_t_ {
220  CAP_CHANGE_NONE,
221  CAP_CHANGE_ADD,
222  CAP_CHANGE_DELETE,
223  CAP_CHANGE_MODIFY
224 } cap_change_t;
225 
226 
228 typedef enum cap_stdid_t_ {
231 
234 
237 
240 
243 
246 
249 
252 
255 
258 
261 
264 
267 
270 
273 
276 
279 
282 
285 
288 
291 
294 
296 
298 
299  CAP_STDID_LAST_MARKER
300 } cap_stdid_t;
301 
302 
304 typedef struct cap_list_t_ {
305  uint32 cap_std;
306  xmlChar *cap_schemes;
307  xmlChar *cap_defstyle;
308  xmlChar *cap_supported;
311  xmlChar *cap_yanglib_rev;
312  xmlChar *cap_yanglib_setid;
314  dlq_hdr_t capQ;
315 } cap_list_t;
316 
317 
319 typedef struct cap_rec_t_ {
320  dlq_hdr_t cap_qhdr;
321  cap_subjtyp_t cap_subject;
322  xmlChar *cap_uri;
323  xmlChar *cap_namespace;
324  xmlChar *cap_module;
325  xmlChar *cap_revision;
326  ncx_list_t cap_feature_list;
327  ncx_list_t cap_deviation_list;
328 } cap_rec_t;
329 
330 
332 typedef enum cap_yanglib_ver_t_ {
335 
338 
342 
343 
344 /********************************************************************
345 * *
346 * F U N C T I O N S *
347 * *
348 *********************************************************************/
349 
350 
356 extern cap_list_t *
357  cap_new_caplist (void);
358 
359 
367 extern void
368  cap_init_caplist (cap_list_t *caplist);
369 
370 
377 extern void
378  cap_clean_caplist (cap_list_t *caplist);
379 
380 
387 extern void
388  cap_free_caplist (cap_list_t *caplist);
389 
390 
398 extern status_t
399  cap_add_std (cap_list_t *caplist,
400  cap_stdid_t capstd);
401 
402 
412 extern status_t
413  cap_add_stdval (val_value_t *caplist,
414  cap_stdid_t capstd,
415  boolean is_restconf);
416 
417 
429 extern status_t
430  cap_add_std_string (cap_list_t *caplist,
431  const xmlChar *uri,
432  boolean is_restconf);
433 
434 
442 extern boolean
443  cap_is_module_string (const xmlChar *uri);
444 
445 
455 extern status_t
457  const xmlChar *uri);
458 
459 
467 extern status_t
468  cap_add_url (cap_list_t *caplist,
469  const xmlChar *scheme_list);
470 
471 
482 extern status_t
483  cap_add_urlval (val_value_t *caplist,
484  const xmlChar *scheme_list,
485  boolean is_restconf);
486 
487 
495 extern status_t
496  cap_add_withdef (cap_list_t *caplist,
497  const xmlChar *defstyle);
498 
499 
511 extern status_t
513  const xmlChar *defstyle,
514  uint8 withdef_enabled,
515  boolean is_restconf);
516 
517 
526 extern status_t
528  const xmlChar *defstyle);
529 
530 
538 extern status_t
539  cap_add_ent (cap_list_t *caplist,
540  const xmlChar *uristr);
541 
542 
550 extern status_t
551  cap_add_entval (val_value_t *caplist,
552  const xmlChar *urival);
553 
554 
562 extern status_t
563  cap_add_modval (val_value_t *caplist,
564  ncx_module_t *mod);
565 
566 
575 extern status_t
576  cap_add_mod (cap_list_t *caplist,
577  ncx_module_t *mod);
578 
579 
587 extern void
588  cap_remove_mod (cap_list_t *caplist,
589  ncx_module_t *mod);
590 
591 
599 extern status_t
600  cap_remove_modval (val_value_t *caplist,
601  ncx_module_t *mod);
602 
603 
604 
612 extern status_t
614  ncx_module_t *mod);
615 
616 
624 extern status_t
625  cap_add_devmodval (val_value_t *caplist,
626  ncx_save_deviations_t *savedev);
627 
628 
636 extern boolean
637  cap_std_set (const cap_list_t *caplist,
638  cap_stdid_t capstd);
639 
640 
649 extern boolean
650  cap_set (const cap_list_t *caplist,
651  const xmlChar *capuri);
652 
653 
665 extern cap_rec_t *
666  cap_match (const cap_list_t *caplist,
667  const xmlChar *capuri);
668 
669 
681 extern val_value_t *
682  cap_match_val (val_value_t *caplist,
683  const xmlChar *capuri);
684 
685 
693 extern const xmlChar *
694  cap_get_protos (cap_list_t *caplist);
695 
696 
705 extern void
706  cap_dump_stdcaps (const cap_list_t *caplist,
707  log_debug_t lvl,
708  FILE *outfile);
709 
710 
719 extern void
720  cap_dump_modcaps (const cap_list_t *caplist,
721  log_debug_t lvl,
722  FILE *outfile);
723 
724 
732 extern const cap_rec_t *
733  cap_find_modcap (const cap_list_t *caplist,
734  const xmlChar *modname);
735 
736 
745 extern void
746  cap_dump_entcaps (const cap_list_t *caplist,
747  log_debug_t lvl,
748  FILE *outfile);
749 
750 
759 extern cap_rec_t *
760  cap_first_modcap (cap_list_t *caplist);
761 
762 
771 extern cap_rec_t *
772  cap_next_modcap (cap_rec_t *curcap);
773 
774 
787 extern void
789  const xmlChar **module,
790  const xmlChar **revision,
791  const xmlChar **namespacestr);
792 
793 
801 extern xmlChar *
803 
804 
816 extern status_t
817  cap_add_config_id (cap_list_t *caplist);
818 
819 
834 extern status_t
835  cap_add_ids_val (val_value_t *caplist,
836  boolean is_module_id,
837  cap_yanglib_ver_t yanglib_ver);
838 
839 
847 extern status_t
848  cap_add_yanglib (cap_list_t *caplist,
849  cap_yanglib_ver_t yanglib_ver);
850 
851 
855 #ifdef __cplusplus
856 } /* end extern 'C' */
857 #endif
858 
859 #endif /* _H_cap */
:notification:1.0 *(RFC 5277 )
Definition: cap.h:257
Version 1.1 NMDA.
Definition: cap.h:340
capability is a protocol extension
Definition: cap.h:211
used with obj_deviation_t to defer object lookups
Definition: ncxtypes.h:1365
void cap_init_caplist(cap_list_t *caplist)
Initialize the fields in a pre-allocated cap_list_t struct memory for caplist already allocated – th...
Definition: cap.c:569
queue of this structure for list of enterprise capabilities
Definition: cap.h:319
void cap_dump_entcaps(const cap_list_t *caplist, log_debug_t lvl, FILE *outfile)
Printf the enterprise capabilities list debug function.
Definition: cap.c:2631
xmlChar * cap_make_moduri(ncx_module_t *mod)
Malloc and construct a module URI for the specified module make the module URI string (for sysCapabil...
Definition: cap.c:2779
log_debug_t
The debug level enumerations used in util/log.c.
Definition: log.h:386
void cap_clean_caplist(cap_list_t *caplist)
Clean the fields in a pre-allocated cap_list_t struct Memory for caplist not deallocated – this just...
Definition: cap.c:596
status_t cap_add_entval(val_value_t *caplist, const xmlChar *urival)
Add an enterprise capability to the list (val_value_t version)
Definition: cap.c:1816
:with-defaults:1.0 (RFC 6243)
Definition: cap.h:266
void cap_dump_modcaps(const cap_list_t *caplist, log_debug_t lvl, FILE *outfile)
Printf the standard data model module capabilities list debug function.
Definition: cap.c:2489
NETCONF v1.1 (RFC 6241)
Definition: cap.h:269
xmlChar * cap_schemes
URL capability protocol list.
Definition: cap.h:306
capability is a data model
Definition: cap.h:212
config-id capability
Definition: cap.h:214
const cap_rec_t * cap_find_modcap(const cap_list_t *caplist, const xmlChar *modname)
Find a specified module in the caplist.
Definition: cap.c:2596
cap_stdid_t
enumerated list of standard capability IDs
Definition: cap.h:228
YANG-LIBRARY 1.0 capability.
Definition: cap.h:295
YANG-LIBRARY 1.1 capability.
Definition: cap.h:297
status_t cap_add_module_string(cap_list_t *caplist, const xmlChar *uri)
Add a standard protocol capability to the list by URI string.
Definition: cap.c:1084
:partial-lock:1.0 (RFC 5717)
Definition: cap.h:263
void cap_remove_mod(cap_list_t *caplist, ncx_module_t *mod)
Remove a module capability from the list.
Definition: cap.c:2009
cap_rec_t * cap_first_modcap(cap_list_t *caplist)
Get the first module capability in the list.
Definition: cap.c:2674
:confirmed-commit:v1.1 (RFC 6241)
Definition: cap.h:275
representation of one module or submodule during and after parsing
Definition: ncxtypes.h:1052
RESTCONF depth parameter.
Definition: cap.h:278
RESTCONF fields parameter.
Definition: cap.h:281
status_t cap_add_modval(val_value_t *caplist, ncx_module_t *mod)
Add a module capability to the list (val_value_t version)
Definition: cap.c:1860
cap_list_t * cap_new_caplist(void)
Malloc and initialize the fields in a cap_list_t struct.
Definition: cap.c:544
Value Node Basic Support.
:xpath:1.0
Definition: cap.h:254
status_t cap_add_ent(cap_list_t *caplist, const xmlChar *uristr)
Add an enterprise capability to the list.
Definition: cap.c:1773
:interleave:1.0 *(RFC 5277 )
Definition: cap.h:260
boolean cap_is_module_string(const xmlChar *uri)
Check if the capability URI is a YANG module identifier.
Definition: cap.c:1048
status_t cap_add_url(cap_list_t *caplist, const xmlChar *scheme_list)
Add the #url capability to the list.
Definition: cap.c:1373
YANG module data structures Many internal representations of YANG module constructs.
status_t cap_add_urlval(val_value_t *caplist, const xmlChar *scheme_list, boolean is_restconf)
Add the :url capability to the list; value struct version.
Definition: cap.c:1415
boolean cap_std_set(const cap_list_t *caplist, cap_stdid_t capstd)
fast search of standard protocol capability set
Definition: cap.c:2168
cap_change_t
Capability Change Type.
Definition: cap.h:219
status_t cap_add_withdef(cap_list_t *caplist, const xmlChar *defstyle)
Add the :with-defaults capability to the list.
Definition: cap.c:1485
cap_rec_t * cap_next_modcap(cap_rec_t *curcap)
Get the next module capability in the list.
Definition: cap.c:2707
boolean cap_set(const cap_list_t *caplist, const xmlChar *capuri)
Check if the capability URI is set in the capslist linear search of capability list, will check for std uris as well.
Definition: cap.c:2197
void cap_split_modcap(cap_rec_t *cap, const xmlChar **module, const xmlChar **revision, const xmlChar **namespacestr)
Split the modcap string into 3 parts.
Definition: cap.c:2746
:rollback-on-error:1.0
Definition: cap.h:242
one capabilities list
Definition: cap.h:304
RESTCONF yangpatch parameter.
Definition: cap.h:293
:validate:v1.1 (RFC 6241)
Definition: cap.h:272
one value to match one type
Definition: val.h:870
xmlChar * cap_yanglib_setid
yang-library module-set-id param
Definition: cap.h:312
cap_yanglib_ver_t
YANG library URI to use.
Definition: cap.h:332
Version 1.0 non-NMDA.
Definition: cap.h:337
status_t cap_add_std_string(cap_list_t *caplist, const xmlChar *uri, boolean is_restconf)
Add a standard protocol capability to the list by URI string.
Definition: cap.c:872
cap_subjtyp_t
NETCONF capability subject types.
Definition: cap.h:209
:url:1.0
Definition: cap.h:251
:candidate:1.0
Definition: cap.h:236
NETCONF 1.0 (RFC 4741)
Definition: cap.h:230
status_t cap_remove_modval(val_value_t *caplist, ncx_module_t *mod)
Remove a module capability from the list (val_value_t version)
Definition: cap.c:1908
status_t cap_add_restdefval(val_value_t *caplist, const xmlChar *defstyle)
Add the :defaults capability to the RESTCONF caplist value struct version.
Definition: cap.c:1704
status_t
global error return code
Definition: status_enum.h:186
const xmlChar * cap_get_protos(cap_list_t *caplist)
get the #url capability protocols list if it exists get the protocols field for the :url capability ...
Definition: cap.c:2351
status_t cap_add_config_id(cap_list_t *caplist)
Add the :config-id capability to the list.
Definition: cap.c:2810
status_t cap_add_yanglib(cap_list_t *caplist, cap_yanglib_ver_t yanglib_ver)
Add the :yang-library capability to the list.
Definition: cap.c:3025
:writable-running:1.0
Definition: cap.h:233
uint32 cap_std
bitset of std caps
Definition: cap.h:305
Global error messages for status code enumerations.
:confirmed-commit:1.0
Definition: cap.h:239
status_t cap_add_mod(cap_list_t *caplist, ncx_module_t *mod)
Add a module capability to the list.
Definition: cap.c:1971
status_t cap_add_withdefval(val_value_t *caplist, const xmlChar *defstyle, uint8 withdef_enabled, boolean is_restconf)
Add the :with-defaults capability to the list; value struct version.
Definition: cap.c:1544
status_t cap_add_netconf_modval(val_value_t *caplist, ncx_module_t *mod)
Add a module capability to the list (val_value_t version)
Definition: cap.c:2078
header for a NCX List
Definition: ncxtypes.h:794
RESTCONF replay parameter.
Definition: cap.h:287
RESTCONF defaults parameter.
Definition: cap.h:290
capability is other than prot or DM (ENT)
Definition: cap.h:213
status_t cap_add_ids_val(val_value_t *caplist, boolean is_module_id, cap_yanglib_ver_t yanglib_ver)
Add the :config-id capability to the list.
Definition: cap.c:2891
status_t cap_add_stdval(val_value_t *caplist, cap_stdid_t capstd, boolean is_restconf)
Add a standard protocol capability to the list (val_value_t version)
Definition: cap.c:708
:startup:v1.0
Definition: cap.h:248
xmlChar * cap_yanglib_rev
YANG-LIBRARY pointers, stored in the cap list.
Definition: cap.h:311
cap_rec_t * cap_match(const cap_list_t *caplist, const xmlChar *capuri)
Check if the capability URI is set in the capslist.
Definition: cap.c:2273
val_value_t * cap_match_val(val_value_t *caplist, const xmlChar *capuri)
Check if the capability URI is set in the capslist value_t tree.
Definition: cap.c:2313
:validate:1.0
Definition: cap.h:245
xmlChar * cap_defstyle
with-defaults &#39;basic&#39; parm
Definition: cap.h:307
status_t cap_add_devmodval(val_value_t *caplist, ncx_save_deviations_t *savedev)
Add a deviation module capability to the list (val_value_t version)
Definition: cap.c:2121
void cap_free_caplist(cap_list_t *caplist)
Clean the fields in a pre-allocated cap_list_t struct Then free the caplist memory.
Definition: cap.c:652
not set
Definition: cap.h:334
status_t cap_add_std(cap_list_t *caplist, cap_stdid_t capstd)
Add a standard protocol capability to the list.
Definition: cap.c:676
RESTCONF filter parameter.
Definition: cap.h:284
void cap_dump_stdcaps(const cap_list_t *caplist, log_debug_t lvl, FILE *outfile)
debug function Printf the standard protocol capabilities list
Definition: cap.c:2397
xmlChar * cap_supported
with-defaults &#39;also-supported&#39; parm
Definition: cap.h:308