Add sub-modules to ietf-netconf-monitoring.
[sim/o1-interface.git] / ntsimulator / ntsim-ng / core / app / manager.c
index 60b8006..4881661 100644 (file)
@@ -37,6 +37,8 @@
 #define NTS_SDN_CONTROLLER_CONFIG_XPATH             "/nts-manager:simulation/sdn-controller"
 #define NTS_VES_ENDPOINT_CONFIG_XPATH               "/nts-manager:simulation/ves-endpoint"
 
+#define NTS_NETWORK_FUNCTION_FTYPE_SCHEMA_XPATH     "/nts-network-function:simulation/network-function/function-type"
+
 static manager_network_function_type *manager_context = 0;
 static int manager_installed_function_types_count = 0;
 
@@ -84,8 +86,8 @@ int manager_run(void) {
         manager_context[i].mounted_instances = 0;
         manager_context[i].mount_point_addressing_method = strdup("docker-mapping");
         manager_context[i].docker_instance_name = strdup(manager_context[i].function_type->name);
-        manager_context[i].docker_version_tag = strdup("");
-        manager_context[i].docker_repository = strdup("");
+        manager_context[i].docker_version_tag = strdup("latest");
+        manager_context[i].docker_repository = strdup("local");
     }
     free(found);
 
@@ -230,10 +232,12 @@ static int manager_populate_sysrepo_network_function_list(void) {
     char int_to_str[30];
 
     //setup sdn-controller defaults
-    rc = sr_set_item_str(session_running, NTS_SDN_CONTROLLER_CONFIG_XPATH"/controller-ip", (const char*)framework_environment.sdn_controller_ip, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.sdn_controller_ip)) {
+        rc = sr_set_item_str(session_running, NTS_SDN_CONTROLLER_CONFIG_XPATH"/controller-ip", (const char*)framework_environment.sdn_controller_ip, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
     sprintf(int_to_str, "%d", framework_environment.sdn_controller_port);
@@ -250,29 +254,37 @@ static int manager_populate_sysrepo_network_function_list(void) {
         return NTS_ERR_FAILED;
     }
 
-    rc = sr_set_item_str(session_running, NTS_SDN_CONTROLLER_CONFIG_XPATH"/controller-username", (const char*)framework_environment.sdn_controller_username, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.sdn_controller_username)) {
+        rc = sr_set_item_str(session_running, NTS_SDN_CONTROLLER_CONFIG_XPATH"/controller-username", (const char*)framework_environment.sdn_controller_username, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
-    rc = sr_set_item_str(session_running, NTS_SDN_CONTROLLER_CONFIG_XPATH"/controller-password", (const char*)framework_environment.sdn_controller_password, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.sdn_controller_password)) {
+        rc = sr_set_item_str(session_running, NTS_SDN_CONTROLLER_CONFIG_XPATH"/controller-password", (const char*)framework_environment.sdn_controller_password, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
     //setup ves-endpoint details
-    rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-protocol", (const char*)framework_environment.ves_endpoint_protocol, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.ves_endpoint_protocol)) {
+        rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-protocol", (const char*)framework_environment.ves_endpoint_protocol, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
-    rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-ip", (const char*)framework_environment.ves_endpoint_ip, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.ves_endpoint_ip)) {
+        rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-ip", (const char*)framework_environment.ves_endpoint_ip, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
     sprintf(int_to_str, "%d", framework_environment.ves_endpoint_port);
@@ -282,34 +294,49 @@ static int manager_populate_sysrepo_network_function_list(void) {
         return NTS_ERR_FAILED;
     }
 
-    rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-auth-method", (const char*)framework_environment.ves_endpoint_auth_method, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.ves_endpoint_auth_method)) {
+        rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-auth-method", (const char*)framework_environment.ves_endpoint_auth_method, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
-    rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-username", (const char*)framework_environment.ves_endpoint_username, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.ves_endpoint_username)) {
+        rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-username", (const char*)framework_environment.ves_endpoint_username, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
-    rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-password", (const char*)framework_environment.ves_endpoint_password, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+    if(strlen(framework_environment.ves_endpoint_password)) {
+        rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-password", (const char*)framework_environment.ves_endpoint_password, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
+    }
+
+    if(strlen(framework_environment.ves_endpoint_certificate)) {
+        rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-certificate", (const char*)framework_environment.ves_endpoint_certificate, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed");
+            return NTS_ERR_FAILED;
+        }
     }
 
-    rc = sr_set_item_str(session_running, NTS_VES_ENDPOINT_CONFIG_XPATH"/ves-endpoint-certificate", (const char*)framework_environment.ves_endpoint_certificate, 0, 0);
+    rc = sr_set_item_str(session_running, NTS_NETWORK_FUNCTION_FTYPE_SCHEMA_XPATH, "NTS_FUNCTION_TYPE_MANAGER", 0, 0);
     if(rc != SR_ERR_OK) {
         log_error("sr_set_item_str failed");
         return NTS_ERR_FAILED;
     }
 
+
     //apply all changes
     rc = sr_apply_changes(session_running, 0, 0);
     if(rc != SR_ERR_OK) {
-        log_error("sr_apply_changes failed");
+        log_error("sr_apply_changes failed: %s", sr_strerror(rc));
         return NTS_ERR_FAILED;
     }
 
@@ -372,7 +399,7 @@ static int manager_process_change(int context_index, manager_network_function_ty
     int rc = 0;
 
     current_context->data_changed |= new_context->data_changed;
-    
+
     //process changes, and update data in current_context to resemble new_context
     if(new_context->docker_instance_name != 0) {
         free(current_context->docker_instance_name);
@@ -403,6 +430,7 @@ static int manager_process_change(int context_index, manager_network_function_ty
                 if(rc != NTS_ERR_OK) {
                     log_error("manager_stop_instance failed");
                     return NTS_ERR_FAILED;
+                    break;
                 }
             }
         }
@@ -414,6 +442,7 @@ static int manager_process_change(int context_index, manager_network_function_ty
                 if(rc != NTS_ERR_OK) {
                     log_error("manager_start_instance failed");
                     return NTS_ERR_FAILED;
+                    break;
                 }
             }
         }
@@ -427,7 +456,7 @@ static int manager_process_change(int context_index, manager_network_function_ty
                 rc = manager_unmount_instance(current_context);
                 if(rc != NTS_ERR_OK) {
                     log_error("manager_unmount_instance failed");
-                    return NTS_ERR_FAILED;
+                    break;
                 }
             }
         }
