summaryrefslogtreecommitdiff
path: root/lib/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/command.c')
-rw-r--r--lib/command.c79
1 files changed, 67 insertions, 12 deletions
diff --git a/lib/command.c b/lib/command.c
index 87110157f6..6a4d504b2f 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -49,6 +49,8 @@
#include "northbound_cli.h"
#include "network.h"
+#include "frrscript.h"
+
DEFINE_MTYPE_STATIC(LIB, HOST, "Host config")
DEFINE_MTYPE(LIB, COMPLETION, "Completion item")
@@ -275,7 +277,7 @@ const char *cmd_prompt(enum node_type node)
}
/* Install a command into a node. */
-void install_element(enum node_type ntype, const struct cmd_element *cmd)
+void _install_element(enum node_type ntype, const struct cmd_element *cmd)
{
struct cmd_node *cnode;
@@ -321,7 +323,7 @@ void install_element(enum node_type ntype, const struct cmd_element *cmd)
vector_set(cnode->cmd_vector, (void *)cmd);
if (ntype == VIEW_NODE)
- install_element(ENABLE_NODE, cmd);
+ _install_element(ENABLE_NODE, cmd);
}
void uninstall_element(enum node_type ntype, const struct cmd_element *cmd)
@@ -863,6 +865,30 @@ enum node_type node_parent(enum node_type node)
case BFD_PROFILE_NODE:
ret = BFD_NODE;
break;
+ case SR_TRAFFIC_ENG_NODE:
+ ret = SEGMENT_ROUTING_NODE;
+ break;
+ case SR_SEGMENT_LIST_NODE:
+ ret = SR_TRAFFIC_ENG_NODE;
+ break;
+ case SR_POLICY_NODE:
+ ret = SR_TRAFFIC_ENG_NODE;
+ break;
+ case SR_CANDIDATE_DYN_NODE:
+ ret = SR_POLICY_NODE;
+ break;
+ case PCEP_NODE:
+ ret = SR_TRAFFIC_ENG_NODE;
+ break;
+ case PCEP_PCE_CONFIG_NODE:
+ ret = PCEP_NODE;
+ break;
+ case PCEP_PCE_NODE:
+ ret = PCEP_NODE;
+ break;
+ case PCEP_PCC_NODE:
+ ret = PCEP_NODE;
+ break;
default:
ret = CONFIG_NODE;
break;
@@ -2279,6 +2305,31 @@ done:
return CMD_SUCCESS;
}
+#if defined(DEV_BUILD) && defined(HAVE_SCRIPTING)
+DEFUN(script,
+ script_cmd,
+ "script SCRIPT",
+ "Test command - execute a script\n"
+ "Script name (same as filename in /etc/frr/scripts/\n")
+{
+ struct prefix p;
+
+ (void)str2prefix("1.2.3.4/24", &p);
+
+ struct frrscript *fs = frrscript_load(argv[1]->arg, NULL);
+
+ if (fs == NULL) {
+ vty_out(vty, "Script '/etc/frr/scripts/%s.lua' not found\n",
+ argv[1]->arg);
+ } else {
+ int ret = frrscript_call(fs, NULL);
+ vty_out(vty, "Script result: %d\n", ret);
+ }
+
+ return CMD_SUCCESS;
+}
+#endif
+
/* Set config filename. Called from vty.c */
void host_config_set(const char *filename)
{
@@ -2293,18 +2344,18 @@ const char *host_config_get(void)
void install_default(enum node_type node)
{
- install_element(node, &config_exit_cmd);
- install_element(node, &config_quit_cmd);
- install_element(node, &config_end_cmd);
- install_element(node, &config_help_cmd);
- install_element(node, &config_list_cmd);
- install_element(node, &show_cli_graph_cmd);
- install_element(node, &find_cmd);
+ _install_element(node, &config_exit_cmd);
+ _install_element(node, &config_quit_cmd);
+ _install_element(node, &config_end_cmd);
+ _install_element(node, &config_help_cmd);
+ _install_element(node, &config_list_cmd);
+ _install_element(node, &show_cli_graph_cmd);
+ _install_element(node, &find_cmd);
- install_element(node, &config_write_cmd);
- install_element(node, &show_running_config_cmd);
+ _install_element(node, &config_write_cmd);
+ _install_element(node, &show_running_config_cmd);
- install_element(node, &autocomplete_cmd);
+ _install_element(node, &autocomplete_cmd);
nb_cli_install_default(node);
}
@@ -2373,6 +2424,10 @@ void cmd_init(int terminal)
install_element(VIEW_NODE, &echo_cmd);
install_element(VIEW_NODE, &autocomplete_cmd);
install_element(VIEW_NODE, &find_cmd);
+#if defined(DEV_BUILD) && defined(HAVE_SCRIPTING)
+ install_element(VIEW_NODE, &script_cmd);
+#endif
+
install_element(ENABLE_NODE, &config_end_cmd);
install_element(ENABLE_NODE, &config_disable_cmd);