libyang  3.13.6
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
tree_schema.h
Go to the documentation of this file.
1 
16 #ifndef LY_TREE_SCHEMA_H_
17 #define LY_TREE_SCHEMA_H_
18 
19 #define PCRE2_CODE_UNIT_WIDTH 8
20 
21 #include <pcre2.h>
22 
23 #include <stdint.h>
24 #include <stdio.h>
25 
26 #include "log.h"
27 #include "ly_config.h"
28 #include "tree.h"
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 struct ly_ctx;
35 struct ly_path;
36 struct ly_set;
37 struct lys_module;
38 struct lysc_node;
39 struct lyxp_expr;
40 
154 /* *INDENT-OFF* */
155 
184 #define LYSC_TREE_DFS_BEGIN(START, ELEM) \
185  { ly_bool LYSC_TREE_DFS_continue = 0; struct lysc_node *LYSC_TREE_DFS_next; \
186  for ((ELEM) = (LYSC_TREE_DFS_next) = (struct lysc_node *)(START); \
187  (ELEM); \
188  (ELEM) = (LYSC_TREE_DFS_next), LYSC_TREE_DFS_continue = 0)
189 
203 #define LYSC_TREE_DFS_END(START, ELEM) \
204  /* select element for the next run - children first */ \
205  if (LYSC_TREE_DFS_continue) { \
206  (LYSC_TREE_DFS_next) = NULL; \
207  } else { \
208  (LYSC_TREE_DFS_next) = (struct lysc_node *)lysc_node_child(ELEM); \
209  } \
210  if (!(LYSC_TREE_DFS_next)) { \
211  /* no children, try siblings */ \
212  _LYSC_TREE_DFS_NEXT(START, ELEM, LYSC_TREE_DFS_next); \
213  } \
214  while (!(LYSC_TREE_DFS_next)) { \
215  /* parent is already processed, go to its sibling */ \
216  (ELEM) = (ELEM)->parent; \
217  _LYSC_TREE_DFS_NEXT(START, ELEM, LYSC_TREE_DFS_next); \
218  } }
219 
223 #define _LYSC_TREE_DFS_NEXT(START, ELEM, NEXT) \
224  if ((ELEM) == (struct lysc_node *)(START)) { \
225  /* we are done, no next element to process */ \
226  break; \
227  } \
228  (NEXT) = (ELEM)->next;
229 
230 /* *INDENT-ON* */
231 
232 #define LY_REV_SIZE 11
239 #define LYS_UNKNOWN 0x0000
240 #define LYS_CONTAINER 0x0001
241 #define LYS_CHOICE 0x0002
242 #define LYS_LEAF 0x0004
243 #define LYS_LEAFLIST 0x0008
244 #define LYS_LIST 0x0010
245 #define LYS_ANYXML 0x0020
246 #define LYS_ANYDATA 0x0060
247 #define LYS_CASE 0x0080
249 #define LYS_RPC 0x0100
250 #define LYS_ACTION 0x0200
251 #define LYS_NOTIF 0x0400
253 #define LYS_USES 0x0800
254 #define LYS_INPUT 0x1000
255 #define LYS_OUTPUT 0x2000
256 #define LYS_GROUPING 0x4000
257 #define LYS_AUGMENT 0x8000
258 
259 #define LYS_NODETYPE_MASK 0xffff
265 struct lysp_import {
266  struct lys_module *module;
268  const char *name;
269  const char *prefix;
270  const char *dsc;
271  const char *ref;
273  uint16_t flags;
274  char rev[LY_REV_SIZE];
275 };
276 
280 struct lysp_include {
283  const char *name;
284  const char *dsc;
285  const char *ref;
287  char rev[LY_REV_SIZE];
291 };
292 
296 struct lysp_ext {
297  const char *name;
298  const char *argname;
299  const char *dsc;
300  const char *ref;
302  uint16_t flags;
304  struct lysc_ext *compiled;
308 };
309 
313 struct lysp_feature {
314  const char *name;
319  const char *dsc;
320  const char *ref;
322  uint16_t flags;
324 };
325 
330  uint8_t *expr;
332 };
333 
337 struct lysp_qname {
338  const char *str;
339  const struct lysp_module *mod;
341  uint16_t flags;
343 };
344 
348 struct lysp_ident {
349  const char *name;
351  const char **bases;
352  const char *dsc;
353  const char *ref;
355  uint16_t flags;
356 };
357 
361 struct lysp_restr {
362 #define LYSP_RESTR_PATTERN_ACK 0x06
363 #define LYSP_RESTR_PATTERN_NACK 0x15
364  struct lysp_qname arg;
367  const char *emsg;
368  const char *eapptag;
369  const char *dsc;
370  const char *ref;
372 };
373 
379  const char *dsc;
380  const char *ref;
382 };
383 
388  const char *name;
389  const char *dsc;
390  const char *ref;
391  int64_t value;
394  uint16_t flags;
396 };
397 
403 struct lysp_type {
404  const char *name;
405  struct lysp_restr *range;
406  struct lysp_restr *length;
410  struct lyxp_expr *path;
411  const char **bases;
412  struct lysp_type *types;
415  const struct lysp_module *pmod;
416  struct lysc_type *compiled;
418  uint8_t fraction_digits;
420  uint16_t flags;
421 };
422 
426 struct lysp_tpdf {
427  const char *name;
428  const char *units;
429  struct lysp_qname dflt;
430  const char *dsc;
431  const char *ref;
433  struct lysp_type type;
434  uint16_t flags;
435 };
436 
440 struct lysp_when {
441  const char *cond;
442  const char *dsc;
443  const char *ref;
445 };
446 
450 struct lysp_refine {
451  const char *nodeid;
452  const char *dsc;
453  const char *ref;
455  struct lysp_restr *musts;
456  const char *presence;
457  struct lysp_qname *dflts;
458  uint32_t min;
459  uint32_t max;
461  uint16_t flags;
462 };
463 
472 #define LYS_DEV_NOT_SUPPORTED 1
473 #define LYS_DEV_ADD 2
474 #define LYS_DEV_DELETE 3
475 #define LYS_DEV_REPLACE 4
481 struct lysp_deviate {
482  uint8_t mod;
483  struct lysp_deviate *next;
485 };
486 
488  uint8_t mod;
489  struct lysp_deviate *next;
491  const char *units;
492  struct lysp_restr *musts;
493  struct lysp_qname *uniques;
494  struct lysp_qname *dflts;
495  uint16_t flags;
496  uint32_t min;
497  uint32_t max;
498 };
499 
501  uint8_t mod;
502  struct lysp_deviate *next;
504  const char *units;
505  struct lysp_restr *musts;
506  struct lysp_qname *uniques;
507  struct lysp_qname *dflts;
508 };
509 
511  uint8_t mod;
512  struct lysp_deviate *next;
514  struct lysp_type *type;
515  const char *units;
516  struct lysp_qname dflt;
517  uint16_t flags;
518  uint32_t min;
519  uint32_t max;
520 };
521 
523  const char *nodeid;
524  const char *dsc;
525  const char *ref;
528 };
529 
653 #define LYS_CONFIG_W 0x01
654 #define LYS_CONFIG_R 0x02
655 #define LYS_CONFIG_MASK 0x03
656 #define LYS_STATUS_CURR 0x04
657 #define LYS_STATUS_DEPRC 0x08
658 #define LYS_STATUS_OBSLT 0x10
659 #define LYS_STATUS_MASK 0x1C
660 #define LYS_MAND_TRUE 0x20
665 #define LYS_MAND_FALSE 0x40
668 #define LYS_MAND_MASK 0x60
669 #define LYS_PRESENCE 0x80
672 #define LYS_UNIQUE 0x80
673 #define LYS_KEY 0x0100
674 #define LYS_KEYLESS 0x0200
675 #define LYS_DISABLED 0x0100
676 #define LYS_FENABLED 0x20
677 #define LYS_ORDBY_SYSTEM 0x80
679 #define LYS_ORDBY_USER 0x40
682 #define LYS_ORDBY_MASK 0xC0
683 #define LYS_YINELEM_TRUE 0x80
684 #define LYS_YINELEM_FALSE 0x0100
685 #define LYS_YINELEM_MASK 0x0180
686 #define LYS_USED_GRP 0x0400
688 #define LYS_SET_VALUE 0x0200
689 #define LYS_SET_MIN 0x0200
690 #define LYS_SET_MAX 0x0400
692 #define LYS_SET_BASE 0x0001
693 #define LYS_SET_BIT 0x0002
694 #define LYS_SET_ENUM 0x0004
695 #define LYS_SET_FRDIGITS 0x0008
696 #define LYS_SET_LENGTH 0x0010
697 #define LYS_SET_PATH 0x0020
698 #define LYS_SET_PATTERN 0x0040
699 #define LYS_SET_RANGE 0x0080
700 #define LYS_SET_TYPE 0x0100
701 #define LYS_SET_REQINST 0x0200
702 #define LYS_SET_DFLT 0x0200
707 #define LYS_SET_UNITS 0x0400
708 #define LYS_SET_CONFIG 0x0800
710 #define LYS_SINGLEQUOTED 0x0100
712 #define LYS_DOUBLEQUOTED 0x0200
715 #define LYS_YIN_ATTR 0x0400
716 #define LYS_YIN_ARGUMENT 0x0800
718 #define LYS_INTERNAL 0x1000
720 #define LYS_IS_ENUM 0x0200
722 #define LYS_IS_INPUT 0x1000
724 #define LYS_IS_OUTPUT 0x2000
726 #define LYS_IS_NOTIF 0x4000
728 #define LYS_FLAGS_COMPILED_MASK 0xff
734 struct lysp_node {
735  struct lysp_node *parent;
736  uint16_t nodetype;
737  uint16_t flags;
738  struct lysp_node *next;
739  const char *name;
740  const char *dsc;
741  const char *ref;
745 };
746 
751  union {
752  struct lysp_node node;
754  struct {
755  struct lysp_node *parent;
756  uint16_t nodetype;
757  uint16_t flags;
758  struct lysp_node *next;
759  const char *name;
760  const char *dsc;
761  const char *ref;
762  struct lysp_qname *iffeatures;
763  struct lysp_ext_instance *exts;
764  };
765  };
767  /* container */
768  struct lysp_restr *musts;
769  struct lysp_when *when;
770  const char *presence;
771  struct lysp_tpdf *typedefs;
773  struct lysp_node *child;
776 };
777 
779  union {
780  struct lysp_node node;
782  struct {
783  struct lysp_node *parent;
784  uint16_t nodetype;
785  uint16_t flags;
786  struct lysp_node *next;
787  const char *name;
788  const char *dsc;
789  const char *ref;
790  struct lysp_qname *iffeatures;
791  struct lysp_ext_instance *exts;
792  };
793  };
795  /* leaf */
796  struct lysp_restr *musts;
797  struct lysp_when *when;
798  struct lysp_type type;
799  const char *units;
800  struct lysp_qname dflt;
801 };
802 
804  union {
805  struct lysp_node node;
807  struct {
808  struct lysp_node *parent;
809  uint16_t nodetype;
810  uint16_t flags;
811  struct lysp_node *next;
812  const char *name;
813  const char *dsc;
814  const char *ref;
815  struct lysp_qname *iffeatures;
816  struct lysp_ext_instance *exts;
817  };
818  };
820  /* leaf-list */
821  struct lysp_restr *musts;
822  struct lysp_when *when;
823  struct lysp_type type;
824  const char *units;
825  struct lysp_qname *dflts;
827  uint32_t min;
828  uint32_t max;
829 };
830 
832  union {
833  struct lysp_node node;
835  struct {
836  struct lysp_node *parent;
837  uint16_t nodetype;
838  uint16_t flags;
839  struct lysp_node *next;
840  const char *name;
841  const char *dsc;
842  const char *ref;
843  struct lysp_qname *iffeatures;
844  struct lysp_ext_instance *exts;
845  };
846  };
848  /* list */
849  struct lysp_restr *musts;
850  struct lysp_when *when;
851  const char *key;
852  struct lysp_tpdf *typedefs;
854  struct lysp_node *child;
857  struct lysp_qname *uniques;
858  uint32_t min;
859  uint32_t max;
860 };
861 
863  union {
864  struct lysp_node node;
866  struct {
867  struct lysp_node *parent;
868  uint16_t nodetype;
869  uint16_t flags;
870  struct lysp_node *next;
871  const char *name;
872  const char *dsc;
873  const char *ref;
874  struct lysp_qname *iffeatures;
875  struct lysp_ext_instance *exts;
876  };
877  };
879  /* choice */
880  struct lysp_node *child;
881  struct lysp_when *when;
882  struct lysp_qname dflt;
883 };
884 
886  union {
887  struct lysp_node node;
889  struct {
890  struct lysp_node *parent;
891  uint16_t nodetype;
892  uint16_t flags;
893  struct lysp_node *next;
894  const char *name;
895  const char *dsc;
896  const char *ref;
897  struct lysp_qname *iffeatures;
898  struct lysp_ext_instance *exts;
899  };
900  };
902  /* case */
903  struct lysp_node *child;
904  struct lysp_when *when;
905 };
906 
908  union {
909  struct lysp_node node;
911  struct {
912  struct lysp_node *parent;
913  uint16_t nodetype;
914  uint16_t flags;
915  struct lysp_node *next;
916  const char *name;
917  const char *dsc;
918  const char *ref;
919  struct lysp_qname *iffeatures;
920  struct lysp_ext_instance *exts;
921  };
922  };
924  /* anyxml/anydata */
925  struct lysp_restr *musts;
926  struct lysp_when *when;
927 };
928 
930  union {
931  struct lysp_node node;
933  struct {
934  struct lysp_node *parent;
935  uint16_t nodetype;
936  uint16_t flags;
937  struct lysp_node *next;
938  const char *name;
939  const char *dsc;
940  const char *ref;
941  struct lysp_qname *iffeatures;
942  struct lysp_ext_instance *exts;
943  };
944  };
946  /* uses */
949  struct lysp_when *when;
950 };
951 
956  union {
957  struct lysp_node node;
959  struct {
960  struct lysp_node *parent;
961  uint16_t nodetype;
962  uint16_t flags;
963  struct lysp_node *next;
964  const char *name;
965  const char *dsc;
966  const char *ref;
967  struct lysp_qname *iffeatures;
968  struct lysp_ext_instance *exts;
969  };
970  };
972  /* inout */
973  struct lysp_restr *musts;
974  struct lysp_tpdf *typedefs;
976  struct lysp_node *child;
977 };
978 
983  union {
984  struct lysp_node node;
986  struct {
987  struct lysp_node *parent;
988  uint16_t nodetype;
989  uint16_t flags;
990  struct lysp_node_action *next;
991  const char *name;
992  const char *dsc;
993  const char *ref;
994  struct lysp_qname *iffeatures;
995  struct lysp_ext_instance *exts;
996  };
997  };
999  /* action */
1003  struct lysp_node_action_inout input;
1005 };
1006 
1011  union {
1012  struct lysp_node node;
1014  struct {
1015  struct lysp_node *parent;
1016  uint16_t nodetype;
1017  uint16_t flags;
1018  struct lysp_node_notif *next;
1019  const char *name;
1020  const char *dsc;
1021  const char *ref;
1022  struct lysp_qname *iffeatures;
1023  struct lysp_ext_instance *exts;
1024  };
1025  };
1027  /* notif */
1028  struct lysp_restr *musts;
1031  struct lysp_node *child;
1032 };
1033 
1038  union {
1039  struct lysp_node node;
1041  struct {
1042  struct lysp_node *parent;
1043  uint16_t nodetype;
1044  uint16_t flags;
1045  struct lysp_node_grp *next;
1046  const char *name;
1047  const char *dsc;
1048  const char *ref;
1049  struct lysp_qname *iffeatures;
1050  struct lysp_ext_instance *exts;
1051  };
1052  };
1054  /* grp */
1057  struct lysp_node *child;
1060 };
1061 
1066  union {
1067  struct lysp_node node;
1069  struct {
1070  struct lysp_node *parent;
1071  uint16_t nodetype;
1072  uint16_t flags;
1073  struct lysp_node_augment *next;
1074  const char *nodeid;
1075  const char *dsc;
1076  const char *ref;
1077  struct lysp_qname *iffeatures;
1078  struct lysp_ext_instance *exts;
1079  };
1080  };
1082  struct lysp_node *child;
1083  struct lysp_when *when;
1086 };
1087 
1091 typedef enum LYS_VERSION {
1094  LYS_VERSION_1_1 = 2
1096 
1102 struct lysp_module {
1103  struct lys_module *mod;
1114  struct lysp_node *data;
1121  uint8_t version;
1122  uint8_t parsing : 1;
1123  uint8_t is_submod : 1;
1124 };
1125 
1127  struct lys_module *mod;
1138  struct lysp_node *data;
1145  uint8_t version;
1146  uint8_t parsing : 1;
1147  uint8_t is_submod : 1;
1149  uint8_t latest_revision : 2;
1153  const char *name;
1154  const char *filepath;
1155  const char *prefix;
1156  const char *org;
1157  const char *contact;
1158  const char *dsc;
1159  const char *ref;
1160 };
1161 
1168 #define LYSP_MODULE_NAME(PMOD) (PMOD->is_submod ? ((struct lysp_submodule *)PMOD)->name : ((struct lysp_module *)PMOD)->mod->name)
1169 
1174 struct lysc_prefix {
1175  char *prefix;
1176  const struct lys_module *mod;
1177 };
1178 
1186 struct lysc_ext {
1187  const char *name;
1188  const char *argname;
1190  struct lyplg_ext *plugin;
1191  struct lys_module *module;
1192  uint16_t flags;
1193 };
1194 
1198 struct lysc_when {
1199  struct lyxp_expr *cond;
1200  struct lysc_node *context;
1202  const char *dsc;
1203  const char *ref;
1205  uint32_t refcount;
1206  uint16_t flags;
1207 };
1208 
1212 struct lysc_ident {
1213  const char *name;
1214  const char *dsc;
1215  const char *ref;
1216  struct lys_module *module;
1217  struct lysc_ident **derived;
1220  uint16_t flags;
1221 };
1222 
1229 #define LYS_IFF_NOT 0x00
1230 #define LYS_IFF_AND 0x01
1231 #define LYS_IFF_OR 0x02
1232 #define LYS_IFF_F 0x03
1241 };
1242 
1243 struct lysc_range {
1245  union {
1246  int64_t min_64;
1247  uint64_t min_u64;
1248  };
1249  union {
1250  int64_t max_64;
1251  uint64_t max_u64;
1252  };
1253  } *parts;
1254  const char *dsc;
1255  const char *ref;
1256  const char *emsg;
1257  const char *eapptag;
1259 };
1260 
1262  const char *expr;
1263  pcre2_code *code;
1264  const char *dsc;
1265  const char *ref;
1266  const char *emsg;
1267  const char *eapptag;
1269  uint32_t inverted : 1;
1270  uint32_t refcount : 31;
1271 };
1272 
1273 struct lysc_must {
1274  struct lyxp_expr *cond;
1276  const char *dsc;
1277  const char *ref;
1278  const char *emsg;
1279  const char *eapptag;
1281 };
1282 
1283 struct lysc_type {
1284  const char *name;
1286  struct lyplg_type *plugin;
1288  uint32_t refcount;
1290 };
1291 
1293  const char *name;
1295  struct lyplg_type *plugin;
1297  uint32_t refcount;
1299  struct lysc_range *range;
1300 };
1301 
1303  const char *name;
1305  struct lyplg_type *plugin;
1307  uint32_t refcount;
1310  struct lysc_range *range;
1311 };
1312 
1314  const char *name;
1316  struct lyplg_type *plugin;
1318  uint32_t refcount;
1320  struct lysc_range *length;
1322 };
1323 
1325  const char *name;
1326  const char *dsc;
1327  const char *ref;
1330  union {
1331  int32_t value;
1332  uint32_t position;
1333  };
1334  uint16_t flags;
1336 };
1337 
1339  const char *name;
1341  struct lyplg_type *plugin;
1343  uint32_t refcount;
1346 };
1347 
1349  const char *name;
1351  struct lyplg_type *plugin;
1353  uint32_t refcount;
1357 };
1358 
1360  const char *name;
1362  struct lyplg_type *plugin;
1364  uint32_t refcount;
1366  struct lyxp_expr *path;
1370 };
1371 
1373  const char *name;
1375  struct lyplg_type *plugin;
1377  uint32_t refcount;
1379  struct lysc_ident **bases;
1381 };
1382 
1384  const char *name;
1386  struct lyplg_type *plugin;
1388  uint32_t refcount;
1391 };
1392 
1394  const char *name;
1396  struct lyplg_type *plugin;
1398  uint32_t refcount;
1400  struct lysc_type **types;
1401 };
1402 
1404  const char *name;
1406  struct lyplg_type *plugin;
1408  uint32_t refcount;
1410  struct lysc_range *length;
1411 };
1412 
1416 #define LYS_NODE_HASH_COUNT 4
1417 
1421 struct lysc_node {
1422  uint16_t nodetype;
1423  uint16_t flags;
1425  struct lys_module *module;
1426  struct lysc_node *parent;
1427  struct lysc_node *next;
1428  struct lysc_node *prev;
1432  const char *name;
1433  const char *dsc;
1434  const char *ref;
1436  void *priv;
1437 };
1438 
1440  union {
1441  struct lysc_node node;
1443  struct {
1444  uint16_t nodetype;
1445  uint16_t flags;
1446  uint8_t hash[LYS_NODE_HASH_COUNT];
1447  struct lys_module *module;
1448  struct lysc_node *parent;
1449  struct lysc_node *next;
1450  struct lysc_node *prev;
1451  const char *name;
1452  const char *dsc;
1453  const char *ref;
1454  struct lysc_ext_instance *exts;
1455  void *priv;
1456  };
1457  };
1458 
1459  struct lysc_node *child;
1460  struct lysc_must *musts;
1461 };
1462 
1464  union {
1465  struct lysc_node node;
1467  struct {
1468  uint16_t nodetype;
1469  uint16_t flags;
1470  uint8_t hash[LYS_NODE_HASH_COUNT];
1471  struct lys_module *module;
1472  struct lysc_node *parent;
1473  struct lysc_node_action *next;
1474  struct lysc_node_action *prev;
1478  const char *name;
1479  const char *dsc;
1480  const char *ref;
1481  struct lysc_ext_instance *exts;
1482  void *priv;
1483  };
1484  };
1485 
1486  struct lysc_when **when;
1489  struct lysc_node_action_inout input;
1492 };
1493 
1495  union {
1496  struct lysc_node node;
1498  struct {
1499  uint16_t nodetype;
1500  uint16_t flags;
1501  uint8_t hash[LYS_NODE_HASH_COUNT];
1502  struct lys_module *module;
1503  struct lysc_node *parent;
1504  struct lysc_node_notif *next;
1505  struct lysc_node_notif *prev;
1509  const char *name;
1510  const char *dsc;
1511  const char *ref;
1512  struct lysc_ext_instance *exts;
1513  void *priv;
1514  };
1515  };
1516 
1517  struct lysc_node *child;
1518  struct lysc_must *musts;
1519  struct lysc_when **when;
1522 };
1523 
1525  union {
1526  struct lysc_node node;
1528  struct {
1529  uint16_t nodetype;
1530  uint16_t flags;
1531  uint8_t hash[LYS_NODE_HASH_COUNT];
1532  struct lys_module *module;
1533  struct lysc_node *parent;
1534  struct lysc_node *next;
1535  struct lysc_node *prev;
1539  const char *name;
1540  const char *dsc;
1541  const char *ref;
1542  struct lysc_ext_instance *exts;
1543  void *priv;
1544  };
1545  };
1546 
1547  struct lysc_node *child;
1548  struct lysc_must *musts;
1549  struct lysc_when **when;
1552 };
1553 
1555  union {
1556  struct lysc_node node;
1558  struct {
1559  uint16_t nodetype;
1560  uint16_t flags;
1561  uint8_t hash[LYS_NODE_HASH_COUNT];
1562  struct lys_module *module;
1563  struct lysc_node *parent;
1564  struct lysc_node *next;
1565  struct lysc_node *prev;
1569  const char *name;
1570  const char *dsc;
1571  const char *ref;
1572  struct lysc_ext_instance *exts;
1573  void *priv;
1574  };
1575  };
1576 
1577  struct lysc_node *child;
1579  struct lysc_when **when;
1580 };
1581 
1583  union {
1584  struct lysc_node node;
1586  struct {
1587  uint16_t nodetype;
1588  uint16_t flags;
1589  uint8_t hash[LYS_NODE_HASH_COUNT];
1590  struct lys_module *module;
1591  struct lysc_node *parent;
1592  struct lysc_node *next;
1593  struct lysc_node *prev;
1597  const char *name;
1598  const char *dsc;
1599  const char *ref;
1600  struct lysc_ext_instance *exts;
1601  void *priv;
1602  };
1603  };
1604 
1606  struct lysc_when **when;
1608 };
1609 
1611  union {
1612  struct lysc_node node;
1614  struct {
1615  uint16_t nodetype;
1616  uint16_t flags;
1617  uint8_t hash[LYS_NODE_HASH_COUNT];
1618  struct lys_module *module;
1619  struct lysc_node *parent;
1620  struct lysc_node *next;
1621  struct lysc_node *prev;
1625  const char *name;
1626  const char *dsc;
1627  const char *ref;
1628  struct lysc_ext_instance *exts;
1629  void *priv;
1630  };
1631  };
1632 
1633  struct lysc_must *musts;
1634  struct lysc_when **when;
1635  struct lysc_type *type;
1637  const char *units;
1638  struct lyd_value *dflt;
1639 };
1640 
1642  union {
1643  struct lysc_node node;
1645  struct {
1646  uint16_t nodetype;
1647  uint16_t flags;
1648  uint8_t hash[LYS_NODE_HASH_COUNT];
1649  struct lys_module *module;
1650  struct lysc_node *parent;
1651  struct lysc_node *next;
1652  struct lysc_node *prev;
1656  const char *name;
1657  const char *dsc;
1658  const char *ref;
1659  struct lysc_ext_instance *exts;
1660  void *priv;
1661  };
1662  };
1663 
1664  struct lysc_must *musts;
1665  struct lysc_when **when;
1666  struct lysc_type *type;
1668  const char *units;
1669  struct lyd_value **dflts;
1672  uint32_t min;
1673  uint32_t max;
1675 };
1676 
1678  union {
1679  struct lysc_node node;
1681  struct {
1682  uint16_t nodetype;
1683  uint16_t flags;
1684  uint8_t hash[LYS_NODE_HASH_COUNT];
1685  struct lys_module *module;
1686  struct lysc_node *parent;
1687  struct lysc_node *next;
1688  struct lysc_node *prev;
1692  const char *name;
1693  const char *dsc;
1694  const char *ref;
1695  struct lysc_ext_instance *exts;
1696  void *priv;
1697  };
1698  };
1699 
1700  struct lysc_node *child;
1701  struct lysc_must *musts;
1702  struct lysc_when **when;
1707  uint32_t min;
1708  uint32_t max;
1709 };
1710 
1712  union {
1713  struct lysc_node node;
1715  struct {
1716  uint16_t nodetype;
1717  uint16_t flags;
1718  uint8_t hash[LYS_NODE_HASH_COUNT];
1719  struct lys_module *module;
1720  struct lysc_node *parent;
1721  struct lysc_node *next;
1722  struct lysc_node *prev;
1726  const char *name;
1727  const char *dsc;
1728  const char *ref;
1729  struct lysc_ext_instance *exts;
1730  void *priv;
1731  };
1732  };
1733 
1734  struct lysc_must *musts;
1735  struct lysc_when **when;
1736 };
1737 
1744 struct lysc_module {
1745  struct lys_module *mod;
1747  struct lysc_node *data;
1751 };
1752 
1759 #define lysc_is_userordered(lysc_node) \
1760  ((!lysc_node || !(lysc_node->nodetype & (LYS_LEAFLIST | LYS_LIST)) || !(lysc_node->flags & LYS_ORDBY_USER)) ? 0 : 1)
1761 
1768 #define lysc_is_key(lysc_node) \
1769  ((!lysc_node || (lysc_node->nodetype != LYS_LEAF) || !(lysc_node->flags & LYS_KEY)) ? 0 : 1)
1770 
1777 #define lysc_is_np_cont(lysc_node) \
1778  ((!lysc_node || (lysc_node->nodetype != LYS_CONTAINER) || (lysc_node->flags & LYS_PRESENCE)) ? 0 : 1)
1779 
1786 #define lysc_is_dup_inst_list(lysc_node) \
1787  ((lysc_node && (((lysc_node->nodetype == LYS_LIST) && (lysc_node->flags & LYS_KEYLESS)) || \
1788  ((lysc_node->nodetype == LYS_LEAFLIST) && !(lysc_node->flags & LYS_CONFIG_W)))) ? 1 : 0)
1789 
1796 LIBYANG_API_DECL const struct lysc_node *lysc_data_node(const struct lysc_node *schema);
1797 
1801 #define lysc_data_parent(SCHEMA) lysc_data_node((SCHEMA) ? (SCHEMA)->parent : NULL)
1802 
1813 LIBYANG_API_DECL const struct lysc_when *lysc_has_when(const struct lysc_node *node);
1814 
1822 LIBYANG_API_DECL const struct lys_module *lysc_owner_module(const struct lysc_node *node);
1823 
1830 LIBYANG_API_DECL const struct lysp_node_grp *lysp_node_groupings(const struct lysp_node *node);
1831 
1838 LIBYANG_API_DECL const struct lysp_tpdf *lysp_node_typedefs(const struct lysp_node *node);
1839 
1846 LIBYANG_API_DECL const struct lysp_node_action *lysp_node_actions(const struct lysp_node *node);
1847 
1854 LIBYANG_API_DECL const struct lysp_node_notif *lysp_node_notifs(const struct lysp_node *node);
1855 
1862 LIBYANG_API_DECL const struct lysp_node *lysp_node_child(const struct lysp_node *node);
1863 
1870 LIBYANG_API_DECL const struct lysc_node_action *lysc_node_actions(const struct lysc_node *node);
1871 
1878 LIBYANG_API_DECL const struct lysc_node_notif *lysc_node_notifs(const struct lysc_node *node);
1879 
1890 LIBYANG_API_DECL const struct lysc_node *lysc_node_child(const struct lysc_node *node);
1891 
1899 LIBYANG_API_DECL struct lysc_must *lysc_node_musts(const struct lysc_node *node);
1900 
1908 LIBYANG_API_DECL struct lysc_when **lysc_node_when(const struct lysc_node *node);
1909 
1917 LIBYANG_API_DECL const struct lysc_node *lysc_node_lref_target(const struct lysc_node *node);
1918 
1928 LIBYANG_API_DECL LY_ERR lysc_node_lref_targets(const struct lysc_node *node, struct ly_set **set);
1929 
1941 LIBYANG_API_DECL LY_ERR lysc_node_lref_backlinks(const struct ly_ctx *ctx, const struct lysc_node *node,
1942  ly_bool match_ancestors, struct ly_set **set);
1943 
1953 typedef LY_ERR (*lysc_dfs_clb)(struct lysc_node *node, void *data, ly_bool *dfs_continue);
1954 
1971 LIBYANG_API_DECL LY_ERR lysc_tree_dfs_full(const struct lysc_node *root, lysc_dfs_clb dfs_clb, void *data);
1972 
1984 LIBYANG_API_DECL LY_ERR lysc_module_dfs_full(const struct lys_module *mod, lysc_dfs_clb dfs_clb, void *data);
1985 
1994 LIBYANG_API_DECL LY_ERR lysc_iffeature_value(const struct lysc_iffeature *iff);
1995 
2007 LIBYANG_API_DECL LY_ERR lys_identity_iffeature_value(const struct lysc_ident *ident);
2008 
2017 LIBYANG_API_DECL struct lysp_feature *lysp_feature_next(const struct lysp_feature *last, const struct lysp_module *pmod,
2018  uint32_t *idx);
2019 
2025 #define LYS_FIND_XP_SCHEMA 0x08
2026 #define LYS_FIND_XP_OUTPUT 0x10
2027 #define LYS_FIND_NO_MATCH_ERROR 0x40
2029 #define LYS_FIND_SCHEMAMOUNT 0x0200
2044 LIBYANG_API_DECL LY_ERR lys_find_xpath_atoms(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *xpath,
2045  uint32_t options, struct ly_set **set);
2046 
2059 LIBYANG_API_DECL LY_ERR lys_find_expr_atoms(const struct lysc_node *ctx_node, const struct lys_module *cur_mod,
2060  const struct lyxp_expr *expr, const struct lysc_prefix *prefixes, uint32_t options, struct ly_set **set);
2061 
2073 LIBYANG_API_DECL LY_ERR lys_find_xpath(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *xpath,
2074  uint32_t options, struct ly_set **set);
2075 
2084 LIBYANG_API_DECL LY_ERR lys_find_lypath_atoms(const struct ly_path *path, struct ly_set **set);
2085 
2096 LIBYANG_API_DECL LY_ERR lys_find_path_atoms(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *path,
2097  ly_bool output, struct ly_set **set);
2098 
2108 LIBYANG_API_DECL const struct lysc_node *lys_find_path(const struct ly_ctx *ctx, const struct lysc_node *ctx_node,
2109  const char *path, ly_bool output);
2110 
2114 typedef enum {
2120 
2132 LIBYANG_API_DECL char *lysc_path(const struct lysc_node *node, LYSC_PATH_TYPE pathtype, char *buffer, size_t buflen);
2133 
2137 struct lys_module {
2138  struct ly_ctx *ctx;
2139  const char *name;
2140  const char *revision;
2141  const char *ns;
2142  const char *prefix;
2143  const char *filepath;
2144  const char *org;
2145  const char *contact;
2146  const char *dsc;
2147  const char *ref;
2168 };
2169 
2177 #define LYS_MOD_LATEST_REV 0x01
2178 #define LYS_MOD_LATEST_SEARCHDIRS 0x02
2179 #define LYS_MOD_IMPORTED_REV 0x04
2182 #define LYS_MOD_LATEST_IMPCLB 0x08
2197 LIBYANG_API_DECL LY_ERR lys_feature_value(const struct lys_module *module, const char *feature);
2198 
2218 LIBYANG_API_DECL const struct lysc_node *lys_getnext(const struct lysc_node *last, const struct lysc_node *parent,
2219  const struct lysc_module *module, uint32_t options);
2220 
2233 LIBYANG_API_DECL const struct lysc_node *lys_getnext_ext(const struct lysc_node *last, const struct lysc_node *parent,
2234  const struct lysc_ext_instance *ext, uint32_t options);
2235 
2243 #define LYS_GETNEXT_WITHCHOICE 0x01
2244 #define LYS_GETNEXT_NOCHOICE 0x02
2245 #define LYS_GETNEXT_WITHCASE 0x04
2246 #define LYS_GETNEXT_INTONPCONT 0x08
2247 #define LYS_GETNEXT_OUTPUT 0x10
2249 #define LYS_GETNEXT_WITHSCHEMAMOUNT 0x20
2266 LIBYANG_API_DECL const struct lysc_node *lys_find_child(const struct lysc_node *parent, const struct lys_module *module,
2267  const char *name, size_t name_len, uint16_t nodetype, uint32_t options);
2268 
2284 LIBYANG_API_DECL LY_ERR lys_set_implemented(struct lys_module *mod, const char **features);
2285 
2292 LIBYANG_API_DECL const char *lys_nodetype2str(uint16_t nodetype);
2293 
2300 LIBYANG_API_DECL const char *lyxp_get_expr(const struct lyxp_expr *path);
2301 
2304 #ifdef __cplusplus
2305 }
2306 #endif
2307 
2308 #endif /* LY_TREE_SCHEMA_H_ */
libyang context handler.
LY_ERR
libyang's error codes returned by the libyang functions.
Definition: log.h:237
Structure to hold a set of (not necessary somehow connected) objects. Usually used for lyd_node,...
Definition: set.h:47
struct lysp_ext_instance * exts
Definition: plugins_exts.h:422
struct lysc_ext_instance * exts
Definition: plugins_exts.h:441
Extension plugin implementing various aspects of a YANG extension.
Definition: plugins_exts.h:932
YANG extension compiled instance.
Definition: plugins_exts.h:437
YANG extension parsed instance.
Definition: plugins_exts.h:403
Hold type-specific functions for various operations with the data values.
struct lysc_node * child
Definition: tree_schema.h:1577
struct lysp_ext_instance * exts
Definition: tree_schema.h:301
struct lyplg_type * plugin
Definition: tree_schema.h:1375
const char * dsc
Definition: tree_schema.h:1202
struct lyd_value * dflt
Definition: tree_schema.h:1638
struct lysp_node_grp * groupings
Definition: tree_schema.h:1113
struct lysp_node * data
Definition: tree_schema.h:1138
struct lysp_restr * musts
Definition: tree_schema.h:505
struct lysc_when ** when
Definition: tree_schema.h:1486
const char * ref
Definition: tree_schema.h:370
struct lysp_tpdf * typedefs
Definition: tree_schema.h:1000
uint16_t flags
Definition: tree_schema.h:461
const char * ref
Definition: tree_schema.h:525
const char * cond
Definition: tree_schema.h:441
struct lysp_when * when
Definition: tree_schema.h:769
const char * name
Definition: tree_schema.h:388
const char * ref
Definition: tree_schema.h:300
struct lysp_ext_instance * exts
Definition: tree_schema.h:527
struct lysp_node_notif * notifs
Definition: tree_schema.h:856
struct lysp_tpdf * typedefs
Definition: tree_schema.h:1136
struct lyd_value ** dflts
Definition: tree_schema.h:1669
struct lysp_node_action * actions
Definition: tree_schema.h:1084
uint32_t refcount
Definition: tree_schema.h:1307
struct lysc_ext_instance * exts
Definition: tree_schema.h:1189
struct lysc_must * musts
Definition: tree_schema.h:1701
struct lysc_when ** when
Definition: tree_schema.h:1579
struct lysp_feature * features
Definition: tree_schema.h:1134
struct lysc_node_action * rpcs
Definition: tree_schema.h:1748
struct lysc_ext_instance * exts
Definition: tree_schema.h:1385
char rev[11]
Definition: tree_schema.h:274
struct lysp_node * child
Definition: tree_schema.h:976
ly_bool to_compile
Definition: tree_schema.h:2165
struct lysp_restr * musts
Definition: tree_schema.h:1028
struct lysc_node_action_inout output
Definition: tree_schema.h:1490
const char * prefix
Definition: tree_schema.h:269
struct lysp_restr * musts
Definition: tree_schema.h:768
const char * ref
Definition: tree_schema.h:320
const char * dsc
Definition: tree_schema.h:270
struct lysc_range * range
Definition: tree_schema.h:1299
struct lysp_include * includes
Definition: tree_schema.h:1108
struct lysc_range * range
Definition: tree_schema.h:1310
struct lysc_ext * compiled
Definition: tree_schema.h:304
struct lysp_node_grp * groupings
Definition: tree_schema.h:853
struct lysp_ext_instance * exts
Definition: tree_schema.h:744
const char * ref
Definition: tree_schema.h:443
const char * units
Definition: tree_schema.h:1637
struct lysc_when ** when
Definition: tree_schema.h:1634
struct lysc_when ** when
Definition: tree_schema.h:1549
struct lysp_revision * revs
Definition: tree_schema.h:1129
struct lysc_node * child
Definition: tree_schema.h:1517
const char * name
Definition: tree_schema.h:1394
struct lysp_qname * dflts
Definition: tree_schema.h:494
uint16_t nodetype
Definition: tree_schema.h:1422
struct lys_module ** augmented_by
Definition: tree_schema.h:2161
struct lyplg_type * plugin
Definition: tree_schema.h:1351
LY_DATA_TYPE basetype
Definition: tree_schema.h:1317
const char * name
Definition: tree_schema.h:2139
struct lysp_node_notif * notifs
Definition: tree_schema.h:1059
struct lysp_restr * range
Definition: tree_schema.h:405
struct lysp_qname * dflts
Definition: tree_schema.h:825
struct lysc_ext_instance * exts
Definition: tree_schema.h:1285
const char * ref
Definition: tree_schema.h:380
LY_DATA_TYPE basetype
Definition: tree_schema.h:1387
pcre2_code * code
Definition: tree_schema.h:1263
struct lysp_deviate * next
Definition: tree_schema.h:502
struct lysp_qname arg
Definition: tree_schema.h:364
struct lysc_node_action * actions
Definition: tree_schema.h:1703
LY_DATA_TYPE basetype
Definition: tree_schema.h:1287
struct lysp_node * child
Definition: tree_schema.h:854
struct lysp_deviate * next
Definition: tree_schema.h:512
const char * units
Definition: tree_schema.h:824
struct lysp_import * imports
Definition: tree_schema.h:1131
struct lyxp_expr * path
Definition: tree_schema.h:1366
struct lysp_ext_instance * exts
Definition: tree_schema.h:413
struct lys_module ** deviated_by
Definition: tree_schema.h:2162
struct lysp_qname dflt
Definition: tree_schema.h:882
uint8_t require_instance
Definition: tree_schema.h:419
struct lysc_when ** when
Definition: tree_schema.h:1665
const char * units
Definition: tree_schema.h:504
struct lysp_when * when
Definition: tree_schema.h:926
const char * eapptag
Definition: tree_schema.h:1279
struct lysp_ext_instance * exts
Definition: tree_schema.h:272
struct lysp_type type
Definition: tree_schema.h:433
const char * units
Definition: tree_schema.h:515
struct lysp_node_notif * notifs
Definition: tree_schema.h:775
struct lyplg_type * plugin
Definition: tree_schema.h:1406
LY_DATA_TYPE basetype
Definition: tree_schema.h:1296
LY_DATA_TYPE basetype
Definition: tree_schema.h:1342
struct lysc_node_notif * notifs
Definition: tree_schema.h:1749
struct lyxp_expr * cond
Definition: tree_schema.h:1274
uint8_t hash[4]
Definition: tree_schema.h:1424
uint32_t refcount
Definition: tree_schema.h:1270
const char * name
Definition: tree_schema.h:1404
struct lysp_qname * uniques
Definition: tree_schema.h:857
const char * name
Definition: tree_schema.h:268
const char * ref
Definition: tree_schema.h:353
const char * dsc
Definition: tree_schema.h:1433
const char * prefix
Definition: tree_schema.h:1155
struct lysc_node_notif * notifs
Definition: tree_schema.h:1704
struct lysp_node_notif * notifs
Definition: tree_schema.h:1085
uint16_t nodetype
Definition: tree_schema.h:736
struct lysc_ext_instance * exts
Definition: tree_schema.h:1374
const char * emsg
Definition: tree_schema.h:367
uint16_t flags
Definition: tree_schema.h:1206
struct lysc_module * compiled
Definition: tree_schema.h:2150
const char * contact
Definition: tree_schema.h:2145
struct lys_module * module
Definition: tree_schema.h:1425
uint16_t flags
Definition: tree_schema.h:355
struct lysp_when * when
Definition: tree_schema.h:949
struct lysc_must * musts
Definition: tree_schema.h:1548
const char * presence
Definition: tree_schema.h:770
const char * name
Definition: tree_schema.h:1213
const char * nodeid
Definition: tree_schema.h:523
struct lysp_when * when
Definition: tree_schema.h:881
struct lysp_tpdf * typedefs
Definition: tree_schema.h:974
const char * revision
Definition: tree_schema.h:2140
uint8_t is_submod
Definition: tree_schema.h:1123
struct lysc_type * type
Definition: tree_schema.h:1666
const char * name
Definition: tree_schema.h:1187
const char * dsc
Definition: tree_schema.h:524
struct lysp_node * next
Definition: tree_schema.h:738
LY_DATA_TYPE basetype
Definition: tree_schema.h:1352
struct lysp_restr * patterns
Definition: tree_schema.h:407
struct lysp_ext_instance * exts
Definition: tree_schema.h:381
struct lysp_tpdf * typedefs
Definition: tree_schema.h:1029
struct lysp_type type
Definition: tree_schema.h:798
struct lysp_node * child
Definition: tree_schema.h:880
struct lysc_ident * identities
Definition: tree_schema.h:2153
struct lysc_ext_instance * exts
Definition: tree_schema.h:1304
struct lysp_qname * iffeatures
Definition: tree_schema.h:392
const char * ref
Definition: tree_schema.h:390
const char * name
Definition: tree_schema.h:297
const char * name
Definition: tree_schema.h:1303
LY_DATA_TYPE basetype
Definition: tree_schema.h:1306
const char * name
Definition: tree_schema.h:1284
uint16_t flags
Definition: tree_schema.h:394
struct lysp_node_action * actions
Definition: tree_schema.h:855
struct lysp_ext_instance * exts
Definition: tree_schema.h:432
const char * expr
Definition: tree_schema.h:1262
struct lysp_node_augment * augments
Definition: tree_schema.h:1139
uint32_t refcount
Definition: tree_schema.h:1297
struct lysp_node * parent
Definition: tree_schema.h:735
const char * dsc
Definition: tree_schema.h:1264
struct lysp_ext_instance * exts
Definition: tree_schema.h:286
const char * emsg
Definition: tree_schema.h:1266
struct lysp_node_action * rpcs
Definition: tree_schema.h:1140
struct lysp_node_action * actions
Definition: tree_schema.h:774
struct lysp_node_grp * groupings
Definition: tree_schema.h:975
struct lysp_qname * iffeatures
Definition: tree_schema.h:315
struct lysp_node_grp * groupings
Definition: tree_schema.h:1137
uint16_t flags
Definition: tree_schema.h:302
uint16_t flags
Definition: tree_schema.h:420
struct lysc_ext_instance * exts
Definition: tree_schema.h:1258
struct lysp_node * data
Definition: tree_schema.h:1114
struct lysp_feature ** depfeatures
Definition: tree_schema.h:317
struct lysc_type_bitenum_item * bits
Definition: tree_schema.h:1355
struct lysp_ext * extensions
Definition: tree_schema.h:1109
const char * presence
Definition: tree_schema.h:456
uint8_t mod
Definition: tree_schema.h:482
struct lyplg_type * plugin
Definition: tree_schema.h:1305
struct lysp_ext_instance * exts
Definition: tree_schema.h:371
struct lysc_node * parent
Definition: tree_schema.h:1426
uint8_t latest_revision
Definition: tree_schema.h:2167
struct lyplg_type * plugin
Definition: tree_schema.h:1316
struct lys_module * module
Definition: tree_schema.h:1216
const char * name
Definition: tree_schema.h:427
uint32_t refcount
Definition: tree_schema.h:1205
const char * dsc
Definition: tree_schema.h:369
const char * dsc
Definition: tree_schema.h:2146
struct lysp_type_enum * bits
Definition: tree_schema.h:409
struct lysc_pattern ** patterns
Definition: tree_schema.h:1321
struct lysp_node_action_inout output
Definition: tree_schema.h:1004
struct lysp_ident * identities
Definition: tree_schema.h:1111
struct lysp_ext_instance * exts
Definition: tree_schema.h:503
uint8_t * expr
Definition: tree_schema.h:330
struct lysp_type * types
Definition: tree_schema.h:412
LY_DATA_TYPE basetype
Definition: tree_schema.h:1376
const char * ref
Definition: tree_schema.h:1159
struct lysc_node * child
Definition: tree_schema.h:1459
const char * argname
Definition: tree_schema.h:1188
struct lysp_ext_instance * exts
Definition: tree_schema.h:444
struct lysp_qname dflt
Definition: tree_schema.h:429
struct lysp_node * child
Definition: tree_schema.h:1082
struct lysp_deviation * deviations
Definition: tree_schema.h:1118
struct lys_module * mod
Definition: tree_schema.h:1127
const char * org
Definition: tree_schema.h:2144
struct lysp_qname dflt
Definition: tree_schema.h:516
struct lysp_node * child
Definition: tree_schema.h:1031
const char * ref
Definition: tree_schema.h:453
const char * ref
Definition: tree_schema.h:741
struct lysc_iffeature * iffeatures_c
Definition: tree_schema.h:316
const struct lysp_module * pmod
Definition: tree_schema.h:415
const char * dsc
Definition: tree_schema.h:379
struct lysp_qname * uniques
Definition: tree_schema.h:506
struct lysp_ext_instance * exts
Definition: tree_schema.h:460
struct lysp_node_augment * augments
Definition: tree_schema.h:1115
const char * contact
Definition: tree_schema.h:1157
ly_bool implemented
Definition: tree_schema.h:2164
const char * key
Definition: tree_schema.h:851
const char * name
Definition: tree_schema.h:1153
struct lys_module * mod
Definition: tree_schema.h:1103
uint16_t flags
Definition: tree_schema.h:434
struct lysc_node_case * cases
Definition: tree_schema.h:1605
const char * ref
Definition: tree_schema.h:2147
uint16_t flags
Definition: tree_schema.h:737
uint16_t flags
Definition: tree_schema.h:1423
struct lysp_restr * musts
Definition: tree_schema.h:973
struct lysp_ext_instance * exts
Definition: tree_schema.h:393
const char * ref
Definition: tree_schema.h:271
const char * filepath
Definition: tree_schema.h:1154
struct lysc_node_notif * notifs
Definition: tree_schema.h:1551
uint32_t max
Definition: tree_schema.h:459
const char * dsc
Definition: tree_schema.h:299
struct lysp_include * includes
Definition: tree_schema.h:1132
struct lysc_must * musts
Definition: tree_schema.h:1460
uint32_t min
Definition: tree_schema.h:458
struct lysp_deviate * deviates
Definition: tree_schema.h:526
struct lysc_ext_instance * exts
Definition: tree_schema.h:1204
struct lyplg_type * plugin
Definition: tree_schema.h:1286
ly_bool injected
Definition: tree_schema.h:288
const char * units
Definition: tree_schema.h:491
struct lysp_qname dflt
Definition: tree_schema.h:800
const char * name
Definition: tree_schema.h:1293
void * priv
Definition: tree_schema.h:1436
const char * name
Definition: tree_schema.h:1339
struct lysc_node_action * actions
Definition: tree_schema.h:1550
const char * name
Definition: tree_schema.h:404
struct lysp_tpdf * typedefs
Definition: tree_schema.h:1112
struct lysp_qname * uniques
Definition: tree_schema.h:493
struct lysp_when * when
Definition: tree_schema.h:1083
struct lysc_range * length
Definition: tree_schema.h:1410
uint32_t min
Definition: tree_schema.h:858
const char * name
Definition: tree_schema.h:314
struct lysp_restr * length
Definition: tree_schema.h:406
struct lysc_when ** when
Definition: tree_schema.h:1735
const char * eapptag
Definition: tree_schema.h:1257
struct lysp_ext_instance * exts
Definition: tree_schema.h:513
struct lysc_type * type
Definition: tree_schema.h:1635
struct lysp_restr * musts
Definition: tree_schema.h:492
struct lysp_restr * musts
Definition: tree_schema.h:849
struct lysp_ident * identities
Definition: tree_schema.h:1135
const char * units
Definition: tree_schema.h:799
struct lyplg_type * plugin
Definition: tree_schema.h:1386
struct lyxp_expr * path
Definition: tree_schema.h:410
struct lysp_qname * dflts
Definition: tree_schema.h:457
struct lysc_node * next
Definition: tree_schema.h:1427
const char * dsc
Definition: tree_schema.h:352
struct lysc_ext_instance * exts
Definition: tree_schema.h:1395
struct lysp_restr * musts
Definition: tree_schema.h:455
struct lysp_node * child
Definition: tree_schema.h:903
struct lysp_qname * iffeatures
Definition: tree_schema.h:742
uint8_t latest_revision
Definition: tree_schema.h:1149
struct lysp_ext_instance * exts
Definition: tree_schema.h:1143
struct lysc_ext_instance * exts
Definition: tree_schema.h:1350
const char * dsc
Definition: tree_schema.h:1214
struct lysp_revision * revs
Definition: tree_schema.h:1105
struct lysc_type * compiled
Definition: tree_schema.h:416
struct lysc_node * child
Definition: tree_schema.h:1547
uint16_t flags
Definition: tree_schema.h:1220
struct lys_module * module
Definition: tree_schema.h:266
struct lysc_ext_instance * exts
Definition: tree_schema.h:1328
struct lysp_type * type
Definition: tree_schema.h:514
struct lysc_node_leaf *** uniques
Definition: tree_schema.h:1706
struct lysp_qname * iffeatures
Definition: tree_schema.h:454
struct lysp_when * when
Definition: tree_schema.h:904
const char * name
Definition: tree_schema.h:283
struct lysp_submodule * submodule
Definition: tree_schema.h:281
struct lysp_ext_instance * exts
Definition: tree_schema.h:321
const char * name
Definition: tree_schema.h:1360
struct lysp_feature * features
Definition: tree_schema.h:1110
struct lysp_qname * dflts
Definition: tree_schema.h:507
struct lysp_restr * musts
Definition: tree_schema.h:925
const char * ref
Definition: tree_schema.h:285
struct lysp_node_action * rpcs
Definition: tree_schema.h:1116
struct lysp_ext_instance * exts
Definition: tree_schema.h:354
const char * name
Definition: tree_schema.h:1314
const char ** bases
Definition: tree_schema.h:351
LY_DATA_TYPE basetype
Definition: tree_schema.h:1363
const char * dsc
Definition: tree_schema.h:1254
const char * name
Definition: tree_schema.h:1432
struct lys_module * mod
Definition: tree_schema.h:1745
struct lysc_node_action_inout input
Definition: tree_schema.h:1489
struct lysp_when * when
Definition: tree_schema.h:797
const char * dsc
Definition: tree_schema.h:452
struct lysp_node_action * actions
Definition: tree_schema.h:1058
uint16_t flags
Definition: tree_schema.h:1192
struct lyplg_ext * plugin
Definition: tree_schema.h:1190
struct lysp_deviation * deviations
Definition: tree_schema.h:1142
char date[11]
Definition: tree_schema.h:378
char * prefix
Definition: tree_schema.h:1175
struct lysc_must * musts
Definition: tree_schema.h:1734
struct lysc_ident ** derived
Definition: tree_schema.h:1217
uint32_t refcount
Definition: tree_schema.h:1408
const char * ref
Definition: tree_schema.h:1434
struct lysc_prefix * prefixes
Definition: tree_schema.h:1367
struct lysc_ext_instance * exts
Definition: tree_schema.h:1340
const char * dsc
Definition: tree_schema.h:740
const char * ref
Definition: tree_schema.h:1215
struct lysc_type_bitenum_item * enums
Definition: tree_schema.h:1345
const char * dsc
Definition: tree_schema.h:1276
struct lysc_must * musts
Definition: tree_schema.h:1633
struct lysp_node * child
Definition: tree_schema.h:773
const char * dsc
Definition: tree_schema.h:1158
const char * filepath
Definition: tree_schema.h:2143
struct lysp_node_action_inout input
Definition: tree_schema.h:1003
struct lysp_tpdf * typedefs
Definition: tree_schema.h:1055
struct lysc_when ** when
Definition: tree_schema.h:1606
struct lyplg_type * plugin
Definition: tree_schema.h:1396
struct lysp_when * when
Definition: tree_schema.h:850
const char * ns
Definition: tree_schema.h:2141
const char * dsc
Definition: tree_schema.h:430
const char * ref
Definition: tree_schema.h:1203
struct lysp_node_grp * groupings
Definition: tree_schema.h:1001
struct lysc_range * length
Definition: tree_schema.h:1320
const char * name
Definition: tree_schema.h:1349
struct lysc_prefix * prefixes
Definition: tree_schema.h:1201
struct lysp_tpdf * typedefs
Definition: tree_schema.h:852
struct lysc_when ** when
Definition: tree_schema.h:1519
struct lyplg_type * plugin
Definition: tree_schema.h:1341
struct lysc_node * child
Definition: tree_schema.h:1700
struct lysp_node_augment * augments
Definition: tree_schema.h:948
uint32_t refcount
Definition: tree_schema.h:1353
uint32_t refcount
Definition: tree_schema.h:1343
struct lysp_tpdf * typedefs
Definition: tree_schema.h:771
struct lysc_ext_instance * exts
Definition: tree_schema.h:1280
struct lysp_type_enum * enums
Definition: tree_schema.h:408
const char * name
Definition: tree_schema.h:739
struct lysc_type * realtype
Definition: tree_schema.h:1368
const char * eapptag
Definition: tree_schema.h:368
struct lysc_ext_instance * exts
Definition: tree_schema.h:1240
struct lysp_node_grp * groupings
Definition: tree_schema.h:772
struct lysp_deviate * next
Definition: tree_schema.h:483
struct lysc_node * prev
Definition: tree_schema.h:1428
struct lysp_type type
Definition: tree_schema.h:823
const char * ref
Definition: tree_schema.h:1277
const char * dsc
Definition: tree_schema.h:389
uint32_t refcount
Definition: tree_schema.h:1318
const char * org
Definition: tree_schema.h:1156
struct lysc_ext_instance * exts
Definition: tree_schema.h:1219
struct lyplg_type * plugin
Definition: tree_schema.h:1362
const char * name
Definition: tree_schema.h:349
const char * ref
Definition: tree_schema.h:1265
struct lysc_node * data
Definition: tree_schema.h:1747
const char * dsc
Definition: tree_schema.h:442
uint8_t is_submod
Definition: tree_schema.h:1147
const char * emsg
Definition: tree_schema.h:1278
struct lysp_module * parsed
Definition: tree_schema.h:2149
uint32_t refcount
Definition: tree_schema.h:1288
struct lysc_must * musts
Definition: tree_schema.h:1518
struct lysc_ext_instance * exts
Definition: tree_schema.h:1294
struct lyxp_expr * cond
Definition: tree_schema.h:1199
struct lyplg_type * plugin
Definition: tree_schema.h:1295
const char * str
Definition: tree_schema.h:338
const char * prefix
Definition: tree_schema.h:2142
struct lysp_node_notif * notifs
Definition: tree_schema.h:1141
struct lysc_ext_instance * exts
Definition: tree_schema.h:1268
const char * eapptag
Definition: tree_schema.h:1267
uint8_t parsing
Definition: tree_schema.h:1122
struct lysp_qname * iffeatures
Definition: tree_schema.h:350
const char * ref
Definition: tree_schema.h:1255
struct lysc_node_case * dflt
Definition: tree_schema.h:1607
const char * units
Definition: tree_schema.h:428
struct lysc_ext_instance * exts
Definition: tree_schema.h:1315
struct lysp_when * when
Definition: tree_schema.h:822
struct lysc_type ** types
Definition: tree_schema.h:1400
uint16_t flags
Definition: tree_schema.h:322
const char * argname
Definition: tree_schema.h:298
const char ** bases
Definition: tree_schema.h:411
const char * dsc
Definition: tree_schema.h:319
struct lysc_ext_instance * exts
Definition: tree_schema.h:1435
struct lysc_ext_instance * exts
Definition: tree_schema.h:1750
struct ly_ctx * ctx
Definition: tree_schema.h:2138
struct lys_module * module
Definition: tree_schema.h:1191
uint32_t max
Definition: tree_schema.h:859
struct lysp_ext * extensions
Definition: tree_schema.h:1133
struct lysp_node_notif * notifs
Definition: tree_schema.h:1117
uint16_t flags
Definition: tree_schema.h:273
uint32_t inverted
Definition: tree_schema.h:1269
struct lysc_node * context
Definition: tree_schema.h:1200
LY_DATA_TYPE basetype
Definition: tree_schema.h:1407
struct lysp_ext_instance * exts
Definition: tree_schema.h:1119
struct lysc_ext_instance * exts
Definition: tree_schema.h:1405
char date[11]
Definition: tree_schema.h:1239
struct lysc_ext_instance * exts
Definition: tree_schema.h:1361
const char * units
Definition: tree_schema.h:1668
char rev[11]
Definition: tree_schema.h:287
uint8_t fraction_digits
Definition: tree_schema.h:418
const char * ref
Definition: tree_schema.h:431
struct lysp_restr * musts
Definition: tree_schema.h:796
struct lysc_must * musts
Definition: tree_schema.h:1664
struct lysc_when ** when
Definition: tree_schema.h:1702
struct lysp_import * imports
Definition: tree_schema.h:1107
struct lysp_ext_instance * exts
Definition: tree_schema.h:484
const struct lysp_module * mod
Definition: tree_schema.h:339
uint8_t version
Definition: tree_schema.h:1121
LY_DATA_TYPE basetype
Definition: tree_schema.h:1397
struct lysp_restr * musts
Definition: tree_schema.h:821
struct lysc_ident ** bases
Definition: tree_schema.h:1379
const char * emsg
Definition: tree_schema.h:1256
struct lysp_feature ** features
Definition: tree_schema.h:331
const char * dsc
Definition: tree_schema.h:284
const char * nodeid
Definition: tree_schema.h:451
struct lysp_ext_instance * exts
Definition: tree_schema.h:490
uint32_t refcount
Definition: tree_schema.h:1398
struct lysc_range::lysc_range_part * parts
uint16_t flags
Definition: tree_schema.h:341
struct lysc_prefix * prefixes
Definition: tree_schema.h:1275
struct lysp_node_grp * groupings
Definition: tree_schema.h:1030
uint8_t require_instance
Definition: tree_schema.h:1369
struct lysp_deviate * next
Definition: tree_schema.h:489
struct lysp_node * child
Definition: tree_schema.h:1057
const struct lys_module * mod
Definition: tree_schema.h:1176
struct lysp_node_grp * groupings
Definition: tree_schema.h:1056
struct lysp_refine * refines
Definition: tree_schema.h:947
uint8_t fraction_digits
Definition: tree_schema.h:1309
LIBYANG_API_DECL const struct lysp_tpdf * lysp_node_typedefs(const struct lysp_node *node)
Get the typedefs sized array of the given (parsed) schema node. Decides the node's type and in case i...
LIBYANG_API_DECL LY_ERR lysc_tree_dfs_full(const struct lysc_node *root, lysc_dfs_clb dfs_clb, void *data)
DFS traversal of all the schema nodes in a (sub)tree including any actions and nested notifications.
LIBYANG_API_DECL const struct lysc_node * lysc_node_lref_target(const struct lysc_node *node)
Get the target node of a leafref node. Function lysc_node_lref_targets() should be used instead to ge...
LIBYANG_API_DECL const struct lysc_node * lysc_node_child(const struct lysc_node *node)
Get the children linked list of the given (compiled) schema node.
LIBYANG_API_DECL struct lysc_must * lysc_node_musts(const struct lysc_node *node)
Get the must statements list if present in the node.
LIBYANG_API_DECL const struct lysc_node * lys_getnext_ext(const struct lysc_node *last, const struct lysc_node *parent, const struct lysc_ext_instance *ext, uint32_t options)
Get next schema (sibling) node element in the schema order of an extension that can be instantiated i...
LIBYANG_API_DECL const struct lysc_node * lysc_data_node(const struct lysc_node *schema)
Get nearest schema parent (including the node itself) that can be instantiated in data.
LY_ERR(* lysc_dfs_clb)(struct lysc_node *node, void *data, ly_bool *dfs_continue)
Callback to be called for every schema node in a DFS traversal.
Definition: tree_schema.h:1953
LIBYANG_API_DECL LY_ERR lysc_iffeature_value(const struct lysc_iffeature *iff)
Get how the if-feature statement currently evaluates.
LIBYANG_API_DECL LY_ERR lysc_node_lref_backlinks(const struct ly_ctx *ctx, const struct lysc_node *node, ly_bool match_ancestors, struct ly_set **set)
Get all the leafref (or union with leafrefs) nodes that target a specific node.
LIBYANG_API_DECL const struct lysc_node_notif * lysc_node_notifs(const struct lysc_node *node)
Get the Notifications linked list of the given (compiled) schema node. Decides the node's type and in...
LIBYANG_API_DECL const struct lysp_node_action * lysp_node_actions(const struct lysp_node *node)
Get the actions/RPCs linked list of the given (parsed) schema node. Decides the node's type and in ca...
LIBYANG_API_DECL const struct lysc_node * lys_find_path(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *path, ly_bool output)
Get a schema node based on the given data path (JSON format, see XPath Addressing).
LIBYANG_API_DECL LY_ERR lys_find_path_atoms(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *path, ly_bool output, struct ly_set **set)
Get all the schema nodes that are required for path to be evaluated (atoms).
LIBYANG_API_DECL const struct lysc_when * lysc_has_when(const struct lysc_node *node)
Check whether the schema node data instance existence depends on any when conditions....
LIBYANG_API_DECL const struct lysc_node * lys_getnext(const struct lysc_node *last, const struct lysc_node *parent, const struct lysc_module *module, uint32_t options)
Get next schema (sibling) node element in the schema order that can be instantiated in a data tree....
LIBYANG_API_DECL LY_ERR lys_find_expr_atoms(const struct lysc_node *ctx_node, const struct lys_module *cur_mod, const struct lyxp_expr *expr, const struct lysc_prefix *prefixes, uint32_t options, struct ly_set **set)
Get all the schema nodes that are required for expr to be evaluated (atoms).
LIBYANG_API_DECL const char * lyxp_get_expr(const struct lyxp_expr *path)
Getter for original XPath expression from a parsed expression.
LIBYANG_API_DECL char * lysc_path(const struct lysc_node *node, LYSC_PATH_TYPE pathtype, char *buffer, size_t buflen)
Generate path of the given node in the requested format.
LIBYANG_API_DECL const struct lysp_node * lysp_node_child(const struct lysp_node *node)
Get the children linked list of the given (parsed) schema node. Decides the node's type and in case i...
LIBYANG_API_DECL const struct lysc_node * lys_find_child(const struct lysc_node *parent, const struct lys_module *module, const char *name, size_t name_len, uint16_t nodetype, uint32_t options)
Get child node according to the specified criteria.
LIBYANG_API_DECL LY_ERR lys_identity_iffeature_value(const struct lysc_ident *ident)
Get how the if-feature statement is evaluated for certain identity.
LIBYANG_API_DECL struct lysc_when ** lysc_node_when(const struct lysc_node *node)
Get the when statements list if present in the node.
LIBYANG_API_DECL LY_ERR lys_find_xpath_atoms(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *xpath, uint32_t options, struct ly_set **set)
Get all the schema nodes that are required for xpath to be evaluated (atoms).
LIBYANG_API_DECL LY_ERR lys_set_implemented(struct lys_module *mod, const char **features)
Make the specific module implemented.
LIBYANG_API_DECL const struct lysp_node_grp * lysp_node_groupings(const struct lysp_node *node)
Get the groupings linked list of the given (parsed) schema node. Decides the node's type and in case ...
LYSC_PATH_TYPE
Types of the different schema paths.
Definition: tree_schema.h:2114
LIBYANG_API_DECL LY_ERR lysc_node_lref_targets(const struct lysc_node *node, struct ly_set **set)
Get the target node(s) of a leafref node or union node with leafrefs.
#define LYS_NODE_HASH_COUNT
Maximum number of hashes stored in a schema node.
Definition: tree_schema.h:1416
LIBYANG_API_DECL LY_ERR lys_feature_value(const struct lys_module *module, const char *feature)
Get the current real status of the specified feature in the module.
LIBYANG_API_DECL LY_ERR lys_find_lypath_atoms(const struct ly_path *path, struct ly_set **set)
Get all the schema nodes that are required for path to be evaluated (atoms).
LIBYANG_API_DECL LY_ERR lysc_module_dfs_full(const struct lys_module *mod, lysc_dfs_clb dfs_clb, void *data)
DFS traversal of all the schema nodes in a module including RPCs and notifications.
LIBYANG_API_DECL struct lysp_feature * lysp_feature_next(const struct lysp_feature *last, const struct lysp_module *pmod, uint32_t *idx)
Get the next feature in the module or submodules.
LIBYANG_API_DECL const struct lysc_node_action * lysc_node_actions(const struct lysc_node *node)
Get the actions/RPCs linked list of the given (compiled) schema node. Decides the node's type and in ...
LIBYANG_API_DECL const char * lys_nodetype2str(uint16_t nodetype)
Stringify schema nodetype.
LIBYANG_API_DECL const struct lys_module * lysc_owner_module(const struct lysc_node *node)
Get the owner module of the schema node. It is the module of the top-level node. Generally,...
LYS_VERSION
supported YANG schema version values
Definition: tree_schema.h:1091
LIBYANG_API_DECL const struct lysp_node_notif * lysp_node_notifs(const struct lysp_node *node)
Get the Notifications linked list of the given (parsed) schema node. Decides the node's type and in c...
LIBYANG_API_DECL LY_ERR lys_find_xpath(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *xpath, uint32_t options, struct ly_set **set)
Evaluate an xpath expression on schema nodes.
#define LY_REV_SIZE
Definition: tree_schema.h:232
@ LYSC_PATH_LOG
Definition: tree_schema.h:2115
@ LYSC_PATH_DATA
Definition: tree_schema.h:2116
@ LYSC_PATH_DATA_PATTERN
Definition: tree_schema.h:2117
@ LYS_VERSION_UNDEF
Definition: tree_schema.h:1092
@ LYS_VERSION_1_0
Definition: tree_schema.h:1093
@ LYS_VERSION_1_1
Definition: tree_schema.h:1094
Available YANG schema tree structures representing YANG module.
Definition: tree_schema.h:2137
Compiled YANG extension-stmt.
Definition: tree_schema.h:1186
YANG identity-stmt.
Definition: tree_schema.h:1212
Compiled YANG if-feature-stmt.
Definition: tree_schema.h:329
Compiled YANG schema tree structure representing YANG module.
Definition: tree_schema.h:1744
Compiled YANG data node.
Definition: tree_schema.h:1421
Compiled prefix data pair mapping of prefixes to modules. In case the format is LY_VALUE_SCHEMA_RESOL...
Definition: tree_schema.h:1174
Compiled YANG revision statement.
Definition: tree_schema.h:1238
YANG when-stmt.
Definition: tree_schema.h:1198
Generic deviate structure to get type and cast to lysp_deviate_* structure.
Definition: tree_schema.h:481
YANG extension-stmt.
Definition: tree_schema.h:296
YANG feature-stmt.
Definition: tree_schema.h:313
YANG identity-stmt.
Definition: tree_schema.h:348
YANG import-stmt.
Definition: tree_schema.h:265
YANG include-stmt.
Definition: tree_schema.h:280
Printable YANG schema tree structure representing YANG module.
Definition: tree_schema.h:1102
Generic YANG data node.
Definition: tree_schema.h:734
YANG rpc-stmt and action-stmt.
Definition: tree_schema.h:982
YANG input-stmt and output-stmt.
Definition: tree_schema.h:955
YANG uses-augment-stmt and augment-stmt (compatible with struct lysp_node )
Definition: tree_schema.h:1065
Extension structure of the lysp_node for YANG container.
Definition: tree_schema.h:750
YANG grouping-stmt.
Definition: tree_schema.h:1037
YANG notification-stmt.
Definition: tree_schema.h:1010
Qualified name (optional prefix followed by an identifier).
Definition: tree_schema.h:337
YANG refine-stmt.
Definition: tree_schema.h:450
Covers restrictions: range, length, pattern, must.
Definition: tree_schema.h:361
YANG revision-stmt.
Definition: tree_schema.h:377
YANG typedef-stmt.
Definition: tree_schema.h:426
YANG type-stmt.
Definition: tree_schema.h:403
Enumeration/Bit value definition.
Definition: tree_schema.h:387
YANG when-stmt.
Definition: tree_schema.h:440
LY_DATA_TYPE
YANG built-in types.
Definition: tree.h:202
Logger manipulation routines and error definitions.
uint8_t ly_bool
Type to indicate boolean value.
Definition: log.h:28
libyang generic macros and functions to work with YANG schema or data trees.
YANG data representation.
Definition: tree_data.h:567