summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2016-10-21 02:45:17 +0200
committerQuentin Young <qlyoung@cumulusnetworks.com>2016-10-21 02:45:17 +0200
commit630a298ca76a0e37c263dc1d2c3053cbddc9ccb3 (patch)
treee68a7f14db0c32e1a6cab40178db1e6b97d75c4b
parentlib: Add helper function for working with argv, update bgpd to use it (diff)
downloadfrr-630a298ca76a0e37c263dc1d2c3053cbddc9ccb3.tar.xz
frr-630a298ca76a0e37c263dc1d2c3053cbddc9ccb3.zip
lib: Clean up some bgp show functions
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
-rw-r--r--bgpd/bgp_vty.c58
1 files changed, 19 insertions, 39 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index cd61252a0..b22dcfac1 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -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);
}