From 34c462745724f4c7693a8dcc17fef70f8dac7dbb Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Sun, 8 Jul 2018 21:16:47 -0300 Subject: [PATCH] lib, vtysh: fix inconsistent VRF commands in vtysh * Only zebra and pimd call vrf_cmd_init(), so these are the only daemons that should receive VRF commands from vtysh; * "netns NAME" and "no netns NAME" are available only in zebra, write custom DEFSHs in vtysh to make it aware of that; * Remove the "no vrf NAME" definition from vtysh.c and expose the original command to vtysh by converting the DEFUN_NOSH to a simple DEFUN. This command doesn't change the vty node so there's no need to special case it. Signed-off-by: Renato Westphal --- lib/vrf.c | 16 ++++++++-------- vtysh/extract.pl.in | 2 +- vtysh/vtysh.c | 18 +++++++++++++----- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/lib/vrf.c b/lib/vrf.c index ca50c1e70..4f29bad5f 100644 --- a/lib/vrf.c +++ b/lib/vrf.c @@ -711,12 +711,12 @@ DEFUN_NOSH (vrf, return vrf_handler_create(vty, vrfname, NULL); } -DEFUN_NOSH (no_vrf, - no_vrf_cmd, - "no vrf NAME", - NO_STR - "Delete a pseudo VRF's configuration\n" - "VRF's name\n") +DEFUN (no_vrf, + no_vrf_cmd, + "no vrf NAME", + NO_STR + "Delete a pseudo VRF's configuration\n" + "VRF's name\n") { const char *vrfname = argv[2]->arg; @@ -744,7 +744,7 @@ DEFUN_NOSH (no_vrf, struct cmd_node vrf_node = {VRF_NODE, "%s(config-vrf)# ", 1}; -DEFUN (vrf_netns, +DEFUN_NOSH (vrf_netns, vrf_netns_cmd, "netns NAME", "Attach VRF to a Namespace\n" @@ -771,7 +771,7 @@ DEFUN (vrf_netns, return ret; } -DEFUN (no_vrf_netns, +DEFUN_NOSH (no_vrf_netns, no_vrf_netns_cmd, "no netns [NAME]", NO_STR diff --git a/vtysh/extract.pl.in b/vtysh/extract.pl.in index c0277b3d6..b93314c96 100755 --- a/vtysh/extract.pl.in +++ b/vtysh/extract.pl.in @@ -85,7 +85,7 @@ foreach (@ARGV) { $protocol = "VTYSH_RMAP"; } elsif ($file =~ /lib\/vrf\.c$/) { - $protocol = "VTYSH_ALL"; + $protocol = "VTYSH_VRF"; } elsif ($file =~ /lib\/logicalrouter\.c$/) { $protocol = "VTYSH_ALL"; diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index e25a57692..4e24bef92 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -2070,9 +2070,16 @@ DEFUNSH(VTYSH_VRF, vtysh_vrf, vtysh_vrf_cmd, "vrf NAME", return CMD_SUCCESS; } -DEFSH(VTYSH_ZEBRA, vtysh_no_vrf_cmd, "no vrf NAME", NO_STR - "Delete a pseudo vrf's configuration\n" - "VRF's name\n") +DEFSH(VTYSH_ZEBRA, vtysh_vrf_netns_cmd, + "netns NAME", + "Attach VRF to a Namespace\n" + "The file name in " NS_RUN_DIR ", or a full pathname\n") + +DEFSH(VTYSH_ZEBRA, vtysh_no_vrf_netns_cmd, + "no netns [NAME]", + NO_STR + "Detach VRF from a Namespace\n" + "The file name in " NS_RUN_DIR ", or a full pathname\n") DEFUNSH(VTYSH_NS, vtysh_exit_logicalrouter, vtysh_exit_logicalrouter_cmd, "exit", @@ -3689,10 +3696,11 @@ void vtysh_init_vty(void) install_element(ENABLE_NODE, &vtysh_show_running_config_cmd); install_element(ENABLE_NODE, &vtysh_copy_running_config_cmd); + install_element(CONFIG_NODE, &vtysh_vrf_cmd); + install_element(VRF_NODE, &vtysh_vrf_netns_cmd); + install_element(VRF_NODE, &vtysh_no_vrf_netns_cmd); install_element(VRF_NODE, &exit_vrf_config_cmd); - install_element(CONFIG_NODE, &vtysh_vrf_cmd); - install_element(CONFIG_NODE, &vtysh_no_vrf_cmd); install_element(CONFIG_NODE, &vtysh_no_nexthop_group_cmd); /* "write terminal" command. */ -- 2.39.5