diff --git a/openbsc/include/openbsc/vty.h b/openbsc/include/openbsc/vty.h index c6fc203fd..1b6758940 100644 --- a/openbsc/include/openbsc/vty.h +++ b/openbsc/include/openbsc/vty.h @@ -15,5 +15,6 @@ struct buffer *vty_argv_to_buffer(int argc, const char *argv[], int base); extern struct cmd_element cfg_description_cmd; extern struct cmd_element cfg_no_description_cmd; extern struct cmd_element ournode_exit_cmd; +extern struct cmd_element ournode_end_cmd; #endif diff --git a/openbsc/src/gprs/gb_proxy_vty.c b/openbsc/src/gprs/gb_proxy_vty.c index babb089db..a8501d11c 100644 --- a/openbsc/src/gprs/gb_proxy_vty.c +++ b/openbsc/src/gprs/gb_proxy_vty.c @@ -159,6 +159,7 @@ int gbproxy_vty_init(void) install_node(&gbproxy_node, config_write_gbproxy); install_default(GBPROXY_NODE); install_element(GBPROXY_NODE, &ournode_exit_cmd); + install_element(GBPROXY_NODE, &ournode_end_cmd); install_element(GBPROXY_NODE, &cfg_nsip_bss_local_ip_cmd); install_element(GBPROXY_NODE, &cfg_nsip_bss_local_port_cmd); install_element(GBPROXY_NODE, &cfg_nsip_sgsn_ip_cmd); diff --git a/openbsc/src/gprs/gprs_ns_vty.c b/openbsc/src/gprs/gprs_ns_vty.c index b18e65171..410c35f6b 100644 --- a/openbsc/src/gprs/gprs_ns_vty.c +++ b/openbsc/src/gprs/gprs_ns_vty.c @@ -283,6 +283,7 @@ int gprs_ns_vty_init(struct gprs_ns_inst *nsi) install_node(&ns_node, config_write_ns); install_default(NS_NODE); install_element(NS_NODE, &ournode_exit_cmd); + install_element(NS_NODE, &ournode_end_cmd); install_element(NS_NODE, &cfg_nse_nsvci_cmd); install_element(NS_NODE, &cfg_nse_remoteip_cmd); install_element(NS_NODE, &cfg_nse_remoteport_cmd); diff --git a/openbsc/src/gprs/sgsn_vty.c b/openbsc/src/gprs/sgsn_vty.c index 4dc62573c..d56a27904 100644 --- a/openbsc/src/gprs/sgsn_vty.c +++ b/openbsc/src/gprs/sgsn_vty.c @@ -127,6 +127,7 @@ int sgsn_vty_init(void) install_node(&sgsn_node, config_write_sgsn); install_default(SGSN_NODE); install_element(SGSN_NODE, &ournode_exit_cmd); + install_element(SGSN_NODE, &ournode_end_cmd); install_element(SGSN_NODE, &cfg_nsip_local_ip_cmd); install_element(SGSN_NODE, &cfg_nsip_local_port_cmd); diff --git a/openbsc/src/mgcp/mgcp_vty.c b/openbsc/src/mgcp/mgcp_vty.c index 6d2aff074..2804ce9b7 100644 --- a/openbsc/src/mgcp/mgcp_vty.c +++ b/openbsc/src/mgcp/mgcp_vty.c @@ -245,6 +245,7 @@ int mgcp_vty_init(void) install_node(&mgcp_node, config_write_mgcp); install_default(MGCP_NODE); install_element(MGCP_NODE, &ournode_exit_cmd); + install_element(MGCP_NODE, &ournode_end_cmd); install_element(MGCP_NODE, &cfg_mgcp_local_ip_cmd); install_element(MGCP_NODE, &cfg_mgcp_bts_ip_cmd); install_element(MGCP_NODE, &cfg_mgcp_bind_ip_cmd); diff --git a/openbsc/src/vty_interface.c b/openbsc/src/vty_interface.c index 1823132ed..89dabe3d5 100644 --- a/openbsc/src/vty_interface.c +++ b/openbsc/src/vty_interface.c @@ -1955,6 +1955,7 @@ int bsc_vty_init(struct gsm_network *net) install_node(&net_node, config_write_net); install_default(GSMNET_NODE); install_element(GSMNET_NODE, &ournode_exit_cmd); + install_element(GSMNET_NODE, &ournode_end_cmd); install_element(GSMNET_NODE, &cfg_net_ncc_cmd); install_element(GSMNET_NODE, &cfg_net_mnc_cmd); install_element(GSMNET_NODE, &cfg_net_name_short_cmd); @@ -1988,6 +1989,7 @@ int bsc_vty_init(struct gsm_network *net) install_node(&bts_node, config_write_bts); install_default(BTS_NODE); install_element(BTS_NODE, &ournode_exit_cmd); + install_element(BTS_NODE, &ournode_end_cmd); install_element(BTS_NODE, &cfg_bts_type_cmd); install_element(BTS_NODE, &cfg_description_cmd); install_element(BTS_NODE, &cfg_no_description_cmd); @@ -2026,6 +2028,7 @@ int bsc_vty_init(struct gsm_network *net) install_node(&trx_node, dummy_config_write); install_default(TRX_NODE); install_element(TRX_NODE, &ournode_exit_cmd); + install_element(TRX_NODE, &ournode_end_cmd); install_element(TRX_NODE, &cfg_trx_arfcn_cmd); install_element(TRX_NODE, &cfg_description_cmd); install_element(TRX_NODE, &cfg_no_description_cmd); @@ -2039,6 +2042,7 @@ int bsc_vty_init(struct gsm_network *net) install_node(&ts_node, dummy_config_write); install_default(TS_NODE); install_element(TS_NODE, &ournode_exit_cmd); + install_element(TS_NODE, &ournode_end_cmd); install_element(TS_NODE, &cfg_ts_pchan_cmd); install_element(TS_NODE, &cfg_ts_e1_subslot_cmd); diff --git a/openbsc/src/vty_interface_cmds.c b/openbsc/src/vty_interface_cmds.c index 134a8d3a3..a2d3258c0 100644 --- a/openbsc/src/vty_interface_cmds.c +++ b/openbsc/src/vty_interface_cmds.c @@ -120,6 +120,36 @@ gDEFUN(ournode_exit, return CMD_SUCCESS; } +/* End of configuration. */ +gDEFUN(ournode_end, + ournode_end_cmd, "end", "End current mode and change to enable mode.") +{ + switch (vty->node) { + case VIEW_NODE: + case ENABLE_NODE: + /* Nothing to do. */ + break; + case CONFIG_NODE: + case GSMNET_NODE: + case BTS_NODE: + case TRX_NODE: + case TS_NODE: + case MGCP_NODE: + case GBPROXY_NODE: + case SGSN_NODE: + case NS_NODE: + case VTY_NODE: + vty_config_unlock(vty); + vty->node = ENABLE_NODE; + vty->index = NULL; + vty->index_sub = NULL; + break; + default: + break; + } + return CMD_SUCCESS; +} + DEFUN(enable_logging, enable_logging_cmd, "logging enable",