From bcff2289ed40d7715011ba6cd01fe78c5e0f4108 Mon Sep 17 00:00:00 2001 From: Daniel Walton Date: Thu, 22 Sep 2016 18:23:21 +0000 Subject: [PATCH] Revert "lib, zebra: Fixup if.c to work in the new regime" This reverts commit 2511cb40e6b0e88620f26b3506b2a454a773c93d. --- lib/if.c | 77 ++++++++++++++++++++++++++++++----------------- lib/if.h | 3 ++ lib/vrf.h | 2 +- zebra/interface.c | 1 + 4 files changed, 54 insertions(+), 29 deletions(-) diff --git a/lib/if.c b/lib/if.c index 01baa5392a..bd6079c0fd 100644 --- a/lib/if.c +++ b/lib/if.c @@ -750,37 +750,36 @@ if_sunwzebra_get (const char *name, size_t nlen, vrf_id_t vrf_id) DEFUN (interface, interface_cmd, - "interface IFNAME" VRF_CMD_STR_OPT, + "interface IFNAME", "Select an interface to configure\n" - "Interface's name\n" - VRF_CMD_HELP_STR) + "Interface's name\n") { struct interface *ifp; size_t sl; vrf_id_t vrf_id = VRF_DEFAULT; - if ((sl = strlen(argv[0]->arg)) > INTERFACE_NAMSIZ) + if ((sl = strlen(argv[0])) > INTERFACE_NAMSIZ) { vty_out (vty, "%% Interface name %s is invalid: length exceeds " "%d characters%s", - argv[0]->arg, INTERFACE_NAMSIZ, VTY_NEWLINE); + argv[0], INTERFACE_NAMSIZ, VTY_NEWLINE); return CMD_WARNING; } /*Pending: need proper vrf name based lookup/(possible creation of VRF) Imagine forward reference of a vrf by name in this interface config */ if (argc > 1) - VRF_GET_ID (vrf_id, argv[1]->arg); + VRF_GET_ID (vrf_id, argv[1]); #ifdef SUNOS_5 - ifp = if_sunwzebra_get (argv[0]->arg, sl, vrf_id); + ifp = if_sunwzebra_get (argv[0], sl, vrf_id); #else - ifp = if_get_by_name_len_vrf (argv[0]->arg, sl, vrf_id, 1); + ifp = if_get_by_name_len_vrf (argv[0], sl, vrf_id, 1); #endif /* SUNOS_5 */ if (!ifp) { - vty_out (vty, "%% interface %s not in %s%s", argv[0]->arg, argv[1]->arg, VTY_NEWLINE); + vty_out (vty, "%% interface %s not in %s%s", argv[0], argv[1], VTY_NEWLINE); return CMD_WARNING; } vty->index = ifp; @@ -789,26 +788,32 @@ DEFUN (interface, return CMD_SUCCESS; } +ALIAS (interface, + interface_vrf_cmd, + "interface IFNAME " VRF_CMD_STR, + "Select an interface to configure\n" + "Interface's name\n" + VRF_CMD_HELP_STR) + DEFUN_NOSH (no_interface, no_interface_cmd, - "no interface IFNAME" VRF_CMD_STR_OPT, + "no interface IFNAME", NO_STR "Delete a pseudo interface's configuration\n" - "Interface's name\n" - VRF_CMD_HELP_STR) + "Interface's name\n") { // deleting interface struct interface *ifp; vrf_id_t vrf_id = VRF_DEFAULT; if (argc > 1) - VRF_GET_ID (vrf_id, argv[1]->arg); + VRF_GET_ID (vrf_id, argv[1]); - ifp = if_lookup_by_name_vrf (argv[0]->arg, vrf_id); + ifp = if_lookup_by_name_vrf (argv[0], vrf_id); if (ifp == NULL) { - vty_out (vty, "%% Interface %s does not exist%s", argv[0]->arg, VTY_NEWLINE); + vty_out (vty, "%% Interface %s does not exist%s", argv[0], VTY_NEWLINE); return CMD_WARNING; } @@ -824,23 +829,32 @@ DEFUN_NOSH (no_interface, return CMD_SUCCESS; } +ALIAS (no_interface, + no_interface_vrf_cmd, + "no interface IFNAME " VRF_CMD_STR, + NO_STR + "Delete a pseudo interface's configuration\n" + "Interface's name\n" + VRF_CMD_HELP_STR) + DEFUN (vrf, vrf_cmd, - VRF_CMD_STR, - VRF_CMD_HELP_STR) + "vrf NAME", + "Select a VRF to configure\n" + "VRF's name\n") { struct vrf *vrfp; size_t sl; - if ((sl = strlen(argv[0]->arg)) > VRF_NAMSIZ) + if ((sl = strlen(argv[0])) > VRF_NAMSIZ) { vty_out (vty, "%% VRF name %s is invalid: length exceeds " "%d characters%s", - argv[0]->arg, VRF_NAMSIZ, VTY_NEWLINE); + argv[0], VRF_NAMSIZ, VTY_NEWLINE); return CMD_WARNING; } - vrfp = vrf_get (VRF_UNKNOWN, argv[0]->arg); + vrfp = vrf_get (VRF_UNKNOWN, argv[0]); vty->index = vrfp; vty->node = VRF_NODE; @@ -850,17 +864,18 @@ DEFUN (vrf, DEFUN_NOSH (no_vrf, no_vrf_cmd, - "no " VRF_CMD_STR, + "no vrf NAME", NO_STR - VRF_CMD_HELP_STR) + "Delete a pseudo VRF's configuration\n" + "VRF's name\n") { struct vrf *vrfp; - vrfp = vrf_list_lookup_by_name (argv[0]->arg); + vrfp = vrf_list_lookup_by_name (argv[0]); if (vrfp == NULL) { - vty_out (vty, "%% VRF %s does not exist%s", argv[0]->arg, VTY_NEWLINE); + vty_out (vty, "%% VRF %s does not exist%s", argv[0], VTY_NEWLINE); return CMD_WARNING; } @@ -880,10 +895,9 @@ DEFUN_NOSH (no_vrf, /* For debug purpose. */ DEFUN (show_address, show_address_cmd, - "show address" VRF_CMD_STR_OPT, + "show address", SHOW_STR - "address\n" - VRF_CMD_HELP_STR) + "address\n") { struct listnode *node; struct listnode *node2; @@ -893,7 +907,7 @@ DEFUN (show_address, vrf_id_t vrf_id = VRF_DEFAULT; if (argc > 0) - VRF_GET_ID (vrf_id, argv[0]->arg); + VRF_GET_ID (vrf_id, argv[0]); for (ALL_LIST_ELEMENTS_RO (vrf_iflist (vrf_id), node, ifp)) { @@ -909,6 +923,13 @@ DEFUN (show_address, return CMD_SUCCESS; } +ALIAS (show_address, + show_address_vrf_cmd, + "show address " VRF_CMD_STR, + SHOW_STR + "address\n" + VRF_CMD_HELP_STR) + DEFUN (show_address_vrf_all, show_address_vrf_all_cmd, "show address " VRF_ALL_CMD_STR, diff --git a/lib/if.h b/lib/if.h index 4913d8c8b0..d1875e695a 100644 --- a/lib/if.h +++ b/lib/if.h @@ -491,9 +491,12 @@ extern struct cmd_element interface_desc_cmd; extern struct cmd_element no_interface_desc_cmd; extern struct cmd_element interface_cmd; extern struct cmd_element no_interface_cmd; +extern struct cmd_element interface_vrf_cmd; +extern struct cmd_element no_interface_vrf_cmd; extern struct cmd_element interface_pseudo_cmd; extern struct cmd_element no_interface_pseudo_cmd; extern struct cmd_element show_address_cmd; +extern struct cmd_element show_address_vrf_cmd; extern struct cmd_element show_address_vrf_all_cmd; extern struct cmd_element vrf_cmd; extern struct cmd_element no_vrf_cmd; diff --git a/lib/vrf.h b/lib/vrf.h index c4260769a6..dcc115563d 100644 --- a/lib/vrf.h +++ b/lib/vrf.h @@ -50,7 +50,7 @@ enum { /* * The command strings */ -#define VRF_CMD_STR_OPT "[vrf NAME]" + #define VRF_CMD_STR "vrf NAME" #define VRF_CMD_HELP_STR "Specify the VRF\nThe VRF name\n" diff --git a/zebra/interface.c b/zebra/interface.c index 0546cb8f9b..9be97e2214 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -2960,6 +2960,7 @@ zebra_if_init (void) install_element (CONFIG_NODE, &zebra_interface_cmd); install_element (CONFIG_NODE, &zebra_interface_vrf_cmd); install_element (CONFIG_NODE, &no_interface_cmd); + install_element (CONFIG_NODE, &no_interface_vrf_cmd); install_default (INTERFACE_NODE); install_element (INTERFACE_NODE, &interface_desc_cmd); install_element (INTERFACE_NODE, &no_interface_desc_cmd); -- 2.39.5