]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: Clean up some bgp show functions
authorQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 21 Oct 2016 00:45:17 +0000 (00:45 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 21 Oct 2016 00:45:17 +0000 (00:45 +0000)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
bgpd/bgp_vty.c

index cd61252a0cec6054c2dc1f9e9b71989e0a23b518..b22dcfac1ef7b1a6c0b85074dc763eab4dd3d471 100644 (file)
@@ -6003,6 +6003,7 @@ DEFUN (clear_ip_bgp_all,
        BGP_SOFT_OUT_STR)
 {
   char *vrf = NULL;
+
   afi_t afi = AFI_IP6;
   safi_t safi = SAFI_UNICAST;
   enum clear_sort clr_sort = clear_peer;
@@ -6115,25 +6116,18 @@ DEFUN (clear_ip_bgp_prefix,
        "Clear bestpath and re-advertise\n"
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 {
-  int idx_ip = 1;
-  int idx_view_vrf = 3;
-  int idx_vrf = 4;
-  int idx_ipv4_prefixlen = 6;
   char *vrf = NULL;
+  char *prefix = NULL;
 
-  if (!strmatch(argv[idx_ip]->text, "ip"))
-    {
-      idx_view_vrf--;
-      idx_vrf--;
-      idx_ipv4_prefixlen--;
-    }
+  int idx = 0;
 
-  if (strmatch(argv[idx_view_vrf]->text, "view") || strmatch(argv[idx_view_vrf]->text, "vrf"))
-    vrf = argv[idx_vrf]->arg;
-  else
-    idx_ipv4_prefixlen -= 2;
+  /* [<view|vrf> WORD] */
+  if (argv_find (argv, argc, "WORD", &idx))
+    vrf = argv[idx]->arg;
+  prefix = argv[argc-1]->arg;
 
-  return bgp_clear_prefix (vty, vrf, argv[idx_ipv4_prefixlen]->arg, AFI_IP, SAFI_UNICAST, NULL);
+  return bgp_clear_prefix (vty, vrf, prefix, AFI_IP, SAFI_UNICAST, NULL);
 }
 
 DEFUN (clear_bgp_ipv6_safi_prefix,
@@ -8758,39 +8752,25 @@ DEFUN (show_ip_bgp_neighbors,
        "Neighbor on bgp configured interface\n"
        "JavaScript Object Notation\n")
 {
-  int idx_ip = 1;
-  int idx_view_vrf = 3;
-  int idx_vrf = 4;
-  int idx_peer;
   char *vrf = NULL;
   char *sh_arg = NULL;
   enum show_type sh_type;
 
   u_char uj = use_json(argc, argv);
 
-  if (!strmatch(argv[idx_ip]->text, "ip"))
-    {
-      idx_view_vrf--;
-      idx_vrf--;
-    }
-
-  if (strmatch(argv[idx_view_vrf]->text, "view") || strmatch(argv[idx_view_vrf]->text, "vrf"))
-    vrf = argv[idx_vrf]->arg;
+  int idx = 0;
 
-  if (uj)
-    idx_peer = argc - 2;
-  else
-    idx_peer = argc - 1;
+  if (argv_find (argv, argc, "WORD", &idx))
+    vrf = argv[idx]->arg;
 
-  if (strmatch(argv[idx_peer]->text, "neighbors"))
-    {
-      sh_type = show_all;
-    }
+  if (argv_find (argv, argc, "A.B.C.D", &idx) || argv_find (argv, argc, "X:X::X:X", &idx) ||
+      argv_find (argv, argc, "WORD", &idx))
+  {
+    sh_type = show_peer;
+    sh_arg = argv[idx]->arg;
+  }
   else
-    {
-      sh_type = show_peer;
-      sh_arg = argv[idx_peer]->arg;
-    }
+    sh_type = show_all;
 
   return bgp_show_neighbor_vty (vty, vrf, sh_type, sh_arg, uj);
 }