This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgHarald Welte has submitted this change and it was merged.
Change subject: vty XML export: avoid repeating common node commands for each node
......................................................................
vty XML export: avoid repeating common node commands for each node
We use 'show online-help' to generate VTY reference manuals. It is not helpful
to include the common node commands on each and every node level, it clutters
the actual useful help.
Have a separate first section called 'Common Commands', but omit them
elsewhere.
Change-Id: Ie802eccad80887968b10269ff9c0e9797268e0d4
---
M src/vty/command.c
1 file changed, 45 insertions(+), 0 deletions(-)
Approvals:
Harald Welte: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/src/vty/command.c b/src/vty/command.c
index 5f7a42c..e5efad2 100644
--- a/src/vty/command.c
+++ b/src/vty/command.c
@@ -645,6 +645,8 @@
return 0;
}
+static bool vty_command_is_common(struct cmd_element *cmd);
+
/*
* Dump all nodes and commands associated with a given node as XML to the VTY.
*/
@@ -654,6 +656,29 @@
int same_name_count;
vty_out(vty, "<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>%s", VTY_NEWLINE);
+
+ /* Only once, list all common node commands. Use the CONFIG node to find common node commands. */
+ vty_out(vty, " <node id='_common_cmds_'>%s", VTY_NEWLINE);
+ vty_out(vty, " <name>Common Commands</name>%s", VTY_NEWLINE);
+ vty_out(vty, " <description>These commands are available on all VTY nodes. They are listed"
+ " here only once, to unclutter the VTY reference.</description>%s", VTY_NEWLINE);
+ for (i = 0; i < vector_active(cmdvec); ++i) {
+ struct cmd_node *cnode;
+ cnode = vector_slot(cmdvec, i);
+ if (!cnode)
+ continue;
+ if (cnode->node != CONFIG_NODE)
+ continue;
+
+ for (j = 0; j < vector_active(cnode->cmd_vector); ++j) {
+ struct cmd_element *elem;
+ elem = vector_slot(cnode->cmd_vector, j);
+ if (!vty_command_is_common(elem))
+ continue;
+ vty_dump_element(elem, vty);
+ }
+ }
+ vty_out(vty, " </node>%s", VTY_NEWLINE);
for (i = 0; i < vector_active(cmdvec); ++i) {
struct cmd_node *cnode;
@@ -682,6 +707,8 @@
for (j = 0; j < vector_active(cnode->cmd_vector); ++j) {
struct cmd_element *elem;
elem = vector_slot(cnode->cmd_vector, j);
+ if (vty_command_is_common(elem))
+ continue;
vty_dump_element(elem, vty);
}
@@ -3648,6 +3675,24 @@
}
}
+/*! Return true if a node is installed by install_basic_node_commands(), so
+ * that we can avoid repeating them for each and every node during 'show
+ * running-config' */
+static bool vty_command_is_common(struct cmd_element *cmd)
+{
+ if (cmd == &config_help_cmd
+ || cmd == &config_list_cmd
+ || cmd == &config_write_terminal_cmd
+ || cmd == &config_write_file_cmd
+ || cmd == &config_write_memory_cmd
+ || cmd == &config_write_cmd
+ || cmd == &show_running_config_cmd
+ || cmd == &config_exit_cmd
+ || cmd == &config_end_cmd)
+ return true;
+ return false;
+}
+
/**
* Write the current running config to a given file
* \param[in] vty the vty of the code
--
To view, visit https://gerrit.osmocom.org/5246
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie802eccad80887968b10269ff9c0e9797268e0d4
Gerrit-PatchSet: 2
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder