X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ntsimulator%2Fntsim-ng%2Ffeatures%2Fves_heartbeat%2Fves_heartbeat.c;h=517269b44745565a415adf30754831a7da9214b4;hb=caec2fcb18e829420672509fe5e356b48d0c3840;hp=74f7f6293a0f906de5a8af71865cdfe692ab74fe;hpb=3bbf9d8a3c81afebcffb2b926cef219336dd53d6;p=sim%2Fo1-interface.git diff --git a/ntsimulator/ntsim-ng/features/ves_heartbeat/ves_heartbeat.c b/ntsimulator/ntsim-ng/features/ves_heartbeat/ves_heartbeat.c index 74f7f62..517269b 100644 --- a/ntsimulator/ntsim-ng/features/ves_heartbeat/ves_heartbeat.c +++ b/ntsimulator/ntsim-ng/features/ves_heartbeat/ves_heartbeat.c @@ -32,8 +32,7 @@ #include "core/session.h" #include "core/framework.h" - -#define HEARTBEAT_SCHEMA_XPATH "/nts-network-function:simulation/network-function/ves/heartbeat-period" +#include "core/xpath.h" static volatile int ves_heartbeat_period; static int ves_sequence_number; @@ -46,7 +45,7 @@ static pthread_mutex_t ves_heartbeat_lock; static int ves_heartbeat_period_get(void); static void ves_heartbeat_period_set(int new_period); -static int ves_heartbeat_send_ves_message(void); +static int ves_heartbeat_send_ves_message(int port); static void *ves_heartbeat_thread_routine(void *arg); static cJSON* ves_create_heartbeat_fields(int heartbeat_period); static int heartbeat_change_cb(sr_session_ctx_t *session, const char *module_name, const char *xpath, sr_event_t event, uint32_t request_id, void *private_data); @@ -73,7 +72,7 @@ int ves_heartbeat_feature_start(sr_session_ctx_t *current_session) { ves_heartbeat_period = 0; ves_sequence_number = 0; - int rc = sr_get_item(current_session, HEARTBEAT_SCHEMA_XPATH, 0, &value); + int rc = sr_get_item(current_session, NTS_NF_VES_HEARTBEAT_SCHEMA_XPATH, 0, &value); if(rc == SR_ERR_OK) { ves_heartbeat_period_set(value->data.uint16_val); sr_free_val(value); @@ -82,7 +81,7 @@ int ves_heartbeat_feature_start(sr_session_ctx_t *current_session) { log_error("sr_get_item failed\n"); } - rc = sr_module_change_subscribe(current_session, "nts-network-function", HEARTBEAT_SCHEMA_XPATH, heartbeat_change_cb, NULL, 0, SR_SUBSCR_CTX_REUSE, &ves_heartbeat_subscription); + rc = sr_module_change_subscribe(current_session, NTS_NETWORK_FUNCTION_MODULE, NTS_NF_VES_HEARTBEAT_SCHEMA_XPATH, heartbeat_change_cb, NULL, 0, SR_SUBSCR_CTX_REUSE, &ves_heartbeat_subscription); if(rc != SR_ERR_OK) { log_error("could not subscribe to heartbeat\n"); return NTS_ERR_FAILED; @@ -132,7 +131,7 @@ static void ves_heartbeat_period_set(int new_period) { pthread_mutex_unlock(&ves_heartbeat_lock); } -static int ves_heartbeat_send_ves_message(void) { +static int ves_heartbeat_send_ves_message(int port) { char *hostname_string = framework_environment.settings.hostname; cJSON *post_data_json = cJSON_CreateObject(); if(post_data_json == 0) { @@ -153,7 +152,7 @@ static int ves_heartbeat_send_ves_message(void) { return NTS_ERR_FAILED; } - cJSON *common_event_header = ves_create_common_event_header("heartbeat", "Controller", hostname_string, "Low", ves_sequence_number++); + cJSON *common_event_header = ves_create_common_event_header("heartbeat", "Controller", hostname_string, port, "Low", ves_sequence_number++); if(common_event_header == 0) { log_error("ves_create_common_event_header failed\n"); cJSON_Delete(post_data_json); @@ -186,7 +185,7 @@ static int ves_heartbeat_send_ves_message(void) { return NTS_ERR_FAILED; } - ves_details_t *ves_details = ves_endpoint_details_get(0); + ves_details_t *ves_details = ves_endpoint_details_get(0, 0); if(!ves_details) { log_error("ves_endpoint_details_get failed\n"); free(post_data); @@ -206,9 +205,30 @@ static int ves_heartbeat_send_ves_message(void) { } static void *ves_heartbeat_thread_routine(void *arg) { + assert_session(); + int current_heartbeat_period = 0; unsigned int timer_counter = 0; + int ssh_base_port = 0; + int tls_base_port = 0; + nts_mount_point_addressing_method_t mp = nts_mount_point_addressing_method_get(0); + if(mp == UNKNOWN_MAPPING) { + log_error("mount-point-addressing-method failed, assuming DOCKER_MAPPING\n"); + mp = DOCKER_MAPPING; + ssh_base_port = STANDARD_NETCONF_PORT; + tls_base_port = ssh_base_port + framework_environment.settings.ssh_connections; + } + else if(mp == DOCKER_MAPPING) { + ssh_base_port = STANDARD_NETCONF_PORT; + tls_base_port = ssh_base_port + framework_environment.settings.ssh_connections; + } + else { + ssh_base_port = framework_environment.host.ssh_base_port; + tls_base_port = framework_environment.host.tls_base_port; + } + + while((!framework_sigint) && (!ves_heartbeat_stopsig)) { current_heartbeat_period = ves_heartbeat_period_get(); timer_counter++; @@ -216,10 +236,28 @@ static void *ves_heartbeat_thread_routine(void *arg) { if((timer_counter >= current_heartbeat_period) && (current_heartbeat_period > 0)) { timer_counter = 0; - int rc = ves_heartbeat_send_ves_message(); - if(rc != NTS_ERR_FAILED) { - log_error("could not send VES heartbeat\n"); + if((framework_environment.settings.ssh_connections + framework_environment.settings.tls_connections) > 1) { + for(int port = ssh_base_port; port < ssh_base_port + framework_environment.settings.ssh_connections; port++) { + int rc = ves_heartbeat_send_ves_message(port); + if(rc != NTS_ERR_FAILED) { + log_error("could not send VES heartbeat\n"); + } + } + + for(int port = tls_base_port; port < tls_base_port + framework_environment.settings.tls_connections; port++) { + int rc = ves_heartbeat_send_ves_message(port); + if(rc != NTS_ERR_FAILED) { + log_error("could not send VES heartbeat\n"); + } + } + } + else { + int rc = ves_heartbeat_send_ves_message(0); + if(rc != NTS_ERR_FAILED) { + log_error("could not send VES heartbeat\n"); + } } + } sleep(1); @@ -287,7 +325,7 @@ static int heartbeat_change_cb(sr_session_ctx_t *session, const char *module_nam sr_val_t *new_value = 0; if(event == SR_EV_DONE) { - rc = sr_get_changes_iter(session, HEARTBEAT_SCHEMA_XPATH, &it); + rc = sr_get_changes_iter(session, NTS_NF_VES_HEARTBEAT_SCHEMA_XPATH, &it); if(rc != SR_ERR_OK) { log_error("sr_get_changes_iter failed\n"); return SR_ERR_VALIDATION_FAILED;