Add VES stndDefined PM and subscription for O-DU.
[sim/o1-interface.git] / ntsimulator / ntsim-ng / utils / debug_utils.c
diff --git a/ntsimulator/ntsim-ng/utils/debug_utils.c b/ntsimulator/ntsim-ng/utils/debug_utils.c
new file mode 100644 (file)
index 0000000..e8f6037
--- /dev/null
@@ -0,0 +1,189 @@
+#include "debug_utils.h"
+#include "log_utils.h"
+
+#include <inttypes.h>
+
+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;
+        }
+    }
+}