aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-10-05 01:30:23 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-10-07 04:01:48 +0700
commit44c4d17d4082da7a84b5390046b305dad7d5347c (patch)
tree8c9fdba74ff8971550e8993326df2ba4947fd2f3
parente566bddaff55548b9c8ecddd9adece90451c4e58 (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
-rw-r--r--src/vty/command.c97
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);