From db4f708628a3f5e9766de094fd79398b1ef03fdd Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 25 Jan 2017 21:38:58 -0500 Subject: [PATCH 1/7] bgpd: Fix error in "no set large-comm-list" The cli for "no set large-comm-list..." is wrong. Signed-off-by: Donald Sharp --- bgpd/bgp_routemap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index 58788d2041..c2e7e15fe9 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -3992,7 +3992,7 @@ DEFUN (set_lcommunity_delete, DEFUN (no_set_lcommunity_delete, no_set_lcommunity_delete_cmd, - "no set large-comm-list <(1-99|(100-500)|WORD)> [delete]", + "no set large-comm-list <(1-99)|(100-500)|WORD> [delete]", NO_STR SET_STR "set BGP large community list (for deletion)\n" From c7f1274bad25b21d2c1e9b42d0b5847779d0cd65 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 25 Jan 2017 21:51:28 -0500 Subject: [PATCH 2/7] bgpd, vtysh: Allow bgp and vtysh to work together again Harmony is restored to the world as bgp and vtysh can now, again, stay in sync with each other. Signed-off-by: Donald Sharp --- bgpd/bgp_vty.c | 118 +++++++++++++++----------------------------- vtysh/extract.pl.in | 8 +-- vtysh/vtysh.c | 66 ++++++++++++++----------- 3 files changed, 78 insertions(+), 114 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 17b8485237..d6a36169f8 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -5509,80 +5509,68 @@ DEFUN (no_neighbor_addpath_tx_bestpath_per_as, PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS); } - -/* Address Family configuration. */ -DEFUN (address_family_ipv4, - address_family_ipv4_cmd, - "address-family ipv4", - "Enter Address Family command mode\n" - "Address Family\n") -{ - vty->node = BGP_IPV4_NODE; - return CMD_SUCCESS; -} - DEFUN (address_family_ipv4_safi, address_family_ipv4_safi_cmd, - "address-family ipv4 "BGP_SAFI_CMD_STR, + "address-family ipv4 []", "Enter Address Family command mode\n" "Address Family\n" BGP_SAFI_HELP_STR) { int idx_safi = 2; - switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) + if (argc == idx_safi) { - case SAFI_MULTICAST: - vty->node = BGP_IPV4M_NODE; - break; - case SAFI_ENCAP: - vty->node = BGP_ENCAP_NODE; - break; - case SAFI_MPLS_VPN: - vty->node = BGP_VPNV4_NODE; - break; - case SAFI_UNICAST: - default: - vty->node = BGP_IPV4_NODE; - break; + switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) + { + case SAFI_MULTICAST: + vty->node = BGP_IPV4M_NODE; + break; + case SAFI_ENCAP: + vty->node = BGP_ENCAP_NODE; + break; + case SAFI_MPLS_VPN: + vty->node = BGP_VPNV4_NODE; + break; + case SAFI_UNICAST: + default: + vty->node = BGP_IPV4_NODE; + break; + } } + else + vty->node = BGP_IPV4_NODE; return CMD_SUCCESS; } -DEFUN (address_family_ipv6, - address_family_ipv6_cmd, - "address-family ipv6", - "Enter Address Family command mode\n" - "Address Family\n") -{ - vty->node = BGP_IPV6_NODE; - return CMD_SUCCESS; -} - DEFUN (address_family_ipv6_safi, address_family_ipv6_safi_cmd, - "address-family ipv6 "BGP_SAFI_CMD_STR, + "address-family ipv6 []", "Enter Address Family command mode\n" "Address Family\n" BGP_SAFI_HELP_STR) { int idx_safi = 2; - switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) + if (argc == idx_safi) { - case SAFI_MULTICAST: - vty->node = BGP_IPV6M_NODE; - break; - case SAFI_ENCAP: - vty->node = BGP_ENCAPV6_NODE; - break; - case SAFI_MPLS_VPN: - vty->node = BGP_VPNV6_NODE; - break; - case SAFI_UNICAST: - default: - vty->node = BGP_IPV6_NODE; - break; + switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) + { + case SAFI_MULTICAST: + vty->node = BGP_IPV6M_NODE; + break; + case SAFI_ENCAP: + vty->node = BGP_ENCAPV6_NODE; + break; + case SAFI_MPLS_VPN: + vty->node = BGP_VPNV6_NODE; + break; + case SAFI_UNICAST: + default: + vty->node = BGP_IPV6_NODE; + break; + } } + else + vty->node = BGP_IPV6_NODE; return CMD_SUCCESS; } @@ -5609,28 +5597,6 @@ DEFUN (address_family_vpnv6, vty->node = BGP_VPNV6_NODE; return CMD_SUCCESS; } - -DEFUN (address_family_ipv4_vpn, - address_family_ipv4_vpn_cmd, - "address-family ipv4 vpn", - "Enter Address Family command mode\n" - "Address Family\n" - "Subsequent Address Family modifier\n") -{ - vty->node = BGP_VPNV4_NODE; - return CMD_SUCCESS; -} - -DEFUN (address_family_ipv6_vpn, - address_family_ipv6_vpn_cmd, - "address-family ipv6 vpn", - "Enter Address Family command mode\n" - "Address Family\n" - "Subsequent Address Family modifier\n") -{ - vty->node = BGP_VPNV6_NODE; - return CMD_SUCCESS; -} #endif /* KEEP_OLD_VPN_COMMANDS */ DEFUN (address_family_encap, @@ -10772,15 +10738,11 @@ bgp_vty_init (void) install_element (BGP_ENCAPV6_NODE, &no_neighbor_allowas_in_cmd); /* address-family commands. */ - install_element (BGP_NODE, &address_family_ipv4_cmd); install_element (BGP_NODE, &address_family_ipv4_safi_cmd); - install_element (BGP_NODE, &address_family_ipv6_cmd); install_element (BGP_NODE, &address_family_ipv6_safi_cmd); #ifdef KEEP_OLD_VPN_COMMANDS install_element (BGP_NODE, &address_family_vpnv4_cmd); install_element (BGP_NODE, &address_family_vpnv6_cmd); - install_element (BGP_NODE, &address_family_ipv4_vpn_cmd); - install_element (BGP_NODE, &address_family_ipv6_vpn_cmd); #endif /* KEEP_OLD_VPN_COMMANDS */ install_element (BGP_NODE, &address_family_encap_cmd); diff --git a/vtysh/extract.pl.in b/vtysh/extract.pl.in index d38ea60a03..e3c859dab3 100755 --- a/vtysh/extract.pl.in +++ b/vtysh/extract.pl.in @@ -54,18 +54,14 @@ $ignore{'"router bgp [(1-4294967295) [ WORD]]"'} = "ignore"; $ignore{'"router isis WORD"'} = "ignore"; $ignore{'"router zebra"'} = "ignore"; $ignore{'"address-family ipv4"'} = "ignore"; -$ignore{'"address-family ipv4 "'} = "ignore"; +$ignore{'"address-family ipv4 []"'} = "ignore"; $ignore{'"address-family ipv6"'} = "ignore"; -$ignore{'"address-family ipv6 "'} = "ignore"; -$ignore{'"address-family ipv4 vpn"'} = "ignore"; +$ignore{'"address-family ipv6 []"'} = "ignore"; $ignore{'"address-family vpnv4"'} = "ignore"; $ignore{'"address-family vpnv4 unicast"'} = "ignore"; $ignore{'"address-family ipv4 vrf NAME"'} = "ignore"; $ignore{'"address-family "'} = "ignore"; $ignore{'"address-family encapv6"'} = "ignore"; -$ignore{'"address-family ipv4 encap"'} = "ignore"; -$ignore{'"address-family ipv6 encap"'} = "ignore"; -$ignore{'"address-family ipv6 vpn"'} = "ignore"; $ignore{'"address-family vpnv6"'} = "ignore"; $ignore{'"address-family vpnv6 unicast"'} = "ignore"; $ignore{'"exit-address-family"'} = "ignore"; diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 51b5091c57..1db3dca352 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -1149,48 +1149,56 @@ DEFUNSH (VTYSH_BGPD, DEFUNSH (VTYSH_BGPD, address_family_ipv4_unicast, address_family_ipv4_unicast_cmd, - "address-family ipv4 unicast", + "address-family ipv4 []", "Enter Address Family command mode\n" "Address Family\n" - "Address Family Modifier\n") + "Address Family Modifier\n" + "Address Family Modifier\n" + "Address Family Modifier\n" + "Address Family Modifier\n") { - vty->node = BGP_IPV4_NODE; - return CMD_SUCCESS; -} + int idx = 0; + + if (argv_find (argv, argc, "multicast", &idx)) + vty->node = BGP_IPV4M_NODE; + + else if (argv_find (argv, argc, "encap", &idx)) + vty->node = BGP_ENCAP_NODE; + + else if (argv_find (argv, argc, "vpn", &idx)) + vty->node = BGP_VPNV4_NODE; + + else + vty->node = BGP_IPV4_NODE; -DEFUNSH (VTYSH_BGPD, - address_family_ipv4_multicast, - address_family_ipv4_multicast_cmd, - "address-family ipv4 multicast", - "Enter Address Family command mode\n" - "Address Family\n" - "Address Family Modifier\n") -{ - vty->node = BGP_IPV4M_NODE; return CMD_SUCCESS; } DEFUNSH (VTYSH_BGPD, address_family_ipv6, address_family_ipv6_cmd, - "address-family ipv6 [unicast]", + "address-family ipv6 []", "Enter Address Family command mode\n" "Address Family\n" - "Address Family Modifier\n") + "Address Family Modifier\n" + "Address Family Modifier\n" + "Address Family Modifier\n" + "Address Family Modifier\n") { - vty->node = BGP_IPV6_NODE; - return CMD_SUCCESS; -} + int idx = 0; + + if (argv_find (argv, argc, "multicast", &idx)) + vty->node = BGP_IPV6M_NODE; + + else if (argv_find (argv, argc, "encap", &idx)) + vty->node = BGP_ENCAPV6_NODE; + + else if (argv_find (argv, argc, "vpn", &idx)) + vty->node = BGP_VPNV6_NODE; + + else + vty->node = BGP_IPV6_NODE; -DEFUNSH (VTYSH_BGPD, - address_family_ipv6_multicast, - address_family_ipv6_multicast_cmd, - "address-family ipv6 multicast", - "Enter Address Family command mode\n" - "Address Family\n" - "Address Family Modifier\n") -{ - vty->node = BGP_IPV6M_NODE; return CMD_SUCCESS; } @@ -3282,9 +3290,7 @@ vtysh_init_vty (void) install_element (BGP_NODE, &vnc_l2_group_cmd); #endif install_element (BGP_NODE, &address_family_ipv4_unicast_cmd); - install_element (BGP_NODE, &address_family_ipv4_multicast_cmd); install_element (BGP_NODE, &address_family_ipv6_cmd); - install_element (BGP_NODE, &address_family_ipv6_multicast_cmd); install_element (BGP_VPNV4_NODE, &exit_address_family_cmd); install_element (BGP_VPNV6_NODE, &exit_address_family_cmd); install_element (BGP_ENCAP_NODE, &exit_address_family_cmd); From a2119b202a457f9161b6fdeaa60c76d62472b2c5 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 25 Jan 2017 21:55:25 -0500 Subject: [PATCH 3/7] bgpd: Fix '[no] labels LABELLIST...' command Signed-off-by: Donald Sharp --- bgpd/rfapi/bgp_rfapi_cfg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bgpd/rfapi/bgp_rfapi_cfg.c b/bgpd/rfapi/bgp_rfapi_cfg.c index 10b365c1c8..c694a8e3ce 100644 --- a/bgpd/rfapi/bgp_rfapi_cfg.c +++ b/bgpd/rfapi/bgp_rfapi_cfg.c @@ -3880,7 +3880,7 @@ DEFUN (vnc_l2_group_lni, DEFUN (vnc_l2_group_labels, vnc_l2_group_labels_cmd, - "labels .LABELLIST", + "labels LABELLIST...", "Specify label values associated with group\n" "Space separated list of label values <0-1048575>\n") { @@ -3923,7 +3923,7 @@ DEFUN (vnc_l2_group_labels, DEFUN (vnc_l2_group_no_labels, vnc_l2_group_no_labels_cmd, - "no labels .LABELLIST", + "no labels LABELLIST...", NO_STR "Remove label values associated with L2 group\n" "Specify label values associated with L2 group\n" From fd6ab73ea69bb4826e9b118cfea157ee5efdc5f3 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 25 Jan 2017 22:04:49 -0500 Subject: [PATCH 4/7] vtysh: Add 'vrf-policy NAME' and 'exit-vrf-policy' to ignore list. vtysh needs to ignore these two commands or we'll get duplicate warnings Signed-off-by: Donald Sharp --- vtysh/extract.pl.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vtysh/extract.pl.in b/vtysh/extract.pl.in index e3c859dab3..5b23b2440a 100755 --- a/vtysh/extract.pl.in +++ b/vtysh/extract.pl.in @@ -83,6 +83,8 @@ $ignore{'"router ospf [(1-65535)]"'} = "ignore"; $ignore{'"address-family vpnv6 [unicast]"'} = "ignore"; $ignore{'"address-family vpnv4 [unicast]"'} = "ignore"; $ignore{'"logical-router (1-65535) ns NAME"'} = "ignore"; +$ignore{'"vrf-policy NAME"' } = "ignore"; +$ignore{'"exit-vrf-policy"' } = "ignore"; my $cli_stomp = 0; From 52bc7712a1a25f6c11ecbacd582750cf2b37af1a Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 25 Jan 2017 22:08:35 -0500 Subject: [PATCH 5/7] bgpd: Allow some new cli to have correct number of help strings The 'add vrf NAME prefix....' command was missing a \n and the 'no label' command was missing a help string for no. Signed-off-by: Donald Sharp --- bgpd/rfapi/bgp_rfapi_cfg.c | 1 + bgpd/rfapi/rfapi_vty.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bgpd/rfapi/bgp_rfapi_cfg.c b/bgpd/rfapi/bgp_rfapi_cfg.c index c694a8e3ce..53869ebddb 100644 --- a/bgpd/rfapi/bgp_rfapi_cfg.c +++ b/bgpd/rfapi/bgp_rfapi_cfg.c @@ -3353,6 +3353,7 @@ DEFUN (vnc_vrf_policy_label, DEFUN (vnc_vrf_policy_no_label, vnc_vrf_policy_no_label_cmd, "no label", + NO_STR "Remove VRF default label\n") { VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); diff --git a/bgpd/rfapi/rfapi_vty.c b/bgpd/rfapi/rfapi_vty.c index 7fbfae2951..c54f974d60 100644 --- a/bgpd/rfapi/rfapi_vty.c +++ b/bgpd/rfapi/rfapi_vty.c @@ -5192,7 +5192,7 @@ DEFUN (add_vrf_prefix_rd_label_pref, "IPv6 prefix\n" "Override configured VRF Route Distinguisher\n" ": or :\n" - "Override configured VRF label" + "Override configured VRF label\n" "Label Value <0-1048575>\n" "Set advertised local preference\n" "local preference (higher=more preferred)\n") From af155bb6d880c6173b7ee87022c929efb8f5eace Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 26 Jan 2017 09:09:38 -0500 Subject: [PATCH 6/7] bgpd: Fix crash when entering 'address-family ipv4' Signed-off-by: Donald Sharp --- bgpd/bgp_vty.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index d6a36169f8..153fb3a1a4 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -5517,7 +5517,7 @@ DEFUN (address_family_ipv4_safi, BGP_SAFI_HELP_STR) { int idx_safi = 2; - if (argc == idx_safi) + if (argc == (idx_safi + 1)) { switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) { @@ -5550,7 +5550,7 @@ DEFUN (address_family_ipv6_safi, BGP_SAFI_HELP_STR) { int idx_safi = 2; - if (argc == idx_safi) + if (argc == (idx_safi + 1)) { switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) { From 72e81cf424ee08a173be5cbf66234d9ae7c99adb Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 26 Jan 2017 09:10:54 -0500 Subject: [PATCH 7/7] pimd: More pim cli fixup Found some additional issues with the pim cli. Signed-off-by: Donald Sharp --- pimd/pim_cmd.c | 77 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 23 deletions(-) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index b8bb694b78..7e60232bac 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -2423,8 +2423,11 @@ DEFUN (show_ip_igmp_interface, "JavaScript Object Notation\n") { u_char uj = use_json(argc, argv); - if (argv[4]->arg) - igmp_show_interfaces_single(vty, argv[4]->arg, uj); + int idx = 0; + + if (argv_find(argv, argc, "detail", &idx) || + argv_find(argv, argc, "WORD", &idx)) + igmp_show_interfaces_single(vty, argv[idx]->arg, uj); else igmp_show_interfaces(vty, uj); @@ -2564,8 +2567,12 @@ DEFUN (show_ip_pim_interface, "JavaScript Object Notation\n") { u_char uj = use_json(argc, argv); - if (argv[4]->arg) - pim_show_interfaces_single(vty, argv[4]->arg, uj); + int idx = 0; + + if (argv_find(argv, argc, "WORD", &idx) || + argv_find(argv, argc, "detail", &idx)) + pim_show_interfaces_single(vty, argv[idx]->arg, uj); + else pim_show_interfaces(vty, uj); @@ -2614,8 +2621,11 @@ DEFUN (show_ip_pim_neighbor, "JavaScript Object Notation\n") { u_char uj = use_json(argc, argv); - if (argv[4]->arg) - pim_show_neighbors_single(vty, argv[4]->arg, uj); + int idx = 0; + + if (argv_find(argv, argc, "detail", &idx) || + argv_find(argv, argc, "WORD", &idx)) + pim_show_neighbors_single(vty, argv[idx]->arg, uj); else pim_show_neighbors(vty, uj); @@ -2637,7 +2647,7 @@ DEFUN (show_ip_pim_secondary, DEFUN (show_ip_pim_state, show_ip_pim_state_cmd, - "show ip pim state [A.B.C.D] [A.B.C.D] [json]", + "show ip pim state [A.B.C.D [A.B.C.D]] [json]", SHOW_STR IP_STR PIM_STR @@ -2649,9 +2659,16 @@ DEFUN (show_ip_pim_state, const char *src_or_group = NULL; const char *group = NULL; u_char uj = use_json(argc, argv); + if (uj) + argc--; - src_or_group = argv[4]->arg; - group = argv[5]->arg; + if (argc == 5) + { + src_or_group = argv[4]->arg; + group = argv[5]->arg; + } + else if (argc == 4) + src_or_group = argv[4]->arg; pim_show_state(vty, src_or_group, group, uj); @@ -3476,7 +3493,11 @@ DEFUN (ip_pim_rp, "Group Address range to cover\n") { int idx_ipv4 = 3; - return pim_rp_cmd_worker (vty, argv[idx_ipv4]->arg, argv[idx_ipv4 + 1]->arg, NULL); + + if (argc == (idx_ipv4 + 1)) + return pim_rp_cmd_worker (vty, argv[idx_ipv4]->arg, argv[idx_ipv4 + 1]->arg, NULL); + else + return pim_rp_cmd_worker (vty, argv[idx_ipv4]->arg, NULL, NULL); } DEFUN (ip_pim_rp_prefix_list, @@ -3530,7 +3551,11 @@ DEFUN (no_ip_pim_rp, "Group Address range to cover\n") { int idx_ipv4 = 4; - return pim_no_rp_cmd_worker (vty, argv[idx_ipv4]->arg, argv[idx_ipv4 + 1]->arg, NULL); + + if (argc == (idx_ipv4 + 1)) + return pim_no_rp_cmd_worker (vty, argv[idx_ipv4]->arg, argv[idx_ipv4 + 1]->arg, NULL); + else + return pim_no_rp_cmd_worker (vty, argv[idx_ipv4]->arg, NULL, NULL); } DEFUN (no_ip_pim_rp_prefix_list, @@ -3585,7 +3610,7 @@ DEFUN (ip_ssmpingd, int idx_ipv4 = 2; int result; struct in_addr source_addr; - const char *source_str = (argc > idx_ipv4) ? argv[idx_ipv4]->arg : "0.0.0.0"; + const char *source_str = (argc == idx_ipv4) ? argv[idx_ipv4]->arg : "0.0.0.0"; result = inet_pton(AF_INET, source_str, &source_addr); if (result <= 0) { @@ -3615,7 +3640,7 @@ DEFUN (no_ip_ssmpingd, int idx_ipv4 = 3; int result; struct in_addr source_addr; - const char *source_str = (argc > idx_ipv4) ? argv[idx_ipv4]->arg : "0.0.0.0"; + const char *source_str = (argc == idx_ipv4) ? argv[idx_ipv4]->arg : "0.0.0.0"; result = inet_pton(AF_INET, source_str, &source_addr); if (result <= 0) { @@ -3937,7 +3962,7 @@ DEFUN (interface_ip_igmp_query_interval, return CMD_WARNING; } - query_interval = atoi(argv[4]->arg); + query_interval = atoi(argv[3]->arg); query_interval_dsec = 10 * query_interval; /* @@ -4006,7 +4031,7 @@ DEFUN (interface_no_ip_igmp_query_interval, DEFUN (interface_ip_igmp_version, interface_ip_igmp_version_cmd, - "ip igmp version <2-3>", + "ip igmp version (2-3)", IP_STR IFACE_IGMP_STR "IGMP version\n" @@ -4034,7 +4059,7 @@ DEFUN (interface_ip_igmp_version, DEFUN (interface_no_ip_igmp_version, interface_no_ip_igmp_version_cmd, - "no ip igmp version <2-3>", + "no ip igmp version (2-3)", NO_STR IP_STR IFACE_IGMP_STR @@ -4079,7 +4104,7 @@ DEFUN (interface_ip_igmp_query_max_response_time, return CMD_WARNING; } - query_max_response_time = atoi(argv[4]->arg); + query_max_response_time = atoi(argv[3]->arg); if (query_max_response_time >= pim_ifp->igmp_default_query_interval * 10) { vty_out(vty, @@ -4096,7 +4121,7 @@ DEFUN (interface_ip_igmp_query_max_response_time, DEFUN (interface_no_ip_igmp_query_max_response_time, interface_no_ip_igmp_query_max_response_time_cmd, - "no ip igmp query-max-response-time <10-250>", + "no ip igmp query-max-response-time (10-250)", NO_STR IP_STR IFACE_IGMP_STR @@ -4576,7 +4601,7 @@ DEFUN (interface_ip_pim_hello, pim_ifp->pim_hello_period = strtol(argv[idx_time]->arg, NULL, 10); - if (argc > idx_hold) + if (argc == idx_hold) pim_ifp->pim_default_holdtime = strtol(argv[idx_hold]->arg, NULL, 10); return CMD_SUCCESS; @@ -5451,7 +5476,7 @@ DEFUN (no_ip_msdp_mesh_group_source, "mesh group source\n" "mesh group local address\n") { - if (argv[6]->arg) + if (argc == 6) return ip_no_msdp_mesh_group_cmd_worker(vty, argv[6]->arg); else return ip_no_msdp_mesh_group_source_cmd_worker(vty, argv[4]->arg); @@ -5696,7 +5721,10 @@ DEFUN (show_ip_msdp_peer_detail, "JavaScript Object Notation\n") { u_char uj = use_json(argc, argv); - if (argv[4]->arg) + if (uj) + argc--; + + if (argc == 4) ip_msdp_show_peers_detail(vty, argv[4]->arg, uj); else ip_msdp_show_peers(vty, uj); @@ -5948,9 +5976,12 @@ DEFUN (show_ip_msdp_sa_sg, "JavaScript Object Notation\n") { u_char uj = use_json(argc, argv); - if (argv[5]->arg) + if (uj) + argc--; + + if (argc == 5) ip_msdp_show_sa_sg(vty, argv[4]->arg, argv[5]->arg, uj); - else if (argv[4]->arg) + else if (argc == 4) ip_msdp_show_sa_addr(vty, argv[4]->arg, uj); else ip_msdp_show_sa(vty, uj);