+ log_add_verbose(2, "[framework] init complete\n");
+ return NTS_ERR_OK;
+}
+
+static int framework_env_init(void) {
+ log_add_verbose(2, "[framework-env] started\n");
+
+ /*
+ The following env vars are taken care of by framework_init()
+ framework_environment.nts.version
+ framework_environment.nts.build_time
+ */
+
+ framework_environment.nts.manual = getenv(ENV_VAR_NTS_MANUAL) ? true : false;
+ framework_environment.nts.function_type = getenv(ENV_VAR_NTS_FUNCTION_TYPE) ? strdup(getenv(ENV_VAR_NTS_FUNCTION_TYPE)) : strdup("");
+ framework_environment.nts.nf_standalone_start_features = getenv(ENV_VAR_NTS_NF_STANDALONE_START_FEATURES) ? strdup(getenv(ENV_VAR_NTS_NF_STANDALONE_START_FEATURES)) : strdup("");
+ framework_environment.nts.nf_mount_point_addressing_method = getenv(ENV_VAR_NTS_NF_MOUNT_POINT_ADDRESSING_METHOD) ? strdup(getenv(ENV_VAR_NTS_NF_MOUNT_POINT_ADDRESSING_METHOD)) : strdup("docker-mapping");
+
+ framework_environment.settings.docker_repository = getenv(ENV_VAR_DOCKER_REPOSITORY) ? strdup(getenv(ENV_VAR_DOCKER_REPOSITORY)) : strdup("");
+ if(strlen(framework_environment.settings.docker_repository)) {
+ if(framework_environment.settings.docker_repository[strlen(framework_environment.settings.docker_repository) - 1] == '/') {
+ framework_environment.settings.docker_repository[strlen(framework_environment.settings.docker_repository) - 1] = 0;
+ }
+ }
+ framework_environment.settings.docker_engine_version = getenv(ENV_VAR_DOCKER_ENGINE_VERSION) ? strdup(getenv(ENV_VAR_DOCKER_ENGINE_VERSION)) : strdup("1.40");
+ framework_environment.settings.hostname = getenv(ENV_VAR_HOSTNAME) ? strdup(getenv(ENV_VAR_HOSTNAME)) : strdup("localhost");
+
+ bool ip_ok = get_local_ips("eth0", &framework_environment.settings.ip_v4, &framework_environment.settings.ip_v6);
+ if(!ip_ok) {
+ log_error("[framework-env] could not get local IP addresses\n");
+ }
+
+ char *ipv6_env_var = getenv(ENV_VAR_IPV6ENABLED);
+ if(ipv6_env_var == 0) {
+ log_error("[framework-env] could not get the IPv6 Enabled env variable\n");
+ }
+ framework_environment.settings.ip_v6_enabled = (strcmp(ipv6_env_var, "true") == 0) ? true : false;
+ framework_environment.settings.ssh_connections = get_int_from_string_with_default(getenv(ENV_VAR_SSH_CONNECTIONS), 1);
+ framework_environment.settings.tls_connections = get_int_from_string_with_default(getenv(ENV_VAR_TLS_CONNECTIONS), 0);
+ framework_environment.settings.ftp_connections = 1;
+ framework_environment.settings.sftp_connections = 1;
+
+ //build version and build time are set in the begining of the function
+ framework_environment.host.ip = getenv(ENV_VAR_HOST_IP) ? strdup(getenv(ENV_VAR_HOST_IP)) : strdup("127.0.0.1");
+ framework_environment.host.base_port = get_int_from_string_with_default(getenv(ENV_VAR_HOST_BASE_PORT), 1000);
+ framework_environment.host.ssh_base_port = get_int_from_string_with_default(getenv(ENV_VAR_HOST_NETCONF_SSH_BASE_PORT), 0);
+ framework_environment.host.tls_base_port = get_int_from_string_with_default(getenv(ENV_VAR_HOST_NETCONF_TLS_BASE_PORT), 0);
+ framework_environment.host.ftp_base_port = get_int_from_string_with_default(getenv(ENV_VAR_HOST_TRANSFER_FTP_BASE_PORT), 0);
+ framework_environment.host.sftp_base_port = get_int_from_string_with_default(getenv(ENV_VAR_HOST_TRANSFER_SFTP_BASE_PORT), 0);
+
+ framework_environment.sdn_controller.protocol = getenv(ENV_VAR_SDN_CONTROLLER_IP) ? strdup(getenv(ENV_VAR_SDN_CONTROLLER_PROTOCOL)) : strdup("https");
+ framework_environment.sdn_controller.ip = getenv(ENV_VAR_SDN_CONTROLLER_IP) ? strdup(getenv(ENV_VAR_SDN_CONTROLLER_IP)) : strdup("127.0.0.1");
+ framework_environment.sdn_controller.port = get_int_from_string_with_default(getenv(ENV_VAR_SDN_CONTROLLER_PORT), 8181);
+ framework_environment.sdn_controller.callhome_ip = getenv(ENV_VAR_SDN_CONTROLLER_CALLHOME_IP) ? strdup(getenv(ENV_VAR_SDN_CONTROLLER_CALLHOME_IP)) : strdup("127.0.0.1");
+ framework_environment.sdn_controller.callhome_port = get_int_from_string_with_default(getenv(ENV_VAR_SDN_CONTROLLER_CALLHOME_PORT), 6666);
+ framework_environment.sdn_controller.username = getenv(ENV_VAR_SDN_CONTROLLER_USERNAME) ? strdup(getenv(ENV_VAR_SDN_CONTROLLER_USERNAME)) : strdup("admin");
+ framework_environment.sdn_controller.password = getenv(ENV_VAR_SDN_CONTROLLER_PASSWORD) ? strdup(getenv(ENV_VAR_SDN_CONTROLLER_PASSWORD)) : strdup("admin");
+ framework_environment.sdn_controller.port_absent = (getenv(ENV_VAR_SDN_CONTROLLER_PORT) == 0) ? true : false;
+
+ framework_environment.ves_endpoint.common_header_version = getenv(ENV_VAR_VES_COMMON_HEADER_VERSION) ? strdup(getenv(ENV_VAR_VES_COMMON_HEADER_VERSION)) : strdup("7.2");
+ framework_environment.ves_endpoint.protocol = getenv(ENV_VAR_VES_ENDPOINT_PROTOCOL) ? strdup(getenv(ENV_VAR_VES_ENDPOINT_PROTOCOL)) : strdup("https");
+ framework_environment.ves_endpoint.ip = getenv(ENV_VAR_VES_ENDPOINT_IP) ? strdup(getenv(ENV_VAR_VES_ENDPOINT_IP)) : strdup("127.0.0.1");
+ framework_environment.ves_endpoint.port = get_int_from_string_with_default(getenv(ENV_VAR_VES_ENDPOINT_PORT), 1234);
+ framework_environment.ves_endpoint.auth_method = getenv(ENV_VAR_VES_ENDPOINT_AUTH_METHOD) ? strdup(getenv(ENV_VAR_VES_ENDPOINT_AUTH_METHOD)) : strdup("no-auth");
+ framework_environment.ves_endpoint.username = getenv(ENV_VAR_VES_ENDPOINT_USERNAME) ? strdup(getenv(ENV_VAR_VES_ENDPOINT_USERNAME)) : strdup("admin");
+ framework_environment.ves_endpoint.password = getenv(ENV_VAR_VES_ENDPOINT_PASSWORD) ? strdup(getenv(ENV_VAR_VES_ENDPOINT_PASSWORD)) : strdup("admin");
+ framework_environment.ves_endpoint.certificate = getenv(ENV_VAR_VES_ENDPOINT_CERTIFICATE) ? strdup(getenv(ENV_VAR_VES_ENDPOINT_CERTIFICATE)) : strdup("");
+ framework_environment.ves_endpoint.port_absent = (getenv(ENV_VAR_VES_ENDPOINT_PORT) == 0) ? true : false;
+
+ log_add_verbose(2, "[framework-env] nts.manual = %d\n", framework_environment.nts.manual);
+ log_add_verbose(2, "[framework-env] nts.version = %s\n", framework_environment.nts.version);
+ log_add_verbose(2, "[framework-env] nts.build_time = %s\n", framework_environment.nts.build_time);
+ log_add_verbose(2, "[framework-env] nts.function_type = %s\n", framework_environment.nts.function_type);
+ log_add_verbose(2, "[framework-env] nts.nf_standalone_start_features = %s\n", framework_environment.nts.nf_standalone_start_features);
+ log_add_verbose(2, "[framework-env] nts.nf_mount_point_addressing_method = %s\n", framework_environment.nts.nf_mount_point_addressing_method);
+
+ log_add_verbose(2, "[framework-env] settings.docker_engine_version = %s\n", framework_environment.settings.docker_engine_version);
+ log_add_verbose(2, "[framework-env] settings.docker_repository = %s\n", framework_environment.settings.docker_repository);
+ log_add_verbose(2, "[framework-env] settings.hostname = %s\n", framework_environment.settings.hostname);
+ log_add_verbose(2, "[framework-env] settings.ip_v4 = %s\n", framework_environment.settings.ip_v4);
+ log_add_verbose(2, "[framework-env] settings.ip_v6 = %s\n", framework_environment.settings.ip_v6);
+ log_add_verbose(2, "[framework-env] settings.ip_v6_enabled = %s\n", framework_environment.settings.ip_v6_enabled ? "true" : "false");
+ log_add_verbose(2, "[framework-env] settings.ssh_connections = %d\n", framework_environment.settings.ssh_connections);
+ log_add_verbose(2, "[framework-env] settings.tls_connections = %d\n", framework_environment.settings.tls_connections);
+ log_add_verbose(2, "[framework-env] settings.ftp_connections = %d\n", framework_environment.settings.ftp_connections);
+ log_add_verbose(2, "[framework-env] settings.sftp_connections = %d\n", framework_environment.settings.sftp_connections);
+
+ //check ports
+ if(framework_environment.host.base_port < 1000) {
+ log_add_verbose(2, "[framework-env] host.base_port < 1000 -> disabling\n");
+ framework_environment.host.base_port = 0;
+ }
+
+ if(framework_environment.host.ssh_base_port < 1000) {
+ log_add_verbose(2, "[framework-env] host.ssh_base_port < 1000 -> using base_port\n");
+ framework_environment.host.ssh_base_port = framework_environment.host.base_port;
+ }
+
+ if(framework_environment.host.tls_base_port < 1000) {
+ log_add_verbose(2, "[framework-env] host.tls_base_port < 1000 -> using base_port\n");
+ framework_environment.host.tls_base_port = framework_environment.host.base_port;
+ }
+
+ if(framework_environment.host.ftp_base_port < 1000) {
+ log_add_verbose(2, "[framework-env] host.ftp_base_port < 1000 -> using base_port\n");
+ framework_environment.host.ftp_base_port = framework_environment.host.base_port;
+ }
+
+ if(framework_environment.host.sftp_base_port < 1000) {
+ log_add_verbose(2, "[framework-env] host.sftp_base_port < 1000 -> using base_port\n");
+ framework_environment.host.sftp_base_port = framework_environment.host.base_port;
+ }
+
+ if(framework_environment.host.base_port == 0) {
+ if(framework_environment.host.ssh_base_port == 0) {
+ log_error("[framework-env] host.ssh_base_port unknown\n");
+ return NTS_ERR_FAILED;
+ }
+
+ if(framework_environment.host.tls_base_port == 0) {
+ log_error("[framework-env] host.tls_base_port unknown\n");
+ return NTS_ERR_FAILED;
+ }
+
+ if(framework_environment.host.ftp_base_port == 0) {
+ log_error("[framework-env] host.ftp_base_port unknown\n");
+ return NTS_ERR_FAILED;
+ }
+
+ if(framework_environment.host.sftp_base_port == 0) {
+ log_error("[framework-env] host.sftp_base_port unknown\n");
+ return NTS_ERR_FAILED;
+ }
+ }
+
+ log_add_verbose(2, "[framework-env] host.ip = %s\n", framework_environment.host.ip);
+ if(framework_environment.settings.ip_v6_enabled) {
+ if(strstr(framework_environment.host.ip, ".")) {
+ log_error("[framework-env] host.ip is an invalid IP v6\n");
+ return NTS_ERR_FAILED;
+ }