Add VES stndDefined PM and subscription for O-DU.
[sim/o1-interface.git] / ntsimulator / ntsim-ng / utils / debug_utils.c
1 #include "debug_utils.h"
2 #include "log_utils.h"
3
4 #include <inttypes.h>
5
6 void debug_print_sr_val(const sr_val_t *value) {
7     if (NULL == value) {
8         return;
9     }
10
11     log_add(1, "%s ", value->xpath);
12
13     switch (value->type) {
14     case SR_CONTAINER_T:
15     case SR_CONTAINER_PRESENCE_T:
16         log_add(1, "(container)");
17         break;
18     case SR_LIST_T:
19         log_add(1, "(list instance)");
20         break;
21     case SR_STRING_T:
22         log_add(1, "= %s", value->data.string_val);
23         break;
24     case SR_BOOL_T:
25         log_add(1, "= %s", value->data.bool_val ? "true" : "false");
26         break;
27     case SR_DECIMAL64_T:
28         log_add(1, "= %g", value->data.decimal64_val);
29         break;
30     case SR_INT8_T:
31         log_add(1, "= %" PRId8, value->data.int8_val);
32         break;
33     case SR_INT16_T:
34         log_add(1, "= %" PRId16, value->data.int16_val);
35         break;
36     case SR_INT32_T:
37         log_add(1, "= %" PRId32, value->data.int32_val);
38         break;
39     case SR_INT64_T:
40         log_add(1, "= %" PRId64, value->data.int64_val);
41         break;
42     case SR_UINT8_T:
43         log_add(1, "= %" PRIu8, value->data.uint8_val);
44         break;
45     case SR_UINT16_T:
46         log_add(1, "= %" PRIu16, value->data.uint16_val);
47         break;
48     case SR_UINT32_T:
49         log_add(1, "= %" PRIu32, value->data.uint32_val);
50         break;
51     case SR_UINT64_T:
52         log_add(1, "= %" PRIu64, value->data.uint64_val);
53         break;
54     case SR_IDENTITYREF_T:
55         log_add(1, "= %s", value->data.identityref_val);
56         break;
57     case SR_INSTANCEID_T:
58         log_add(1, "= %s", value->data.instanceid_val);
59         break;
60     case SR_BITS_T:
61         log_add(1, "= %s", value->data.bits_val);
62         break;
63     case SR_BINARY_T:
64         log_add(1, "= %s", value->data.binary_val);
65         break;
66     case SR_ENUM_T:
67         log_add(1, "= %s", value->data.enum_val);
68         break;
69     case SR_LEAF_EMPTY_T:
70         log_add(1, "(empty leaf)");
71         break;
72     default:
73         log_add(1, "(unprintable)");
74         break;
75     }
76
77     switch (value->type) {
78     case SR_UNKNOWN_T:
79     case SR_CONTAINER_T:
80     case SR_CONTAINER_PRESENCE_T:
81     case SR_LIST_T:
82     case SR_LEAF_EMPTY_T:
83         break;
84
85     default:
86         log_add(1, "%s", value->dflt ? " [default]" : "");
87         break;
88     }
89 }
90
91 void debug_print_sr_change(sr_change_oper_t op, sr_val_t *old_val, sr_val_t *new_val) {
92     switch (op) {
93         case SR_OP_CREATED:
94             log_add_verbose(1, "CREATED: ");
95             debug_print_sr_val(new_val);
96             break;
97         case SR_OP_DELETED:
98             log_add_verbose(1, "DELETED: ");
99             debug_print_sr_val(old_val);
100             break;
101         case SR_OP_MODIFIED:
102             log_add_verbose(1, "MODIFIED: ");
103             debug_print_sr_val(old_val);
104             log_add(1, "to ");
105             debug_print_sr_val(new_val);
106             break;
107         case SR_OP_MOVED:
108             log_add_verbose(1, "MOVED: %s\n", new_val->xpath);
109             break;
110     }
111
112     log_add(1, "\n");
113 }
114
115 void debug_print_lyd_value(struct lyd_node *node) {
116     switch(node->schema->nodetype) {
117         case LYS_UNKNOWN:
118         case LYS_CONTAINER:
119         case LYS_CHOICE:
120         case LYS_LIST:
121         case LYS_ANYXML:
122         case LYS_CASE:
123         case LYS_NOTIF:
124         case LYS_RPC:
125         case LYS_INPUT:
126         case LYS_OUTPUT:
127         case LYS_GROUPING:
128         case LYS_USES:
129         case LYS_AUGMENT:
130         case LYS_ACTION:
131         case LYS_ANYDATA:
132         case LYS_EXT:
133         default:
134             log_add(1, "[unprintable]");
135             break;
136
137         case LYS_LEAF:
138         case LYS_LEAFLIST:
139             log_add(1, LOG_COLOR_BOLD_MAGENTA"%s"LOG_COLOR_RESET, ((struct lyd_node_leaf_list *)node)->value_str);
140             break;
141     }
142 }
143
144 void debug_print_lyd_node(struct lyd_node *node) {
145     struct lyd_node *start = node;
146     struct lyd_node *elem = 0;
147     struct lyd_node *next = 0;
148     
149 debug_print_dfs:
150     LY_TREE_DFS_BEGIN(start, next, elem) {
151         char elemtype = ((elem->schema->flags & LYS_CONFIG_W) == 0) ? 'O' : 'R';
152
153         char *xpath = lyd_path(elem);
154         log_add_verbose(1, "[%c] %s: ", elemtype, xpath);
155         free(xpath);
156         
157         debug_print_lyd_value(elem);
158         
159         log_add(1, "\n");
160         LY_TREE_DFS_END(start, next, elem);
161     }
162
163     if(start->next) {
164         start = start->next;
165         goto debug_print_dfs;
166     }
167 }
168
169 void debug_print_siblings(const struct lyd_node *node) {
170     struct lyd_node *start = (struct lyd_node *)node;
171     struct lyd_node *elem = 0;
172
173     elem = start;
174     while(elem) {
175         elem = elem->prev;
176
177         char elemtype = ((elem->schema->flags & LYS_CONFIG_W) == 0) ? 'O' : 'R';
178
179         log_add_verbose(1, "[%c] %s: ", elemtype, lyd_path(elem));
180         
181         debug_print_lyd_value(elem);
182         
183         log_add(1, "\n");
184
185         if(elem == start) {
186             break;
187         }
188     }
189 }