diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2020-10-05 01:30:23 +0700 |
---|---|---|
committer | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2020-10-07 04:01:48 +0700 |
commit | 44c4d17d4082da7a84b5390046b305dad7d5347c (patch) | |
tree | 8c9fdba74ff8971550e8993326df2ba4947fd2f3 /src/vty | |
parent | e566bddaff55548b9c8ecddd9adece90451c4e58 (diff) |
vty/command: introduce a command to list attributes
Here is an example of listing all attributes:
OsmoBSC# show vty-attributes
Global attributes:
. This command is deprecated
. This command is hidden
. This command applies immediately
. This command applies on VTY node exit
Library specific attributes:
(no attributes)
Application specific attributes:
o This command applies on A-bis OML link (re)establishment
r This command applies on A-bis RSL link (re)establishment
or only a specific kind of attributes:
OsmoBSC# show vty-attributes application
Application specific attributes:
o This command applies on A-bis OML link (re)establishment
r This command applies on A-bis RSL link (re)establishment
Change-Id: I561114d7416e30cc06b7d49c0bc1217a76039c99
Related: SYS#4937
Diffstat (limited to 'src/vty')
-rw-r--r-- | src/vty/command.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/vty/command.c b/src/vty/command.c index faad9fe5..46fe854c 100644 --- a/src/vty/command.c +++ b/src/vty/command.c @@ -2948,6 +2948,96 @@ gDEFUN(config_help, return CMD_SUCCESS; } +enum { + ATTR_TYPE_GLOBAL = (1 << 0), + ATTR_TYPE_LIB = (1 << 1), + ATTR_TYPE_APP = (1 << 2), +}; + +static void print_attr_list(struct vty *vty, unsigned int attr_mask) +{ + const char *desc; + unsigned int i; + bool found; + char flag; + + if (attr_mask & ATTR_TYPE_GLOBAL) { + vty_out(vty, " Global attributes:%s", VTY_NEWLINE); + + for (i = 0; i < ARRAY_SIZE(cmd_attr_desc) - 1; i++) { + desc = cmd_attr_desc[i].str; + flag = '.'; /* FIXME: no flags defined */ + vty_out(vty, " %c %s%s", flag, desc, VTY_NEWLINE); + } + } + + if (attr_mask & ATTR_TYPE_LIB) { + vty_out(vty, " Library specific attributes:%s", VTY_NEWLINE); + + for (i = 0, found = false; i < _OSMO_CORE_LIB_ATTR_COUNT; i++) { + if ((desc = cmd_lib_attr_desc[i]) == NULL) + continue; + found = true; + + flag = cmd_lib_attr_letters[i]; + if (flag == '\0') + flag = '.'; + + vty_out(vty, " %c %s%s", flag, desc, VTY_NEWLINE); + } + + if (!found) + vty_out(vty, " (no attributes)%s", VTY_NEWLINE); + } + + if (attr_mask & ATTR_TYPE_APP) { + vty_out(vty, " Application specific attributes:%s", VTY_NEWLINE); + + for (i = 0, found = false; i < VTY_CMD_USR_ATTR_NUM; i++) { + if ((desc = host.app_info->usr_attr_desc[i]) == NULL) + continue; + found = true; + + flag = host.app_info->usr_attr_letters[i]; + if (flag == '\0') + flag = '.'; + + vty_out(vty, " %c %s%s", flag, desc, VTY_NEWLINE); + } + + if (!found) + vty_out(vty, " (no attributes)%s", VTY_NEWLINE); + } +} + +gDEFUN(show_vty_attr_all, show_vty_attr_all_cmd, + "show vty-attributes", + SHOW_STR "List of VTY attributes\n") +{ + print_attr_list(vty, 0xff); + return CMD_SUCCESS; +} + +gDEFUN(show_vty_attr, show_vty_attr_cmd, + "show vty-attributes (application|library|global)", + SHOW_STR "List of VTY attributes\n" + "Application specific attributes only\n" + "Library specific attributes only\n" + "Global attributes only\n") +{ + unsigned int attr_mask = 0; + + if (argv[0][0] == 'g') /* global */ + attr_mask |= ATTR_TYPE_GLOBAL; + else if (argv[0][0] == 'l') /* library */ + attr_mask |= ATTR_TYPE_LIB; + else if (argv[0][0] == 'a') /* application */ + attr_mask |= ATTR_TYPE_APP; + + print_attr_list(vty, attr_mask); + return CMD_SUCCESS; +} + /* Help display function for all node. */ gDEFUN(config_list, config_list_cmd, "list", "Print command list\n") { @@ -3932,6 +4022,9 @@ static void install_basic_node_commands(int node) install_lib_element(node, &config_help_cmd); install_lib_element(node, &config_list_cmd); + install_lib_element(node, &show_vty_attr_all_cmd); + install_lib_element(node, &show_vty_attr_cmd); + install_lib_element(node, &config_write_terminal_cmd); install_lib_element(node, &config_write_file_cmd); install_lib_element(node, &config_write_memory_cmd); @@ -3952,6 +4045,8 @@ static void install_basic_node_commands(int node) static bool vty_command_is_common(struct cmd_element *cmd) { if (cmd == &config_help_cmd + || cmd == &show_vty_attr_all_cmd + || cmd == &show_vty_attr_cmd || cmd == &config_list_cmd || cmd == &config_write_terminal_cmd || cmd == &config_write_file_cmd @@ -4035,6 +4130,8 @@ void cmd_init(int terminal) install_lib_element(VIEW_NODE, &config_list_cmd); install_lib_element(VIEW_NODE, &config_exit_cmd); install_lib_element(VIEW_NODE, &config_help_cmd); + install_lib_element(VIEW_NODE, &show_vty_attr_all_cmd); + install_lib_element(VIEW_NODE, &show_vty_attr_cmd); install_lib_element(VIEW_NODE, &config_enable_cmd); install_lib_element(VIEW_NODE, &config_terminal_length_cmd); install_lib_element(VIEW_NODE, &config_terminal_no_length_cmd); |