Add SDN Controller and VES Collector addressing via a hostname instead of an IP.
[sim/o1-interface.git] / ntsimulator / ntsim-ng / utils / nts_utils.c
index 60fa015..49c3346 100644 (file)
 #include "utils/sys_utils.h"
 #include "core/framework.h"
 #include "core/session.h"
+#include "core/xpath.h"
 #include <stdlib.h>
 #include <stdio.h>
 #include <assert.h>
 
-#define NTS_MANAGER_SDN_CONTROLLER_CONFIG_XPATH             "/nts-manager:simulation/sdn-controller"
-#define NTS_NF_SDN_CONTROLLER_CONFIG_XPATH                  "/nts-network-function:simulation/sdn-controller"
-#define NTS_MANAGER_VES_ENDPOINT_CONFIG_XPATH               "/nts-manager:simulation/ves-endpoint"
-#define NTS_NF_VES_ENDPOINT_CONFIG_XPATH                    "/nts-network-function:simulation/ves-endpoint"
 
-#define NTS_NETWORK_FUNCTION_FTYPE_SCHEMA_XPATH             "/nts-network-function:simulation/network-function/function-type"
-#define NTS_NETWORK_FUNCTION_MPAM_SCHEMA_XPATH              "/nts-network-function:simulation/network-function/mount-point-addressing-method"
-#define NTS_NETWORK_FUNCTION_FAULT_GENERATION_SCHEMA_XPATH  "/nts-network-function:simulation/network-function/fault-generation"
-#define NTS_NETWORK_FUNCTION_NETCONF_SCHEMA_XPATH           "/nts-network-function:simulation/network-function/netconf"
-#define NTS_NETWORK_FUNCTION_VES_SCHEMA_XPATH               "/nts-network-function:simulation/network-function/ves"
-
-
-cJSON* ves_create_common_event_header(const char *domain, const char *event_type, const char *source_name, const char *priority, int seq_id) {
+cJSON* ves_create_common_event_header(const char *domain, const char *event_type, const char *hostname, int port, const char *priority, int seq_id) {
     assert(domain);
     assert(event_type);
-    assert(source_name);
+    assert(hostname);
     assert(priority);
 
     char *eventId = 0;
@@ -100,6 +90,14 @@ cJSON* ves_create_common_event_header(const char *domain, const char *event_type
         return 0;
     }
 
+    char source_name[512];
+    if(port) {
+        sprintf(source_name, "%s-%d", hostname, port);
+    }
+    else {
+        sprintf(source_name, "%s", hostname);
+    }
+
     if(cJSON_AddStringToObject(common_event_header, "reportingEntityName", source_name) == 0) {
         log_error("cJSON AddStringToObject error\n");
         cJSON_Delete(common_event_header);
@@ -180,7 +178,7 @@ nts_mount_point_addressing_method_t nts_mount_point_addressing_method_get(sr_ses
     }
 
     sr_val_t *value = 0;
-    rc = sr_get_item(session_running, NTS_NETWORK_FUNCTION_MPAM_SCHEMA_XPATH, 0, &value);
+    rc = sr_get_item(current_session, NTS_NF_NETWORK_FUNCTION_MPAM_SCHEMA_XPATH, 0, &value);
     if(rc == SR_ERR_OK) {
         if(strcmp(value->data.enum_val, "host-mapping") == 0) {
             ret = HOST_MAPPING;
@@ -221,10 +219,10 @@ ves_details_t *ves_endpoint_details_get(sr_session_ctx_t *current_session) {
     char *xpath_to_get;
 
     if(framework_arguments.nts_mode == NTS_MODE_MANAGER) {
-        xpath_to_get = "/nts-manager:simulation/ves-endpoint";
+        xpath_to_get = NTS_MANAGER_VES_ENDPOINT_CONFIG_XPATH;
     }
     else {
-        xpath_to_get = "/nts-network-function:simulation/ves-endpoint";
+        xpath_to_get = NTS_NF_VES_ENDPOINT_CONFIG_XPATH;
     }
 
     rc = sr_get_subtree(current_session, xpath_to_get, 0, &data);
@@ -295,7 +293,15 @@ ves_details_t *ves_endpoint_details_get(sr_session_ctx_t *current_session) {
         asprintf(&ret->url, "%s://[%s]:%d/eventListener/v7", ret->protocol, ret->ip, ret->port);
     }
     else {
-        asprintf(&ret->url, "%s://%s:%d/eventListener/v7", ret->protocol, ret->ip, ret->port);
+        if (framework_environment.ves_endpoint.port_absent == true) {
+            // hostname addressing with port missing
+            asprintf(&ret->url, "%s://%s/eventListener/v7", ret->protocol, ret->ip);
+        }
+        else {
+            // normal addressing with IP and Port
+            asprintf(&ret->url, "%s://%s:%d/eventListener/v7", ret->protocol, ret->ip, ret->port);
+        }
+        
     }
     
     if((ret->protocol == 0) || (ret->ip == 0) || (ret->auth_method == 0) || (ret->username == 0) || (ret->password == 0) || (ret->url == 0)) {
@@ -344,10 +350,10 @@ controller_details_t *controller_details_get(sr_session_ctx_t *current_session)
     char *xpath_to_get;
 
     if(framework_arguments.nts_mode == NTS_MODE_MANAGER) {
-        xpath_to_get = "/nts-manager:simulation/sdn-controller";
+        xpath_to_get = NTS_MANAGER_SDN_CONTROLLER_CONFIG_XPATH;
     }
     else {
-        xpath_to_get = "/nts-network-function:simulation/sdn-controller";
+        xpath_to_get = NTS_NF_SDN_CONTROLLER_CONFIG_XPATH;
     }
 
     rc = sr_get_subtree(current_session, xpath_to_get, 0, &data);
@@ -421,7 +427,14 @@ controller_details_t *controller_details_get(sr_session_ctx_t *current_session)
         asprintf(&ret->base_url, "%s://[%s]:%d", ret->protocol, ret->ip, ret->port);
     }
     else {
-        asprintf(&ret->base_url, "%s://%s:%d", ret->protocol, ret->ip, ret->port);
+        if (framework_environment.sdn_controller.port_absent == true) {
+            // hostname without port addressing
+            asprintf(&ret->base_url, "%s://%s", ret->protocol, ret->ip);
+        }
+        else {
+            // normal IP and Port addressing
+            asprintf(&ret->base_url, "%s://%s:%d", ret->protocol, ret->ip, ret->port);
+        }
     }
 
     if((ret->protocol == 0) || (ret->ip == 0) || (ret->auth_method == 0) || (ret->username == 0) || (ret->password == 0) || (ret->base_url == 0)) {
@@ -709,19 +722,19 @@ int nts_utils_populate_info(sr_session_ctx_t *current_session, const char *funct
 
     if(manager == false) {
         //presence containers
-        rc = sr_set_item_str(current_session, NTS_NETWORK_FUNCTION_FAULT_GENERATION_SCHEMA_XPATH, 0, 0, 0);
+        rc = sr_set_item_str(current_session, NTS_NF_FAULT_GENERATION_SCHEMA_XPATH, 0, 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, NTS_NETWORK_FUNCTION_NETCONF_SCHEMA_XPATH, 0, 0, 0);
+        rc = sr_set_item_str(current_session, NTS_NF_NETCONF_SCHEMA_XPATH, 0, 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, NTS_NETWORK_FUNCTION_VES_SCHEMA_XPATH, 0, 0, 0);
+        rc = sr_set_item_str(current_session, NTS_NF_VES_SCHEMA_XPATH, 0, 0, 0);
         if(rc != SR_ERR_OK) {
             log_error("sr_set_item_str failed\n");
             return NTS_ERR_FAILED;
@@ -729,14 +742,14 @@ int nts_utils_populate_info(sr_session_ctx_t *current_session, const char *funct
     }
 
     //also set the network-function module for easy identifying the function type
-    rc = sr_set_item_str(current_session, NTS_NETWORK_FUNCTION_FTYPE_SCHEMA_XPATH, function_type, 0, 0);
+    rc = sr_set_item_str(current_session, NTS_NF_NETWORK_FUNCTION_FTYPE_SCHEMA_XPATH, function_type, 0, 0);
     if(rc != SR_ERR_OK) {
         log_error("sr_set_item_str failed\n");
         return NTS_ERR_FAILED;
     }
 
     //mount-point-addressing-method
-    rc = sr_set_item_str(current_session, NTS_NETWORK_FUNCTION_MPAM_SCHEMA_XPATH, "docker-mapping", 0, 0);
+    rc = sr_set_item_str(current_session, NTS_NF_NETWORK_FUNCTION_MPAM_SCHEMA_XPATH, framework_environment.nts.nf_mount_point_addressing_method, 0, 0);
     if(rc != SR_ERR_OK) {
         log_error("sr_set_item_str failed\n");
         return NTS_ERR_FAILED;