Add supoprt for D release use-case.
[sim/o1-interface.git] / ntsimulator / ntsim-ng / features / web_cut_through / web_cut_through.c
index 8139b17..0ae406a 100644 (file)
 
 #define SYSTEM_NAME_SCHEMA_XPATH                "/ietf-system:system/onap-system:name"
 #define SYSTEM_WEB_UI_SCHEMA_XPATH              "/ietf-system:system/onap-system:web-ui"
+#define IETF_SYSTEM_CONTACT_SCHEMA_XPATH        "/ietf-system:system/contact"
+#define IETF_SYSTEM_HOSTNAME_SCHEMA_XPATH       "/ietf-system:system/hostname"
+#define IETF_SYSTEM_LOCATION_SCHEMA_XPATH       "/ietf-system:system/location"
+#define IETF_SYSTEM_TIMEZONE_NAME_SCHEMA_XPATH  "/ietf-system:system/clock/timezone-name"
+#define IETF_SYSTEM_NTP_ENABLED_SCHEMA_XPATH    "/ietf-system:system/ntp/enabled"
 
+static int web_cut_through_status = 0;
+
+int web_cut_through_feature_get_status(void) {
+    return web_cut_through_status;
+}
 
 int web_cut_through_feature_start(sr_session_ctx_t *current_session) {
     assert(current_session);
     assert_session();
 
-    int rc = 0;
+    if(web_cut_through_status == 0) {
+        //update ietf-system details
+        int rc = sr_set_item_str(current_session, SYSTEM_NAME_SCHEMA_XPATH, framework_environment.settings.hostname, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed\n");
+            return NTS_ERR_FAILED;
+        }
 
-    //update ietf-system details
-    rc = sr_set_item_str(current_session, SYSTEM_NAME_SCHEMA_XPATH, framework_environment.hostname, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
-    }
+        controller_details_t *controller_details = controller_details_get(current_session);
+        if(controller_details == 0) {
+            log_error("controller_details_get failed\n");
+            return NTS_ERR_FAILED;
+        }
 
-    controller_details_t *controller_details = controller_details_get(current_session);
-    if(controller_details == 0) {
-        log_error("controller_details_get failed");
-        return NTS_ERR_FAILED;
-    }
+        char *web_ui = 0;
+       asprintf(&web_ui, "%s/odlux/index.html#/configuration/%s", controller_details->base_url, framework_environment.settings.hostname);
+        controller_details_free(controller_details);
 
-    char *web_ui = 0;
-    asprintf(&web_ui, "%s/odlux/index.html#/about", controller_details->base_url);
-    controller_details_free(controller_details);
+        if(web_ui == 0) {
+            log_error("asprintf failed\n");
+            return NTS_ERR_FAILED;
+        }
 
-    if(web_ui == 0) {
-        log_error("asprintf failed");
-        return NTS_ERR_FAILED;
-    }
+        rc = sr_set_item_str(current_session, SYSTEM_WEB_UI_SCHEMA_XPATH, web_ui, 0, 0);
+        free(web_ui);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed\n");
+            return NTS_ERR_FAILED;
+        }
+
+        rc = sr_set_item_str(current_session, IETF_SYSTEM_CONTACT_SCHEMA_XPATH, "O-RAN-SC SIM project", 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed\n");
+            return NTS_ERR_FAILED;
+        }
+
+        rc = sr_set_item_str(current_session, IETF_SYSTEM_HOSTNAME_SCHEMA_XPATH, framework_environment.settings.hostname, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed\n");
+            return NTS_ERR_FAILED;
+        }
+
+        rc = sr_set_item_str(current_session, IETF_SYSTEM_LOCATION_SCHEMA_XPATH, "Open Wireless Lab", 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed\n");
+            return NTS_ERR_FAILED;
+        }
+
+        rc = sr_set_item_str(current_session, IETF_SYSTEM_TIMEZONE_NAME_SCHEMA_XPATH, "UTC", 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed\n");
+            return NTS_ERR_FAILED;
+        }
+
+        rc = sr_set_item_str(current_session, IETF_SYSTEM_NTP_ENABLED_SCHEMA_XPATH, "false", 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_set_item_str failed\n");
+            return NTS_ERR_FAILED;
+        }
 
-    rc = sr_set_item_str(current_session, SYSTEM_WEB_UI_SCHEMA_XPATH, web_ui, 0, 0);
-    free(web_ui);
-    if(rc != SR_ERR_OK) {
-        log_error("sr_set_item_str failed");
-        return NTS_ERR_FAILED;
+        rc = sr_apply_changes(current_session, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("could not apply changes on datastore\n");
+            return NTS_ERR_FAILED;
+        }
+
+        web_cut_through_status = 1;
     }
 
-    rc = sr_apply_changes(current_session, 0, 0);
-    if(rc != SR_ERR_OK) {
-        log_error("could not apply changes on datastore");
-        return NTS_ERR_FAILED;
+    return NTS_ERR_OK;
+}
+
+int web_cut_through_feature_stop(sr_session_ctx_t *current_session) {
+    assert(current_session);
+    assert_session();
+
+    if(web_cut_through_status) {
+        //update ietf-system details
+        int rc = sr_delete_item(current_session, SYSTEM_NAME_SCHEMA_XPATH, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_delete_item failed\n");
+            return NTS_ERR_FAILED;
+        }
+
+        rc = sr_delete_item(current_session, SYSTEM_WEB_UI_SCHEMA_XPATH, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("sr_delete_item failed\n");
+            return NTS_ERR_FAILED;
+        }
+
+        rc = sr_apply_changes(current_session, 0, 0);
+        if(rc != SR_ERR_OK) {
+            log_error("could not apply changes on datastore\n");
+            return NTS_ERR_FAILED;
+        }
+
+        web_cut_through_status = 0;
     }
 
     return NTS_ERR_OK;