@@ -438,7 +467,7 @@ static int manager_process_change(int context_index, manager_network_function_ty
                 rc = manager_mount_instance(current_context);
                 if(rc != NTS_ERR_OK) {
                     log_error("manager_mount_instance failed");
-                    return NTS_ERR_FAILED;
+                    break;
                 }
             }
         }
@@ -596,6 +625,7 @@ static int manager_instances_get_items_cb(sr_session_ctx_t *session, const char
 
     *parent = lyd_new_path(NULL, sr_get_context(sr_session_get_connection(session)), NTS_FUNCTION_LIST_SCHEMA_XPATH, 0, 0, 0);
     if(*parent == 0) {
+        log_error("lyd_new_path failed");
         return SR_ERR_OPERATION_FAILED;
     }
 
@@ -610,12 +640,14 @@ static int manager_instances_get_items_cb(sr_session_ctx_t *session, const char
 
             asprintf(&full_path, "%s/mount-point-addressing-method", instance_path);
             if(lyd_new_path(*parent, NULL, full_path, manager_context[i].instance[j].mount_point_addressing_method, 0, 0) == 0) {
+                log_error("lyd_new_path failed");
                 return SR_ERR_OPERATION_FAILED;
             }
             free(full_path);
 
             asprintf(&full_path, "%s/networking/docker-ip", instance_path);
             if(lyd_new_path(*parent, NULL, full_path, manager_context[i].instance[j].docker_ip, 0, 0) == 0) {
+                log_error("lyd_new_path failed");
                 return SR_ERR_OPERATION_FAILED;
             }
             free(full_path);
@@ -623,12 +655,14 @@ static int manager_instances_get_items_cb(sr_session_ctx_t *session, const char
             asprintf(&full_path, "%s/networking/docker-port", instance_path);
             sprintf(value, "%d", manager_context[i].instance[j].docker_port);
             if(lyd_new_path(*parent, NULL, full_path, value, 0, 0) == 0) {
+                log_error("lyd_new_path failed");
                 return SR_ERR_OPERATION_FAILED;
             }
             free(full_path);
 
             asprintf(&full_path, "%s/networking/host-ip", instance_path);
             if(lyd_new_path(*parent, NULL, full_path, manager_context[i].instance[j].host_ip, 0, 0) == 0) {
+                log_error("lyd_new_path failed");
                 return SR_ERR_OPERATION_FAILED;
             }
             free(full_path);
@@ -636,6 +670,7 @@ static int manager_instances_get_items_cb(sr_session_ctx_t *session, const char
             asprintf(&full_path, "%s/networking/host-port", instance_path);
             sprintf(value, "%d", manager_context[i].instance[j].host_port);
             if(lyd_new_path(*parent, NULL, full_path, value, 0, 0) == 0) {
+                log_error("lyd_new_path failed");
                 return SR_ERR_OPERATION_FAILED;
             }
             free(full_path);
@@ -649,7 +684,6 @@ static int manager_instances_get_items_cb(sr_session_ctx_t *session, const char
 }
 
 static int manager_stats_get_items_cb(sr_session_ctx_t *session, const char *module_name, const char *xpath, const char *request_xpath, uint32_t request_id, struct lyd_node **parent, void *private_data) {
-    
     char value[128];
 
     *parent = lyd_new_path(NULL, sr_get_context(sr_session_get_connection(session)), NTS_SIMULATION_SCHEMA_XPATH, 0, 0, 0);
@@ -669,5 +703,21 @@ static int manager_stats_get_items_cb(sr_session_ctx_t *session, const char *mod
         return SR_ERR_OPERATION_FAILED;
     }
 
+    //setup sdn-controller defaults
+    sprintf(value, "%d", framework_environment.host_base_port);
+    if(lyd_new_path(*parent, NULL, NTS_SIMULATION_SCHEMA_XPATH"/base-port", value, 0, 0) == 0) {
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    sprintf(value, "%d", framework_environment.ssh_connections);
+    if(lyd_new_path(*parent, NULL, NTS_SIMULATION_SCHEMA_XPATH"/ssh-connections", value, 0, 0) == 0) {
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    sprintf(value, "%d", framework_environment.tls_connections);
+    if(lyd_new_path(*parent, NULL, NTS_SIMULATION_SCHEMA_XPATH"/tls-connections", value, 0, 0) == 0) {
+        return SR_ERR_OPERATION_FAILED;
+    }
+
     return SR_ERR_OK;
 }