X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ntsimulator%2Fntsim-ng%2Fmain.c;fp=ntsimulator%2Fntsim-ng%2Fmain.c;h=e967d7e7a9a4073e414b3f58d47d055cba40d084;hb=f1d5c9198acde7a7ce296490087cad37e008f688;hp=0000000000000000000000000000000000000000;hpb=f2d8f1002fa93848c80a88e5658db4816cba3020;p=sim%2Fo1-interface.git diff --git a/ntsimulator/ntsim-ng/main.c b/ntsimulator/ntsim-ng/main.c new file mode 100644 index 0000000..e967d7e --- /dev/null +++ b/ntsimulator/ntsim-ng/main.c @@ -0,0 +1,205 @@ +/************************************************************************* +* +* Copyright 2020 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 +#include +#include +#include + +#include "utils/log_utils.h" +#include "utils/nc_client.h" + +#include "core/framework.h" +#include "core/docker.h" +#include "core/session.h" +#include "core/context.h" +#include "core/test.h" +#include "core/nc_config.h" + +#include "core/app/manager.h" +#include "core/app/network_function.h" +#include "core/datastore/schema.h" +#include "core/datastore/populate.h" +#include "core/faults/faults.h" + +#include "features/ves_pnf_registration/ves_pnf_registration.h" +#include "features/ves_heartbeat/ves_heartbeat.h" +#include "features/ves_file_ready/ves_file_ready.h" +#include "features/manual_notification/manual_notification.h" +#include "features/netconf_call_home/netconf_call_home.h" + +int main(int argc, char **argv) { + int return_code = EXIT_SUCCESS; + + framework_init(argc, argv); + + if(framework_arguments.container_init) { + if(!docker_container_init()) { + log_error("docker_container_init() failed"); + return_code = EXIT_FAILURE; + } + + framework_free(); + return return_code; + } + else { //not in container-init mode + sr_log_stderr(SR_LL_NONE); + + int rc; + rc = session_init(); + if(rc != 0) { + log_error("session_init() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + + rc = context_init(session_context); + if(rc != 0) { + log_error("context_init() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + + nc_client_init(); + + if(framework_arguments.nc_server_init) { + //configure local netconf server + rc = netconf_configure(); + if(rc != 0) { + log_error("netconf_configure() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + + if(framework_arguments.manager) { + //run in manager mode + if(manager_run() != NTS_ERR_OK) { + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + else if(framework_arguments.network_function) { + //run in network function mode + if(network_function_run() != NTS_ERR_OK) { + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + else { + if(framework_arguments.test_mode) { + if(test_mode_run() != NTS_ERR_OK) { + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + else if(framework_arguments.exhaustive_test) { + //exhaustive test + if(exhaustive_test_run() != NTS_ERR_OK) { + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + + if(framework_arguments.print_root_paths) { + //print all root paths with their attributes + if(schema_print_root_paths() != NTS_ERR_OK) { + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + + if(framework_arguments.print_structure_xpath != 0) { + //print the associated structure + if(schema_print_xpath(framework_arguments.print_structure_xpath) != NTS_ERR_OK) { + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + + if(framework_arguments.populate_all) { + // populate all + if(schema_populate() != NTS_ERR_OK) { + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + + if(framework_arguments.enable_features) { + // check if PNF registration is enabled and send PNF registration message if so + rc = ves_pnf_registration_feature_start(session_running); + if(rc != 0) { + log_error("ves_pnf_registration_feature_start() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + + // start feature for handling the heartbeat VES message + rc = ves_heartbeat_feature_start(session_running); + if(rc != 0) { + log_error("ves_heartbeat_feature_start() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + + // start feature for handling the fileReady VES message + rc = ves_file_ready_feature_start(session_running); + if(rc != 0) { + log_error("ves_file_ready_feature_start() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + + // start feature for manual notification + rc = manual_notification_feature_start(session_running); + if(rc != 0) { + log_error("manual_notification_feature_start() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + + // start feature for NETCONF Call Home + rc = netconf_call_home_feature_start(session_running); + if(rc != 0) { + log_error("netconf_call_home_feature_start() failed"); + return_code = EXIT_FAILURE; + goto non_container_init_cleanup; + } + } + + if(framework_arguments.loop) { + while(!framework_sigint) { + sleep(1); + } + } + } + + non_container_init_cleanup: + log_message(1, LOG_COLOR_BOLD_RED"\nstopping now...\n"LOG_COLOR_RESET); + + nc_client_destroy(); + context_free(); + session_free(); + framework_free(); + + return return_code; + } + + return EXIT_FAILURE; +}