/** * Disconnects the application from the network element. * * @param [in,out] ne Address to the onep_network_element_t pointer to be destroyed. * @param [in,out] session_handle Address to the onep_session_handle_t pointer * to be destroyed as returned from * onep_element_connect(). */ void disconnect_network_element (onep_network_element_t **ne, onep_session_handle_t **session_handle) { onep_network_application_t* myapp = NULL; onep_status_t rc; if ((ne) && (*ne)) { /* Done with Network Element, disconnect it. */ rc = onep_element_disconnect(*ne); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to disconnect network element:" " errocode = %d, errormsg = %s", rc, onep_strerror(rc)); } /* Free the network element resource on presentation. */ rc = onep_element_destroy(ne); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to destroy network element:" " errocode = %d, errormsg = %s", rc, onep_strerror(rc)); } } /* Free the onePK resource on presentation. */ if (session_handle && *session_handle) { rc = onep_session_handle_destroy(session_handle); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to destroy session handle:" " errocode = %d, errormsg = %s", rc, onep_strerror(rc)); } } /* Gets the singleton instance of onep_network_application_t. */ rc = onep_application_get_instance(&myapp); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to get the instance of the application:" " errocode = %d, errormsg = %s", rc, onep_strerror(rc)); } if (myapp) { /* Destroys the onep_network_application_t and frees its memory resource. */ rc = onep_application_destroy(&myapp); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to destroy application:" " errocode = %d, errormsg = %s", rc, onep_strerror(rc)); } } }
int changeRouterConfig(char* element_hostname) { int ec = EXIT_SUCCESS; onep_status_t rc = ONEP_OK; onep_network_application_t *nwapp = NULL; onep_network_element_t *ne = NULL; onep_session_handle_t *sh = NULL; onep_element_property_t *property = NULL; char *hostname = NULL; onep_session_config_t* config = NULL; rc = onep_application_get_instance(&nwapp); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to get network application: " "errorcode = %d, errormsg = %s\n\n", rc, onep_strerror(rc)); ec = EXIT_FAILURE; goto cleanup; } rc = onep_application_set_name(nwapp, appname); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to set application name: " "errorcode = %d, errormsg = %s\n\n", rc, onep_strerror(rc)); } rc = onep_application_get_network_element_by_name(nwapp, element_hostname, &ne); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to get network element: " "errorcode = %d, errormsg = %s\n\n", rc, onep_strerror(rc)); ec = EXIT_FAILURE; goto cleanup; } printf("Connecting with onep transport type TLS. \n"); rc = onep_session_config_new(ONEP_SESSION_TLS, &config); if (ONEP_OK != rc) { fprintf(stderr, "\nFailed to get config: " "errorcode = %d, errormsg = %s", rc, onep_strerror(rc)); (void)onep_session_config_destroy(&config); return rc; } rc = onep_session_config_set_port(config, 15002); if (ONEP_OK != rc) { fprintf(stderr, "\nFailed to set port: " "errorcode = %d, errormsg = %s", rc, onep_strerror(rc)); (void)onep_session_config_destroy(&config); return rc; } rc = onep_session_config_set_tls( config, /* Pointer to onep_session_config_t */ app_cert, /* Client certificate file path */ app_private_key, /* Client private key file path */ app_private_key_password, /* SSL certificate passcode */ network_element_root_cert); /* Root certificate file path */ if (ONEP_OK != rc) { fprintf(stderr, "\nFailed to set TLS: errorcode = %d, errormsg = %s", rc, onep_strerror(rc)); if (config) (void)onep_session_config_destroy(&config); goto disconnect; return rc; } rc = onep_element_connect(ne, username, password, config, &sh); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to connect to network element: " "errorcode = %d, errormsg = %s\n\n", rc, onep_strerror(rc)); ec = EXIT_FAILURE; goto cleanup; } rc = onep_element_get_property(ne, &property); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to get element property: " "errorcode = %d, errormsg = %s\n\n", rc, onep_strerror(rc)); ec = EXIT_FAILURE; goto disconnect; } rc = onep_element_property_get_sys_name(property, &hostname); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to get system name: " "errorcode = %d, errormsg = %s\n\n", rc, onep_strerror(rc)); ec = EXIT_FAILURE; goto disconnect; } onep_vty_t *vty = NULL; uint32_t timeout; char *response = NULL; rc = onep_vty_new(ne, &vty); if (rc != ONEP_OK) { printf("\nFailed to get vty instance: %d %s", rc, onep_strerror(rc)); return EXIT_FAILURE; } rc = onep_vty_open(vty); if (rc != ONEP_OK) { printf("\nFailed to open vty to Network Element: %d %s", rc, onep_strerror(rc)); return EXIT_FAILURE; } rc = onep_vty_get_timeout(vty, &timeout); if (rc != ONEP_OK) { printf("\nFailed to get timeout of vty to Network Element: %d %s", rc, onep_strerror(rc)); return EXIT_FAILURE; } /* Test command char *showCommand = "show access-list DENYACCESS"; printf("\nWriting a command VTY to the Network Element ... \"%s\"\n", showCommand); rc = onep_vty_write(vty, showCommand, &response); if (rc != ONEP_OK) { printf("\nFailed to get response for first from vty: %d %s", rc, onep_strerror(rc)); return EXIT_FAILURE; } //printf("\n\nResponse for %s is - %s", showCommand, response); */ char command[1000] = ""; if ((strncmp(allow, "a", strlen(allow)) == 0) || (strncmp(allow, "A", strlen(allow)) == 0)) sprintf(command, "configure terminal \r \n ip access-list standard DENYACCESS \r\n no permit %s \r\n end \r\n", ipMask); else sprintf(command, "configure terminal \r \n ip access-list standard DENYACCESS \r\n permit %s \r\n end \r\n", ipMask); //printf("\n\ncommand is - %s\n", command); printf("\nWriting a command VTY to the Network Element ... \"%s\"\n", command); rc = onep_vty_write(vty, command, &response); if (rc != ONEP_OK) { printf("\nFailed to get response for first from vty: %d %s", rc, onep_strerror(rc)); return EXIT_FAILURE; } printf("\n\nResponse for %s is - %s", command, response); printf("\n Save config changes \n"); rc = onep_vty_write(vty, "write memory", &response); if (rc != ONEP_OK) { printf("\nFailed to get response for first from vty: %d %s", rc, onep_strerror(rc)); return EXIT_FAILURE; } if (hostname) free(hostname); disconnect: rc = onep_element_disconnect(ne); if (rc != ONEP_OK) { fprintf(stderr, "\nFailed to disconnect from network element: " "errorcode = %d, errormsg = %s\n\n", rc, onep_strerror(rc)); ec = EXIT_FAILURE; goto cleanup; } cleanup: if (property) (void)onep_element_property_destroy(&property); if (sh) (void)onep_session_handle_destroy(&sh); if (ne) (void)onep_element_destroy(&ne); if (nwapp) (void)onep_application_destroy(&nwapp); return ec; }