X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ntsimulator%2Fsrc%2Fntsimulator-manager%2Fntsimulator-manager.c;h=b4e1a0f8d55d1c3ed329892afd52b451400eff9e;hb=226e12e7c9b504dc32fcf71f97483bb97195643d;hp=165e7bb9d1e5a49bc5248ed526d210e86b0530af;hpb=7dbf479029ba8bc528fb61a40ab2647489da28e9;p=sim%2Fo1-interface.git diff --git a/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c b/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c index 165e7bb..b4e1a0f 100644 --- a/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c +++ b/ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c @@ -284,19 +284,61 @@ simulator_config_change_cb(sr_session_ctx_t *session, const char *module_name, s sr_free_val(val); val = NULL; - /* get the value from sysrepo, we do not care if the value did not change in our case */ - rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-ip", &val); - if (rc != SR_ERR_OK) { - goto sr_error; - } + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-ip", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } - rc = ves_ip_changed(val->data.string_val); - if (rc != SR_ERR_OK) { - goto sr_error; - } + rc = ves_ip_changed(val->data.string_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } - sr_free_val(val); - val = NULL; + sr_free_val(val); + val = NULL; + + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-auth-method", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + rc = ves_auth_method_changed(val->data.enum_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + sr_free_val(val); + val = NULL; + + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-username", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + rc = ves_username_changed(val->data.string_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + sr_free_val(val); + val = NULL; + + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-password", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + rc = ves_password_changed(val->data.string_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + sr_free_val(val); + val = NULL; /* get the value from sysrepo, we do not care if the value did not change in our case */ rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-port", &val); @@ -340,69 +382,103 @@ simulator_config_change_cb(sr_session_ctx_t *session, const char *module_name, s sr_free_val(val); val = NULL; - /* get the value from sysrepo, we do not care if the value did not change in our case */ - rc = sr_get_item(session, "/network-topology-simulator:simulator-config/notification-config/is-ves-available", &val); - if (rc != SR_ERR_OK) { - goto sr_error; - } + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/notification-config/is-ves-available", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } - rc = is_ves_available_changed(val->data.bool_val); - if (rc != SR_ERR_OK) { - goto sr_error; - } + rc = is_ves_available_changed(val->data.bool_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } - sr_free_val(val); - val = NULL; + sr_free_val(val); + val = NULL; /* get the value from sysrepo, we do not care if the value did not change in our case */ - rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ssh-connections", &val); + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/netconf-call-home", &val); if (rc != SR_ERR_OK) { - printf("NTS Manager /network-topology-simulator:simulator-config/ssh-connections object not available, ignoring.."); + goto sr_error; } - else - { - rc = ssh_connections_changed(val->data.uint32_val); - if (rc != SR_ERR_OK) { - goto sr_error; - } - if (strcmp(getenv("K8S_DEPLOYMENT"), "true") == 0) - { - rc = send_k8s_extend_port(); - if (rc != SR_ERR_OK) - { - printf("Could not send the extended port to k8s cluster.\n"); - } - } + rc = netconf_call_home_changed(val->data.bool_val); + if (rc != SR_ERR_OK) { + goto sr_error; } sr_free_val(val); - val = NULL; + val = NULL; /* get the value from sysrepo, we do not care if the value did not change in our case */ - rc = sr_get_item(session, "/network-topology-simulator:simulator-config/tls-connections", &val); + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-ip", &val); if (rc != SR_ERR_OK) { - printf("NTS Manager /network-topology-simulator:simulator-config/tls-connections object not available, ignoring.."); + goto sr_error; } - else - { - rc = tls_connections_changed(val->data.uint32_val); - if (rc != SR_ERR_OK) { - goto sr_error; - } - if (strcmp(getenv("K8S_DEPLOYMENT"), "true") == 0) - { - rc = send_k8s_extend_port(); - if (rc != SR_ERR_OK) - { - printf("Could not send the extended port to k8s cluster.\n"); - } - } + rc = controller_ip_changed(val->data.string_val); + if (rc != SR_ERR_OK) { + goto sr_error; } sr_free_val(val); - val = NULL; + val = NULL; + + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-port", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + rc = controller_port_changed(val->data.uint16_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + sr_free_val(val); + val = NULL; + + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/controller-details/netconf-call-home-port", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + rc = controller_netconf_call_home_port_changed(val->data.uint16_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + sr_free_val(val); + val = NULL; + + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-username", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + rc = controller_username_changed(val->data.string_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + sr_free_val(val); + val = NULL; + + /* get the value from sysrepo, we do not care if the value did not change in our case */ + rc = sr_get_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-password", &val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + rc = controller_password_changed(val->data.string_val); + if (rc != SR_ERR_OK) { + goto sr_error; + } + + sr_free_val(val); + val = NULL; return SR_ERR_OK; @@ -444,12 +520,12 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, return SR_ERR_OK; } - rc = get_docker_containers_operational_state_curl(device_list); - if (rc != SR_ERR_OK) - { - printf("Could not get the operational state for the devices simulated.\n"); - return SR_ERR_OPERATION_FAILED; - } + rc = get_docker_containers_operational_state_curl(device_list); + if (rc != SR_ERR_OK) + { + printf("Could not get the operational state for the devices simulated.\n"); + return SR_ERR_OPERATION_FAILED; + } device_t *current_device = device_list->head; @@ -460,11 +536,14 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, if (rc != SR_ERR_OK) { printf("Could not get Notification Counters for device with uuid=\"%s\"", current_device->device_id); - } + } + + char device_name[200]; + sprintf(device_name, "%s-%d", getenv("CONTAINER_NAME"), current_device->device_number); CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, current_device->device_id, "device-ip"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, device_name, "device-ip"); v[current_num_of_values - 1].type = SR_STRING_T; v[current_num_of_values - 1].data.string_val = getenv("NTS_IP"); @@ -472,14 +551,14 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, { CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, current_device->device_id, "device-port"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, device_name, "device-port"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = current_device->netconf_port + i; } CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, current_device->device_id, "is-mounted"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, device_name, "is-mounted"); v[current_num_of_values - 1].type = SR_BOOL_T; v[current_num_of_values - 1].data.bool_val = current_device->is_mounted; @@ -487,66 +566,66 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, current_device->device_id, "operational-state"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/%s", xpath, device_name, "operational-state"); sr_val_build_str_data(&v[current_num_of_values - 1], SR_ENUM_T, "%s", operational_state); CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "normal"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, device_name, "normal"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = vesCount.normal; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "warning"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, device_name, "warning"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = vesCount.warning; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "minor"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, device_name, "minor"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = vesCount.minor; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "major"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, device_name, "major"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = vesCount.major; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, current_device->device_id, "critical"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/ves-notifications/%s", xpath, device_name, "critical"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = vesCount.critical; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "normal"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, device_name, "normal"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = netconfCount.normal; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "warning"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, device_name, "warning"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = netconfCount.warning; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "minor"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, device_name, "minor"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = netconfCount.minor; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "major"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, device_name, "major"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = netconfCount.major; CREATE_NEW_VALUE(rc, v, current_num_of_values); - sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, current_device->device_id, "critical"); + sr_val_build_xpath(&v[current_num_of_values - 1], "%s[uuid='%s']/notification-count/netconf-notifications/%s", xpath, device_name, "critical"); v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = netconfCount.critical; @@ -605,6 +684,18 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, v[current_num_of_values - 1].type = SR_UINT32_T; v[current_num_of_values - 1].data.uint32_val = (int)mem_usage; + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "ssh-connections"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = getSshConnectionsFromConfigJson(); + + CREATE_NEW_VALUE(rc, v, current_num_of_values); + + sr_val_build_xpath(&v[current_num_of_values - 1], "%s/%s", xpath, "tls-connections"); + v[current_num_of_values - 1].type = SR_UINT32_T; + v[current_num_of_values - 1].data.uint32_val = getTlsConnectionsFromConfigJson(); + //return the values that we have just created *values = v; *values_cnt = current_num_of_values; @@ -693,29 +784,70 @@ simulator_status_cb(const char *xpath, sr_val_t **values, size_t *values_cnt, return SR_ERR_OK; } -int odl_add_key_pair_cb(const char *xpath, const sr_val_t *input, const size_t input_cnt, - sr_val_t **output, size_t *output_cnt, void *private_ctx) +static int odl_add_key_pair_cb(const char *xpath, const sr_val_t *input, const size_t input_cnt, + sr_val_t **output, size_t *output_cnt, void *private_ctx) { - int rc = SR_ERR_OK; - controller_t controller_list[CONTROLLER_LIST_MAX_LEN]; - int controller_list_size = 0; + int rc = SR_ERR_OK; + controller_t controller_list[CONTROLLER_LIST_MAX_LEN]; + int controller_list_size = 0; - controller_list[0] = controller_details; - controller_list_size++; + controller_list[0] = controller_details; + controller_list_size++; - for (int i = 0; i < controller_list_size; ++i) - { - printf("%d iteration: Got back url=%s and credentials=%s\n", i, controller_list[i].url, controller_list[i].credentials); - } + for (int i = 0; i < controller_list_size; ++i) + { + printf("%d iteration: Got back url=%s and credentials=%s\n", i, controller_list[i].url, controller_list[i].credentials); + } - rc = add_key_pair_to_odl(controller_list, controller_list_size); - if (rc != SR_ERR_OK) - { - printf("Failed to add key pair to ODL.\n"); - return SR_ERR_OPERATION_FAILED; - } + rc = add_key_pair_to_odl(controller_list, controller_list_size); + if (rc != SR_ERR_OK) + { + printf("Failed to add key pair to ODL.\n"); + return SR_ERR_OPERATION_FAILED; + } - return rc; + return rc; +} + +static int invoke_notification_cb(const char *xpath, const sr_val_t *input, const size_t input_cnt, + sr_val_t **output, size_t *output_cnt, void *private_ctx) +{ + int rc = SR_ERR_OK; + + char *device_name = NULL, *module_name = NULL, *notification_object = NULL; + + /* print input values */ + printf("\n\n ========== RECEIVED RPC REQUEST ==========\n\n"); + printf(">>> RPC Input:\n\n"); + + device_name = strdup(input[0].data.string_val); + module_name = strdup(input[1].data.string_val); + notification_object = strdup(input[2].data.string_val); + + rc = sr_new_values(1, output); + if (SR_ERR_OK != rc) { + return rc; + } + + /* set 'output/step-count' leaf */ + rc = sr_val_set_xpath(&(*output)[0], "/network-topology-simulator:invoke-notification/status"); + if (SR_ERR_OK != rc) { + return rc; + } + + rc = invoke_device_notification(device_name, module_name, notification_object); + + if (rc != SR_ERR_OK) + { + sr_val_build_str_data(&(*output)[0], SR_ENUM_T, "%s", "ERROR"); + } + else + { + sr_val_build_str_data(&(*output)[0], SR_ENUM_T, "%s", "SUCCESS"); + } + *output_cnt = 1; + + return SR_ERR_OK; } @@ -883,40 +1015,107 @@ main(int argc, char **argv) goto cleanup; } - // setting the values that come in an ENV variable as defaults - ssh-connections - - int sshConnections = getIntFromString(getenv("SshConnections"), 1); + // setting the values that come in an ENV variable as defaults - ves-endpoint-auth-method value = (const sr_val_t) { 0 }; - value.type = SR_UINT32_T; - value.data.uint32_val = sshConnections; - rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ssh-connections", + value.type = SR_ENUM_T; + value.data.enum_val = getenv("VesEndpointAuthMethod"); + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-auth-method", &value, SR_EDIT_DEFAULT); if (SR_ERR_OK != rc) { printf("Error by sr_set_item: %s\n", sr_strerror(rc)); goto cleanup; } - rc = ssh_connections_changed(sshConnections); + rc = ves_auth_method_changed(getenv("VesEndpointAuthMethod")); if (SR_ERR_OK != rc) { - printf("Error by ssh_connections_changed: %s\n", sr_strerror(rc)); + printf("Error by ves_auth_method_changed: %s\n", sr_strerror(rc)); goto cleanup; } - // setting the values that come in an ENV variable as defaults - tls-connections + //TODO only basic-auth implemented vor VES + if (strcmp(getenv("VesEndpointAuthMethod"), "basic-auth") == 0) + { + // setting the values that come in an ENV variable as defaults - ves-endpoint-usename + + value = (const sr_val_t) { 0 }; + value.type = SR_STRING_T; + value.data.string_val = getenv("VesEndpointUsername"); + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-username", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } - int tlsConnections = getIntFromString(getenv("TlsConnections"), 0); + rc = ves_username_changed(getenv("VesEndpointUsername")); + if (SR_ERR_OK != rc) { + printf("Error by ves_username_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - ves-endpoint-password + + value = (const sr_val_t) { 0 }; + value.type = SR_STRING_T; + value.data.string_val = getenv("VesEndpointPassword"); + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-password", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = ves_password_changed(getenv("VesEndpointPassword")); + if (SR_ERR_OK != rc) { + printf("Error by ves_password_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + } + + // setting the values that come in an ENV variable as defaults - ves-registration + + int vesRegistration = 1; + + char *vesRegistrationString = getenv("VesRegistration"); + if (vesRegistrationString != NULL) + { + if (strcmp(vesRegistrationString, "false") == 0) + { + vesRegistration = 0; + } + } value = (const sr_val_t) { 0 }; - value.type = SR_UINT32_T; - value.data.uint32_val = tlsConnections; - rc = sr_set_item(session, "/network-topology-simulator:simulator-config/tls-connections", + value.type = SR_BOOL_T; + value.data.bool_val = vesRegistration; + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-registration", &value, SR_EDIT_DEFAULT); if (SR_ERR_OK != rc) { printf("Error by sr_set_item: %s\n", sr_strerror(rc)); goto cleanup; } + rc = ves_registration_changed(vesRegistration); + if (SR_ERR_OK != rc) { + printf("Error by ves_registration_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - ssh-connections + + int sshConnections = getIntFromString(getenv("SshConnections"), 1); + + rc = ssh_connections_changed(sshConnections); + if (SR_ERR_OK != rc) { + printf("Error by ssh_connections_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - tls-connections + + int tlsConnections = getIntFromString(getenv("TlsConnections"), 0); + rc = tls_connections_changed(tlsConnections); if (SR_ERR_OK != rc) { printf("Error by tls_connections_changed: %s\n", sr_strerror(rc)); @@ -932,6 +1131,129 @@ main(int argc, char **argv) } } + // setting the values that come in an ENV variable as defaults - controller-ip + + value = (const sr_val_t) { 0 }; + value.type = SR_STRING_T; + value.data.string_val = getenv("ControllerIp"); + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-ip", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = controller_ip_changed(getenv("ControllerIp")); + if (SR_ERR_OK != rc) { + printf("Error by controller_ip_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - controller-port + + int controllerPort = getIntFromString(getenv("ControllerPort"), 8181); + + value = (const sr_val_t) { 0 }; + value.type = SR_UINT16_T; + value.data.uint16_val = controllerPort; + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-port", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = controller_port_changed(controllerPort); + if (SR_ERR_OK != rc) { + printf("Error by controller_port_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - netconf-call-home-port + + int netconfCallHomePort = getIntFromString(getenv("NetconfCallHomePort"), 6666); + + value = (const sr_val_t) { 0 }; + value.type = SR_UINT16_T; + value.data.uint16_val = netconfCallHomePort; + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/controller-details/netconf-call-home-port", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = controller_netconf_call_home_port_changed(netconfCallHomePort); + if (SR_ERR_OK != rc) { + printf("Error by controller_netconf_call_home_port_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - controller-username + + value = (const sr_val_t) { 0 }; + value.type = SR_STRING_T; + value.data.string_val = getenv("ControllerUsername"); + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-username", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = controller_username_changed(getenv("ControllerUsername")); + if (SR_ERR_OK != rc) { + printf("Error by controller_username_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - controller-password + + value = (const sr_val_t) { 0 }; + value.type = SR_STRING_T; + value.data.string_val = getenv("ControllerPassword"); + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/controller-details/controller-password", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = controller_password_changed(getenv("ControllerPassword")); + if (SR_ERR_OK != rc) { + printf("Error by controller_password_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + + // setting the values that come in an ENV variable as defaults - netconf-call-home + + int netconfCallHome = 1; + + char *netconfCallHomeString = getenv("NetconfCallHome"); + if (netconfCallHomeString != NULL) + { + if (strcmp(netconfCallHomeString, "false") == 0) + { + netconfCallHome = 0; + } + } + + value = (const sr_val_t) { 0 }; + value.type = SR_BOOL_T; + value.data.bool_val = netconfCallHome; + rc = sr_set_item(session, "/network-topology-simulator:simulator-config/netconf-call-home", + &value, SR_EDIT_DEFAULT); + if (SR_ERR_OK != rc) { + printf("Error by sr_set_item: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = netconf_call_home_changed(netconfCallHome); + if (SR_ERR_OK != rc) { + printf("Error by netconf_call_home_changed: %s\n", sr_strerror(rc)); + goto cleanup; + } + //commit the changes that we have done until now rc = sr_commit(session); if (SR_ERR_OK != rc) { @@ -981,6 +1303,15 @@ main(int argc, char **argv) fprintf(stderr, "Could not initialize status JSON file: %s\n", sr_strerror(rc)); } + rc = sr_rpc_subscribe(session, "/network-topology-simulator:invoke-notification", invoke_notification_cb, + (void *)session, SR_SUBSCR_DEFAULT, &subscription); + if (SR_ERR_OK != rc) { + fprintf(stderr, "Error by sr_rpc_subscribe: %s\n", sr_strerror(rc)); + goto cleanup; + } + + rc = pull_docker_image_of_simulated_device(); + /* loop until ctrl-c is pressed / SIGINT is received */ signal(SIGINT, sigint_handler); signal(SIGTERM, sigint_handler);