Add VES stndDefined PM and subscription for O-DU.
[sim/o1-interface.git] / ntsimulator / ntsim-ng / core / datastore / populate_aux.c
diff --git a/ntsimulator/ntsim-ng/core/datastore/populate_aux.c b/ntsimulator/ntsim-ng/core/datastore/populate_aux.c
new file mode 100644 (file)
index 0000000..5a33d21
--- /dev/null
@@ -0,0 +1,175 @@
+/*************************************************************************
+*
+* Copyright 2021 highstreet technologies GmbH and others
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+***************************************************************************/
+#define _GNU_SOURCE
+
+#include "populate_internal.h"
+
+#include "core/session.h"
+#include "core/framework.h"
+#include "utils/sys_utils.h"
+#include "utils/log_utils.h"
+#include "utils/type_utils.h"
+#include "utils/rand_utils.h"
+
+#include <assert.h>
+#include <stdlib.h>
+
+struct lyd_node *datastore_load_external(const char *filename, bool operational) {
+    struct lyd_node *data_tree = 0;
+    if(filename) {
+        if(file_exists(filename)) {
+            LYD_FORMAT format = LYD_JSON;
+            if(strstr(filename, ".xml") != 0) {
+                format = LYD_XML;
+            }
+
+            int flags = LYD_OPT_TRUSTED | LYD_OPT_NOSIBLINGS;
+            if(operational) {
+                flags |= LYD_OPT_DATA;
+            }
+            else {
+                flags |= LYD_OPT_CONFIG;
+            }
+
+            data_tree = lyd_parse_path(session_context, filename, format, flags);
+            if(data_tree == 0) {
+                log_error("lyd_parse_path failed\n");
+            }
+        }
+    }
+
+    return data_tree;
+}
+
+char populate_info_get_mandatory(const struct lys_node *schema) {
+    assert(schema);
+
+    char mandatory = ' ';
+    if((schema->flags & LYS_MAND_TRUE) != 0) {
+        mandatory = 'M';
+    }
+    if((schema->parent) && (schema->parent->nodetype == LYS_CASE)) {
+        if((schema->parent->flags & LYS_MAND_TRUE) != 0) {
+            mandatory = 'M';
+        }
+    }
+
+    return mandatory;
+}
+
+const char* populate_leafref_test_val(int index) {
+    switch(index) {
+        case 0:
+            return "1";
+            break;
+
+        case 1:
+            return "1.1.1.1";
+            break;
+
+        case 2:
+            return "Fd:4D:63:A5:21:C5";
+            break;
+
+        case 3:
+            return "";
+            break;
+
+        case 4:
+            return "::1";
+            break;
+
+        case 5:
+            return "false";
+            break;
+
+        case 6:
+            return "TDD";
+            break;
+
+        case 7:
+            return "NR";
+            break;
+
+        case 8:
+            return "best-effort";
+            break;
+
+        case 9:
+            return "yes-fault:o-ran-sc-alarm-type";
+            break;
+
+        case 10:
+            return "";
+            break;
+
+        default:
+            log_error("index out of bounds\n");
+            return 0;
+            break;
+    }
+}
+
+int populate_instance_add_module(populate_instance_t *instance, const struct lys_module *module) {
+    assert(module);
+    assert(instance);
+
+    for(int i = 0; i < instance->mod_count; i++) {
+        if(instance->modules[i] == module) {
+            return NTS_ERR_OK;
+        }
+    }
+
+    instance->modules = (const struct lys_module **)realloc(instance->modules, sizeof(const struct lys_module *) * (instance->mod_count + 1));
+    if(!instance->modules) {
+        log_error("bad realloc\n");
+        return NTS_ERR_FAILED;
+    }
+    instance->modules[instance->mod_count] = module;
+    instance->mod_count++;
+
+    return NTS_ERR_OK;
+}
+
+int populate_instance_get_count(const char *path) {
+    assert(path);
+
+    for(int i = 0; i < framework_config.datastore_generate.custom_list_instances_count; i++) {
+        if(strcmp(path, framework_config.datastore_generate.custom_list_instances[i].path) == 0) {
+            return framework_config.datastore_generate.custom_list_instances[i].count;
+        }
+    }
+    return framework_config.datastore_generate.default_list_instances;
+}
+
+char *populate_get_restrict_schema(const char *path) {
+    assert(path);
+    char *ret = 0;
+
+    for(int i = 0; i < framework_config.datastore_generate.restrict_schema_count; i++) {
+        if(strcmp(path, framework_config.datastore_generate.restrict_schema[i].path) == 0) {
+            ret = strdup(framework_config.datastore_generate.restrict_schema[i].values[framework_config.datastore_generate.restrict_schema[i].index]);
+            framework_config.datastore_generate.restrict_schema[i].index++;
+            if(framework_config.datastore_generate.restrict_schema[i].index >= framework_config.datastore_generate.restrict_schema[i].values_count) {
+                framework_config.datastore_generate.restrict_schema[i].index = 0;
+            }
+            break;
+        }
+    }
+
+    return ret;
+}