]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Merge branch 'queue/osr/vtysh-generic'
authorDavid Lamparter <equinox@opensourcerouting.org>
Mon, 5 Dec 2016 19:04:08 +0000 (20:04 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Mon, 5 Dec 2016 19:04:08 +0000 (20:04 +0100)
WARNING: Merge contains nontrivial fixups in vrf_cmd handling.

Conflicts:
lib/if.c
zebra/interface.c

1  2 
lib/command.c
lib/if.c
lib/if.h
lib/vrf.c
lib/vrf.h
ospfd/ospf_vty.c
ripd/rip_interface.c
ripngd/ripng_interface.c
zebra/interface.c
zebra/zebra_vrf.c

diff --cc lib/command.c
Simple merge
diff --cc lib/if.c
index 3ae08abf56a8c73c824675df23d7f39595013fac,c323ae9da21b600c46b65f86732ecee8c6dd1acf..128fc675c1213fcaa5f46dbfeaa47e796603a05a
+++ b/lib/if.c
@@@ -827,6 -832,83 +827,17 @@@ DEFUN_NOSH (no_interface
    return CMD_SUCCESS;
  }
  
 -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);
 -}
 -
+ 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);
+ }
  /* For debug purpose. */
  DEFUN (show_address,
         show_address_cmd,
diff --cc lib/if.h
Simple merge
diff --cc lib/vrf.c
index 548c03dacde4985c6c1e0b08e05979c8f74f1201,63adea4aec07bce19e38a948b345b736f6079cad..0d0b1cc27d834bb1095b3aa75d523cfd22e7e91e
+++ 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 eae66599ff9dce04b318b7fbb304b1163fb0c40f,f1fbad9ff59ffb54121d6f5dc7d9de326a11cce9..96c716a7b8836af4fff30b9e9dbdba34a2b896d1
+++ b/lib/vrf.h
  #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
   */
Simple merge
Simple merge
Simple merge
index f48450d5e6c26c9d948c2ff9061f1092fbe0f44d,e9cbd72af915d0a8703de74ce7d8f73eba42c3c3..93a059a7a45ef39c92b1ea301a8a569bd17ddadc
@@@ -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);
index d06b0c03d16459cf8171f3bcca26674ba5e30916,8db89b1e4eb3781f4c69a0022803cea372054054..bf42792cf8186ce826193710f1dc16858b8316ed
@@@ -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)
    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);
  }