diff options
Diffstat (limited to 'lib/vrf.c')
| -rw-r--r-- | lib/vrf.c | 38 |
1 files changed, 29 insertions, 9 deletions
@@ -480,20 +480,21 @@ DEFUN (vrf, "Select a VRF to configure\n" "VRF's name\n") { + int idx_name = 1; + const char *vrfname = argv[idx_name]->arg; struct vrf *vrfp; - size_t sl; - if ((sl = strlen(argv[0])) > VRF_NAMSIZ) + if (strlen(vrfname) > VRF_NAMSIZ) { vty_out (vty, "%% VRF name %s is invalid: length exceeds " - "%d characters%s", - argv[0], VRF_NAMSIZ, VTY_NEWLINE); + "%d characters%s", + vrfname, VRF_NAMSIZ, VTY_NEWLINE); return CMD_WARNING; } - vrfp = vrf_get (VRF_UNKNOWN, argv[0]); + vrfp = vrf_get (VRF_UNKNOWN, vrfname); - VTY_PUSH_CONTEXT_COMPAT (VRF_NODE, vrfp); + VTY_PUSH_CONTEXT (VRF_NODE, vrfp); return CMD_SUCCESS; } @@ -505,20 +506,22 @@ DEFUN_NOSH (no_vrf, "Delete a pseudo VRF's configuration\n" "VRF's name\n") { + const char *vrfname = argv[2]->arg; + struct vrf *vrfp; - vrfp = vrf_lookup_by_name (argv[0]); + vrfp = vrf_lookup_by_name (vrfname); if (vrfp == NULL) { - vty_out (vty, "%% VRF %s does not exist%s", argv[0], VTY_NEWLINE); + vty_out (vty, "%% VRF %s does not exist%s", vrfname, VTY_NEWLINE); return CMD_WARNING; } if (CHECK_FLAG (vrfp->status, VRF_ACTIVE)) { vty_out (vty, "%% Only inactive VRFs can be deleted%s", - VTY_NEWLINE); + VTY_NEWLINE); return CMD_WARNING; } @@ -527,6 +530,14 @@ DEFUN_NOSH (no_vrf, return CMD_SUCCESS; } + +struct cmd_node vrf_node = +{ + VRF_NODE, + "%s(config-vrf)# ", + 1 +}; + /* * Debug CLI for vrf's */ @@ -579,3 +590,12 @@ vrf_install_commands (void) install_element (CONFIG_NODE, &no_vrf_debug_cmd); install_element (ENABLE_NODE, &no_vrf_debug_cmd); } + +void +vrf_cmd_init (int (*writefunc)(struct vty *vty)) +{ + install_element (CONFIG_NODE, &vrf_cmd); + install_element (CONFIG_NODE, &no_vrf_cmd); + install_node (&vrf_node, writefunc); + install_default (VRF_NODE); +} |
