X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ntsimulator%2Fntsim-ng%2Futils%2Fdebug_utils.c;fp=ntsimulator%2Fntsim-ng%2Futils%2Fdebug_utils.c;h=e8f603717fa8c36ed3c980328303d173be7947c4;hb=caec2fcb18e829420672509fe5e356b48d0c3840;hp=0000000000000000000000000000000000000000;hpb=f379349d310d61b27d2c0bf7334d2268cc8f42e2;p=sim%2Fo1-interface.git diff --git a/ntsimulator/ntsim-ng/utils/debug_utils.c b/ntsimulator/ntsim-ng/utils/debug_utils.c new file mode 100644 index 0000000..e8f6037 --- /dev/null +++ b/ntsimulator/ntsim-ng/utils/debug_utils.c @@ -0,0 +1,189 @@ +#include "debug_utils.h" +#include "log_utils.h" + +#include + +void debug_print_sr_val(const sr_val_t *value) { + if (NULL == value) { + return; + } + + log_add(1, "%s ", value->xpath); + + switch (value->type) { + case SR_CONTAINER_T: + case SR_CONTAINER_PRESENCE_T: + log_add(1, "(container)"); + break; + case SR_LIST_T: + log_add(1, "(list instance)"); + break; + case SR_STRING_T: + log_add(1, "= %s", value->data.string_val); + break; + case SR_BOOL_T: + log_add(1, "= %s", value->data.bool_val ? "true" : "false"); + break; + case SR_DECIMAL64_T: + log_add(1, "= %g", value->data.decimal64_val); + break; + case SR_INT8_T: + log_add(1, "= %" PRId8, value->data.int8_val); + break; + case SR_INT16_T: + log_add(1, "= %" PRId16, value->data.int16_val); + break; + case SR_INT32_T: + log_add(1, "= %" PRId32, value->data.int32_val); + break; + case SR_INT64_T: + log_add(1, "= %" PRId64, value->data.int64_val); + break; + case SR_UINT8_T: + log_add(1, "= %" PRIu8, value->data.uint8_val); + break; + case SR_UINT16_T: + log_add(1, "= %" PRIu16, value->data.uint16_val); + break; + case SR_UINT32_T: + log_add(1, "= %" PRIu32, value->data.uint32_val); + break; + case SR_UINT64_T: + log_add(1, "= %" PRIu64, value->data.uint64_val); + break; + case SR_IDENTITYREF_T: + log_add(1, "= %s", value->data.identityref_val); + break; + case SR_INSTANCEID_T: + log_add(1, "= %s", value->data.instanceid_val); + break; + case SR_BITS_T: + log_add(1, "= %s", value->data.bits_val); + break; + case SR_BINARY_T: + log_add(1, "= %s", value->data.binary_val); + break; + case SR_ENUM_T: + log_add(1, "= %s", value->data.enum_val); + break; + case SR_LEAF_EMPTY_T: + log_add(1, "(empty leaf)"); + break; + default: + log_add(1, "(unprintable)"); + break; + } + + switch (value->type) { + case SR_UNKNOWN_T: + case SR_CONTAINER_T: + case SR_CONTAINER_PRESENCE_T: + case SR_LIST_T: + case SR_LEAF_EMPTY_T: + break; + + default: + log_add(1, "%s", value->dflt ? " [default]" : ""); + break; + } +} + +void debug_print_sr_change(sr_change_oper_t op, sr_val_t *old_val, sr_val_t *new_val) { + switch (op) { + case SR_OP_CREATED: + log_add_verbose(1, "CREATED: "); + debug_print_sr_val(new_val); + break; + case SR_OP_DELETED: + log_add_verbose(1, "DELETED: "); + debug_print_sr_val(old_val); + break; + case SR_OP_MODIFIED: + log_add_verbose(1, "MODIFIED: "); + debug_print_sr_val(old_val); + log_add(1, "to "); + debug_print_sr_val(new_val); + break; + case SR_OP_MOVED: + log_add_verbose(1, "MOVED: %s\n", new_val->xpath); + break; + } + + log_add(1, "\n"); +} + +void debug_print_lyd_value(struct lyd_node *node) { + switch(node->schema->nodetype) { + case LYS_UNKNOWN: + case LYS_CONTAINER: + case LYS_CHOICE: + case LYS_LIST: + case LYS_ANYXML: + case LYS_CASE: + case LYS_NOTIF: + case LYS_RPC: + case LYS_INPUT: + case LYS_OUTPUT: + case LYS_GROUPING: + case LYS_USES: + case LYS_AUGMENT: + case LYS_ACTION: + case LYS_ANYDATA: + case LYS_EXT: + default: + log_add(1, "[unprintable]"); + break; + + case LYS_LEAF: + case LYS_LEAFLIST: + log_add(1, LOG_COLOR_BOLD_MAGENTA"%s"LOG_COLOR_RESET, ((struct lyd_node_leaf_list *)node)->value_str); + break; + } +} + +void debug_print_lyd_node(struct lyd_node *node) { + struct lyd_node *start = node; + struct lyd_node *elem = 0; + struct lyd_node *next = 0; + +debug_print_dfs: + LY_TREE_DFS_BEGIN(start, next, elem) { + char elemtype = ((elem->schema->flags & LYS_CONFIG_W) == 0) ? 'O' : 'R'; + + char *xpath = lyd_path(elem); + log_add_verbose(1, "[%c] %s: ", elemtype, xpath); + free(xpath); + + debug_print_lyd_value(elem); + + log_add(1, "\n"); + LY_TREE_DFS_END(start, next, elem); + } + + if(start->next) { + start = start->next; + goto debug_print_dfs; + } +} + +void debug_print_siblings(const struct lyd_node *node) { + struct lyd_node *start = (struct lyd_node *)node; + struct lyd_node *elem = 0; + + elem = start; + while(elem) { + elem = elem->prev; + + char elemtype = ((elem->schema->flags & LYS_CONFIG_W) == 0) ? 'O' : 'R'; + + log_add_verbose(1, "[%c] %s: ", elemtype, lyd_path(elem)); + + debug_print_lyd_value(elem); + + log_add(1, "\n"); + + if(elem == start) { + break; + } + } +}