From: David Lamparter Date: Mon, 5 Dec 2016 19:04:08 +0000 (+0100) Subject: Merge branch 'queue/osr/vtysh-generic' X-Git-Tag: frr-3.0-branchpoint~133 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=7ddcfca4fb5246c5e211f7e37d98a8c9a51b4e70;p=matthieu%2Ffrr.git Merge branch 'queue/osr/vtysh-generic' WARNING: Merge contains nontrivial fixups in vrf_cmd handling. Conflicts: lib/if.c zebra/interface.c --- 7ddcfca4fb5246c5e211f7e37d98a8c9a51b4e70 diff --cc lib/if.c index 3ae08abf56,c323ae9da2..128fc675c1 --- a/lib/if.c +++ b/lib/if.c @@@ -827,6 -832,83 +827,17 @@@ DEFUN_NOSH (no_interface return CMD_SUCCESS; } + void + if_cmd_init (void) + { + install_element (CONFIG_NODE, &interface_cmd); + install_element (CONFIG_NODE, &no_interface_cmd); + + install_default (INTERFACE_NODE); + install_element (INTERFACE_NODE, &interface_desc_cmd); + install_element (INTERFACE_NODE, &no_interface_desc_cmd); + } + -DEFUN (vrf, - vrf_cmd, - "vrf NAME", - "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(vrfname)) > VRF_NAMSIZ) - { - vty_out (vty, "%% VRF name %s is invalid: length exceeds " - "%d characters%s", - vrfname, VRF_NAMSIZ, VTY_NEWLINE); - return CMD_WARNING; - } - - vrfp = vrf_get (VRF_UNKNOWN, vrfname); - - VTY_PUSH_CONTEXT_COMPAT (VRF_NODE, vrfp); - - return CMD_SUCCESS; -} - -DEFUN_NOSH (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; - - struct vrf *vrfp; - - vrfp = vrf_list_lookup_by_name (vrfname);; - - if (vrfp == NULL) - { - 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); - return CMD_WARNING; - } - - vrf_delete(vrfp); - - return CMD_SUCCESS; -} - -void -vrf_cmd_init (void) -{ - install_element (CONFIG_NODE, &vrf_cmd); - install_element (CONFIG_NODE, &no_vrf_cmd); - install_default (VRF_NODE); -} - /* For debug purpose. */ DEFUN (show_address, show_address_cmd, diff --cc lib/vrf.c index 548c03dacd,63adea4aec..0d0b1cc27d --- a/lib/vrf.c +++ b/lib/vrf.c @@@ -471,66 -740,6 +471,73 @@@ vrf_socket (int domain, int type, int p return ret; } +/* vrf CLI commands */ +DEFUN (vrf, + vrf_cmd, + "vrf NAME", + "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(vrfname)) > VRF_NAMSIZ) + { + vty_out (vty, "%% VRF name %s is invalid: length exceeds " + "%d characters%s", + vrfname, VRF_NAMSIZ, VTY_NEWLINE); + return CMD_WARNING; + } + + vrfp = vrf_get (VRF_UNKNOWN, vrfname); + + VTY_PUSH_CONTEXT_COMPAT (VRF_NODE, vrfp); + + return CMD_SUCCESS; +} + +DEFUN_NOSH (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; + + struct vrf *vrfp; + + vrfp = vrf_lookup_by_name (vrfname); + + if (vrfp == NULL) + { + 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); + return CMD_WARNING; + } + + vrf_delete(vrfp); + + return CMD_SUCCESS; +} + + ++struct cmd_node vrf_node = ++{ ++ VRF_NODE, ++ "%s(config-vrf)# ", ++ 1 ++}; ++ /* * Debug CLI for vrf's */ @@@ -582,7 -791,4 +589,13 @@@ vrf_install_commands (void install_element (ENABLE_NODE, &vrf_debug_cmd); 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); +} diff --cc lib/vrf.h index eae66599ff,f1fbad9ff5..96c716a7b8 --- a/lib/vrf.h +++ b/lib/vrf.h @@@ -23,9 -23,8 +23,10 @@@ #ifndef _ZEBRA_VRF_H #define _ZEBRA_VRF_H +#include "openbsd-tree.h" #include "linklist.h" #include "qobj.h" ++#include "vty.h" /* The default NS ID */ #define NS_DEFAULT 0 @@@ -171,6 -201,6 +172,8 @@@ extern int vrf_bitmap_check (vrf_bitmap extern void vrf_init (void); extern void vrf_terminate (void); ++extern void vrf_cmd_init (int (*writefunc)(struct vty *vty)); ++ /* * VRF utilities */ diff --cc zebra/interface.c index f48450d5e6,e9cbd72af9..93a059a7a4 --- a/zebra/interface.c +++ b/zebra/interface.c @@@ -2903,6 -2909,8 +2877,7 @@@ zebra_if_init (void /* Install configuration write function. */ install_node (&interface_node, if_config_write); install_node (&link_params_node, NULL); - install_node (&vrf_node, vrf_config_write); + if_cmd_init (); install_element (VIEW_NODE, &show_interface_cmd); install_element (VIEW_NODE, &show_interface_vrf_all_cmd); diff --cc zebra/zebra_vrf.c index d06b0c03d1,8db89b1e4e..bf42792cf8 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@@ -520,51 -428,6 +520,24 @@@ zebra_vrf_other_route_table (afi_t afi return zvrf->table[afi][SAFI_UNICAST]; } - /* Wrapper hook point for zebra daemon so that ifindex can be set - * DEFUN macro not used as extract.pl HAS to ignore this - * See also interface_cmd in lib/if.c - */ - DEFUN_NOSH (zebra_vrf, - zebra_vrf_cmd, - "vrf NAME", - "Select a VRF to configure\n" - "VRF's name\n") - { - // VTY_DECLVAR_CONTEXT (vrf, vrfp); - int ret; - - /* Call lib vrf() */ - if ((ret = vrf_cmd.func (self, vty, argc, argv)) != CMD_SUCCESS) - return ret; - - return ret; - } - +static int +vrf_config_write (struct vty *vty) +{ + struct vrf *vrf; + struct zebra_vrf *zvrf; + + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) + { + zvrf = vrf->info; + if (! zvrf || strcmp (zvrf_name (zvrf), VRF_DEFAULT_NAME)) + { + vty_out (vty, "vrf %s%s", zvrf_name (zvrf), VTY_NEWLINE); + vty_out (vty, "!%s", VTY_NEWLINE); + } + } + return 0; +} + - struct cmd_node vrf_node = - { - VRF_NODE, - "%s(config-vrf)# ", - 1 - }; - /* Zebra VRF initialization. */ void zebra_vrf_init (void) @@@ -574,10 -437,7 +547,6 @@@ vrf_add_hook (VRF_DISABLE_HOOK, zebra_vrf_disable); vrf_add_hook (VRF_DELETE_HOOK, zebra_vrf_delete); - zvrf_list = list_new (); - vrf_init (); - - install_node (&vrf_node, vrf_config_write); - install_default (VRF_NODE); - install_element (CONFIG_NODE, &zebra_vrf_cmd); - install_element (CONFIG_NODE, &no_vrf_cmd); ++ vrf_cmd_init (vrf_config_write); }