]> git.puffer.fish Git - mirror/frr.git/commitdiff
Merge remote-tracking branch 'origin/stable/2.0'
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 6 Jan 2017 14:58:21 +0000 (09:58 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 6 Jan 2017 14:58:21 +0000 (09:58 -0500)
38 files changed:
1  2 
.gitignore
bgpd/bgp_attr.c
bgpd/bgp_ecommunity.c
bgpd/bgp_encap.c
bgpd/bgp_mplsvpn.c
bgpd/bgp_route.c
bgpd/bgp_updgrp_adv.c
bgpd/bgp_vty.c
bgpd/bgp_vty.h
bgpd/rfapi/bgp_rfapi_cfg.c
bgpd/rfapi/rfapi.c
bgpd/rfapi/rfapi_vty.c
configure.ac
debian/control
isisd/isis_redist.c
isisd/isisd.c
ldpd/lde.c
lib/command.c
lib/log.h
lib/route_types.txt
lib/routemap.c
lib/smux.c
lib/vty.c
lib/zebra.h
ospf6d/ospf6_asbr.c
ospfd/ospf_vty.c
pimd/pim_cmd.c
pimd/pim_cmd.h
pimd/pim_vty.c
ripd/rip_zebra.c
ripngd/ripng_zebra.c
tools/Makefile.am
vtysh/vtysh.c
vtysh/vtysh_user.c
zebra/test_main.c
zebra/zebra_routemap.c
zebra/zebra_static.c
zebra/zebra_vty.c

diff --cc .gitignore
Simple merge
diff --cc bgpd/bgp_attr.c
Simple merge
Simple merge
Simple merge
Simple merge
index 1e9aa4bb2adc169ad2c944838662e2426025ebfc,c717a930b11a924a32a1cd2f20ec6d60995bc8f4..e40c1fe25b6e0e057a9d03209944a2c476bfe287
@@@ -7858,337 -8144,231 +7858,341 @@@ bgp_show_route (struct vty *vty, const 
  }
  
  /* BGP route print out function. */
 -DEFUN (show_ip_bgp,
 -       show_ip_bgp_cmd,
 -       "show ip bgp {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "JavaScript Object Notation\n")
 -{
 -  return bgp_show (vty, NULL, AFI_IP, SAFI_UNICAST, bgp_show_type_normal, NULL, use_json(argc, argv));
 -}
 -
  DEFUN (show_ip_bgp_ipv4,
         show_ip_bgp_ipv4_cmd,
-        "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>]\
 -       "show ip bgp ipv4 (unicast|multicast) {json}",
++       "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]]\
 +          [<\
 +             cidr-only\
 +             |dampening <flap-statistics|dampened-paths|parameters>\
 +             |route-map WORD\
 +             |prefix-list WORD\
 +             |filter-list WORD\
 +             |community [<AA:NN|local-AS|no-advertise|no-export> [exact-match]]\
 +             |community-list <(1-500)|WORD> [exact-match]\
 +             |A.B.C.D/M longer-prefixes\
 +             |X:X::X:X/M longer-prefixes\
 +           >]\
 +          [json]",
         SHOW_STR
         IP_STR
         BGP_STR
 -       "Address family\n"
 +       BGP_INSTANCE_HELP_STR
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
-        "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
         "Address Family modifier\n"
-        "Address Family\n"
+        "Address Family modifier\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 - 
 -  return bgp_show (vty, NULL, AFI_IP, 
 -                   bgp_vty_safi_from_arg(argv[0]), 
 -                   bgp_show_type_normal, NULL, uj);
 -}
 -
 -ALIAS (show_ip_bgp_ipv4,
 -       show_bgp_ipv4_safi_cmd,
 -       "show bgp ipv4 (unicast|multicast) {json}",
 -       SHOW_STR
 -       BGP_STR
 -       "Address family\n"
+        "Address Family modifier\n"
         "Address Family modifier\n"
 -       "JavaScript Object Notation\n")
 +       "Display only routes with non-natural netmasks\n"
 +       "Display detailed information about dampening\n"
 +       "Display flap statistics of routes\n"
 +       "Display paths suppressed due to dampening\n"
 +       "Display dampening parameters\n"
 +       "Display routes matching the route-map\n"
 +       "A route-map to match on\n"
 +       "Display routes conforming to the prefix-list\n"
 +       "Prefix-list name\n"
 +       "Display routes conforming to the filter-list\n"
 +       "Regular expression access list name\n"
 +       "Display routes matching the communities\n"
 +       COMMUNITY_AANN_STR
 +       "Do not send outside local AS (well-known community)\n"
 +       "Do not advertise to any peer (well-known community)\n"
 +       "Do not export to next AS (well-known community)\n"
 +       "Exact match of the communities\n"
 +       "Display routes matching the community-list\n"
 +       "community-list number\n"
 +       "community-list name\n"
 +       "Exact match of the communities\n"
 +       "IPv4 prefix\n"
 +       "Display route and more specific routes\n"
 +       "IPv6 prefix\n"
 +       "Display route and more specific routes\n"
 +       JSON_STR)
 +{
 +  char *vrf = NULL;
 +  afi_t afi = AFI_IP6;
 +  safi_t safi = SAFI_UNICAST;
 +  int exact_match = 0;
 +  enum bgp_show_type sh_type = bgp_show_type_normal;
 +
 +  int idx = 0;
 +
 +  if (argv_find (argv, argc, "ip", &idx))
 +    afi = AFI_IP;
 +  if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
 +    vrf = argv[++idx]->arg;
 +  if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
 +  {
 +    afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
 +    if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
-       safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
++      safi = bgp_vty_safi_from_arg (argv[idx]->text);
 +  }
 +  else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
 +  {
 +    afi = AFI_IP;
 +    safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
 +    // advance idx if necessary
 +    argv_find (argv, argc, "unicast", &idx);
 +  }
 +
 +  int uj = use_json (argc, argv);
 +  if (uj) argc--;
 +
 +  struct bgp *bgp = bgp_lookup_by_name (vrf);
 +  if (bgp == NULL)
 +   {
 +     vty_out (vty, "Can't find BGP instance %s%s", vrf, VTY_NEWLINE);
 +     return CMD_WARNING;
 +   }
 +
 +  if (++idx < argc)
 +  {
 +    if (strmatch(argv[idx]->text, "cidr-only"))
 +      return bgp_show (vty, bgp, afi, safi, bgp_show_type_cidr_only, NULL, uj);
 +
 +    else if (strmatch(argv[idx]->text, "dampening"))
 +    {
 +      if (argv_find (argv, argc, "dampened-paths", &idx))
 +        return bgp_show (vty, bgp, afi, safi, bgp_show_type_dampend_paths, NULL, uj);
 +      else if (argv_find (argv, argc, "flap-statistics", &idx))
 +        return bgp_show (vty, bgp, afi, safi, bgp_show_type_flap_statistics, NULL, uj);
 +      else if (argv_find (argv, argc, "parameters", &idx))
 +        return bgp_show_dampening_parameters (vty, AFI_IP, SAFI_UNICAST);
 +    }
 +
 +    else if (strmatch(argv[idx]->text, "prefix-list"))
 +      return bgp_show_prefix_list (vty, vrf, argv[idx + 1]->arg, afi, safi, bgp_show_type_prefix_list);
 +
 +    else if (strmatch(argv[idx]->text, "filter-list"))
 +      return bgp_show_filter_list (vty, vrf, argv[idx + 1]->arg, afi, safi, bgp_show_type_filter_list);
 +
 +    else if (strmatch(argv[idx]->text, "route-map"))
 +      return bgp_show_route_map (vty, vrf, argv[idx + 1]->arg, afi, safi, bgp_show_type_route_map);
 +
 +    else if (strmatch(argv[idx]->text, "community"))
 +    {
 +      /* show a specific community */
 +      if (argv[idx + 1]->type == VARIABLE_TKN ||
 +          strmatch(argv[idx + 1]->text, "local-AS") ||
 +          strmatch(argv[idx + 1]->text, "no-advertise") ||
 +          strmatch(argv[idx + 1]->text, "no-export"))
 +        {
 +          if (strmatch(argv[idx + 2]->text, "exact_match")) 
 +            exact_match = 1;
 +          return bgp_show_community (vty, vrf, argc, argv, exact_match, afi, safi);
 +        }
 +      /* show all communities */
 +      else
 +        return bgp_show (vty, bgp, afi, safi, bgp_show_type_community_all, NULL, uj);
 +    }
 +    else if (strmatch(argv[idx]->text, "community-list"))
 +      {
 +        const char *clist_number_or_name = argv[++idx]->arg;
 +        if (++idx < argc && strmatch (argv[idx]->arg, "exact-match"))
 +          exact_match = 1;
 +        return bgp_show_community_list (vty, vrf, clist_number_or_name, exact_match, afi, safi);
 +      }
 +    /* prefix-longer */
 +    else if (argv[idx]->type == IPV4_TKN || argv[idx]->type == IPV6_TKN)
 +      return bgp_show_prefix_longer (vty, vrf, argv[idx + 1]->arg, afi, safi, bgp_show_type_prefix_longer);
 +  }
 +
 +  return bgp_show (vty, bgp, afi, safi, sh_type, NULL, uj);
 +}
  
  DEFUN (show_ip_bgp_route,
         show_ip_bgp_route_cmd,
-        "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>]"
 -       "show ip bgp A.B.C.D {json}",
++       "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]]"
 +       "<A.B.C.D|A.B.C.D/M|X:X::X:X|X:X::X:X/M> [<bestpath|multipath>] [json]",
         SHOW_STR
         IP_STR
         BGP_STR
-        "Address Family\n"
 +       BGP_INSTANCE_HELP_STR
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
-        "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family modifier\n"
         "Network in the BGP routing table to display\n"
 -       "JavaScript Object Notation\n")
 -{
 -  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, use_json(argc, argv));
 -}
 -
 -DEFUN (show_ip_bgp_route_pathtype,
 -       show_ip_bgp_route_pathtype_cmd,
 -       "show ip bgp A.B.C.D (bestpath|multipath) {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
 +       "IPv4 prefix\n"
 +       "Network in the BGP routing table to display\n"
 +       "IPv6 prefix\n"
         "Display only the bestpath\n"
         "Display only multipaths\n"
 -       "JavaScript Object Notation\n")
 +       JSON_STR)
  {
 -  u_char uj = use_json(argc, argv);
 +  int prefix_check = 0;
  
 -  if (strncmp (argv[1], "b", 1) == 0)
 -    return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
 -  else
 -    return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
 -}
 +  afi_t afi = AFI_IP6;
 +  safi_t safi = SAFI_UNICAST;
 +  char *vrf = NULL;
 +  char *prefix = NULL;
  
 -DEFUN (show_bgp_ipv4_safi_route_pathtype,
 -       show_bgp_ipv4_safi_route_pathtype_cmd,
 -       "show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D (bestpath|multipath) {json}",
 -       SHOW_STR
 -       BGP_STR
 -       AFI_SAFI_STR
 -       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
 -       "Display only the bestpath\n"
 -       "Display only multipaths\n"
 -       "JavaScript Object Notation\n")
 -{
 +  enum bgp_path_type path_type;
    u_char uj = use_json(argc, argv);
  
 -  if (strncmp (argv[2], "b", 1) == 0)
 -    return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
 -                           bgp_vty_safi_from_arg(argv[0]), 
 -                           NULL, 0, BGP_PATH_BESTPATH, uj);
 -  else
 -    return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
 -                           bgp_vty_safi_from_arg(argv[0]), 
 -                           NULL, 0, BGP_PATH_MULTIPATH, uj);
 -}
 +  int idx = 0;
 +
 +  /* show [ip] bgp */
 +  if (argv_find (argv, argc, "ip", &idx))
 +    afi = AFI_IP;
 +  /* [<view|vrf> WORD] */
 +  if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
 +    vrf = argv[++idx]->arg;
 +  /* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] */
 +  if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
 +  {
 +    afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
 +    if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
 +      safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
 +  }
 +  else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
 +  {
 +    afi = AFI_IP;
 +    safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
 +    // advance idx if necessary
 +    argv_find (argv, argc, "unicast", &idx);
 +  }
  
 -DEFUN (show_bgp_ipv4_prefix,
 -       show_bgp_ipv4_prefix_cmd,
 -       "show bgp ipv4 A.B.C.D/M {json}",
 -       SHOW_STR
 -       BGP_STR
 -       IP_STR
 -       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
 -       JSON_STR)
 -{
 -  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, use_json (argc, argv));
 -}
 +  /* <A.B.C.D|A.B.C.D/M|X:X::X:X|X:X::X:X/M> */
 +  if (argv_find (argv, argc, "A.B.C.D", &idx) || argv_find (argv, argc, "X:X::X:X", &idx))
 +    prefix_check = 0;
 +  else if (argv_find (argv, argc, "A.B.C.D/M", &idx) || argv_find (argv, argc, "X:X::X:X/M", &idx))
 +    prefix_check = 1;
  
 -DEFUN (show_bgp_ipv6_route,
 -       show_bgp_ipv6_route_cmd,
 -       "show bgp ipv6 X:X::X:X {json}",
 -       SHOW_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Network in the BGP routing table to display\n"
 -       JSON_STR)
 -{
 -  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, use_json (argc, argv));
 -}
 +  if ((argv[idx]->type == IPV6_TKN || argv[idx]->type == IPV6_PREFIX_TKN) && afi != AFI_IP6)
 +  {
 +    vty_out (vty, "%% Cannot specify IPv6 address or prefix with IPv4 AFI%s", VTY_NEWLINE);
 +    return CMD_WARNING;
 +  }
 +  if ((argv[idx]->type == IPV4_TKN || argv[idx]->type == IPV4_PREFIX_TKN) && afi != AFI_IP)
 +  {
 +    vty_out (vty, "%% Cannot specify IPv4 address or prefix with IPv6 AFI%s", VTY_NEWLINE);
 +    return CMD_WARNING;
 +  }
  
 -DEFUN (show_bgp_ipv6_prefix,
 -       show_bgp_ipv6_prefix_cmd,
 -       "show bgp ipv6 X:X::X:X/M {json}",
 -       SHOW_STR
 -       BGP_STR
 -       IP_STR
 -       "IPv6 prefix <network>/<length>\n"
 -       JSON_STR)
 -{
 -  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, use_json (argc,argv));
 -}
 +  prefix = argv[idx]->arg;
  
 -DEFUN (show_ip_bgp_ipv4_route,
 -       show_ip_bgp_ipv4_route_cmd,
 -       "show ip bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       AFI_SAFI_STR
 -       "Network in the BGP routing table to display\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 +  /* [<bestpath|multipath>] */
 +  if (argv_find (argv, argc, "bestpath", &idx))
 +    path_type = BGP_PATH_BESTPATH;
 +  else if (argv_find (argv, argc, "multipath", &idx))
 +    path_type = BGP_PATH_MULTIPATH;
 +  else
 +    path_type = BGP_PATH_ALL;
  
 -  return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
 -                         bgp_vty_safi_from_arg(argv[0]), 
 -                         NULL, 0, BGP_PATH_ALL, uj);
 +  return bgp_show_route (vty, vrf, prefix, afi, safi, NULL, prefix_check, path_type, uj);
  }
  
 -ALIAS (show_ip_bgp_ipv4_route,
 -       show_bgp_ipv4_safi_route_cmd,
 -       "show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D {json}",
 -       SHOW_STR
 -       BGP_STR
 -       AFI_SAFI_STR
 -       "Network in the BGP routing table to display\n"
 -       "JavaScript Object Notation\n")
 -
 -DEFUN (show_ip_bgp_vpnv4_all_route,
 -       show_ip_bgp_vpnv4_all_route_cmd,
 -       "show ip bgp vpnv4 all A.B.C.D {json}",
 +DEFUN (show_ip_bgp_regexp,
 +       show_ip_bgp_regexp_cmd,
-        "show [ip] bgp [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] regexp REGEX...",
++       "show [ip] bgp [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|encap [unicast]|vpnv4 [unicast]>] regexp REGEX...",
         SHOW_STR
         IP_STR
         BGP_STR
 -       "Display VPNv4 NLRI specific information\n"
 -       "Display information about all VPNv4 NLRIs\n"
 -       "Network in the BGP routing table to display\n"
 -       "JavaScript Object Notation\n")
 -{
 -  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json(argc, argv));
 -}
 -
 -DEFUN (show_bgp_ipv4_safi_rd_route,
 -       show_bgp_ipv4_safi_rd_route_cmd,
 -       "show bgp ipv4 (encap|vpn) rd ASN:nn_or_IP-address:nn A.B.C.D {json}",
 -       SHOW_STR
 -       BGP_STR
         "Address Family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       "Display information for a route distinguisher\n"
 -       "ENCAP Route Distinguisher\n"
 -       "Network in the BGP routing table to display\n")
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Display routes matching the AS path regular expression\n"
 +       "A regular-expression to match the BGP AS paths\n")
  {
 -  int ret;
 -  struct prefix_rd prd;
 -  safi_t      safi;
 +  afi_t afi = AFI_IP6;
 +  safi_t safi = SAFI_UNICAST;
  
 -  if (bgp_parse_safi(argv[0], &safi)) {
 -    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
 -    return CMD_WARNING;
 +  int idx = 0;
 +
 +  /* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] */
 +  if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
 +  {
 +    afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
 +    if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
 +      safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
    }
 -  ret = str2prefix_rd (argv[1], &prd);
 -  if (! ret)
 -    {
 -      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
 -      return CMD_WARNING;
 -    }
 -  return bgp_show_route (vty, NULL, argv[2], AFI_IP, safi, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
 +  else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
 +  {
 +    afi = AFI_IP;
 +    safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
 +    // advance idx if necessary
 +    argv_find (argv, argc, "unicast", &idx);
 +  }
 +
 +  // get index of regex
 +  argv_find (argv, argc, "regexp", &idx);
 +  idx++;
 +
 +  char *regstr = argv_concat (argv, argc, idx);
 +  int rc = bgp_show_regexp (vty, (const char *) regstr, afi, safi, bgp_show_type_regexp);
 +  XFREE (MTYPE_TMP, regstr);
 +  return rc;
  }
  
 -DEFUN (show_bgp_ipv6_safi_rd_route,
 -       show_bgp_ipv6_safi_rd_route_cmd,
 -       "show bgp ipv6 (encap|vpn) rd ASN:nn_or_IP-address:nn X:X::X:X {json}",
 +DEFUN (show_ip_bgp_instance_all,
 +       show_ip_bgp_instance_all_cmd,
 +       "show [ip] bgp <view|vrf> all [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] [json]",
         SHOW_STR
 +       IP_STR
         BGP_STR
 +       BGP_INSTANCE_ALL_HELP_STR
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
         "Address Family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       "Display information for a route distinguisher\n"
 -       "ENCAP Route Distinguisher\n"
 -       "Network in the BGP routing table to display\n")
 +       "Address Family modifier\n"
 +       JSON_STR)
  {
 -  int ret;
 -  struct prefix_rd prd;
 -  safi_t      safi;
 +  afi_t afi = AFI_IP;
 +  safi_t safi = SAFI_UNICAST;
  
 -  if (bgp_parse_safi(argv[0], &safi)) {
 -    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
 -    return CMD_WARNING;
 +  int idx = 0;
 +
 +  /* show [ip] bgp */
 +  if (argv_find (argv, argc, "ip", &idx))
 +    afi = AFI_IP;
 +  /* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] */
 +  if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
 +  {
 +    afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
 +    if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
 +      safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
    }
 -  ret = str2prefix_rd (argv[1], &prd);
 -  if (! ret)
 -    {
 -      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
 -      return CMD_WARNING;
 -    }
 -  return bgp_show_route (vty, NULL, argv[2], AFI_IP6, SAFI_ENCAP, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
 +  else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
 +  {
 +    afi = AFI_IP;
 +    safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
 +    // advance idx if necessary
 +    argv_find (argv, argc, "unicast", &idx);
 +  }
 +
 +  u_char uj = use_json(argc, argv);
 +
 +  bgp_show_all_instances_routes_vty (vty, afi, safi, uj);
 +  return CMD_SUCCESS;
  }
  
  
Simple merge
diff --cc bgpd/bgp_vty.c
index 1c2cc037f9d8670fae703275f19c52e73518b723,29649c5b24e6c9c887569c1429054f832a47e550..c691d20a8767ca7f9689a1d4251f7c8f50748698
@@@ -123,25 -123,29 +123,29 @@@ bgp_parse_afi(const char *str, afi_t *a
      return -1;
  }
  
 -bgp_vty_safi_from_arg(const char *safi_str) 
+ /* supports (unicast|multicast|vpn|encap) */
+ safi_t
++bgp_vty_safi_from_arg(const char *safi_str)
+ {
+   safi_t safi = SAFI_MAX;       /* unknown */
+   if (strncmp (safi_str, "m", 1) == 0)
+     safi = SAFI_MULTICAST;
+   else if (strncmp (safi_str, "u", 1) == 0)
+     safi = SAFI_UNICAST;
+   else if (strncmp (safi_str, "e", 1) == 0)
+     safi = SAFI_ENCAP;
+   else if (strncmp (safi_str, "v", 1) == 0)
+    safi = SAFI_MPLS_VPN;
+   return safi;
+ }
  int
  bgp_parse_safi(const char *str, safi_t *safi)
  {
-     if (!strcmp(str, "encap")) {
-       *safi = SAFI_ENCAP;
-       return 0;
-     }
-     if (!strcmp(str, "multicast")) {
-       *safi =  SAFI_MULTICAST;
-       return 0;
-     }
-     if (!strcmp(str, "unicast")) {
-       *safi =  SAFI_UNICAST;
-       return 0;
-     }
-     if (!strcmp(str, "vpn")) {
-       *safi =  SAFI_MPLS_VPN;
-       return 0;
-     }
+   *safi = bgp_vty_safi_from_arg(str);
+   if (*safi != SAFI_MAX)
+     return 0;
 -  else 
++  else
      return -1;
  }
  
@@@ -5411,17 -6052,26 +5415,31 @@@ DEFUN (address_family_ipv4
  
  DEFUN (address_family_ipv4_safi,
         address_family_ipv4_safi_cmd,
-        "address-family ipv4 <unicast|multicast>",
 -       "address-family ipv4 (unicast|multicast)",
++       "address-family ipv4 <unicast|multicast|vpn|encap>",
         "Enter Address Family command mode\n"
 -       AFI_SAFI_STR)
 +       "Address Family\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family modifier\n")
  {
 -  switch (bgp_vty_safi_from_arg(argv[0]))
 +  int idx_safi = 2;
-   if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
-     vty->node = BGP_IPV4M_NODE;
-   else
-     vty->node = BGP_IPV4_NODE;
++  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;
+     }
  
    return CMD_SUCCESS;
  }
@@@ -5438,14 -6088,13 +5456,16 @@@ DEFUN (address_family_ipv6
  
  DEFUN (address_family_ipv6_safi,
         address_family_ipv6_safi_cmd,
-        "address-family ipv6 <unicast|multicast>",
 -       "address-family ipv6 (unicast|multicast)",
++       "address-family ipv6 <unicast|multicast|vpn|encap>",
         "Enter Address Family command mode\n"
 -       "Address family\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
+        "Address Family modifier\n"
         "Address Family modifier\n")
  {
 -  if (strncmp (argv[0], "m", 1) == 0)
 +  int idx_safi = 2;
 +  if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
      vty->node = BGP_IPV6M_NODE;
    else
      vty->node = BGP_IPV6_NODE;
@@@ -5595,265 -6260,3814 +5615,269 @@@ bgp_clear_prefix (struct vty *vty, cons
    return CMD_SUCCESS;
  }
  
 +/* one clear bgp command to rule them all */
  DEFUN (clear_ip_bgp_all,
         clear_ip_bgp_all_cmd,
-        "clear [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> [<soft [<in|out>]|in [prefix-filter]|out>]",
 -       "clear ip bgp *",
++       "clear [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> [<soft [<in|out>]|in [prefix-filter]|out>]",
         CLEAR_STR
         IP_STR
         BGP_STR
 -       "Clear all peers\n")
 +       BGP_INSTANCE_HELP_STR
 +       "Clear all peers\n"
 +       "BGP neighbor address to clear\n"
 +       "BGP IPv6 neighbor to clear\n"
 +       "BGP neighbor on interface to clear\n"
 +       "Clear peers with the AS number\n"
 +       "Clear all external peers\n"
 +       "Clear all members of peer-group\n"
 +       "BGP peer-group name\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       BGP_SOFT_STR
 +       BGP_SOFT_IN_STR
 +       BGP_SOFT_OUT_STR
 +       BGP_SOFT_IN_STR
 +       "Push out prefix-list ORF and do inbound soft reconfig\n"
 +       BGP_SOFT_OUT_STR)
  {
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], 0, 0, clear_all, BGP_CLEAR_SOFT_NONE, NULL);    
 +  VTY_DECLVAR_CONTEXT(bgp, bgp);
 +  char *vrf = NULL;
 +
 +  afi_t afi = AFI_IP6;
 +  safi_t safi = SAFI_UNICAST;
 +  enum clear_sort clr_sort = clear_peer;
 +  enum bgp_clear_type clr_type;
 +  char *clr_arg = NULL;
 +
 +  int idx = 0;
 +
 +  /* clear [ip] bgp */
 +  if (argv_find (argv, argc, "ip", &idx))
 +    afi = AFI_IP;
 +  /* [<view|vrf> WORD] */
 +  if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
 +    {
 +      vrf = argv[idx + 1]->arg;
 +      idx += 2;
 +    }
 +  /* <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> */
 +  if (argv_find (argv, argc, "*", &idx))
 +    {
 +      clr_sort = clear_all;
 +    }
 +  else if (argv_find (argv, argc, "A.B.C.D", &idx))
 +    {
 +      clr_sort = clear_peer;
 +      clr_arg = argv[idx]->arg;
 +    }
 +  else if (argv_find (argv, argc, "X:X::X:X", &idx))
 +    {
 +      clr_sort = clear_peer;
 +      clr_arg = argv[idx]->arg;
 +    }
 +  else if (argv_find (argv, argc, "peer-group", &idx))
 +    {
 +      clr_sort = clear_group;
 +      idx++;
 +      clr_arg = argv[idx]->arg;
 +
 +      if (! peer_group_lookup (bgp, clr_arg))
 +        {
 +          vty_out (vty, "%% No such peer-group%s", VTY_NEWLINE);
 +          return CMD_WARNING;
 +        }
 +    }
 +  else if (argv_find (argv, argc, "WORD", &idx))
 +    {
 +      if (peer_lookup_by_conf_if (bgp, argv[idx]->arg))
 +        {
 +          clr_sort = clear_peer;
 +          clr_arg = argv[idx]->arg;
 +        }
 +      else
 +        {
 +          vty_out (vty, "%% No such neighbor%s", VTY_NEWLINE);
 +        return CMD_WARNING;
 +        }
 +    }
 +  else if (argv_find (argv, argc, "(1-4294967295)", &idx))
 +    {
 +      clr_sort = clear_as;
 +      clr_arg = argv[idx]->arg;
 +    }
 +  else if (argv_find (argv, argc, "external", &idx))
 +    {
 +      clr_sort = clear_external;
 +    }
 +  /* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]||vpnv4 [unicast]>] */
 +  if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
 +    {
 +      afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
 +      if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
-         safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
++        safi = bgp_vty_safi_from_arg (argv[idx]->text);
 +    }
 +  else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
 +    {
 +      afi = AFI_IP;
-       safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
++      safi = bgp_vty_safi_from_arg (argv[idx]->text);
 +      // advance idx if necessary
 +      argv_find (argv, argc, "unicast", &idx);
 +    }
 +  /* [<soft [<in|out>]|in [prefix-filter]|out>] */
 +  if (argv_find (argv, argc, "soft", &idx))
 +    {
 +      if (argv_find (argv, argc, "in", &idx) || argv_find (argv, argc, "out", &idx))
 +        clr_type = strmatch (argv[idx]->text, "in") ? BGP_CLEAR_SOFT_IN : BGP_CLEAR_SOFT_OUT;
 +      else
 +        clr_type = BGP_CLEAR_SOFT_BOTH;
 +    }
 +  else if (argv_find (argv, argc, "in", &idx))
 +    {
 +      clr_type = argv_find (argv, argc, "prefix-filter", &idx) ? BGP_CLEAR_SOFT_IN_ORF_PREFIX : BGP_CLEAR_SOFT_IN;
 +    }
 +  else if (argv_find (argv, argc, "out", &idx))
 +    {
 +      clr_type = BGP_CLEAR_SOFT_OUT;
 +    }
 +  else
 +    clr_type = BGP_CLEAR_SOFT_NONE;
  
 -  return bgp_clear_vty (vty, NULL, 0, 0, clear_all, BGP_CLEAR_SOFT_NONE, NULL);
 +  return bgp_clear_vty (vty, vrf, afi, safi, clr_sort, clr_type, clr_arg);
  }
  
 -ALIAS (clear_ip_bgp_all,
 -       clear_ip_bgp_instance_all_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " *",
 +DEFUN (clear_ip_bgp_prefix,
 +       clear_ip_bgp_prefix_cmd,
 +       "clear [ip] bgp [<view|vrf> WORD] prefix A.B.C.D/M",
         CLEAR_STR
         IP_STR
         BGP_STR
         BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n")
 +       "Clear bestpath and re-advertise\n"
 +       "IPv4 prefix\n")
 +{
 +  char *vrf = NULL;
 +  char *prefix = NULL;
  
 -ALIAS (clear_ip_bgp_all,
 -       clear_bgp_all_cmd,
 -       "clear bgp *",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all peers\n")
 +  int idx = 0;
  
 -ALIAS (clear_ip_bgp_all,
 -       clear_bgp_instance_all_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " *",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n")
 +  /* [<view|vrf> WORD] */
 +  if (argv_find (argv, argc, "WORD", &idx))
 +    vrf = argv[idx]->arg;
  
 -ALIAS (clear_ip_bgp_all,
 -       clear_bgp_ipv6_all_cmd,
 -       "clear bgp ipv6 *",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all peers\n")
 +  prefix = argv[argc-1]->arg;
  
 -ALIAS (clear_ip_bgp_all,
 -       clear_bgp_instance_ipv6_all_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 *",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all peers\n")
 +  return bgp_clear_prefix (vty, vrf, prefix, AFI_IP, SAFI_UNICAST, NULL);
 +}
  
 -DEFUN (clear_ip_bgp_peer,
 -       clear_ip_bgp_peer_cmd, 
 -       "clear ip bgp (A.B.C.D|X:X::X:X|WORD)",
 +DEFUN (clear_bgp_ipv6_safi_prefix,
 +       clear_bgp_ipv6_safi_prefix_cmd,
-        "clear [ip] bgp ipv6 <unicast|multicast> prefix X:X::X:X/M",
++       "clear [ip] bgp ipv6 <unicast|multicast|vpn|encap> prefix X:X::X:X/M",
         CLEAR_STR
         IP_STR
         BGP_STR
 -       "BGP neighbor IP address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n")
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Clear bestpath and re-advertise\n"
 +       "IPv6 prefix\n")
  {
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], 0, 0, clear_peer, BGP_CLEAR_SOFT_NONE, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, 0, 0, clear_peer, BGP_CLEAR_SOFT_NONE, argv[0]);
 +  int idx_safi = 3;
 +  int idx_ipv6_prefixlen = 5;
-   if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
-     return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_MULTICAST, NULL);
-   else
-     return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_UNICAST, NULL);
++  safi_t safi = bgp_vty_safi_from_arg (argv[idx_safi]->arg);
++  return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, safi, NULL);
  }
  
 -ALIAS (clear_ip_bgp_peer,
 -       clear_ip_bgp_instance_peer_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|X:X::X:X|WORD)",
 +DEFUN (clear_bgp_instance_ipv6_safi_prefix,
 +       clear_bgp_instance_ipv6_safi_prefix_cmd,
-        "clear [ip] bgp <view|vrf> WORD ipv6 <unicast|multicast> prefix X:X::X:X/M",
++       "clear [ip] bgp <view|vrf> WORD ipv6 <unicast|multicast|vpn|encap> prefix X:X::X:X/M",
         CLEAR_STR
         IP_STR
         BGP_STR
         BGP_INSTANCE_HELP_STR
 -       "BGP neighbor IP address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n")
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Clear bestpath and re-advertise\n"
 +       "IPv6 prefix\n")
 +{
 +  int idx_word = 3;
 +  int idx_safi = 5;
 +  int idx_ipv6_prefixlen = 7;
-   if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
-     return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_MULTICAST, NULL);
-   else
-     return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_UNICAST, NULL);
++  safi_t safi = bgp_vty_safi_from_arg (argv[idx_safi]->text);
++  return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, safi, NULL);
 +}
  
 -ALIAS (clear_ip_bgp_peer,
 -       clear_bgp_peer_cmd, 
 -       "clear bgp (A.B.C.D|X:X::X:X|WORD)",
 -       CLEAR_STR
 +DEFUN (show_bgp_views,
 +       show_bgp_views_cmd,
 +       "show [ip] bgp views",
 +       SHOW_STR
 +       IP_STR
         BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n")
 +       "Show the defined BGP views\n")
 +{
 +  struct list *inst = bm->bgp;
 +  struct listnode *node;
 +  struct bgp *bgp;
  
 -ALIAS (clear_ip_bgp_peer,
 -       clear_bgp_instance_peer_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " (A.B.C.D|X:X::X:X|WORD)",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor IP address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n")
 +  if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
 +    {
 +      vty_out (vty, "BGP Multiple Instance is not enabled%s", VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
  
 -ALIAS (clear_ip_bgp_peer,
 -       clear_bgp_ipv6_peer_cmd, 
 -       "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD)",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n")
 +  vty_out (vty, "Defined BGP views:%s", VTY_NEWLINE);
 +  for (ALL_LIST_ELEMENTS_RO(inst, node, bgp))
 +    {
 +      /* Skip VRFs. */
 +      if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF)
 +        continue;
 +      vty_out (vty, "\t%s (AS%u)%s",
 +               bgp->name ? bgp->name : "(null)",
 +               bgp->as, VTY_NEWLINE);
 +    }
  
 -ALIAS (clear_ip_bgp_peer,
 -       clear_bgp_instance_ipv6_peer_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 (A.B.C.D|X:X::X:X|WORD)",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "BGP neighbor IP address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n")
 +  return CMD_SUCCESS;
 +}
  
 -DEFUN (clear_ip_bgp_peer_group,
 -       clear_ip_bgp_peer_group_cmd, 
 -       "clear ip bgp peer-group WORD",
 -       CLEAR_STR
 +DEFUN (show_bgp_vrfs,
 +       show_bgp_vrfs_cmd,
 +       "show [ip] bgp vrfs [json]",
 +       SHOW_STR
         IP_STR
         BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n")
 +       "Show BGP VRFs\n"
 +       JSON_STR)
  {
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], 0, 0, clear_group, BGP_CLEAR_SOFT_NONE, argv[2]);
 +  struct list *inst = bm->bgp;
 +  struct listnode *node;
 +  struct bgp *bgp;
 +  u_char uj = use_json(argc, argv);
 +  json_object *json = NULL;
 +  json_object *json_vrfs = NULL;
 +  int count = 0;
 +  static char header[] = "Type  Id     RouterId          #PeersCfg  #PeersEstb  Name";
  
 -  return bgp_clear_vty (vty, NULL, 0, 0, clear_group, BGP_CLEAR_SOFT_NONE, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_group,
 -       clear_ip_bgp_instance_peer_group_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n")
 -
 -ALIAS (clear_ip_bgp_peer_group,
 -       clear_bgp_peer_group_cmd, 
 -       "clear bgp peer-group WORD",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n")
 -
 -ALIAS (clear_ip_bgp_peer_group,
 -       clear_bgp_instance_peer_group_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " peer-group WORD",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n")
 -
 -ALIAS (clear_ip_bgp_peer_group,
 -       clear_bgp_ipv6_peer_group_cmd, 
 -       "clear bgp ipv6 peer-group WORD",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n")
 -
 -ALIAS (clear_ip_bgp_peer_group,
 -       clear_bgp_instance_ipv6_peer_group_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 peer-group WORD",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n")
 -
 -DEFUN (clear_ip_bgp_external,
 -       clear_ip_bgp_external_cmd,
 -       "clear ip bgp external",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n")
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], 0, 0, clear_external, BGP_CLEAR_SOFT_NONE, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, 0, 0, clear_external, BGP_CLEAR_SOFT_NONE, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_external,
 -       clear_ip_bgp_instance_external_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n")
 -
 -ALIAS (clear_ip_bgp_external,
 -       clear_bgp_external_cmd, 
 -       "clear bgp external",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all external peers\n")
 -
 -ALIAS (clear_ip_bgp_external,
 -       clear_bgp_instance_external_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " external",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n")
 -
 -ALIAS (clear_ip_bgp_external,
 -       clear_bgp_ipv6_external_cmd, 
 -       "clear bgp ipv6 external",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all external peers\n")
 -
 -ALIAS (clear_ip_bgp_external,
 -       clear_bgp_instance_ipv6_external_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 external",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all external peers\n")
 -
 -DEFUN (clear_ip_bgp_prefix,
 -       clear_ip_bgp_prefix_cmd,
 -       "clear ip bgp prefix A.B.C.D/M",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear bestpath and re-advertise\n"
 -       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 -{
 -  if (argc == 3)
 -    return bgp_clear_prefix (vty, argv[1], argv[2], AFI_IP, SAFI_UNICAST, NULL);
 -
 -  return bgp_clear_prefix (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_prefix,
 -       clear_ip_bgp_instance_prefix_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " prefix A.B.C.D/M",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear bestpath and re-advertise\n"
 -       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 -
 -ALIAS (clear_ip_bgp_prefix,
 -       clear_bgp_prefix_cmd,
 -       "clear bgp prefix A.B.C.D/M",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear bestpath and re-advertise\n"
 -       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 -
 -ALIAS (clear_ip_bgp_prefix,
 -       clear_bgp_instance_prefix_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " prefix A.B.C.D/M",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear bestpath and re-advertise\n"
 -       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 -
 -DEFUN (clear_ip_bgp_as,
 -       clear_ip_bgp_as_cmd,
 -       "clear ip bgp " CMD_AS_RANGE,
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n")
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], 0, 0, clear_as, BGP_CLEAR_SOFT_NONE, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, 0, 0, clear_as, BGP_CLEAR_SOFT_NONE, argv[0]);
 -}       
 -
 -ALIAS (clear_ip_bgp_as,
 -       clear_ip_bgp_instance_as_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE,
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n")
 -
 -ALIAS (clear_ip_bgp_as,
 -       clear_bgp_as_cmd,
 -       "clear bgp " CMD_AS_RANGE,
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n")
 -
 -ALIAS (clear_ip_bgp_as,
 -       clear_bgp_instance_as_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE,
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n")
 -
 -ALIAS (clear_ip_bgp_as,
 -       clear_bgp_ipv6_as_cmd,
 -       "clear bgp ipv6 " CMD_AS_RANGE,
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n")
 -
 -ALIAS (clear_ip_bgp_as,
 -       clear_bgp_instance_ipv6_as_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 " CMD_AS_RANGE,
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n")
 -
 -/* Outbound soft-reconfiguration */
 -DEFUN (clear_ip_bgp_all_soft_out,
 -       clear_ip_bgp_all_soft_out_cmd,
 -       "clear ip bgp * soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_all,
 -                          BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_soft_out,
 -       clear_ip_bgp_instance_all_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_all_soft_out,
 -       clear_ip_bgp_all_out_cmd,
 -       "clear ip bgp * out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_all_soft_out,
 -       clear_ip_bgp_instance_all_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_all_ipv4_soft_out,
 -       clear_ip_bgp_all_ipv4_soft_out_cmd,
 -       "clear ip bgp * ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 -                        BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_all_ipv4_soft_out,
 -       clear_ip_bgp_instance_all_ipv4_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_all,
 -                          BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 -                        BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_ipv4_soft_out,
 -       clear_ip_bgp_all_ipv4_out_cmd,
 -       "clear ip bgp * ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_instance_all_ipv4_soft_out,
 -       clear_ip_bgp_instance_all_ipv4_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_all_vpnv4_soft_out,
 -       clear_ip_bgp_all_vpnv4_soft_out_cmd,
 -       "clear ip bgp * vpnv4 unicast soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_vpnv4_soft_out,
 -       clear_ip_bgp_all_vpnv4_out_cmd,
 -       "clear ip bgp * vpnv4 unicast out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_all_encap_soft_out,
 -       clear_ip_bgp_all_encap_soft_out_cmd,
 -       "clear ip bgp * encap unicast soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig\n"
 -       "Soft reconfig outbound update\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_all,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_encap_soft_out,
 -       clear_ip_bgp_all_encap_out_cmd,
 -       "clear ip bgp * encap unicast out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig outbound update\n")
 -
 -DEFUN (clear_bgp_all_soft_out,
 -       clear_bgp_all_soft_out_cmd,
 -       "clear bgp * soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_all,
 -                          BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_bgp_all_soft_out,
 -       clear_bgp_instance_all_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " * soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_all_soft_out,
 -       clear_bgp_all_out_cmd,
 -       "clear bgp * out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_all_soft_out,
 -       clear_bgp_instance_all_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " * out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_all_soft_out,
 -       clear_bgp_ipv6_all_soft_out_cmd,
 -       "clear bgp ipv6 * soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_all_soft_out,
 -       clear_bgp_instance_ipv6_all_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 * soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_all_soft_out,
 -       clear_bgp_ipv6_all_out_cmd,
 -       "clear bgp ipv6 * out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_all_soft_out,
 -       clear_bgp_instance_ipv6_all_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 * out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_bgp_ipv6_safi_prefix,
 -       clear_bgp_ipv6_safi_prefix_cmd,
 -       "clear bgp ipv6 (unicast|multicast) prefix X:X::X:X/M",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Clear bestpath and re-advertise\n"
 -       "IPv6 prefix <network>/<length>,  e.g.,  3ffe::/16\n")
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_prefix (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL);
 -  else
 -    return bgp_clear_prefix (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL);
 -}
 -
 -DEFUN (clear_bgp_instance_ipv6_safi_prefix,
 -       clear_bgp_instance_ipv6_safi_prefix_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 (unicast|multicast) prefix X:X::X:X/M",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Clear bestpath and re-advertise\n"
 -       "IPv6 prefix <network>/<length>,  e.g.,  3ffe::/16\n")
 -{
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_clear_prefix (vty, argv[1], argv[3], AFI_IP6, SAFI_MULTICAST, NULL);
 -  else
 -    return bgp_clear_prefix (vty, argv[1], argv[3], AFI_IP6, SAFI_UNICAST, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_peer_soft_out,
 -       clear_ip_bgp_peer_soft_out_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_peer,
 -                          BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_soft_out,
 -       clear_ip_bgp_instance_peer_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_peer_soft_out,
 -       clear_ip_bgp_peer_out_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_peer_soft_out,
 -       clear_ip_bgp_instance_peer_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_ipv4_soft_out,
 -       clear_ip_bgp_peer_ipv4_soft_out_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 -                        BGP_CLEAR_SOFT_OUT, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_peer_ipv4_soft_out,
 -       clear_ip_bgp_instance_peer_ipv4_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_peer,
 -                        BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_OUT, argv[2]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_ipv4_soft_out,
 -       clear_ip_bgp_peer_ipv4_out_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_instance_peer_ipv4_soft_out,
 -       clear_ip_bgp_instance_peer_ipv4_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -/* NOTE: WORD peers have not been tested for vpnv4 */
 -DEFUN (clear_ip_bgp_peer_vpnv4_soft_out,
 -       clear_ip_bgp_peer_vpnv4_soft_out_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) vpnv4 unicast soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_vpnv4_soft_out,
 -       clear_ip_bgp_peer_vpnv4_out_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) vpnv4 unicast out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_encap_soft_out,
 -       clear_ip_bgp_peer_encap_soft_out_cmd,
 -       "clear ip bgp A.B.C.D encap unicast soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig\n"
 -       "Soft reconfig outbound update\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_peer,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_encap_soft_out,
 -       clear_ip_bgp_peer_encap_out_cmd,
 -       "clear ip bgp A.B.C.D encap unicast out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig outbound update\n")
 -
 -DEFUN (clear_bgp_peer_soft_out,
 -       clear_bgp_peer_soft_out_cmd,
 -       "clear bgp (A.B.C.D|X:X::X:X|WORD) soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_peer,
 -                          BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_soft_out,
 -       clear_bgp_instance_peer_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " (A.B.C.D|X:X::X:X|WORD) soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_soft_out,
 -       clear_bgp_ipv6_peer_soft_out_cmd,
 -       "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_soft_out,
 -       clear_bgp_instance_ipv6_peer_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 (A.B.C.D|X:X::X:X|WORD) soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_soft_out,
 -       clear_bgp_peer_out_cmd,
 -       "clear bgp (A.B.C.D|X:X::X:X|WORD) out",
 -       CLEAR_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_soft_out,
 -       clear_bgp_instance_peer_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " (A.B.C.D|X:X::X:X|WORD) out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_soft_out,
 -       clear_bgp_ipv6_peer_out_cmd,
 -       "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_soft_out,
 -       clear_bgp_instance_ipv6_peer_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 (A.B.C.D|X:X::X:X|WORD) out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_group_soft_out,
 -       clear_ip_bgp_peer_group_soft_out_cmd, 
 -       "clear ip bgp peer-group WORD soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_group,
 -                          BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_group_soft_out,
 -       clear_ip_bgp_instance_peer_group_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_peer_group_soft_out,
 -       clear_ip_bgp_peer_group_out_cmd, 
 -       "clear ip bgp peer-group WORD out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_peer_group_soft_out,
 -       clear_ip_bgp_instance_peer_group_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_group_ipv4_soft_out,
 -       clear_ip_bgp_peer_group_ipv4_soft_out_cmd,
 -       "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 -                        BGP_CLEAR_SOFT_OUT, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_peer_group_ipv4_soft_out,
 -       clear_ip_bgp_instance_peer_group_ipv4_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_group,
 -                        BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_OUT, argv[2]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_group_ipv4_soft_out,
 -       clear_ip_bgp_peer_group_ipv4_out_cmd,
 -       "clear ip bgp peer-group WORD ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_instance_peer_group_ipv4_soft_out,
 -       clear_ip_bgp_instance_peer_group_ipv4_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_bgp_peer_group_soft_out,
 -       clear_bgp_peer_group_soft_out_cmd,
 -       "clear bgp peer-group WORD soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_group,
 -                          BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_group_soft_out,
 -       clear_bgp_instance_peer_group_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " peer-group WORD soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_out,
 -       clear_bgp_ipv6_peer_group_soft_out_cmd,
 -       "clear bgp ipv6 peer-group WORD soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_out,
 -       clear_bgp_instance_ipv6_peer_group_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 peer-group WORD soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_out,
 -       clear_bgp_peer_group_out_cmd,
 -       "clear bgp peer-group WORD out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_out,
 -       clear_bgp_instance_peer_group_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " peer-group WORD out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_out,
 -       clear_bgp_ipv6_peer_group_out_cmd,
 -       "clear bgp ipv6 peer-group WORD out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_out,
 -       clear_bgp_instance_ipv6_peer_group_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 peer-group WORD out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_external_soft_out,
 -       clear_ip_bgp_external_soft_out_cmd, 
 -       "clear ip bgp external soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_external,
 -                          BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_external_soft_out,
 -       clear_ip_bgp_instance_external_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_external_soft_out,
 -       clear_ip_bgp_external_out_cmd,
 -       "clear ip bgp external out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_external_soft_out,
 -       clear_ip_bgp_instance_external_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_external_ipv4_soft_out,
 -       clear_ip_bgp_external_ipv4_soft_out_cmd,
 -       "clear ip bgp external ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 -                        BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_external_ipv4_soft_out,
 -       clear_ip_bgp_instance_external_ipv4_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_external,
 -                        BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_external_ipv4_soft_out,
 -       clear_ip_bgp_external_ipv4_out_cmd,
 -       "clear ip bgp external ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_instance_external_ipv4_soft_out,
 -       clear_ip_bgp_instance_external_ipv4_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_bgp_external_soft_out,
 -       clear_bgp_external_soft_out_cmd,
 -       "clear bgp external soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_external,
 -                          BGP_CLEAR_SOFT_OUT, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_OUT, NULL);
 -}
 -
 -ALIAS (clear_bgp_external_soft_out,
 -       clear_bgp_instance_external_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " external soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_external_soft_out,
 -       clear_bgp_ipv6_external_soft_out_cmd,
 -       "clear bgp ipv6 external soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_external_soft_out,
 -       clear_bgp_instance_ipv6_external_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 external soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_external_soft_out,
 -       clear_bgp_external_out_cmd,
 -       "clear bgp external out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_external_soft_out,
 -       clear_bgp_instance_external_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " external out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_external_soft_out,
 -       clear_bgp_ipv6_external_out_cmd,
 -       "clear bgp ipv6 external WORD out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_external_soft_out,
 -       clear_bgp_instance_ipv6_external_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 external WORD out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_as_soft_out,
 -       clear_ip_bgp_as_soft_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_as,
 -                          BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_soft_out,
 -       clear_ip_bgp_instance_as_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_as_soft_out,
 -       clear_ip_bgp_as_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_as_soft_out,
 -       clear_ip_bgp_instance_as_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_as_ipv4_soft_out,
 -       clear_ip_bgp_as_ipv4_soft_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 -                        BGP_CLEAR_SOFT_OUT, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_as_ipv4_soft_out,
 -       clear_ip_bgp_instance_as_ipv4_soft_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " ipv4 (unicast|multicast) soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_as,
 -                        BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_OUT, argv[2]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_ipv4_soft_out,
 -       clear_ip_bgp_as_ipv4_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_ip_bgp_instance_as_ipv4_soft_out,
 -       clear_ip_bgp_instance_as_ipv4_out_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " ipv4 (unicast|multicast) out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_as_vpnv4_soft_out,
 -       clear_ip_bgp_as_vpnv4_soft_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_vpnv4_soft_out,
 -       clear_ip_bgp_as_vpnv4_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_OUT_STR)
 -
 -DEFUN (clear_ip_bgp_as_encap_soft_out,
 -       clear_ip_bgp_as_encap_soft_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " encap unicast soft out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Soft reconfig\n"
 -       "Soft reconfig outbound update\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_as,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_encap_soft_out,
 -       clear_ip_bgp_as_encap_out_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " encap unicast out",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Soft reconfig outbound update\n")
 -
 -DEFUN (clear_bgp_as_soft_out,
 -       clear_bgp_as_soft_out_cmd,
 -       "clear bgp " CMD_AS_RANGE " soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_as,
 -                          BGP_CLEAR_SOFT_OUT, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_OUT, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_as_soft_out,
 -       clear_bgp_instance_as_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_as_soft_out,
 -       clear_bgp_ipv6_as_soft_out_cmd,
 -       "clear bgp ipv6 " CMD_AS_RANGE " soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_as_soft_out,
 -       clear_bgp_instance_ipv6_as_soft_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 " CMD_AS_RANGE " soft out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_as_soft_out,
 -       clear_bgp_as_out_cmd,
 -       "clear bgp " CMD_AS_RANGE " out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_as_soft_out,
 -       clear_bgp_instance_as_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_as_soft_out,
 -       clear_bgp_ipv6_as_out_cmd,
 -       "clear bgp ipv6 " CMD_AS_RANGE " out",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_OUT_STR)
 -
 -ALIAS (clear_bgp_as_soft_out,
 -       clear_bgp_instance_ipv6_as_out_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 " CMD_AS_RANGE " out",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_OUT_STR)
 -
 -/* Inbound soft-reconfiguration */
 -DEFUN (clear_ip_bgp_all_soft_in,
 -       clear_ip_bgp_all_soft_in_cmd,
 -       "clear ip bgp * soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_all,
 -                          BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_soft_in,
 -       clear_ip_bgp_instance_all_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_all_soft_in,
 -       clear_ip_bgp_all_in_cmd,
 -       "clear ip bgp * in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_all_soft_in,
 -       clear_ip_bgp_instance_all_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_all_in_prefix_filter,
 -       clear_ip_bgp_all_in_prefix_filter_cmd,
 -       "clear ip bgp * in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  if (argc== 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_all,
 -                          BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_all_ipv4_soft_in,
 -       clear_ip_bgp_all_ipv4_soft_in_cmd,
 -       "clear ip bgp * ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 -                        BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_all_ipv4_soft_in,
 -       clear_ip_bgp_instance_all_ipv4_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_all,
 -                          BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_all,
 -                        BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_ipv4_soft_in,
 -       clear_ip_bgp_all_ipv4_in_cmd,
 -       "clear ip bgp * ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_instance_all_ipv4_soft_in,
 -       clear_ip_bgp_instance_all_ipv4_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_all_ipv4_in_prefix_filter,
 -       clear_ip_bgp_all_ipv4_in_prefix_filter_cmd,
 -       "clear ip bgp * ipv4 (unicast|multicast) in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 -                        BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_all_vpnv4_soft_in,
 -       clear_ip_bgp_all_vpnv4_soft_in_cmd,
 -       "clear ip bgp * vpnv4 unicast soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_vpnv4_soft_in,
 -       clear_ip_bgp_all_vpnv4_in_cmd,
 -       "clear ip bgp * vpnv4 unicast in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_all_encap_soft_in,
 -       clear_ip_bgp_all_encap_soft_in_cmd,
 -       "clear ip bgp * encap unicast soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig\n"
 -       "Soft reconfig inbound update\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_all,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_encap_soft_in,
 -       clear_ip_bgp_all_encap_in_cmd,
 -       "clear ip bgp * encap unicast in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig inbound update\n")
 -
 -DEFUN (clear_bgp_all_soft_in,
 -       clear_bgp_all_soft_in_cmd,
 -       "clear bgp * soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_all,
 -                        BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_bgp_all_soft_in,
 -       clear_bgp_instance_all_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " * soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_all_soft_in,
 -       clear_bgp_ipv6_all_soft_in_cmd,
 -       "clear bgp ipv6 * soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_all_soft_in,
 -       clear_bgp_instance_ipv6_all_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 * soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_all_soft_in,
 -       clear_bgp_all_in_cmd,
 -       "clear bgp * in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_all_soft_in,
 -       clear_bgp_instance_all_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " * in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_all_soft_in,
 -       clear_bgp_ipv6_all_in_cmd,
 -       "clear bgp ipv6 * in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_all_soft_in,
 -       clear_bgp_instance_ipv6_all_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 * in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_bgp_all_in_prefix_filter,
 -       clear_bgp_all_in_prefix_filter_cmd,
 -       "clear bgp * in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -}
 -
 -ALIAS (clear_bgp_all_in_prefix_filter,
 -       clear_bgp_ipv6_all_in_prefix_filter_cmd,
 -       "clear bgp ipv6 * in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -
 -DEFUN (clear_ip_bgp_peer_soft_in,
 -       clear_ip_bgp_peer_soft_in_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_peer,
 -                          BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_soft_in,
 -       clear_ip_bgp_instance_peer_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_peer_soft_in,
 -       clear_ip_bgp_peer_in_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR)
 -       
 -ALIAS (clear_ip_bgp_peer_soft_in,
 -       clear_ip_bgp_instance_peer_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_peer_in_prefix_filter,
 -       clear_ip_bgp_peer_in_prefix_filter_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR
 -       "Push out the existing ORF prefix-list\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_peer_ipv4_soft_in,
 -       clear_ip_bgp_peer_ipv4_soft_in_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 -                        BGP_CLEAR_SOFT_IN, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_peer_ipv4_soft_in,
 -       clear_ip_bgp_instance_peer_ipv4_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_peer,
 -                        BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_IN, argv[2]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_ipv4_soft_in,
 -       clear_ip_bgp_peer_ipv4_in_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_instance_peer_ipv4_soft_in,
 -       clear_ip_bgp_instance_peer_ipv4_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_peer_ipv4_in_prefix_filter,
 -       clear_ip_bgp_peer_ipv4_in_prefix_filter_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) ipv4 (unicast|multicast) in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR
 -       "Push out the existing ORF prefix-list\n")
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 -                        BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_peer_vpnv4_soft_in,
 -       clear_ip_bgp_peer_vpnv4_soft_in_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) vpnv4 unicast soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_vpnv4_soft_in,
 -       clear_ip_bgp_peer_vpnv4_in_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) vpnv4 unicast in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_peer_encap_soft_in,
 -       clear_ip_bgp_peer_encap_soft_in_cmd,
 -       "clear ip bgp A.B.C.D encap unicast soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig\n"
 -       "Soft reconfig inbound update\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_peer,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_encap_soft_in,
 -       clear_ip_bgp_peer_encap_in_cmd,
 -       "clear ip bgp A.B.C.D encap unicast in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig inbound update\n")
 -
 -DEFUN (clear_bgp_peer_soft_in,
 -       clear_bgp_peer_soft_in_cmd,
 -       "clear bgp (A.B.C.D|X:X::X:X|WORD) soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_peer,
 -                          BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_soft_in,
 -       clear_bgp_instance_peer_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " (A.B.C.D|X:X::X:X|WORD) soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_soft_in,
 -       clear_bgp_ipv6_peer_soft_in_cmd,
 -       "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_soft_in,
 -       clear_bgp_instance_ipv6_peer_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 (A.B.C.D|X:X::X:X|WORD) soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_soft_in,
 -       clear_bgp_peer_in_cmd,
 -       "clear bgp (A.B.C.D|X:X::X:X|WORD) in",
 -       CLEAR_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_soft_in,
 -       clear_bgp_instance_peer_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " (A.B.C.D|X:X::X:X|WORD) in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_soft_in,
 -       clear_bgp_ipv6_peer_in_cmd,
 -       "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_soft_in,
 -       clear_bgp_instance_ipv6_peer_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 (A.B.C.D|X:X::X:X|WORD) in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_bgp_peer_in_prefix_filter,
 -       clear_bgp_peer_in_prefix_filter_cmd,
 -       "clear bgp (A.B.C.D|X:X::X:X|WORD) in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR
 -       "Push out the existing ORF prefix-list\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_in_prefix_filter,
 -       clear_bgp_ipv6_peer_in_prefix_filter_cmd,
 -       "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_IN_STR
 -       "Push out the existing ORF prefix-list\n")
 -
 -DEFUN (clear_ip_bgp_peer_group_soft_in,
 -       clear_ip_bgp_peer_group_soft_in_cmd,
 -       "clear ip bgp peer-group WORD soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_group,
 -                          BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_group_soft_in,
 -       clear_ip_bgp_instance_peer_group_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_peer_group_soft_in,
 -       clear_ip_bgp_peer_group_in_cmd,
 -       "clear ip bgp peer-group WORD in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_peer_group_soft_in,
 -       clear_ip_bgp_instance_peer_group_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_peer_group_in_prefix_filter,
 -       clear_ip_bgp_peer_group_in_prefix_filter_cmd,
 -       "clear ip bgp peer-group WORD in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_peer_group_ipv4_soft_in,
 -       clear_ip_bgp_peer_group_ipv4_soft_in_cmd,
 -       "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 -                        BGP_CLEAR_SOFT_IN, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_peer_group_ipv4_soft_in,
 -       clear_ip_bgp_instance_peer_group_ipv4_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_group,
 -                        BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_IN, argv[2]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_group_ipv4_soft_in,
 -       clear_ip_bgp_peer_group_ipv4_in_cmd,
 -       "clear ip bgp peer-group WORD ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_instance_peer_group_ipv4_soft_in,
 -       clear_ip_bgp_instance_peer_group_ipv4_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_peer_group_ipv4_in_prefix_filter,
 -       clear_ip_bgp_peer_group_ipv4_in_prefix_filter_cmd,
 -       "clear ip bgp peer-group WORD ipv4 (unicast|multicast) in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 -                        BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -DEFUN (clear_bgp_peer_group_soft_in,
 -       clear_bgp_peer_group_soft_in_cmd,
 -       "clear bgp peer-group WORD soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_group,
 -                          BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_group_soft_in,
 -       clear_bgp_instance_peer_group_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " peer-group WORD soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_in,
 -       clear_bgp_ipv6_peer_group_soft_in_cmd,
 -       "clear bgp ipv6 peer-group WORD soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_in,
 -       clear_bgp_instance_ipv6_peer_group_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 peer-group WORD soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_in,
 -       clear_bgp_peer_group_in_cmd,
 -       "clear bgp peer-group WORD in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_in,
 -       clear_bgp_instance_peer_group_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " peer-group WORD in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_in,
 -       clear_bgp_ipv6_peer_group_in_cmd,
 -       "clear bgp ipv6 peer-group WORD in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft_in,
 -       clear_bgp_instance_ipv6_peer_group_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 peer-group WORD in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_bgp_peer_group_in_prefix_filter,
 -       clear_bgp_peer_group_in_prefix_filter_cmd,
 -       "clear bgp peer-group WORD in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_group_in_prefix_filter,
 -       clear_bgp_ipv6_peer_group_in_prefix_filter_cmd,
 -       "clear bgp ipv6 peer-group WORD in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -
 -DEFUN (clear_ip_bgp_external_soft_in,
 -       clear_ip_bgp_external_soft_in_cmd,
 -       "clear ip bgp external soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_external,
 -                          BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_external_soft_in,
 -       clear_ip_bgp_instance_external_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_external_soft_in,
 -       clear_ip_bgp_external_in_cmd,
 -       "clear ip bgp external in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_external_soft_in,
 -       clear_ip_bgp_instance_external_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_external_in_prefix_filter,
 -       clear_ip_bgp_external_in_prefix_filter_cmd,
 -       "clear ip bgp external in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_external_ipv4_soft_in,
 -       clear_ip_bgp_external_ipv4_soft_in_cmd,
 -       "clear ip bgp external ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 -                        BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_external_ipv4_soft_in,
 -       clear_ip_bgp_instance_external_ipv4_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_external,
 -                        BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_external_ipv4_soft_in,
 -       clear_ip_bgp_external_ipv4_in_cmd,
 -       "clear ip bgp external ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_instance_external_ipv4_soft_in,
 -       clear_ip_bgp_instance_external_ipv4_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_external_ipv4_in_prefix_filter,
 -       clear_ip_bgp_external_ipv4_in_prefix_filter_cmd,
 -       "clear ip bgp external ipv4 (unicast|multicast) in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 -                        BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -}
 -
 -DEFUN (clear_bgp_external_soft_in,
 -       clear_bgp_external_soft_in_cmd,
 -       "clear bgp external soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_external,
 -                          BGP_CLEAR_SOFT_IN, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_IN, NULL);
 -}
 -
 -ALIAS (clear_bgp_external_soft_in,
 -       clear_bgp_instance_external_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " external soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_external_soft_in,
 -       clear_bgp_ipv6_external_soft_in_cmd,
 -       "clear bgp ipv6 external soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_external_soft_in,
 -       clear_bgp_instance_ipv6_external_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 external soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_external_soft_in,
 -       clear_bgp_external_in_cmd,
 -       "clear bgp external in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_external_soft_in,
 -       clear_bgp_instance_external_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " external in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_external_soft_in,
 -       clear_bgp_ipv6_external_in_cmd,
 -       "clear bgp ipv6 external WORD in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_external_soft_in,
 -       clear_bgp_instance_ipv6_external_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 external WORD in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_bgp_external_in_prefix_filter,
 -       clear_bgp_external_in_prefix_filter_cmd,
 -       "clear bgp external in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 -}
 -
 -ALIAS (clear_bgp_external_in_prefix_filter,
 -       clear_bgp_ipv6_external_in_prefix_filter_cmd,
 -       "clear bgp ipv6 external in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -
 -DEFUN (clear_ip_bgp_as_soft_in,
 -       clear_ip_bgp_as_soft_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_as,
 -                          BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_soft_in,
 -       clear_ip_bgp_instance_as_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_as_soft_in,
 -       clear_ip_bgp_as_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_as_soft_in,
 -       clear_ip_bgp_instance_as_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_as_in_prefix_filter,
 -       clear_ip_bgp_as_in_prefix_filter_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_as_ipv4_soft_in,
 -       clear_ip_bgp_as_ipv4_soft_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 -                        BGP_CLEAR_SOFT_IN, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_as_ipv4_soft_in,
 -       clear_ip_bgp_instance_as_ipv4_soft_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " ipv4 (unicast|multicast) soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_as,
 -                        BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_IN, argv[2]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_ipv4_soft_in,
 -       clear_ip_bgp_as_ipv4_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_ip_bgp_instance_as_ipv4_soft_in,
 -       clear_ip_bgp_instance_as_ipv4_in_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " ipv4 (unicast|multicast) in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_as_ipv4_in_prefix_filter,
 -       clear_ip_bgp_as_ipv4_in_prefix_filter_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) in prefix-filter",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 -                        BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_as_vpnv4_soft_in,
 -       clear_ip_bgp_as_vpnv4_soft_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_vpnv4_soft_in,
 -       clear_ip_bgp_as_vpnv4_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_ip_bgp_as_encap_soft_in,
 -       clear_ip_bgp_as_encap_soft_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " encap unicast soft in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Soft reconfig\n"
 -       "Soft reconfig inbound update\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_as,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_encap_soft_in,
 -       clear_ip_bgp_as_encap_in_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " encap unicast in",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Soft reconfig inbound update\n")
 -
 -DEFUN (clear_bgp_as_soft_in,
 -       clear_bgp_as_soft_in_cmd,
 -       "clear bgp " CMD_AS_RANGE " soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_as,
 -                          BGP_CLEAR_SOFT_IN, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_IN, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_as_soft_in,
 -       clear_bgp_instance_as_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_as_soft_in,
 -       clear_bgp_ipv6_as_soft_in_cmd,
 -       "clear bgp ipv6 " CMD_AS_RANGE " soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_as_soft_in,
 -       clear_bgp_instance_ipv6_as_soft_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 " CMD_AS_RANGE " soft in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_as_soft_in,
 -       clear_bgp_as_in_cmd,
 -       "clear bgp " CMD_AS_RANGE " in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_as_soft_in,
 -       clear_bgp_instance_as_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_as_soft_in,
 -       clear_bgp_ipv6_as_in_cmd,
 -       "clear bgp ipv6 " CMD_AS_RANGE " in",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR)
 -
 -ALIAS (clear_bgp_as_soft_in,
 -       clear_bgp_instance_ipv6_as_in_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 " CMD_AS_RANGE " in",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR)
 -
 -DEFUN (clear_bgp_as_in_prefix_filter,
 -       clear_bgp_as_in_prefix_filter_cmd,
 -       "clear bgp " CMD_AS_RANGE " in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_as_in_prefix_filter,
 -       clear_bgp_ipv6_as_in_prefix_filter_cmd,
 -       "clear bgp ipv6 " CMD_AS_RANGE " in prefix-filter",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_IN_STR
 -       "Push out prefix-list ORF and do inbound soft reconfig\n")
 -
 -/* Both soft-reconfiguration */
 -DEFUN (clear_ip_bgp_all_soft,
 -       clear_ip_bgp_all_soft_cmd,
 -       "clear ip bgp * soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_all,
 -                        BGP_CLEAR_SOFT_BOTH, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_all_soft,
 -       clear_ip_bgp_instance_all_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR)
 -
 -
 -DEFUN (clear_ip_bgp_all_ipv4_soft,
 -       clear_ip_bgp_all_ipv4_soft_cmd,
 -       "clear ip bgp * ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 -                        BGP_CLEAR_SOFT_BOTH, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_all_ipv4_soft,
 -       clear_ip_bgp_instance_all_ipv4_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " * ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_all,
 -                          BGP_CLEAR_SOFT_BOTH, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 -                        BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_all_vpnv4_soft,
 -       clear_ip_bgp_all_vpnv4_soft_cmd,
 -       "clear ip bgp * vpnv4 unicast soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_all_encap_soft,
 -       clear_ip_bgp_all_encap_soft_cmd,
 -       "clear ip bgp * encap unicast soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_all,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_bgp_all_soft,
 -       clear_bgp_all_soft_cmd,
 -       "clear bgp * soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_all,
 -                          BGP_CLEAR_SOFT_BOTH, NULL);
 - 
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 -                      BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -ALIAS (clear_bgp_all_soft,
 -       clear_bgp_instance_all_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " * soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all peers\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_all_soft,
 -       clear_bgp_ipv6_all_soft_cmd,
 -       "clear bgp ipv6 * soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_all_soft,
 -       clear_bgp_instance_ipv6_all_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 * soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all peers\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_soft,
 -       clear_ip_bgp_peer_soft_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_peer,
 -                          BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_soft,
 -       clear_ip_bgp_instance_peer_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_ipv4_soft,
 -       clear_ip_bgp_peer_ipv4_soft_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 -                        BGP_CLEAR_SOFT_BOTH, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_peer_ipv4_soft,
 -       clear_ip_bgp_instance_peer_ipv4_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " (A.B.C.D|WORD) ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_peer,
 -                        BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_BOTH, argv[2]);
 -}
 -
 -DEFUN (clear_ip_bgp_peer_vpnv4_soft,
 -       clear_ip_bgp_peer_vpnv4_soft_cmd,
 -       "clear ip bgp (A.B.C.D|WORD) vpnv4 unicast soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_peer_encap_soft,
 -       clear_ip_bgp_peer_encap_soft_cmd,
 -       "clear ip bgp A.B.C.D encap unicast soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_peer,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_bgp_peer_soft,
 -       clear_bgp_peer_soft_cmd,
 -       "clear bgp (A.B.C.D|X:X::X:X|WORD) soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_peer,
 -                          BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_soft,
 -       clear_bgp_instance_peer_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " (A.B.C.D|X:X::X:X|WORD) soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_peer_soft,
 -       clear_bgp_ipv6_peer_soft_cmd,
 -       "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_peer_soft,
 -       clear_bgp_instance_ipv6_peer_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 (A.B.C.D|X:X::X:X|WORD) soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "BGP neighbor address to clear\n"
 -       "BGP IPv6 neighbor to clear\n"
 -       "BGP neighbor on interface to clear\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_group_soft,
 -       clear_ip_bgp_peer_group_soft_cmd,
 -       "clear ip bgp peer-group WORD soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_group,
 -                          BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_peer_group_soft,
 -       clear_ip_bgp_instance_peer_group_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_peer_group_ipv4_soft,
 -       clear_ip_bgp_peer_group_ipv4_soft_cmd,
 -       "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 -                        BGP_CLEAR_SOFT_BOTH, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_peer_group_ipv4_soft,
 -       clear_ip_bgp_instance_peer_group_ipv4_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " peer-group WORD ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_group,
 -                        BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_BOTH, argv[2]);
 -}
 -
 -DEFUN (clear_bgp_peer_group_soft,
 -       clear_bgp_peer_group_soft_cmd,
 -       "clear bgp peer-group WORD soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_group,
 -                          BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_peer_group_soft,
 -       clear_bgp_instance_peer_group_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " peer-group WORD soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft,
 -       clear_bgp_ipv6_peer_group_soft_cmd,
 -       "clear bgp ipv6 peer-group WORD soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_peer_group_soft,
 -       clear_bgp_instance_ipv6_peer_group_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 peer-group WORD soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all members of peer-group\n"
 -       "BGP peer-group name\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_external_soft,
 -       clear_ip_bgp_external_soft_cmd,
 -       "clear ip bgp external soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_external,
 -                          BGP_CLEAR_SOFT_BOTH, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -ALIAS (clear_ip_bgp_external_soft,
 -       clear_ip_bgp_instance_external_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_external_ipv4_soft,
 -       clear_ip_bgp_external_ipv4_soft_cmd,
 -       "clear ip bgp external ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[0], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 -                        BGP_CLEAR_SOFT_BOTH, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_external_ipv4_soft,
 -       clear_ip_bgp_instance_external_ipv4_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " external ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_external,
 -                        BGP_CLEAR_SOFT_BOTH, NULL);
 -
 -  return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -DEFUN (clear_bgp_external_soft,
 -       clear_bgp_external_soft_cmd,
 -       "clear bgp external soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 2)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_external,
 -                          BGP_CLEAR_SOFT_BOTH, NULL);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 -                      BGP_CLEAR_SOFT_BOTH, NULL);
 -}
 -
 -ALIAS (clear_bgp_external_soft,
 -       clear_bgp_instance_external_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " external soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_external_soft,
 -       clear_bgp_ipv6_external_soft_cmd,
 -       "clear bgp ipv6 external soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_external_soft,
 -       clear_bgp_instance_ipv6_external_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 external soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear all external peers\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_as_soft,
 -       clear_ip_bgp_as_soft_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, clear_as,
 -                          BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -ALIAS (clear_ip_bgp_as_soft,
 -       clear_ip_bgp_instance_as_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (clear_ip_bgp_as_ipv4_soft,
 -       clear_ip_bgp_as_ipv4_soft_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 -                        BGP_CLEAR_SOFT_BOTH, argv[0]);
 -
 -  return bgp_clear_vty (vty, NULL,AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_instance_as_ipv4_soft,
 -       clear_ip_bgp_instance_as_ipv4_soft_cmd,
 -       "clear ip bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " ipv4 (unicast|multicast) soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  if (strncmp (argv[3], "m", 1) == 0)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP, SAFI_MULTICAST, clear_as,
 -                        BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, argv[1],AFI_IP, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_BOTH, argv[2]);
 -}
 -
 -DEFUN (clear_ip_bgp_as_vpnv4_soft,
 -       clear_ip_bgp_as_vpnv4_soft_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       BGP_SOFT_STR)
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_ip_bgp_as_encap_soft,
 -       clear_ip_bgp_as_encap_soft_cmd,
 -       "clear ip bgp " CMD_AS_RANGE " encap unicast soft",
 -       CLEAR_STR
 -       IP_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       "Address family\n"
 -       "Address Family Modifier\n"
 -       "Soft reconfig\n")
 -{
 -  return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_ENCAP, clear_as,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -DEFUN (clear_bgp_as_soft,
 -       clear_bgp_as_soft_cmd,
 -       "clear bgp " CMD_AS_RANGE " soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR)
 -{
 -  if (argc == 3)
 -    return bgp_clear_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, clear_as,
 -                          BGP_CLEAR_SOFT_BOTH, argv[2]);
 -
 -  return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 -                      BGP_CLEAR_SOFT_BOTH, argv[0]);
 -}
 -
 -ALIAS (clear_bgp_as_soft,
 -       clear_bgp_instance_as_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " " CMD_AS_RANGE " soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_as_soft,
 -       clear_bgp_ipv6_as_soft_cmd,
 -       "clear bgp ipv6 " CMD_AS_RANGE " soft",
 -       CLEAR_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR)
 -
 -ALIAS (clear_bgp_as_soft,
 -       clear_bgp_instance_ipv6_as_soft_cmd,
 -       "clear bgp " BGP_INSTANCE_CMD " ipv6 " CMD_AS_RANGE " soft",
 -       CLEAR_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Clear peers with the AS number\n"
 -       BGP_SOFT_STR)
 -
 -DEFUN (show_bgp_views,
 -       show_bgp_views_cmd,
 -       "show bgp views",
 -       SHOW_STR
 -       BGP_STR
 -       "Show the defined BGP views\n")
 -{
 -  struct list *inst = bm->bgp;
 -  struct listnode *node;
 -  struct bgp *bgp;
 -
 -  if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
 -    {
 -      vty_out (vty, "BGP Multiple Instance is not enabled%s", VTY_NEWLINE);
 -      return CMD_WARNING;
 -    }
 -  
 -  vty_out (vty, "Defined BGP views:%s", VTY_NEWLINE);
 -  for (ALL_LIST_ELEMENTS_RO(inst, node, bgp))
 -    {
 -      /* Skip VRFs. */
 -      if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF)
 -        continue;
 -      vty_out (vty, "\t%s (AS%u)%s",
 -               bgp->name ? bgp->name : "(null)",
 -               bgp->as, VTY_NEWLINE);
 -    }
 -  
 -  return CMD_SUCCESS;
 -}
 -
 -DEFUN (show_bgp_vrfs,
 -       show_bgp_vrfs_cmd,
 -       "show bgp vrfs {json}",
 -       SHOW_STR
 -       BGP_STR
 -       "Show BGP VRFs\n"
 -       "JavaScript Object Notation\n")
 -{
 -  struct list *inst = bm->bgp;
 -  struct listnode *node;
 -  struct bgp *bgp;
 -  u_char uj = use_json(argc, argv);
 -  json_object *json = NULL;
 -  json_object *json_vrfs = NULL;
 -  int count = 0;
 -  static char header[] = "Type  Id     RouterId          #PeersCfg  #PeersEstb  Name";
 -
 -  if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
 -    {
 -      vty_out (vty, "BGP Multiple Instance is not enabled%s", VTY_NEWLINE);
 -      return CMD_WARNING;
 -    }
 +  if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
 +    {
 +      vty_out (vty, "BGP Multiple Instance is not enabled%s", VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
  
    if (uj)
      {
@@@ -6471,103 -10723,260 +6499,105 @@@ bgp_show_all_instances_summary_vty (str
  
  }
  
 -/* `show ip bgp summary' commands. */
 -DEFUN (show_ip_bgp_summary,
 -       show_ip_bgp_summary_cmd,
 -       "show ip bgp summary {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_UNICAST, uj);
 -}
 -
 -DEFUN (show_ip_bgp_instance_summary,
 -       show_ip_bgp_instance_summary_cmd,
 -       "show ip bgp " BGP_INSTANCE_CMD " summary {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -  return bgp_show_summary_vty (vty, argv[1], AFI_IP, SAFI_UNICAST, uj);
 -}
 -
 -DEFUN (show_ip_bgp_instance_all_summary,
 -       show_ip_bgp_instance_all_summary_cmd,
 -       "show ip bgp " BGP_INSTANCE_ALL_CMD " summary {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_ALL_HELP_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -
 -  bgp_show_all_instances_summary_vty (vty, AFI_IP, SAFI_UNICAST, uj);
 -  return CMD_SUCCESS;
 -}
 -
 -DEFUN (show_ip_bgp_ipv4_summary, 
 -       show_ip_bgp_ipv4_summary_cmd,
 -       "show ip bgp ipv4 (unicast|multicast|vpn|encap) summary {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       AFI_SAFI_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP, bgp_vty_safi_from_arg(argv[0]), uj);
 -}
 -
 -ALIAS (show_ip_bgp_ipv4_summary,
 -       show_bgp_ipv4_safi_summary_cmd,
 -       "show bgp ipv4 (unicast|multicast|vpn|encap) summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       AFI_SAFI_STR
 -       "Summary of BGP neighbor status\n")
 -
 -DEFUN (show_ip_bgp_instance_ipv4_summary,
 -       show_ip_bgp_instance_ipv4_summary_cmd,
 -       "show ip bgp view WORD ipv4 (unicast|multicast) summary {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "BGP view\n"
 -       "View name\n"
 -       "Address family\n"
 -       "Address Family modifier\n"
 -       "Address Family modifier\n"
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -  if (strncmp (argv[1], "m", 1) == 0)
 -    return bgp_show_summary_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST, uj);
 -  else
 -    return bgp_show_summary_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, uj);
 -}
 -
 -ALIAS (show_ip_bgp_instance_ipv4_summary,
 -       show_bgp_instance_ipv4_safi_summary_cmd,
 -       "show bgp view WORD ipv4 (unicast|multicast) summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       "BGP view\n"
 -       "View name\n"
 -       AFI_SAFI_STR
 -       "Summary of BGP neighbor status\n")
 -
 -DEFUN (show_ip_bgp_vpnv4_all_summary,
 -       show_ip_bgp_vpnv4_all_summary_cmd,
 -       "show ip bgp vpnv4 all summary {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "Display VPNv4 NLRI specific information\n"
 -       "Display information about all VPNv4 NLRIs\n"
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, uj);
 -}
 -
 -DEFUN (show_ip_bgp_vpnv4_rd_summary,
 -       show_ip_bgp_vpnv4_rd_summary_cmd,
 -       "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn summary {json}",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "Display VPNv4 NLRI specific information\n"
 -       "Display information for a route distinguisher\n"
 -       "VPN Route Distinguisher\n"
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 +static int
 +bgp_show_summary_vty (struct vty *vty, const char *name,
 +                      afi_t afi, safi_t safi, u_char use_json)
  {
 -  int ret;
 -  struct prefix_rd prd;
 -  u_char uj = use_json(argc, argv);
 +  struct bgp *bgp;
  
 -  ret = str2prefix_rd (argv[0], &prd);
 -  if (! ret)
 +  if (name)
      {
 -      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
 -      return CMD_WARNING;
 -    }
 -
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, uj);
 -}
 -
 -#ifdef HAVE_IPV6
 -DEFUN (show_bgp_summary,
 -       show_bgp_summary_cmd,
 -       "show bgp summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, use_json(argc, argv));
 -}
 -
 -DEFUN (show_bgp_instance_summary,
 -       show_bgp_instance_summary_cmd,
 -       "show bgp " BGP_INSTANCE_CMD " summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  return bgp_show_summary_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, use_json(argc, argv));
 -}
 -
 -DEFUN (show_bgp_instance_all_summary,
 -       show_bgp_instance_all_summary_cmd,
 -       "show bgp " BGP_INSTANCE_ALL_CMD " summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       BGP_INSTANCE_ALL_HELP_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -
 -  bgp_show_all_instances_summary_vty (vty, AFI_IP6, SAFI_UNICAST, uj);
 -  return CMD_SUCCESS;
 -}
 -
 -ALIAS (show_bgp_summary, 
 -       show_bgp_ipv6_summary_cmd,
 -       "show bgp ipv6 summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Summary of BGP neighbor status\n")
 +      if (strmatch(name, "all"))
 +        {
 +          bgp_show_all_instances_summary_vty (vty, afi, safi, use_json);
 +          return CMD_SUCCESS;
 +        }
 +      else
 +        {
 +          bgp = bgp_lookup_by_name (name);
  
 -ALIAS (show_bgp_instance_summary,
 -       show_bgp_instance_ipv6_summary_cmd,
 -       "show bgp " BGP_INSTANCE_CMD " ipv6 summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       "Address family\n"
 -       "Summary of BGP neighbor status\n")
 +          if (! bgp)
 +            {
 +              if (use_json)
 +                vty_out (vty, "{}%s", VTY_NEWLINE);
 +              else
 +                vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
 +              return CMD_WARNING;
 +            }
  
 -DEFUN (show_bgp_ipv6_safi_summary,
 -       show_bgp_ipv6_safi_summary_cmd,
 -       "show bgp ipv6 (unicast|multicast|vpn|encap) summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       AFI_SAFI_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 +          bgp_show_summary (vty, bgp, afi, safi, use_json, NULL);
 +          return CMD_SUCCESS;
 +        }
 +    }
  
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP6, bgp_vty_safi_from_arg(argv[0]), uj);
 -}
 +  bgp = bgp_get_default ();
  
 -DEFUN (show_bgp_instance_ipv6_safi_summary,
 -       show_bgp_instance_ipv6_safi_summary_cmd,
 -       "show bgp " BGP_INSTANCE_CMD " ipv6 (unicast|multicast) summary {json}",
 -       SHOW_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 -       AFI_SAFI_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -  if (strncmp (argv[2], "m", 1) == 0)
 -    return bgp_show_summary_vty (vty, argv[1], AFI_IP6, SAFI_MULTICAST, uj);
 +  if (bgp)
 +    bgp_show_summary (vty, bgp, afi, safi, use_json, NULL);
  
 -  return bgp_show_summary_vty (vty, argv[1], AFI_IP6, SAFI_UNICAST, uj);
 +  return CMD_SUCCESS;
  }
  
 -/* old command */
 -DEFUN (show_ipv6_bgp_summary, 
 -       show_ipv6_bgp_summary_cmd,
 -       "show ipv6 bgp summary {json}",
 +/* `show [ip] bgp summary' commands. */
 +DEFUN (show_ip_bgp_summary,
 +       show_ip_bgp_summary_cmd,
-        "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 <all|rd ASN:nn_or_IP-address:nn>>] summary [json]",
++       "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|vpnv4 <all|rd ASN:nn_or_IP-address:nn>>] summary [json]",
         SHOW_STR
 -       IPV6_STR
 +       IP_STR
         BGP_STR
-        "Address Family\n"
 +       BGP_INSTANCE_HELP_STR
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Display information about all VPNv4 NLRIs\n"
 +       "Display information for a route distinguisher\n"
 +       "VPN Route Distinguisher\n"
         "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, uj);
 -}
 +       JSON_STR)
 +{
 +  char *vrf = NULL;
 +  afi_t afi = AFI_IP6;
 +  safi_t safi = SAFI_UNICAST;
 +
 +  int idx = 0;
 +
 +  /* show [ip] bgp */
 +  if (argv_find (argv, argc, "ip", &idx))
 +    afi = AFI_IP;
 +  /* [<view|vrf> WORD] */
 +  if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
 +    vrf = argv[++idx]->arg;
 +  /* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] */
 +  if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
 +  {
 +    afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
 +    if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
-       safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
++      safi = bgp_vty_safi_from_arg (argv[idx]->text);
 +  }
 +  else if (argv_find (argv, argc, "encap", &idx))
 +  {
 +    afi = AFI_IP;
 +    safi = SAFI_ENCAP;
 +  }
 +  else if (argv_find (argv, argc, "vpnv4", &idx))
 +  {
 +    // we show the same thing regardless of rd and all
 +    afi = AFI_IP;
 +    safi = SAFI_MPLS_VPN;
 +  }
  
 -/* old command */
 -DEFUN (show_ipv6_mbgp_summary, 
 -       show_ipv6_mbgp_summary_cmd,
 -       "show ipv6 mbgp summary {json}",
 -       SHOW_STR
 -       IPV6_STR
 -       MBGP_STR
 -       "Summary of BGP neighbor status\n"
 -       "JavaScript Object Notation\n")
 -{
 -  u_char uj = use_json(argc, argv);
 -  return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_MULTICAST, uj);
 +  int uj = use_json (argc, argv);
 +
 +  return bgp_show_summary_vty (vty, vrf, afi, safi, uj);
  }
 -#endif /* HAVE_IPV6 */
  
  const char *
  afi_safi_print (afi_t afi, safi_t safi)
@@@ -8420,48 -13040,39 +8450,50 @@@ DEFUN (show_ip_bgp_neighbors
         "Detailed information on TCP and BGP neighbor connections\n"
         "Neighbor to display information about\n"
         "Neighbor to display information about\n"
 -       "Neighbor on bgp configured interface\n"
 -       "JavaScript Object Notation\n")
 -       
 -/* Show BGP's AS paths internal data.  There are both `show ip bgp
 -   paths' and `show ip mbgp paths'.  Those functions results are the
 -   same.*/
 -DEFUN (show_ip_bgp_paths, 
 -       show_ip_bgp_paths_cmd,
 -       "show ip bgp paths",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "Path information\n")
 +       "Neighbor on BGP configured interface\n"
 +       JSON_STR)
  {
 -  vty_out (vty, "Address Refcnt Path%s", VTY_NEWLINE);
 -  aspath_print_all_vty (vty);
 -  return CMD_SUCCESS;
 +  char *vrf = NULL;
 +  char *sh_arg = NULL;
 +  enum show_type sh_type;
 +
 +  u_char uj = use_json(argc, argv);
 +
 +  int idx = 0;
 +
 +  if (argv_find (argv, argc, "WORD", &idx))
 +    vrf = argv[idx]->arg;
 +
 +  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_all;
 +
 +  return bgp_show_neighbor_vty (vty, vrf, sh_type, sh_arg, uj);
  }
  
 -DEFUN (show_ip_bgp_ipv4_paths, 
 -       show_ip_bgp_ipv4_paths_cmd,
 -       "show ip bgp ipv4 (unicast|multicast) paths",
 +/* Show BGP's AS paths internal data.  There are both `show [ip] bgp
 +   paths' and `show ip mbgp paths'.  Those functions results are the
 +   same.*/
 +DEFUN (show_ip_bgp_paths,
 +       show_ip_bgp_paths_cmd,
-        "show [ip] bgp [<unicast|multicast>] paths",
++       "show [ip] bgp [<unicast|multicast|vpn|encap>] paths",
         SHOW_STR
         IP_STR
         BGP_STR
 -       "Address family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
+        "Address Family modifier\n"
+        "Address Family modifier\n"
         "Path information\n")
  {
 -  vty_out (vty, "Address Refcnt Path\r\n");
 +  vty_out (vty, "Address Refcnt Path%s", VTY_NEWLINE);
    aspath_print_all_vty (vty);
 -
    return CMD_SUCCESS;
  }
  
@@@ -8553,73 -13187,135 +8585,75 @@@ bgp_show_update_groups(struct vty *vty
    return CMD_SUCCESS;
  }
  
 -DEFUN (show_bgp_ipv6_updgrps,
 -       show_bgp_ipv6_updgrps_cmd,
 -       "show bgp update-groups",
 -       SHOW_STR
 -       BGP_STR
 -       "Detailed info about v6 dynamic update groups\n")
 -{
 -  return (bgp_show_update_groups(vty, NULL, AFI_IP6, SAFI_UNICAST, 0));
 -}
 -
 -DEFUN (show_bgp_instance_ipv6_updgrps,
 -       show_bgp_instance_ipv6_updgrps_cmd,
 -       "show bgp " BGP_INSTANCE_CMD " update-groups",
 +DEFUN (show_ip_bgp_updgrps,
 +       show_ip_bgp_updgrps_cmd,
-        "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] update-groups [SUBGROUP-ID]",
++       "show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|vpnv4 [unicast]>] update-groups [SUBGROUP-ID]",
         SHOW_STR
 +       IP_STR
         BGP_STR
         BGP_INSTANCE_HELP_STR
 -       "Detailed info about v6 dynamic update groups\n")
 -{
 -  return (bgp_show_update_groups(vty, argv[1], AFI_IP6, SAFI_UNICAST, 0));
 -}
 -
 -DEFUN (show_bgp_instance_all_ipv6_updgrps,
 -       show_bgp_instance_all_ipv6_updgrps_cmd,
 -       "show bgp " BGP_INSTANCE_ALL_CMD " update-groups",
 -       SHOW_STR
 -       BGP_STR
 -       BGP_INSTANCE_ALL_HELP_STR
 -       "Detailed info about v6 dynamic update groups\n")
 -{
 -  bgp_show_all_instances_updgrps_vty (vty, AFI_IP6, SAFI_UNICAST);
 -  return CMD_SUCCESS;
 -}
 -
 -DEFUN (show_bgp_updgrps,
 -       show_bgp_updgrps_cmd,
 -       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups",
 -       SHOW_STR
 -       BGP_STR
 -       "Address family\n"
 -       "Address family\n"
 +       "Address Family\n"
         "Address Family modifier\n"
         "Address Family modifier\n"
-        "Address Family\n"
 -       "Detailed info about dynamic update groups\n")
 -{
 -  afi_t afi;
 -  safi_t safi;
 -
 -  afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
 -  safi = bgp_vty_safi_from_arg(argv[1]);
 -  return (bgp_show_update_groups(vty, NULL, afi, safi, 0));
 -}
 -
 -DEFUN (show_ip_bgp_updgrps_s,
 -       show_ip_bgp_updgrps_s_cmd,
 -       "show ip bgp update-groups SUBGROUP-ID",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       "Detailed info about dynamic update groups\n"
 -       "Specific subgroup to display detailed info for\n")
 -{
 -  uint64_t subgrp_id;
 -
 -  VTY_GET_ULL("subgroup-id", subgrp_id, argv[0]);
 -  return (bgp_show_update_groups(vty, NULL, AFI_IP, SAFI_UNICAST, subgrp_id));
 -}
 -
 -DEFUN (show_ip_bgp_instance_updgrps_s,
 -       show_ip_bgp_instance_updgrps_s_cmd,
 -       "show ip bgp " BGP_INSTANCE_CMD " update-groups SUBGROUP-ID",
 -       SHOW_STR
 -       IP_STR
 -       BGP_STR
 -       BGP_INSTANCE_HELP_STR
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
         "Detailed info about dynamic update groups\n"
         "Specific subgroup to display detailed info for\n")
  {
 -  uint64_t subgrp_id;
 -
 -  VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
 -  return (bgp_show_update_groups(vty, argv[1], AFI_IP, SAFI_UNICAST, subgrp_id));
 -}
 -
 -DEFUN (show_bgp_ipv6_updgrps_s,
 -       show_bgp_ipv6_updgrps_s_cmd,
 -       "show bgp update-groups SUBGROUP-ID",
 -       SHOW_STR
 -       BGP_STR
 -       "Detailed info about v6 dynamic update groups\n"
 -       "Specific subgroup to display detailed info for\n")
 -{
 -  uint64_t subgrp_id;
 -
 -  VTY_GET_ULL("subgroup-id", subgrp_id, argv[0]);
 -  return(bgp_show_update_groups(vty, NULL, AFI_IP6, SAFI_UNICAST, subgrp_id));
 -}
 +  char *vrf = NULL;
 +  afi_t afi = AFI_IP6;
 +  safi_t safi = SAFI_UNICAST;
 +  uint64_t subgrp_id = 0;
 +
 +  int idx = 0;
 +
 +  /* show [ip] bgp */
 +  if (argv_find (argv, argc, "ip", &idx))
 +    afi = AFI_IP;
 +  /* [<view|vrf> WORD] */
 +  if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
 +    vrf = argv[++idx]->arg;
 +  /* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] */
 +  if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
 +  {
 +    afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
 +    if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
-       safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
++      safi = bgp_vty_safi_from_arg (argv[idx]->text);
 +  }
 +  else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
 +  {
 +    afi = AFI_IP;
-     safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
++    safi = bgp_vty_safi_from_arg (argv[idx]->text);
 +    // advance idx if necessary
 +    argv_find (argv, argc, "unicast", &idx);
 +  }
  
 -DEFUN (show_bgp_instance_ipv6_updgrps_s,
 -       show_bgp_instance_ipv6_updgrps_s_cmd,
 -       "show bgp " BGP_INSTANCE_CMD " update-groups SUBGROUP-ID",
 -       SHOW_STR
 -       BGP_STR
 -       "Detailed info about v6 dynamic update groups\n"
 -       "Specific subgroup to display detailed info for\n")
 -{
 -  uint64_t subgrp_id;
 +  /* get subgroup id, if provided */
 +  idx = argc - 1;
 +  if (argv[idx]->type == VARIABLE_TKN)
 +    VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx]->arg);
  
 -  VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
 -  return(bgp_show_update_groups(vty, argv[1], AFI_IP6, SAFI_UNICAST, subgrp_id));
 +  return (bgp_show_update_groups(vty, vrf, afi, safi, subgrp_id));
  }
  
 -DEFUN (show_bgp_updgrps_s,
 -       show_bgp_updgrps_s_cmd,
 -       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups SUBGROUP-ID",
 +DEFUN (show_bgp_instance_all_ipv6_updgrps,
 +       show_bgp_instance_all_ipv6_updgrps_cmd,
 +       "show [ip] bgp <view|vrf> all update-groups",
         SHOW_STR
 +       IP_STR
         BGP_STR
 -       "Address family\n"
 -       AFI_SAFI_STR
 -       "Detailed info about v6 dynamic update groups\n"
 -       "Specific subgroup to display detailed info for")
 +       BGP_INSTANCE_ALL_HELP_STR
 +       "Detailed info about dynamic update groups\n")
  {
 -  afi_t afi;
 -  safi_t safi;
 -  uint64_t subgrp_id;
 -
 -  afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
 -  safi = bgp_vty_safi_from_arg(argv[1]);
 -  VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
 -  return(bgp_show_update_groups(vty, NULL, afi, safi, subgrp_id));
 +  bgp_show_all_instances_updgrps_vty (vty, AFI_IP6, SAFI_UNICAST);
 +  return CMD_SUCCESS;
  }
  
  DEFUN (show_bgp_updgrps_stats,
@@@ -8721,15 -13411,12 +8755,17 @@@ DEFUN (show_ip_bgp_instance_updgrps_adj
  
  DEFUN (show_bgp_updgrps_afi_adj,
         show_bgp_updgrps_afi_adj_cmd,
-        "show [ip] bgp <ipv4|ipv6> <unicast|multicast> update-groups <advertise-queue|advertised-routes|packet-queue>",
 -       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups (advertise-queue|advertised-routes|packet-queue)",
++       "show [ip] bgp <ipv4|ipv6> <unicast|multicast|vpn|encap> update-groups <advertise-queue|advertised-routes|packet-queue>",
         SHOW_STR
 +       IP_STR
         BGP_STR
 -       "Address family\n"
 -       AFI_SAFI_STR
 -       "BGP update groups\n"
 +       "Address Family\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Detailed info about dynamic update groups\n"
         "Advertisement queue\n"
         "Announced routes\n"
         "Packet queue\n"
    afi_t afi;
    safi_t safi;
  
 -  afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
 -  safi = bgp_vty_safi_from_arg(argv[1]);
 -  show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[2], 0);
 +  afi = (strcmp(argv[idx_afi]->arg, "ipv4") == 0) ? AFI_IP : AFI_IP6;
-   safi = (strncmp (argv[idx_safi]->arg, "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
++  safi = bgp_vty_safi_from_arg(argv[idx_safi]->arg);
 +  show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[idx_type]->arg, 0);
    return CMD_SUCCESS;
  }
  
@@@ -8831,15 -13505,12 +8867,17 @@@ DEFUN (show_ip_bgp_instance_updgrps_adj
  
  DEFUN (show_bgp_updgrps_afi_adj_s,
         show_bgp_updgrps_afi_adj_s_cmd,
-        "show [ip] bgp <ipv4|ipv6> <unicast|multicast> update-groups SUBGROUP-ID <advertise-queue|advertised-routes|packet-queue>",
 -       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue)",
++       "show [ip] bgp <ipv4|ipv6> <unicast|multicast|vpn|encap> update-groups SUBGROUP-ID <advertise-queue|advertised-routes|packet-queue>",
         SHOW_STR
 +       IP_STR
         BGP_STR
 -       "Address family\n"
 -       AFI_SAFI_STR
 -       "BGP update groups\n"
 +       "Address Family\n"
 +       "Address Family\n"
 +       "Address Family modifier\n"
 +       "Address Family modifier\n"
++       "Address Family modifier\n"
++       "Address Family modifier\n"
 +       "Detailed info about dynamic update groups\n"
         "Specific subgroup to display info for\n"
         "Advertisement queue\n"
         "Announced routes\n"
    safi_t safi;
    uint64_t subgrp_id;
  
 -  afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
 -  safi = bgp_vty_safi_from_arg(argv[1]);
 -  VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
 +  afi = (strmatch(argv[idx_afi]->text, "ipv4")) ? AFI_IP : AFI_IP6;
-   safi = (strmatch(argv[idx_safi]->text, "unicast")) ? SAFI_UNICAST : SAFI_MULTICAST;
++  safi = bgp_vty_safi_from_arg(argv[idx_safi]->text);
 +  VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
  
 -  show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[3], subgrp_id);
 +  show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[idx_type]->arg, subgrp_id);
    return CMD_SUCCESS;
  }
  
@@@ -9096,15 -13783,13 +9134,15 @@@ DEFUN (show_ip_bgp_peer_groups
  
  DEFUN (bgp_redistribute_ipv4,
         bgp_redistribute_ipv4_cmd,
 -       "redistribute " FRR_IP_REDIST_STR_BGPD,
 +       "redistribute <kernel|connected|static|rip|ospf|isis|pim|table>",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP_REDIST_HELP_STR_BGPD)
+        FRR_IP_REDIST_HELP_STR_BGPD)
  {
 +  VTY_DECLVAR_CONTEXT(bgp, bgp);
 +  int idx_protocol = 1;
    int type;
  
 -  type = proto_redistnum (AFI_IP, argv[0]);
 +  type = proto_redistnum (AFI_IP, argv[idx_protocol]->arg);
    if (type < 0 || type == ZEBRA_ROUTE_BGP)
      {
        vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  
  DEFUN (bgp_redistribute_ipv4_rmap,
         bgp_redistribute_ipv4_rmap_cmd,
 -       "redistribute " FRR_IP_REDIST_STR_BGPD " route-map WORD",
 +       "redistribute <kernel|connected|static|rip|ospf|isis|pim|table> route-map WORD",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP_REDIST_HELP_STR_BGPD
+        FRR_IP_REDIST_HELP_STR_BGPD
         "Route map reference\n"
         "Pointer to route-map entries\n")
  {
  
  DEFUN (bgp_redistribute_ipv4_metric,
         bgp_redistribute_ipv4_metric_cmd,
 -       "redistribute " FRR_IP_REDIST_STR_BGPD " metric <0-4294967295>",
 +       "redistribute <kernel|connected|static|rip|ospf|isis|pim|table> metric (0-4294967295)",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP_REDIST_HELP_STR_BGPD
+        FRR_IP_REDIST_HELP_STR_BGPD
         "Metric for redistributed routes\n"
         "Default metric\n")
  {
  
  DEFUN (bgp_redistribute_ipv4_rmap_metric,
         bgp_redistribute_ipv4_rmap_metric_cmd,
 -       "redistribute " FRR_IP_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>",
 +       "redistribute <kernel|connected|static|rip|ospf|isis|pim|table> route-map WORD metric (0-4294967295)",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP_REDIST_HELP_STR_BGPD
+        FRR_IP_REDIST_HELP_STR_BGPD
         "Route map reference\n"
         "Pointer to route-map entries\n"
         "Metric for redistributed routes\n"
  
  DEFUN (bgp_redistribute_ipv4_metric_rmap,
         bgp_redistribute_ipv4_metric_rmap_cmd,
 -       "redistribute " FRR_IP_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD",
 +       "redistribute <kernel|connected|static|rip|ospf|isis|pim|table> metric (0-4294967295) route-map WORD",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP_REDIST_HELP_STR_BGPD
+        FRR_IP_REDIST_HELP_STR_BGPD
         "Metric for redistributed routes\n"
         "Default metric\n"
         "Route map reference\n"
@@@ -9420,20 -14111,14 +9458,20 @@@ DEFUN (no_bgp_redistribute_ipv4_ospf
  
  DEFUN (no_bgp_redistribute_ipv4,
         no_bgp_redistribute_ipv4_cmd,
 -       "no redistribute " FRR_IP_REDIST_STR_BGPD,
 +       "no redistribute <kernel|connected|static|rip|ospf|isis|pim|table> [metric (0-4294967295)] [route-map WORD]",
         NO_STR
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP_REDIST_HELP_STR_BGPD
 -       FRR_IP_REDIST_HELP_STR_BGPD)
++       FRR_IP_REDIST_HELP_STR_BGPD
 +       "Metric for redistributed routes\n"
 +       "Default metric\n"
 +       "Route map reference\n"
 +       "Pointer to route-map entries\n")
  {
 +  VTY_DECLVAR_CONTEXT(bgp, bgp);
 +  int idx_protocol = 2;
    int type;
  
 -  type = proto_redistnum (AFI_IP, argv[0]);
 +  type = proto_redistnum (AFI_IP, argv[idx_protocol]->arg);
    if (type < 0 || type == ZEBRA_ROUTE_BGP)
      {
        vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  #ifdef HAVE_IPV6
  DEFUN (bgp_redistribute_ipv6,
         bgp_redistribute_ipv6_cmd,
 -       "redistribute " FRR_IP6_REDIST_STR_BGPD,
 +       "redistribute <kernel|connected|static|ripng|ospf6|isis|table>",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP6_REDIST_HELP_STR_BGPD)
+        FRR_IP6_REDIST_HELP_STR_BGPD)
  {
 +  VTY_DECLVAR_CONTEXT(bgp, bgp);
 +  int idx_protocol = 1;
    int type;
  
 -  type = proto_redistnum (AFI_IP6, argv[0]);
 +  type = proto_redistnum (AFI_IP6, argv[idx_protocol]->arg);
    if (type < 0 || type == ZEBRA_ROUTE_BGP)
      {
        vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  
  DEFUN (bgp_redistribute_ipv6_rmap,
         bgp_redistribute_ipv6_rmap_cmd,
 -       "redistribute " FRR_IP6_REDIST_STR_BGPD " route-map WORD",
 +       "redistribute <kernel|connected|static|ripng|ospf6|isis|table> route-map WORD",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP6_REDIST_HELP_STR_BGPD
+        FRR_IP6_REDIST_HELP_STR_BGPD
         "Route map reference\n"
         "Pointer to route-map entries\n")
  {
  
  DEFUN (bgp_redistribute_ipv6_metric,
         bgp_redistribute_ipv6_metric_cmd,
 -       "redistribute " FRR_IP6_REDIST_STR_BGPD " metric <0-4294967295>",
 +       "redistribute <kernel|connected|static|ripng|ospf6|isis|table> metric (0-4294967295)",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP6_REDIST_HELP_STR_BGPD
+        FRR_IP6_REDIST_HELP_STR_BGPD
         "Metric for redistributed routes\n"
         "Default metric\n")
  {
  
  DEFUN (bgp_redistribute_ipv6_rmap_metric,
         bgp_redistribute_ipv6_rmap_metric_cmd,
 -       "redistribute " FRR_IP6_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>",
 +       "redistribute <kernel|connected|static|ripng|ospf6|isis|table> route-map WORD metric (0-4294967295)",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP6_REDIST_HELP_STR_BGPD
+        FRR_IP6_REDIST_HELP_STR_BGPD
         "Route map reference\n"
         "Pointer to route-map entries\n"
         "Metric for redistributed routes\n"
  
  DEFUN (bgp_redistribute_ipv6_metric_rmap,
         bgp_redistribute_ipv6_metric_rmap_cmd,
 -       "redistribute " FRR_IP6_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD",
 +       "redistribute <kernel|connected|static|ripng|ospf6|isis|table> metric (0-4294967295) route-map WORD",
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP6_REDIST_HELP_STR_BGPD
+        FRR_IP6_REDIST_HELP_STR_BGPD
         "Metric for redistributed routes\n"
         "Default metric\n"
         "Route map reference\n"
  
  DEFUN (no_bgp_redistribute_ipv6,
         no_bgp_redistribute_ipv6_cmd,
 -       "no redistribute " FRR_IP6_REDIST_STR_BGPD,
 +       "no redistribute <kernel|connected|static|ripng|ospf6|isis|table> [metric (0-4294967295)] [route-map WORD]",
         NO_STR
         "Redistribute information from another routing protocol\n"
-        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 -       FRR_IP6_REDIST_HELP_STR_BGPD)
++       FRR_IP6_REDIST_HELP_STR_BGPD
 +       "Metric for redistributed routes\n"
 +       "Default metric\n"
 +       "Route map reference\n"
 +       "Pointer to route-map entries\n")
  {
 +  VTY_DECLVAR_CONTEXT(bgp, bgp);
 +  int idx_protocol = 2;
    int type;
  
 -  type = proto_redistnum (AFI_IP6, argv[0]);
 +  type = proto_redistnum (AFI_IP6, argv[idx_protocol]->arg);
    if (type < 0 || type == ZEBRA_ROUTE_BGP)
      {
        vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
        return CMD_WARNING;
      }
  
 -  return bgp_redistribute_unset (vty->index, AFI_IP6, type, 0);
 +  return bgp_redistribute_unset (bgp, AFI_IP6, type, 0);
  }
--
 -ALIAS (no_bgp_redistribute_ipv6,
 -       no_bgp_redistribute_ipv6_rmap_cmd,
 -       "no redistribute " FRR_IP6_REDIST_STR_BGPD " route-map WORD",
 -       NO_STR
 -       "Redistribute information from another routing protocol\n"
 -       FRR_IP6_REDIST_HELP_STR_BGPD
 -       "Route map reference\n"
 -       "Pointer to route-map entries\n")
--
 -ALIAS (no_bgp_redistribute_ipv6,
 -       no_bgp_redistribute_ipv6_metric_cmd,
 -       "no redistribute " FRR_IP6_REDIST_STR_BGPD " metric <0-4294967295>",
 -       NO_STR
 -       "Redistribute information from another routing protocol\n"
 -       FRR_IP6_REDIST_HELP_STR_BGPD
 -       "Metric for redistributed routes\n"
 -       "Default metric\n")
--
 -ALIAS (no_bgp_redistribute_ipv6,
 -       no_bgp_redistribute_ipv6_rmap_metric_cmd,
 -       "no redistribute " FRR_IP6_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>",
 -       NO_STR
 -       "Redistribute information from another routing protocol\n"
 -       FRR_IP6_REDIST_HELP_STR_BGPD
 -       "Route map reference\n"
 -       "Pointer to route-map entries\n"
 -       "Metric for redistributed routes\n"
 -       "Default metric\n")
--
 -ALIAS (no_bgp_redistribute_ipv6,
 -       no_bgp_redistribute_ipv6_metric_rmap_cmd,
 -       "no redistribute " FRR_IP6_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD",
 -       NO_STR
 -       "Redistribute information from another routing protocol\n"
 -       FRR_IP6_REDIST_HELP_STR_BGPD
 -       "Metric for redistributed routes\n"
 -       "Default metric\n"
 -       "Route map reference\n"
 -       "Pointer to route-map entries\n")
  #endif /* HAVE_IPV6 */
  
  int
diff --cc bgpd/bgp_vty.h
index 382af0984f1341c195ae58412a6eacad74e869b0,6b4e51bc5055da74d64a806942575a0e658ece3a..51b72806646963e19bd50c304b51f22a7a4c24dd
@@@ -23,9 -23,20 +23,16 @@@ Software Foundation, Inc., 59 Temple Pl
  
  struct bgp;
  
 -#define CMD_AS_RANGE "<1-4294967295>"
 -#define DYNAMIC_NEIGHBOR_LIMIT_RANGE "<1-5000>"
 -#define BGP_INSTANCE_CMD "(view|vrf) WORD"
  #define BGP_INSTANCE_HELP_STR "BGP view\nBGP VRF\nView/VRF name\n"
 -#define BGP_INSTANCE_ALL_CMD "(view|vrf) all"
  #define BGP_INSTANCE_ALL_HELP_STR "BGP view\nBGP VRF\nAll Views/VRFs\n"
  
+ #define AFI_SAFI_STR \
+   "Address family\n" \
+   "Address Family modifier\n" \
+   "Address Family modifier\n" \
+   "Address Family modifier\n" \
+   "Address Family modifier\n"
  extern void bgp_vty_init (void);
  extern const char *afi_safi_print (afi_t, safi_t);
  extern int bgp_config_write_update_delay (struct vty *, struct bgp *);
Simple merge
Simple merge
index add18ecbfd3f0d7c35c119c097c20bacac8629b6,fe9b8a3f50bd2705b4fb747b5d46c549cc9f69a1..0b729ba30c0335afd6204c9141014c30797c20f6
@@@ -2550,10 -2543,10 +2550,10 @@@ register_add 
   ************************************************************************/
  DEFUN (add_vnc_prefix_cost_life_lnh,
         add_vnc_prefix_cost_life_lnh_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) cost <0-255> lifetime <1-4294967295> .LNH_OPTIONS",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) lifetime (1-4294967295) .LNH_OPTIONS",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix_life_cost_lnh,
         add_vnc_prefix_life_cost_lnh_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) lifetime <1-4294967295> cost <0-255> .LNH_OPTIONS",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295) cost (0-255) .LNH_OPTIONS",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix_cost_lnh,
         add_vnc_prefix_cost_lnh_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) cost <0-255> .LNH_OPTIONS",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) .LNH_OPTIONS",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix_life_lnh,
         add_vnc_prefix_life_lnh_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) lifetime <1-4294967295> .LNH_OPTIONS",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295) .LNH_OPTIONS",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix_lnh,
         add_vnc_prefix_lnh_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) .LNH_OPTIONS",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> .LNH_OPTIONS",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
   ************************************************************************/
  DEFUN (add_vnc_prefix_cost_life,
         add_vnc_prefix_cost_life_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) cost <0-255> lifetime <1-4294967295>",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) lifetime (1-4294967295)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix_life_cost,
         add_vnc_prefix_life_cost_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) lifetime <1-4294967295> cost <0-255>",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295) cost (0-255)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix_cost,
         add_vnc_prefix_cost_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) cost <0-255>",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix_life,
         add_vnc_prefix_life_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) lifetime <1-4294967295>",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
  
  DEFUN (add_vnc_prefix,
         add_vnc_prefix_cmd,
 -       "add vnc prefix (A.B.C.D/M|X:X::X:X/M) vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X)",
 +       "add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X>",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify prefix related infomation\n"
+        "Add/modify prefix related information\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
         "VN address of NVE\n"
   ************************************************************************/
  DEFUN (add_vnc_mac_vni_prefix_cost_life,
         add_vnc_mac_vni_prefix_cost_life_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) prefix (A.B.C.D/M|X:X::X:X/M) cost <0-255> lifetime <1-4294967295>",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M> cost (0-255) lifetime (1-4294967295)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
  
  DEFUN (add_vnc_mac_vni_prefix_life,
         add_vnc_mac_vni_prefix_life_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) prefix (A.B.C.D/M|X:X::X:X/M) lifetime <1-4294967295>",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M> lifetime (1-4294967295)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
  
  DEFUN (add_vnc_mac_vni_prefix_cost,
         add_vnc_mac_vni_prefix_cost_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) prefix (A.B.C.D/M|X:X::X:X/M) cost <0-255>",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M> cost (0-255)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
  
  DEFUN (add_vnc_mac_vni_prefix,
         add_vnc_mac_vni_prefix_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) prefix (A.B.C.D/M|X:X::X:X/M)",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M>",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
  
  DEFUN (add_vnc_mac_vni_cost_life,
         add_vnc_mac_vni_cost_life_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) cost <0-255> lifetime <1-4294967295>",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) lifetime (1-4294967295)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
  
  DEFUN (add_vnc_mac_vni_cost,
         add_vnc_mac_vni_cost_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) cost <0-255>",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
  
  DEFUN (add_vnc_mac_vni_life,
         add_vnc_mac_vni_life_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X) lifetime <1-4294967295>",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295)",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
  
  DEFUN (add_vnc_mac_vni,
         add_vnc_mac_vni_cmd,
 -       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier <1-4294967295> vn (A.B.C.D|X:X::X:X) un (A.B.C.D|X:X::X:X)",
 +       "add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X>",
         "Add registration\n"
         "VNC Information\n"
-        "Add/modify mac address infomation\n"
+        "Add/modify mac address information\n"
         "MAC address\n"
         "Virtual Network Identifier follows\n"
         "Virtual Network Identifier\n"
@@@ -3732,10 -3720,10 +3732,10 @@@ DEFUN (clear_vnc_nve_all
  
  DEFUN (clear_vnc_nve_vn_un,
         clear_vnc_nve_vn_un_cmd,
 -       "clear vnc nve vn (*|A.B.C.D|X:X::X:X) un (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc nve vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "VN address of NVE\n"
         "VN IPv4 interface address\n"
         "VN IPv6 interface address\n"
  
  DEFUN (clear_vnc_nve_un_vn,
         clear_vnc_nve_un_vn_cmd,
 -       "clear vnc nve un (*|A.B.C.D|X:X::X:X) vn (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc nve un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "UN address of NVE\n"
         "UN IPv4 interface address\n"
         "UN IPv6 interface address\n"
  
  DEFUN (clear_vnc_nve_vn,
         clear_vnc_nve_vn_cmd,
 -       "clear vnc nve vn (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc nve vn <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "VN address of NVE\n"
         "VN IPv4 interface address\n" "VN IPv6 interface address\n")
  {
  
  DEFUN (clear_vnc_nve_un,
         clear_vnc_nve_un_cmd,
 -       "clear vnc nve un (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc nve un <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "UN address of NVE\n"
         "UN IPv4 interface address\n" "UN IPv6 interface address\n")
  {
   */
  DEFUN (clear_vnc_prefix_vn_un,
         clear_vnc_prefix_vn_un_cmd,
 -       "clear vnc prefix (*|A.B.C.D/M|X:X::X:X/M) vn (*|A.B.C.D|X:X::X:X) un (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "All prefixes\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
  
  DEFUN (clear_vnc_prefix_un_vn,
         clear_vnc_prefix_un_vn_cmd,
 -       "clear vnc prefix (*|A.B.C.D/M|X:X::X:X/M) un (*|A.B.C.D|X:X::X:X) vn (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "All prefixes\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
  
  DEFUN (clear_vnc_prefix_un,
         clear_vnc_prefix_un_cmd,
 -       "clear vnc prefix (*|A.B.C.D/M|X:X::X:X/M) un (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> un <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "All prefixes\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
  
  DEFUN (clear_vnc_prefix_vn,
         clear_vnc_prefix_vn_cmd,
 -       "clear vnc prefix (*|A.B.C.D/M|X:X::X:X/M) vn (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> vn <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "All prefixes\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
  
  DEFUN (clear_vnc_prefix_all,
         clear_vnc_prefix_all_cmd,
 -       "clear vnc prefix (*|A.B.C.D/M|X:X::X:X/M) *",
 +       "clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> *",
         "clear\n"
         "VNC Information\n"
-        "Clear prefix registration infomation\n"
+        "Clear prefix registration information\n"
         "All prefixes\n"
         "IPv4 prefix\n"
         "IPv6 prefix\n"
   */
  DEFUN (clear_vnc_mac_vn_un,
         clear_vnc_mac_vn_un_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) vn (*|A.B.C.D|X:X::X:X) un (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_un_vn,
         clear_vnc_mac_un_vn_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) un (*|A.B.C.D|X:X::X:X) vn (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_un,
         clear_vnc_mac_un_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) un (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_vn,
         clear_vnc_mac_vn_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) vn (*|A.B.C.D|X:X::X:X)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_all,
         clear_vnc_mac_all_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) *",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> *",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_vn_un_prefix,
         clear_vnc_mac_vn_un_prefix_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) vn (*|A.B.C.D|X:X::X:X) un (*|A.B.C.D|X:X::X:X) prefix (*|A.B.C.D/M|X:X::X:X/M)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_un_vn_prefix,
         clear_vnc_mac_un_vn_prefix_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) un (*|A.B.C.D|X:X::X:X) vn (*|A.B.C.D|X:X::X:X) prefix (*|A.B.C.D/M|X:X::X:X/M) prefix (*|A.B.C.D/M|X:X::X:X/M)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M> prefix <*|A.B.C.D/M|X:X::X:X/M>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_un_prefix,
         clear_vnc_mac_un_prefix_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) un (*|A.B.C.D|X:X::X:X) prefix (*|A.B.C.D/M|X:X::X:X/M)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_vn_prefix,
         clear_vnc_mac_vn_prefix_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) vn (*|A.B.C.D|X:X::X:X) prefix (*|A.B.C.D/M|X:X::X:X/M)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
  
  DEFUN (clear_vnc_mac_all_prefix,
         clear_vnc_mac_all_prefix_cmd,
 -       "clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) prefix (*|A.B.C.D/M|X:X::X:X/M)",
 +       "clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> prefix <*|A.B.C.D/M|X:X::X:X/M>",
         "clear\n"
         "VNC Information\n"
-        "Clear mac registration infomation\n"
+        "Clear mac registration information\n"
         "All macs\n"
         "MAC address\n"
         "VNI keyword\n"
diff --cc configure.ac
index 40eab0a9a172f2857ed81fd650950e6e604fb058,c62857c3252c9a0a0d98e69d23f0e1b633898262..3b589a5fa6fa5e02d6d925028d91fcd15c11f59b
@@@ -1408,68 -1413,8 +1413,68 @@@ dnl -----------------------------------
  AC_CHECK_DECL(CLOCK_MONOTONIC,
        [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
         AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
- ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
+ ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
  
 +dnl --------------------------------------
 +dnl checking for flex and bison
 +dnl --------------------------------------
 +
 +AM_PROG_LEX
 +AC_MSG_CHECKING(version of flex)
 +quagga_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
 +quagga_ac_flex_version="${quagga_ac_flex_version##* }"
 +AC_MSG_RESULT([$quagga_ac_flex_version])
 +AX_COMPARE_VERSION([$quagga_ac_flex_version], [lt], [2.5.20], [
 +  LEX="$SHELL $missing_dir/missing flex"
 +  if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
 +    AC_MSG_WARN([using pregenerated flex output files])
 +  else
 +    AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
 +  fi
 +  AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
 +  AC_SUBST([LEXLIB], [''])
 +])
 +
 +AC_PROG_YACC
 +dnl thanks GNU bison for this b*llshit...
 +AC_MSG_CHECKING(version of bison)
 +quagga_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
 +quagga_ac_bison_version="${quagga_ac_bison_version##* }"
 +quagga_ac_bison_missing="false"
 +case "x${quagga_ac_bison_version}" in
 +  x2.7*)
 +    BISON_OPENBRACE='"'
 +    BISON_CLOSEBRACE='"'
 +    AC_MSG_RESULT([$quagga_ac_bison_version - 2.7 or older])
 +    ;;
 +  x2.*|x1.*)
 +    AC_MSG_RESULT([$quagga_ac_bison_version])
 +    AC_MSG_WARN([installed bison is too old.  Please install GNU bison 2.7.x or newer.])
 +    quagga_ac_bison_missing="true"
 +    ;;
 +  x)
 +    AC_MSG_RESULT([none])
 +    AC_MSG_WARN([could not determine bison version.  Please install GNU bison 2.7.x or newer.])
 +    quagga_ac_bison_missing="true"
 +    ;;
 +  *)
 +    BISON_OPENBRACE='{'
 +    BISON_CLOSEBRACE='}'
 +    AC_MSG_RESULT([$quagga_ac_bison_version - 3.0 or newer])
 +    ;;
 +esac
 +AC_SUBST(BISON_OPENBRACE)
 +AC_SUBST(BISON_CLOSEBRACE)
 +
 +if $quagga_ac_bison_missing; then
 +  YACC="$SHELL $missing_dir/missing bison -y"
 +  if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
 +    AC_MSG_WARN([using pregenerated bison output files])
 +  else
 +    AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
 +  fi
 +fi
 +
  dnl -------------------
  dnl capabilities checks
  dnl -------------------
diff --cc debian/control
index 3bd4e21a9ddc8c648cdc430af16d93b9945b97e6,578795d9984fdaa2de6a86720795ab0480c3d06c..ac9298425ff9cd1407b0b98a3302422345142f92
@@@ -3,12 -3,12 +3,12 @@@ Section: ne
  Priority: optional
  Maintainer: Christian Hammers <ch@debian.org>
  Uploaders: Florian Weimer <fw@debian.org>
 -Build-Depends: debhelper (>= 7.0.50~), libncurses5-dev, libreadline-dev, texlive-latex-base, texlive-generic-recommended, libpam0g-dev | libpam-dev, libcap-dev, texinfo (>= 4.7), imagemagick, ghostscript, groff, po-debconf, autotools-dev, hardening-wrapper, libpcre3-dev, gawk, chrpath, libsnmp-dev, git, dh-autoreconf, libjson0, libjson0-dev, dh-systemd, libsystemd-dev, python-ipaddr
 +Build-Depends: debhelper (>= 7.0.50~), libncurses5-dev, libreadline-dev, texlive-latex-base, texlive-generic-recommended, libpam0g-dev | libpam-dev, libcap-dev, texinfo (>= 4.7), imagemagick, ghostscript, groff, po-debconf, autotools-dev, hardening-wrapper, libpcre3-dev, gawk, chrpath, libsnmp-dev, git, dh-autoreconf, libjson0, libjson0-dev, dh-systemd, libsystemd-dev, python-ipaddr, bison, flex
  Standards-Version: 3.9.6
- Homepage: http://www.quagga.net/
+ Homepage: http://www.frr.net/
  XS-Testsuite: autopkgtest
  
- Package: quagga
+ Package: frr
  Architecture: any
  Depends: ${shlibs:Depends}, logrotate (>= 3.2-11), iproute, ${misc:Depends}
  Pre-Depends: adduser
Simple merge
diff --cc isisd/isisd.c
Simple merge
diff --cc ldpd/lde.c
Simple merge
diff --cc lib/command.c
Simple merge
diff --cc lib/log.h
Simple merge
Simple merge
diff --cc lib/routemap.c
Simple merge
diff --cc lib/smux.c
Simple merge
diff --cc lib/vty.c
Simple merge
diff --cc lib/zebra.h
Simple merge
index d31b4b95b4a407b608fe11acbf27dc02a471a1fa,7c59dece790d226f5df55dc22ab7842884b4b55a..7d5aca1199f2c8fd9a15968b9c19b30816927bdf
@@@ -686,9 -686,10 +686,9 @@@ ospf6_asbr_redistribute_remove (int typ
  
  DEFUN (ospf6_redistribute,
         ospf6_redistribute_cmd,
 -       "redistribute " FRR_REDIST_STR_OSPF6D,
 +       "redistribute <kernel|connected|static|ripng|isis|bgp|table>",
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_OSPF6D)
 -       FRR_REDIST_HELP_STR_OSPF6D
 -      )
++       FRR_REDIST_HELP_STR_OSPF6D)
  {
    int type;
  
  
  DEFUN (ospf6_redistribute_routemap,
         ospf6_redistribute_routemap_cmd,
 -       "redistribute " FRR_REDIST_STR_OSPF6D " route-map WORD",
 +       "redistribute <kernel|connected|static|ripng|isis|bgp|table> route-map WORD",
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_OSPF6D
+        FRR_REDIST_HELP_STR_OSPF6D
         "Route map reference\n"
 -       "Route map name\n"
 -      )
 +       "Route map name\n")
  {
 +  int idx_protocol = 1;
 +  int idx_word = 3;
    int type;
  
 -  type = proto_redistnum(AFI_IP6, argv[0]);
 +  type = proto_redistnum(AFI_IP6, argv[idx_protocol]->arg);
    if (type < 0 || type == ZEBRA_ROUTE_OSPF6)
      return CMD_WARNING;
  
  
  DEFUN (no_ospf6_redistribute,
         no_ospf6_redistribute_cmd,
 -       "no redistribute " FRR_REDIST_STR_OSPF6D,
 +       "no redistribute <kernel|connected|static|ripng|isis|bgp|table> [route-map WORD]",
         NO_STR
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_OSPF6D
+        FRR_REDIST_HELP_STR_OSPF6D
 -      )
 +       "Route map reference\n"
 +       "Route map name\n")
  {
 +  int idx_protocol = 2;
    int type;
  
 -  type = proto_redistnum(AFI_IP6, argv[0]);
 +  type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
    if (type < 0 || type == ZEBRA_ROUTE_OSPF6)
      return CMD_WARNING;
  
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ospf6_redistribute,
 -       no_ospf6_redistribute_route_map_cmd,
 -       "no redistribute " FRR_REDIST_STR_OSPF6D " route-map WORD",
 -       NO_STR
 -       "Redistribute\n"
 -       FRR_REDIST_HELP_STR_OSPF6D
 -       "Route map reference\n"
 -       "Route map name\n")
--
  int
  ospf6_redistribute_config_write (struct vty *vty)
  {
index c2999ca02a02cbaf98e3aef3d020d19daee57b51,1b7c43147c52621bfd0e76459b3a6c53e0299242..c5137c085c0ce5bd223e06ca78214224ca2d2b80
@@@ -7093,11 -8050,23 +7093,11 @@@ DEFUN (no_ip_ospf_area
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ip_ospf_instance_area,
 -       no_ip_ospf_instance_area_val_cmd,
 -       "no ip ospf <1-65535> area (A.B.C.D|<0-4294967295>)",
 -       NO_STR
 -       "IP Information\n"
 -       "OSPF interface commands\n"
 -       "Instance ID\n"
 -       "Disable OSPF on this interface\n"
 -       "OSPF area ID in IP address format\n"
 -       "OSPF area ID as a decimal value\n")
 -
  DEFUN (ospf_redistribute_source,
         ospf_redistribute_source_cmd,
 -       "redistribute " FRR_REDIST_STR_OSPFD
 -         " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
 +       "redistribute <kernel|connected|static|rip|isis|bgp|pim|table> [<metric (0-16777214)|metric-type (1-2)|route-map WORD>]",
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_OSPFD
+        FRR_REDIST_HELP_STR_OSPFD
         "Metric for redistributed routes\n"
         "OSPF default metric\n"
         "OSPF exterior metric type for redistributed routes\n"
  
  DEFUN (no_ospf_redistribute_source,
         no_ospf_redistribute_source_cmd,
 -       "no redistribute " FRR_REDIST_STR_OSPFD
 -         " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
 +       "no redistribute <kernel|connected|static|rip|isis|bgp|pim|table> [<metric (0-16777214)|metric-type (1-2)|route-map WORD>]",
         NO_STR
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_OSPFD
+        FRR_REDIST_HELP_STR_OSPFD
         "Metric for redistributed routes\n"
         "OSPF default metric\n"
         "OSPF exterior metric type for redistributed routes\n"
@@@ -7309,14 -8277,16 +7309,14 @@@ DEFUN (ospf_distribute_list_out
         "Filter networks in routing updates\n"
         "Access-list name\n"
         OUT_STR
-        QUAGGA_REDIST_HELP_STR_OSPFD)
+        FRR_REDIST_HELP_STR_OSPFD)
  {
 -  struct ospf *ospf = vty->index;
 +  VTY_DECLVAR_CONTEXT(ospf, ospf);
 +  int idx_word = 1;
    int source;
  
 -  if (!ospf)
 -    return CMD_SUCCESS;
 -
    /* Get distribute source. */
 -  source = proto_redistnum(AFI_IP, argv[1]);
 +  source = proto_redistnum(AFI_IP, argv[4]->arg);
    if (source < 0 || source == ZEBRA_ROUTE_OSPF)
      return CMD_WARNING;
  
@@@ -7330,13 -8300,15 +7330,13 @@@ DEFUN (no_ospf_distribute_list_out
         "Filter networks in routing updates\n"
         "Access-list name\n"
         OUT_STR
-        QUAGGA_REDIST_HELP_STR_OSPFD)
+        FRR_REDIST_HELP_STR_OSPFD)
  {
 -  struct ospf *ospf = vty->index;
 +  VTY_DECLVAR_CONTEXT(ospf, ospf);
 +  int idx_word = 2;
    int source;
  
 -  if (!ospf)
 -    return CMD_SUCCESS;
 -
 -  source = proto_redistnum(AFI_IP, argv[1]);
 +  source = proto_redistnum(AFI_IP, argv[5]->arg);
    if (source < 0 || source == ZEBRA_ROUTE_OSPF)
      return CMD_WARNING;
  
diff --cc pimd/pim_cmd.c
Simple merge
diff --cc pimd/pim_cmd.h
Simple merge
diff --cc pimd/pim_vty.c
Simple merge
index 5aea4f52229ccf8d0855e4692cacd8fbda77b670,44fc1cd8f975204a79118fdebe6a1af2e64b9563..dfebebb5bc81fe268bb0d3fdd055db13dde13d79
@@@ -331,9 -371,9 +331,9 @@@ DEFUN (no_rip_redistribute_rip
  
  DEFUN (rip_redistribute_type,
         rip_redistribute_type_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPD,
 +       "redistribute <kernel|connected|static|ospf|isis|bgp|pim|table>",
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD)
+        FRR_REDIST_HELP_STR_RIPD)
  {
    int i;
  
  
  DEFUN (no_rip_redistribute_type,
         no_rip_redistribute_type_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPD,
 +       "no redistribute <kernel|connected|static|ospf|isis|bgp|pim|table>",
         NO_STR
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD)
+        FRR_REDIST_HELP_STR_RIPD)
  {
    int i;
  
  
  DEFUN (rip_redistribute_type_routemap,
         rip_redistribute_type_routemap_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPD " route-map WORD",
 +       "redistribute <kernel|connected|static|ospf|isis|bgp|pim|table> route-map WORD",
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD
+        FRR_REDIST_HELP_STR_RIPD
         "Route map reference\n"
         "Pointer to route-map entries\n")
  {
  
  DEFUN (no_rip_redistribute_type_routemap,
         no_rip_redistribute_type_routemap_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPD " route-map WORD",
 +       "no redistribute <kernel|connected|static|ospf|isis|bgp|pim|table> route-map WORD",
         NO_STR
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD
+        FRR_REDIST_HELP_STR_RIPD
         "Route map reference\n"
         "Pointer to route-map entries\n")
  {
  
  DEFUN (rip_redistribute_type_metric,
         rip_redistribute_type_metric_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPD " metric <0-16>",
 +       "redistribute <kernel|connected|static|ospf|isis|bgp|pim|table> metric (0-16)",
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD
+        FRR_REDIST_HELP_STR_RIPD
         "Metric\n"
         "Metric value\n")
  {
  
  DEFUN (no_rip_redistribute_type_metric,
         no_rip_redistribute_type_metric_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPD " metric <0-16>",
 +       "no redistribute <kernel|connected|static|ospf|isis|bgp|pim|table> metric (0-16)",
         NO_STR
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD
+        FRR_REDIST_HELP_STR_RIPD
         "Metric\n"
         "Metric value\n")
  {
  
  DEFUN (rip_redistribute_type_metric_routemap,
         rip_redistribute_type_metric_routemap_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPD " metric <0-16> route-map WORD",
 +       "redistribute <kernel|connected|static|ospf|isis|bgp|pim|table> metric (0-16) route-map WORD",
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD
+        FRR_REDIST_HELP_STR_RIPD
         "Metric\n"
         "Metric value\n"
         "Route map reference\n"
  
  DEFUN (no_rip_redistribute_type_metric_routemap,
         no_rip_redistribute_type_metric_routemap_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPD
 -       " metric <0-16> route-map WORD",
 +       "no redistribute <kernel|connected|static|ospf|isis|bgp|pim|table> metric (0-16) route-map WORD",
         NO_STR
         REDIST_STR
-        QUAGGA_REDIST_HELP_STR_RIPD
+        FRR_REDIST_HELP_STR_RIPD
         "Metric\n"
         "Metric value\n"
         "Route map reference\n"
index 09472683d79ea3fdc34b8c82f837a67049973d97,67337caf288e37142efd140ca2befe7f18bea7b1..c5096305e413563ad6a5db0d481c314b1057a16d
@@@ -315,9 -339,9 +315,9 @@@ DEFUN (no_ripng_redistribute_ripng
  
  DEFUN (ripng_redistribute_type,
         ripng_redistribute_type_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPNGD,
 +       "redistribute <kernel|connected|static|ospf6|isis|bgp|table>",
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_RIPNGD)
+        FRR_REDIST_HELP_STR_RIPNGD)
  {
    int type;
  
  
  DEFUN (no_ripng_redistribute_type,
         no_ripng_redistribute_type_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPNGD,
 +       "no redistribute <kernel|connected|static|ospf6|isis|bgp|table> [metric (0-16)] [route-map WORD]",
         NO_STR
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_RIPNGD
 -       FRR_REDIST_HELP_STR_RIPNGD)
++       FRR_REDIST_HELP_STR_RIPNGD
 +       "Metric\n"
 +       "Metric value\n"
 +       "Route map reference\n"
 +       "Pointer to route-map entries\n")
  {
    int type;
 -
 -  type = proto_redistnum(AFI_IP6, argv[0]);
 +  type = proto_redistnum(AFI_IP6, argv[2]->text);
  
    if (type < 0)
      {
  
  DEFUN (ripng_redistribute_type_metric,
         ripng_redistribute_type_metric_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPNGD " metric <0-16>",
 +       "redistribute <kernel|connected|static|ospf6|isis|bgp|table> metric (0-16)",
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_RIPNGD
+        FRR_REDIST_HELP_STR_RIPNGD
         "Metric\n"
         "Metric value\n")
  {
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ripng_redistribute_type,
 -       no_ripng_redistribute_type_metric_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPNGD " metric <0-16>",
 -       NO_STR
 -       "Redistribute\n"
 -       FRR_REDIST_HELP_STR_RIPNGD
 -       "Metric\n"
 -       "Metric value\n")
--
  DEFUN (ripng_redistribute_type_routemap,
         ripng_redistribute_type_routemap_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPNGD " route-map WORD",
 +       "redistribute <kernel|connected|static|ospf6|isis|bgp|table> route-map WORD",
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_RIPNGD
+        FRR_REDIST_HELP_STR_RIPNGD
         "Route map reference\n"
         "Pointer to route-map entries\n")
  {
   return CMD_SUCCESS;
  }
  
 -ALIAS (no_ripng_redistribute_type,
 -       no_ripng_redistribute_type_routemap_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPNGD " route-map WORD",
 -       NO_STR
 -       "Redistribute\n"
 -       FRR_REDIST_HELP_STR_RIPNGD
 -       "Route map reference\n"
 -       "Pointer to route-map entries\n")
--
  DEFUN (ripng_redistribute_type_metric_routemap,
         ripng_redistribute_type_metric_routemap_cmd,
 -       "redistribute " FRR_REDIST_STR_RIPNGD " metric <0-16> route-map WORD",
 +       "redistribute <kernel|connected|static|ospf6|isis|bgp|table> metric (0-16) route-map WORD",
         "Redistribute\n"
-        QUAGGA_REDIST_HELP_STR_RIPNGD
+        FRR_REDIST_HELP_STR_RIPNGD
         "Metric\n"
         "Metric value\n"
         "Route map reference\n"
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ripng_redistribute_type,
 -       no_ripng_redistribute_type_metric_routemap_cmd,
 -       "no redistribute " FRR_REDIST_STR_RIPNGD " metric <0-16> route-map WORD",
 -       NO_STR
 -       "Redistribute\n"
 -       FRR_REDIST_HELP_STR_RIPNGD
 -       "Route map reference\n"
 -       "Pointer to route-map entries\n")
--
  void
  ripng_redistribute_write (struct vty *vty, int config_mode)
  {
index c5dbba5a8ba1cc9651f9d5a6b70547f52c11e046,2f1bfc0604b24064f078aa85c42632e0148066eb..97ca27039a36dd95cb43080a1e40e0d404ba9abc
@@@ -1,12 -1,4 +1,12 @@@
- sbin_SCRIPTS = quagga-reload.py quagga
 +AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
 +DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 +AM_CFLAGS = $(WERROR)
 +
 +bin_PROGRAMS = permutations
 +permutations_SOURCES = permutations.c
 +permutations_LDADD = ../lib/libzebra.la
 +
+ sbin_SCRIPTS = frr-reload.py frr
  
- EXTRA_DIST = quagga.service quagga-reload.py quagga
+ EXTRA_DIST = frr.service frr-reload.py frr
  
diff --cc vtysh/vtysh.c
Simple merge
Simple merge
Simple merge
index 111b55ff780e7780d5bf5b1247c16d96c31db061,041f67826b6e10f932f7ba4f619164595447c456..c467609f0c92289ddab8ea85c2f43cb01feaf114
@@@ -443,24 -723,29 +443,24 @@@ DEFUN (no_zebra_route_map_timer
  
  DEFUN (ip_protocol,
         ip_protocol_cmd,
 -       "ip protocol " FRR_IP_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 +       "ip protocol <kernel|connected|static|rip|ospf|isis|bgp|pim|table|any> route-map ROUTE-MAP",
         IP_STR
         "Filter routing info exchanged between zebra and protocol\n"
-        QUAGGA_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
+        FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
 +       "Specify route-map\n"
         "Route map name\n")
  {
 +  char *proto = argv[2]->text;
 +  char *rmap = argv[4]->arg;
    int i;
  
 -  if (strcasecmp(argv[0], "any") == 0)
 +  if (strcasecmp(proto, "any") == 0)
      i = ZEBRA_ROUTE_MAX;
    else
 -    i = proto_name2num(argv[0]);
 +    i = proto_name2num(proto);
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
        return CMD_WARNING;
      }
    if (proto_rm[AFI_IP][i])
@@@ -486,25 -771,21 +486,25 @@@ DEFUN (no_ip_protocol
         NO_STR
         IP_STR
         "Stop filtering routing info between zebra and protocol\n"
-        QUAGGA_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
+        FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       "Protocol from which to stop filtering routes\n")
 +       "Specify route map\n"
 +       "Route map name\n")
  {
 +  char *proto = argv[3]->text;
 +  char *rmap = (argc == 6) ? argv[5]->arg : NULL;
    int i;
  
 -  if (strcasecmp(argv[0], "any") == 0)
 +  if (strcasecmp(proto, "any") == 0)
      i = ZEBRA_ROUTE_MAX;
    else
 -    i = proto_name2num(argv[0]);
 +    i = proto_name2num(proto);
 +
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
       return CMD_WARNING;
      }
 +
    if (!proto_rm[AFI_IP][i])
      return CMD_SUCCESS;
  
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ip_protocol,
 -       no_ip_protocol_val_cmd,
 -       "no ip protocol " FRR_IP_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 -       NO_STR
 -       IP_STR
 -       "Stop filtering routing info between zebra and protocol\n"
 -       FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       "route map name")
--
  DEFUN (show_ip_protocol,
         show_ip_protocol_cmd,
         "show ip protocol",
  
  DEFUN (ipv6_protocol,
         ipv6_protocol_cmd,
 -       "ipv6 protocol " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 +       "ipv6 protocol <kernel|connected|static|ripng|ospf6|isis|bgp|table|any> route-map ROUTE-MAP",
         IP6_STR
         "Filter IPv6 routing info exchanged between zebra and protocol\n"
-        QUAGGA_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
+        FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
 +       "Specify route map\n"
         "Route map name\n")
  {
 +  char *proto = argv[2]->text;
 +  char *rmap = argv[4]->arg;
    int i;
  
 -  if (strcasecmp(argv[0], "any") == 0)
 +  if (strcasecmp(proto, "any") == 0)
      i = ZEBRA_ROUTE_MAX;
    else
 -    i = proto_name2num(argv[0]);
 +    i = proto_name2num(proto);
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
        return CMD_WARNING;
      }
    if (proto_rm[AFI_IP6][i])
@@@ -596,21 -884,19 +595,21 @@@ DEFUN (no_ipv6_protocol
         NO_STR
         IP6_STR
         "Stop filtering IPv6 routing info between zebra and protocol\n"
-        QUAGGA_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
+        FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       "Protocol from which to stop filtering routes\n")
 +       "Specify route map\n"
 +       "Route map name\n")
  {
 +  const char *proto = argv[3]->text;
 +  const char *rmap = (argc == 6) ? argv[5]->arg : NULL;
    int i;
  
 -  if (strcasecmp(argv[0], "any") == 0)
 +  if (strcasecmp(proto, "any") == 0)
      i = ZEBRA_ROUTE_MAX;
    else
 -    i = proto_name2num(argv[0]);
 +    i = proto_name2num(proto);
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
       return CMD_WARNING;
      }
    if (!proto_rm[AFI_IP6][i])
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ipv6_protocol,
 -       no_ipv6_protocol_val_cmd,
 -       "no ipv6 protocol " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 -       NO_STR
 -       IP6_STR
 -       "Stop filtering IPv6 routing info between zebra and protocol\n"
 -       FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       "route map name")
--
  DEFUN (show_ipv6_protocol,
         show_ipv6_protocol_cmd,
         "show ipv6 protocol",
  
  DEFUN (ip_protocol_nht_rmap,
         ip_protocol_nht_rmap_cmd,
 -       "ip nht " FRR_IP_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 +       "ip nht <kernel|connected|static|rip|ospf|isis|bgp|pim|table|any> route-map ROUTE-MAP",
         IP_STR
         "Filter Next Hop tracking route resolution\n"
-        QUAGGA_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
+        FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
 +       "Specify route map\n"
         "Route map name\n")
  {
 +  char *proto = argv[2]->text;
 +  char *rmap = argv[4]->arg;
    int i;
  
 -  if (strcasecmp(argv[0], "any") == 0)
 +  if (strcasecmp(proto, "any") == 0)
      i = ZEBRA_ROUTE_MAX;
    else
 -    i = proto_name2num(argv[0]);
 +    i = proto_name2num(proto);
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
        return CMD_WARNING;
      }
    if (nht_rm[AFI_IP][i])
@@@ -702,22 -995,20 +700,22 @@@ DEFUN (no_ip_protocol_nht_rmap
         NO_STR
         IP_STR
         "Filter Next Hop tracking route resolution\n"
-        QUAGGA_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA)
++       FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
 +       "Specify route map\n"
 +       "Route map name\n")
  {
 -  int i;
 +  int idx = 0;
 +  char *proto = argv[3]->text;
 +  char *rmap = argv_find (argv, argc, "ROUTE-MAP", &idx) ? argv[idx]->arg : NULL;
 +
 +  int i = strmatch(proto, "any") ? ZEBRA_ROUTE_MAX : proto_name2num(proto);
  
 -  if (strcasecmp(argv[0], "any") == 0)
 -    i = ZEBRA_ROUTE_MAX;
 -  else
 -    i = proto_name2num(argv[0]);
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 -     return CMD_WARNING;
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
 +      return CMD_WARNING;
      }
 +
    if (!nht_rm[AFI_IP][i])
      return CMD_SUCCESS;
  
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ip_protocol_nht_rmap,
 -       no_ip_protocol_nht_rmap_val_cmd,
 -       "no ip nht " FRR_IP_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 -       IP_STR
 -       "Filter Next Hop tracking route resolution\n"
 -       FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       "Route map name\n")
--
  DEFUN (show_ip_protocol_nht,
         show_ip_protocol_nht_cmd,
         "show ip nht route-map",
  
  DEFUN (ipv6_protocol_nht_rmap,
         ipv6_protocol_nht_rmap_cmd,
 -       "ipv6 nht " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 +       "ipv6 nht <kernel|connected|static|ripng|ospf6|isis|bgp|table|any> route-map ROUTE-MAP",
         IP6_STR
         "Filter Next Hop tracking route resolution\n"
-        QUAGGA_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
+        FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
 +       "Specify route map\n"
         "Route map name\n")
  {
 +  char *proto = argv[2]->text;
 +  char *rmap = argv[4]->arg;
    int i;
  
 -  if (strcasecmp(argv[0], "any") == 0)
 +  if (strcasecmp(proto, "any") == 0)
      i = ZEBRA_ROUTE_MAX;
    else
 -    i = proto_name2num(argv[0]);
 +    i = proto_name2num(proto);
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
        return CMD_WARNING;
      }
    if (nht_rm[AFI_IP6][i])
@@@ -797,27 -1093,24 +794,27 @@@ DEFUN (no_ipv6_protocol_nht_rmap
         NO_STR
         IP6_STR
         "Filter Next Hop tracking route resolution\n"
-        QUAGGA_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA)
++       FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
 +       "Specify route map\n"
 +       "Route map name\n")
  {
 +  char *proto = argv[3]->text;
 +  char *rmap = (argc == 6) ? argv[5]->arg : NULL;
    int i;
  
 -  if (strcasecmp(argv[0], "any") == 0)
 +  if (strcasecmp(proto, "any") == 0)
      i = ZEBRA_ROUTE_MAX;
    else
 -    i = proto_name2num(argv[0]);
 +    i = proto_name2num(proto);
    if (i < 0)
      {
 -      vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
 -               VTY_NEWLINE);
 -     return CMD_WARNING;
 +      vty_out (vty, "invalid protocol name \"%s\"%s", proto, VTY_NEWLINE);
 +      return CMD_WARNING;
      }
  
 -  if (nht_rm[AFI_IP6][i] && argc == 2 && strcmp(argv[1], nht_rm[AFI_IP6][i]))
 +  if (nht_rm[AFI_IP6][i] && rmap && strcmp(rmap, nht_rm[AFI_IP6][i]))
      {
 -      vty_out (vty, "invalid route-map \"%s\"%s", argv[1], VTY_NEWLINE);
 +      vty_out (vty, "invalid route-map \"%s\"%s", rmap, VTY_NEWLINE);
        return CMD_WARNING;
      }
  
    return CMD_SUCCESS;
  }
  
 -ALIAS (no_ipv6_protocol_nht_rmap,
 -       no_ipv6_protocol_nht_rmap_val_cmd,
 -       "no ipv6 nht " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA " route-map ROUTE-MAP",
 -       NO_STR
 -       IP6_STR
 -       "Filter Next Hop tracking route resolution\n"
 -       FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
 -       "Route map name\n")
--
  DEFUN (show_ipv6_protocol_nht,
         show_ipv6_protocol_nht_cmd,
         "show ipv6 nht route-map",
index e6ae9c71d47a63fb42d05a406f7016c9d2babbf8,5894a8955b6f85534654dfd613ad97bb16e585df..76ef0c636f2479d86882c3587f9ff587692836ae
@@@ -323,10 -322,10 +323,10 @@@ static_uninstall_route (afi_t afi, safi
              {
                /* Update route in kernel if it's in fib */
                if (CHECK_FLAG(rib->status, RIB_ENTRY_SELECTED_FIB))
-               rib_install_kernel (rn, rib, 1);
+                 rib_install_kernel (rn, rib, rib);
                /* Update redistribution if it's selected */
                if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_SELECTED))
 -                redistribute_update (&rn->p, rib, NULL);
 +              redistribute_update (&rn->p, rib, NULL);
              }
            else
              {
index e5f9b17e81b149fa6eb4a87d8f37e6c59caf2933,98c20270c3fde4510d392f09e60adc8deb31cc9b..ca37d2c7a62103878645474885667a8d302ad871
@@@ -1434,86 -3443,45 +1434,86 @@@ DEFUN (show_ip_route_supernets
    struct route_table *table;
    struct route_node *rn;
    struct rib *rib;
 -  struct vrf *vrf;
 -  struct zebra_vrf *zvrf;
    u_int32_t addr;
    int first = 1;
 -  int vrf_header = 1;
 +  vrf_id_t vrf_id = VRF_DEFAULT;
  
 -  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 -    {
 -      if ((zvrf = vrf->info) == NULL ||
 -          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 -        continue;
 +  if (strmatch(argv[3]->text, "vrf"))
 +    VRF_GET_ID (vrf_id, argv[4]->arg);
  
 -      /* Show matched type IPv4 routes. */
 -      for (rn = route_top (table); rn; rn = route_next (rn))
 -        RNODE_FOREACH_RIB (rn, rib)
 -          {
 -            addr = ntohl (rn->p.u.prefix4.s_addr);
 +  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
 +  if (! table)
 +    return CMD_SUCCESS;
  
 -            if ((IN_CLASSC (addr) && rn->p.prefixlen < 24)
 -               || (IN_CLASSB (addr) && rn->p.prefixlen < 16)
 -               || (IN_CLASSA (addr) && rn->p.prefixlen < 8))
 -              {
 -                if (first)
 -                  {
 -                    vty_out (vty, SHOW_ROUTE_V4_HEADER);
 -                    first = 0;
 -                  }
 +  /* Show matched type IPv4 routes. */
 +  for (rn = route_top (table); rn; rn = route_next (rn))
 +    RNODE_FOREACH_RIB (rn, rib)
 +      {
 +      addr = ntohl (rn->p.u.prefix4.s_addr);
  
 -                if (vrf_header)
 -                  {
 -                    vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
 -                    vrf_header = 0;
 -                  }
 -                vty_show_ip_route (vty, rn, rib, NULL);
 -              }
 -          }
 -      vrf_header = 1;
 +      if ((IN_CLASSC (addr) && rn->p.prefixlen < 24)
 +         || (IN_CLASSB (addr) && rn->p.prefixlen < 16)
 +         || (IN_CLASSA (addr) && rn->p.prefixlen < 8))
 +        {
 +          if (first)
 +            {
 +              vty_out (vty, SHOW_ROUTE_V4_HEADER);
 +              first = 0;
 +            }
 +          vty_show_ip_route (vty, rn, rib, NULL);
 +        }
 +      }
 +  return CMD_SUCCESS;
 +}
 +
 +DEFUN (show_ip_route_protocol,
 +       show_ip_route_protocol_cmd,
 +       "show ip route [vrf NAME] <kernel|connected|static|rip|ospf|isis|bgp|pim|table>",
 +       SHOW_STR
 +       IP_STR
 +       "IP routing table\n"
 +       VRF_CMD_HELP_STR
-        QUAGGA_IP_REDIST_HELP_STR_ZEBRA)
++       FRR_IP_REDIST_HELP_STR_ZEBRA)
 +{
 +  int type;
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct rib *rib;
 +  int first = 1;
 +  vrf_id_t vrf_id = VRF_DEFAULT;
 +
 +  if (strmatch(argv[3]->text, "vrf"))
 +    {
 +      type = proto_redistnum (AFI_IP, argv[5]->arg);
 +      VRF_GET_ID (vrf_id, argv[4]->arg);
 +    }
 +  else
 +    {
 +      type = proto_redistnum (AFI_IP, argv[3]->arg);
 +    }
 +
 +  if (type < 0)
 +    {
 +      vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
 +      return CMD_WARNING;
      }
  
 +  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
 +  if (! table)
 +    return CMD_SUCCESS;
 +
 +  /* Show matched type IPv4 routes. */
 +  for (rn = route_top (table); rn; rn = route_next (rn))
 +    RNODE_FOREACH_RIB (rn, rib)
 +      if (rib->type == type)
 +      {
 +        if (first)
 +          {
 +            vty_out (vty, SHOW_ROUTE_V4_HEADER);
 +            first = 0;
 +          }
 +        vty_show_ip_route (vty, rn, rib, NULL);
 +      }
    return CMD_SUCCESS;
  }
  
@@@ -1854,630 -3895,830 +1854,630 @@@ DEFUN (show_ip_route_summary_prefix
    return CMD_SUCCESS;
  }
  
 -DEFUN (ipv6_route,
 -       ipv6_route_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0)",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL, NULL, NULL, NULL);
 -}
  
 -DEFUN (ipv6_route_tag,
 -       ipv6_route_tag_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) tag <1-4294967295>",
 +DEFUN (show_ip_route_vrf_all,
 +       show_ip_route_vrf_all_cmd,
 +       "show ip route vrf all",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Set tag for this route\n"
 -       "Tag value\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR)
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2], NULL, NULL, NULL);
 -}
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct rib *rib;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
 +  int first = 1;
 +  int vrf_header = 1;
  
 -DEFUN (ipv6_route_flags,
 -       ipv6_route_flags_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole)",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL, NULL, NULL, NULL);
 -}
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if ((zvrf = vrf->info) == NULL ||
 +          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 +        continue;
  
 -DEFUN (ipv6_route_flags_tag,
 -       ipv6_route_flags_tag_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) tag <1-4294967295>",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3], NULL, NULL, NULL);
 -}
 +      /* Show all IPv4 routes. */
 +      for (rn = route_top (table); rn; rn = route_next (rn))
 +        RNODE_FOREACH_RIB (rn, rib)
 +          {
 +            if (first)
 +              {
 +                vty_out (vty, SHOW_ROUTE_V4_HEADER);
 +                first = 0;
 +              }
  
 -DEFUN (ipv6_route_ifname,
 -       ipv6_route_ifname_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL, NULL, NULL, NULL);
 +            if (vrf_header)
 +              {
 +                vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
 +                vrf_header = 0;
 +              }
 +            vty_show_ip_route (vty, rn, rib, NULL);
 +          }
 +      vrf_header  = 1;
 +    }
 +
 +  return CMD_SUCCESS;
  }
 -DEFUN (ipv6_route_ifname_tag,
 -       ipv6_route_ifname_tag_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag <1-4294967295>",
 +
 +DEFUN (show_ip_route_vrf_all_tag,
 +       show_ip_route_vrf_all_tag_cmd,
 +       "show ip route vrf all tag (1-4294967295)",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Set tag for this route\n"
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
 +       "Show only routes with tag\n"
         "Tag value\n")
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3], NULL, NULL, NULL);
 +  int idx_number = 6;
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct rib *rib;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
 +  int first = 1;
 +  int vrf_header = 1;
 +  route_tag_t tag = 0;
 +
 +  if (argv[idx_number]->arg)
 +    tag = atol(argv[idx_number]->arg);
 +
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if ((zvrf = vrf->info) == NULL ||
 +          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 +        continue;
 +
 +      /* Show all IPv4 routes with matching tag value. */
 +      for (rn = route_top (table); rn; rn = route_next (rn))
 +        RNODE_FOREACH_RIB (rn, rib)
 +          {
 +            if (rib->tag != tag)
 +              continue;
 +
 +            if (first)
 +              {
 +                vty_out (vty, SHOW_ROUTE_V4_HEADER);
 +                first = 0;
 +              }
 +
 +            if (vrf_header)
 +              {
 +                vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
 +                vrf_header = 0;
 +              }
 +            vty_show_ip_route (vty, rn, rib, NULL);
 +          }
 +      vrf_header = 1;
 +    }
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (ipv6_route_ifname_flags,
 -       ipv6_route_ifname_flags_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole)",
 +DEFUN (show_ip_route_vrf_all_prefix_longer,
 +       show_ip_route_vrf_all_prefix_longer_cmd,
 +       "show ip route vrf all A.B.C.D/M longer-prefixes",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
 +       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
 +       "Show route matching the specified Network/Mask pair only\n")
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL, NULL, NULL, NULL);
 +  int idx_ipv4_prefixlen = 5;
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct rib *rib;
 +  struct prefix p;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
 +  int ret;
 +  int first = 1;
 +  int vrf_header = 1;
 +
 +  ret = str2prefix (argv[idx_ipv4_prefixlen]->arg, &p);
 +  if (! ret)
 +    {
 +      vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
 +
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if ((zvrf = vrf->info) == NULL ||
 +          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 +        continue;
 +
 +      /* Show matched type IPv4 routes. */
 +      for (rn = route_top (table); rn; rn = route_next (rn))
 +        RNODE_FOREACH_RIB (rn, rib)
 +          if (prefix_match (&p, &rn->p))
 +            {
 +              if (first)
 +                {
 +                  vty_out (vty, SHOW_ROUTE_V4_HEADER);
 +                  first = 0;
 +                }
 +
 +              if (vrf_header)
 +                {
 +                  vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
 +                  vrf_header = 0;
 +                }
 +              vty_show_ip_route (vty, rn, rib, NULL);
 +            }
 +      vrf_header = 1;
 +    }
 +
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (ipv6_route_ifname_flags_tag,
 -       ipv6_route_ifname_flags_tag_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) tag <1-4294967295>",
 +DEFUN (show_ip_route_vrf_all_supernets,
 +       show_ip_route_vrf_all_supernets_cmd,
 +       "show ip route vrf all supernets-only",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
 +       "Show supernet entries only\n")
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4], NULL, NULL, NULL);
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct rib *rib;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
 +  u_int32_t addr;
 +  int first = 1;
 +  int vrf_header = 1;
 +
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if ((zvrf = vrf->info) == NULL ||
 +          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 +        continue;
 +
 +      /* Show matched type IPv4 routes. */
 +      for (rn = route_top (table); rn; rn = route_next (rn))
 +        RNODE_FOREACH_RIB (rn, rib)
 +          {
 +            addr = ntohl (rn->p.u.prefix4.s_addr);
 +
 +            if ((IN_CLASSC (addr) && rn->p.prefixlen < 24)
 +               || (IN_CLASSB (addr) && rn->p.prefixlen < 16)
 +               || (IN_CLASSA (addr) && rn->p.prefixlen < 8))
 +              {
 +                if (first)
 +                  {
 +                    vty_out (vty, SHOW_ROUTE_V4_HEADER);
 +                    first = 0;
 +                  }
 +                if (vrf_header)
 +                  {
 +                    vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
 +                    vrf_header = 0;
 +                  }
 +                vty_show_ip_route (vty, rn, rib, NULL);
 +              }
 +          }
 +      vrf_header = 1;
 +    }
 +
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (ipv6_route_pref,
 -       ipv6_route_pref_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) <1-255>",
 +DEFUN (show_ip_route_vrf_all_protocol,
 +       show_ip_route_vrf_all_protocol_cmd,
 +       "show ip route vrf all <kernel|connected|static|rip|ospf|isis|bgp|pim|table>",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Distance value for this prefix\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
-        QUAGGA_IP_REDIST_HELP_STR_ZEBRA"\n")
++       FRR_IP_REDIST_HELP_STR_ZEBRA"\n")
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL, argv[2], NULL, NULL);
 -}
 +  int type;
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct rib *rib;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
 +  int first = 1;
 +  int vrf_header = 1;
  
 -DEFUN (ipv6_route_pref_tag,
 -       ipv6_route_pref_tag_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) tag <1-4294967295> <1-255>",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2], argv[3], NULL, NULL);
 -}
 +  type = proto_redistnum (AFI_IP, argv[6]->arg);
 +  if (type < 0)
 +    {
 +      vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
  
 -DEFUN (ipv6_route_flags_pref,
 -       ipv6_route_flags_pref_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255>",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL, argv[3], NULL, NULL);
 -}
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if ((zvrf = vrf->info) == NULL ||
 +          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 +        continue;
  
 -DEFUN (ipv6_route_flags_pref_tag,
 -       ipv6_route_flags_pref_tag_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) tag <1-4294967295> <1-255>",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3], argv[4], NULL, NULL);
 -}
 +      /* Show matched type IPv4 routes. */
 +      for (rn = route_top (table); rn; rn = route_next (rn))
 +        RNODE_FOREACH_RIB (rn, rib)
 +          if (rib->type == type)
 +            {
 +              if (first)
 +                {
 +                  vty_out (vty, SHOW_ROUTE_V4_HEADER);
 +                  first = 0;
 +                }
  
 -DEFUN (ipv6_route_ifname_pref,
 -       ipv6_route_ifname_pref_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255>",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL, argv[3], NULL, NULL);
 -}
 +              if (vrf_header)
 +                {
 +                  vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
 +                  vrf_header = 0;
 +                }
 +              vty_show_ip_route (vty, rn, rib, NULL);
 +            }
 +      vrf_header = 1;
 +    }
  
 -DEFUN (ipv6_route_ifname_pref_tag,
 -       ipv6_route_ifname_pref_tag_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag <1-4294967295> <1-255>",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3], argv[4], NULL, NULL);
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (ipv6_route_ifname_flags_pref,
 -       ipv6_route_ifname_flags_pref_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255>",
 +DEFUN (show_ip_route_vrf_all_addr,
 +       show_ip_route_vrf_all_addr_cmd,
 +       "show ip route vrf all A.B.C.D",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Distance value for this prefix\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
 +       "Network in the IP routing table to display\n")
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL, argv[4], NULL, NULL);
 -}
 +  int idx_ipv4 = 5;
 +  int ret;
 +  struct prefix_ipv4 p;
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
  
 -DEFUN (ipv6_route_ifname_flags_pref_tag,
 -       ipv6_route_ifname_flags_pref_tag_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) tag <1-4294967295> <1-255>",
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], NULL, NULL);
 -}
 +  ret = str2prefix_ipv4 (argv[idx_ipv4]->arg, &p);
 +  if (ret <= 0)
 +    {
 +      vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
  
 -DEFUN (no_ipv6_route,
 -       no_ipv6_route_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0)",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null Interface\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, NULL, NULL, NULL, NULL);
 -}
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if ((zvrf = vrf->info) == NULL ||
 +          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 +        continue;
  
 -DEFUN (no_ipv6_route_tag,
 -       no_ipv6_route_tag_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) tag <1-4294967295>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Set tag for this route\n"
 -       "Tag value\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, argv[2], NULL, NULL, NULL);
 -}
 +      rn = route_node_match (table, (struct prefix *) &p);
 +      if (! rn)
 +        continue;
  
 -DEFUN (no_ipv6_route_flags,
 -       no_ipv6_route_flags_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole)",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], NULL, NULL, NULL, NULL);
 -}
 +      vty_show_ip_route_detail (vty, rn, 0);
  
 -DEFUN (no_ipv6_route_flags_tag,
 -       no_ipv6_route_flags_tag_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) tag <1-4294967295>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3], NULL, NULL, NULL);
 -}
 +      route_unlock_node (rn);
 +    }
  
 -DEFUN (no_ipv6_route_ifname,
 -       no_ipv6_route_ifname_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, NULL, NULL, NULL, NULL);
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (no_ipv6_route_ifname_tag,
 -       no_ipv6_route_ifname_tag_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag <1-4294967295>",
 -       NO_STR
 +DEFUN (show_ip_route_vrf_all_prefix,
 +       show_ip_route_vrf_all_prefix_cmd,
 +       "show ip route vrf all A.B.C.D/M",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Set tag for this route\n"
 -       "Tag value\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
 +       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
  {
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3], NULL, NULL, NULL);
 -}
 +  int idx_ipv4_prefixlen = 5;
 +  int ret;
 +  struct prefix_ipv4 p;
 +  struct route_table *table;
 +  struct route_node *rn;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
  
 -DEFUN (no_ipv6_route_ifname_flags,
 -       no_ipv6_route_ifname_flags_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole)",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], NULL, NULL, NULL, NULL);
 -}
 +  ret = str2prefix_ipv4 (argv[idx_ipv4_prefixlen]->arg, &p);
 +  if (ret <= 0)
 +    {
 +      vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
  
 -DEFUN (no_ipv6_route_ifname_flags_tag,
 -       no_ipv6_route_ifname_flags_tag_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) tag <1-4294967295>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4], NULL, NULL, NULL);
 -}
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if ((zvrf = vrf->info) == NULL ||
 +          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
 +        continue;
 +
 +      rn = route_node_match (table, (struct prefix *) &p);
 +      if (! rn)
 +        continue;
 +      if (rn->p.prefixlen != p.prefixlen)
 +        {
 +          route_unlock_node (rn);
 +          continue;
 +        }
  
 -DEFUN (no_ipv6_route_pref,
 -       no_ipv6_route_pref_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) <1-255>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, NULL, argv[2], NULL, NULL);
 -}
 +      vty_show_ip_route_detail (vty, rn, 0);
  
 -DEFUN (no_ipv6_route_pref_tag,
 -       no_ipv6_route_pref_tag_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) tag <1-4294967295> <1-255>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, argv[2], argv[3], NULL, NULL);
 -}
 +      route_unlock_node (rn);
 +    }
  
 -DEFUN (no_ipv6_route_flags_pref,
 -       no_ipv6_route_flags_pref_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Distance value for this prefix\n")
 -{
 -  /* We do not care about argv[2] */
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], NULL, argv[3], NULL, NULL);
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (no_ipv6_route_flags_pref_tag,
 -       no_ipv6_route_flags_pref_tag_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) tag <1-4294967295> <1-255>",
 -       NO_STR
 +DEFUN (show_ip_route_vrf_all_summary,
 +       show_ip_route_vrf_all_summary_cmd,
 +       "show ip route vrf all summary ",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
 +       "Summary of all routes\n")
  {
 -  /* We do not care about argv[2] */
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3], argv[4], NULL, NULL);
 -}
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
  
 -DEFUN (no_ipv6_route_ifname_pref,
 -       no_ipv6_route_ifname_pref_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, NULL, argv[3], NULL, NULL);
 -}
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    if ((zvrf = vrf->info) != NULL)
 +      vty_show_ip_route_summary (vty, zvrf->table[AFI_IP][SAFI_UNICAST]);
  
 -DEFUN (no_ipv6_route_ifname_pref_tag,
 -       no_ipv6_route_ifname_pref_tag_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag <1-4294967295> <1-255>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3], argv[4], NULL, NULL);
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (no_ipv6_route_ifname_flags_pref,
 -       no_ipv6_route_ifname_flags_pref_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255>",
 -       NO_STR
 +DEFUN (show_ip_route_vrf_all_summary_prefix,
 +       show_ip_route_vrf_all_summary_prefix_cmd,
 +       "show ip route vrf all summary prefix",
 +       SHOW_STR
         IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Distance value for this prefix\n")
 +       "IP routing table\n"
 +       VRF_ALL_CMD_HELP_STR
 +       "Summary of all routes\n"
 +       "Prefix routes\n")
  {
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], NULL, argv[4], NULL, NULL);
 -}
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
  
 -DEFUN (no_ipv6_route_ifname_flags_pref_tag,
 -       no_ipv6_route_ifname_flags_pref_tag_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) tag <1-4294967295> <1-255>",
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n")
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], NULL, NULL);
 -}
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    if ((zvrf = vrf->info) != NULL)
 +      vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP][SAFI_UNICAST]);
  
 -DEFUN (ipv6_route_vrf,
 -       ipv6_route_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL, NULL, argv[2], NULL);
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (ipv6_route_tag_vrf,
 -       ipv6_route_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) tag <1-4294967295> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       VRF_CMD_HELP_STR)
 +/* Write IPv4 static route configuration. */
 +static int
 +static_config_ipv4 (struct vty *vty, safi_t safi, const char *cmd)
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2], NULL, argv[3], NULL);
 -}
 +  struct route_node *rn;
 +  struct static_route *si;
 +  struct route_table *stable;
 +  struct vrf *vrf;
 +  struct zebra_vrf *zvrf;
 +  char buf[BUFSIZ];
 +  int write =0;
  
 -DEFUN (ipv6_route_flags_vrf,
 -       ipv6_route_flags_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL, NULL, argv[3], NULL);
 -}
 +  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
 +    {
 +      if (!(zvrf = vrf->info))
 +        continue;
 +      if ((stable = zvrf->stable[AFI_IP][safi]) == NULL)
 +        continue;
  
 -DEFUN (ipv6_route_flags_tag_vrf,
 -       ipv6_route_flags_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) tag <1-4294967295> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3], NULL, argv[4], NULL);
 -}
 +      for (rn = route_top (stable); rn; rn = route_next (rn))
 +        for (si = rn->info; si; si = si->next)
 +          {
 +            vty_out (vty, "%s %s", cmd, prefix2str (&rn->p, buf, sizeof buf));
  
 -DEFUN (ipv6_route_ifname_vrf,
 -       ipv6_route_ifname_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL, NULL, argv[3], NULL);
 -}
 -DEFUN (ipv6_route_ifname_tag_vrf,
 -       ipv6_route_ifname_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag <1-4294967295> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3], NULL, argv[4], NULL);
 -}
 +            switch (si->type)
 +              {
 +              case STATIC_IPV4_GATEWAY:
 +                vty_out (vty, " %s", inet_ntoa (si->addr.ipv4));
 +                break;
 +              case STATIC_IFINDEX:
 +                vty_out (vty, " %s", si->ifname);
 +                break;
 +              case STATIC_BLACKHOLE:
 +                vty_out (vty, " Null0");
 +                break;
 +              }
  
 -DEFUN (ipv6_route_ifname_flags_vrf,
 -       ipv6_route_ifname_flags_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL, NULL, argv[4], NULL);
 -}
 +            /* flags are incompatible with STATIC_BLACKHOLE */
 +            if (si->type != STATIC_BLACKHOLE)
 +              {
 +                if (CHECK_FLAG(si->flags, ZEBRA_FLAG_REJECT))
 +                  vty_out (vty, " %s", "reject");
  
 -DEFUN (ipv6_route_ifname_flags_tag_vrf,
 -       ipv6_route_ifname_flags_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) tag <1-4294967295> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4], NULL, argv[5], NULL);
 -}
 +                if (CHECK_FLAG(si->flags, ZEBRA_FLAG_BLACKHOLE))
 +                  vty_out (vty, " %s", "blackhole");
 +              }
  
 -DEFUN (ipv6_route_pref_vrf,
 -       ipv6_route_pref_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL, argv[2], argv[3], NULL);
 -}
 +            if (si->tag)
 +              vty_out (vty, " tag %"ROUTE_TAG_PRI, si->tag);
  
 -DEFUN (ipv6_route_pref_tag_vrf,
 -       ipv6_route_pref_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) tag <1-4294967295> <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2], argv[3], argv[4], NULL);
 -}
 +            if (si->distance != ZEBRA_STATIC_DISTANCE_DEFAULT)
 +              vty_out (vty, " %d", si->distance);
 +
 +            if (si->vrf_id != VRF_DEFAULT)
 +                vty_out (vty, " vrf %s", zvrf ? zvrf_name (zvrf) : "");
 +
 +            /* Label information */
 +            if (si->snh_label.num_labels)
 +              vty_out (vty, " label %s",
 +                       mpls_label2str (si->snh_label.num_labels,
 +                                       si->snh_label.label, buf, sizeof buf));
  
 -DEFUN (ipv6_route_flags_pref_vrf,
 -       ipv6_route_flags_pref_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL, argv[3], argv[4], NULL);
 -}
 +            vty_out (vty, "%s", VTY_NEWLINE);
  
 -DEFUN (ipv6_route_flags_pref_tag_vrf,
 -       ipv6_route_flags_pref_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) tag <1-4294967295> <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3], argv[4], argv[5], NULL);
 +            write = 1;
 +          }
 +    }
 +  return write;
  }
  
 -DEFUN (ipv6_route_ifname_pref_vrf,
 -       ipv6_route_ifname_pref_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 +/* General fucntion for IPv6 static route. */
 +int
 +static_ipv6_func (struct vty *vty, int add_cmd, const char *dest_str,
 +                  const char *gate_str, const char *ifname,
 +                  const char *flag_str, const char *tag_str,
 +                  const char *distance_str, const char *vrf_id_str,
 +                  const char *label_str)
  {
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL, argv[3], argv[4], NULL);
 -}
 +  int ret;
 +  u_char distance;
 +  struct prefix p;
 +  struct in6_addr *gate = NULL;
 +  struct in6_addr gate_addr;
 +  u_char type = STATIC_BLACKHOLE;
 +  u_char flag = 0;
 +  route_tag_t tag = 0;
 +  unsigned int ifindex = 0;
 +  struct interface *ifp = NULL;
 +  struct zebra_vrf *zvrf;
 +  struct static_nh_label snh_label;
  
 -DEFUN (ipv6_route_ifname_pref_tag_vrf,
 -       ipv6_route_ifname_pref_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag <1-4294967295> <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3], argv[4], argv[5], NULL);
 -}
 +  ret = str2prefix (dest_str, &p);
 +  if (ret <= 0)
 +    {
 +      vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
  
 -DEFUN (ipv6_route_ifname_flags_pref_vrf,
 -       ipv6_route_ifname_flags_pref_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL, argv[4], argv[5], NULL);
 -}
 +  /* Apply mask for given prefix. */
 +  apply_mask (&p);
  
 -DEFUN (ipv6_route_ifname_flags_pref_tag_vrf,
 -       ipv6_route_ifname_flags_pref_tag_vrf_cmd,
 -       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) tag <1-4294967295> <1-255> " VRF_CMD_STR,
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       "Distance value for this prefix\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], NULL);
 -}
 +  /* Administrative distance. */
 +  if (distance_str)
 +    distance = atoi (distance_str);
 +  else
 +    distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
  
 -DEFUN (no_ipv6_route_vrf,
 -       no_ipv6_route_vrf_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) " VRF_CMD_STR,
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, NULL, NULL, argv[2], NULL);
 -}
 +  /* tag */
 +  if (tag_str)
 +    tag = atol(tag_str);
  
 -DEFUN (no_ipv6_route_tag_vrf,
 -       no_ipv6_route_tag_vrf_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE|null0) tag <1-4294967295> " VRF_CMD_STR,
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Null interface\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, argv[2], NULL, argv[3], NULL);
 -}
 +  /* When gateway is valid IPv6 addrees, then gate is treated as
 +     nexthop address other case gate is treated as interface name. */
 +  ret = inet_pton (AF_INET6, gate_str, &gate_addr);
  
 -DEFUN (no_ipv6_route_flags_vrf,
 -       no_ipv6_route_flags_vrf_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], NULL, NULL, argv[3], NULL);
 -}
 +  /* VRF id */
 +  zvrf = zebra_vrf_lookup_by_name (vrf_id_str);
  
 -DEFUN (no_ipv6_route_flags_tag_vrf,
 -       no_ipv6_route_flags_tag_vrf_cmd,
 -       "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) tag <1-4294967295> " VRF_CMD_STR,
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       "Emit an ICMP unreachable when matched\n"
 -       "Silently discard pkts when matched\n"
 -       "Set tag for this route\n"
 -       "Tag value\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3], NULL, argv[4], NULL);
 -}
 +  if (!zvrf)
 +    {
 +      vty_out (vty, "%% vrf %s is not defined%s", vrf_id_str, VTY_NEWLINE);
 +      return CMD_WARNING;
 +    }
  
 -DEFUN (no_ipv6_route_ifname_vrf,
 -       no_ipv6_route_ifname_vrf_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE " VRF_CMD_STR,
 -       NO_STR
 -       IP_STR
 -       "Establish static routes\n"
 -       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
 -       "IPv6 gateway address\n"
 -       "IPv6 gateway interface name\n"
 -       VRF_CMD_HELP_STR)
 -{
 -  return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, NULL, NULL, argv[3], NULL);
 +  /* Labels */
 +  memset (&snh_label, 0, sizeof (struct static_nh_label));
 +  if (label_str)
 +    {
 +      if (!mpls_enabled)
 +        {
 +          vty_out (vty, "%% MPLS not turned on in kernel, ignoring command%s",
 +                   VTY_NEWLINE);
 +          return CMD_WARNING;
 +        }
 +      if (mpls_str2label (label_str, &snh_label.num_labels,
 +                          snh_label.label))
 +        {
 +          vty_out (vty, "%% Malformed label(s)%s", VTY_NEWLINE);
 +          return CMD_WARNING;
 +        }
 +    }
 +
 +  /* Null0 static route.  */
 +  if ((gate_str != NULL) && (strncasecmp (gate_str, "Null0", strlen (gate_str)) == 0))
 +    {
 +      if (flag_str)
 +        {
 +          vty_out (vty, "%% can not have flag %s with Null0%s", flag_str, VTY_NEWLINE);
 +          return CMD_WARNING;
 +        }
 +      if (add_cmd)
 +        static_add_route (AFI_IP6, SAFI_UNICAST, type, &p, NULL, ifindex, ifname,
 +                          ZEBRA_FLAG_BLACKHOLE, tag, distance, zvrf, &snh_label);
 +      else
 +        static_delete_route (AFI_IP6, SAFI_UNICAST, type, &p,  NULL, ifindex, tag,
 +                             distance, zvrf, &snh_label);
 +      return CMD_SUCCESS;
 +    }
 +
 +  /* Route flags */
 +  if (flag_str) {
 +    switch(flag_str[0]) {
 +      case 'r':
 +      case 'R': /* XXX */
 +        SET_FLAG (flag, ZEBRA_FLAG_REJECT);
 +        break;
 +      case 'b':
 +      case 'B': /* XXX */
 +        SET_FLAG (flag, ZEBRA_FLAG_BLACKHOLE);
 +        break;
 +      default:
 +        vty_out (vty, "%% Malformed flag %s %s", flag_str, VTY_NEWLINE);
 +        return CMD_WARNING;
 +    }
 +  }
 +
 + if (ifname)
 +    {
 +      /* When ifname is specified.  It must be come with gateway
 +         address. */
 +      if (ret != 1)
 +        {
 +          vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
 +          return CMD_WARNING;
 +        }
 +      type = STATIC_IPV6_GATEWAY_IFINDEX;
 +      gate = &gate_addr;
 +      ifp = if_lookup_by_name_vrf (ifname, zvrf_id (zvrf));
 +      if (!ifp)
 +        {
 +          vty_out (vty, "%% Malformed Interface name %s%s", ifname, VTY_NEWLINE);
 +          return CMD_WARNING;
 +        }
 +      ifindex = ifp->ifindex;
 +    }
 +  else
 +    {
 +      if (ret == 1)
 +        {
 +          type = STATIC_IPV6_GATEWAY;
 +          gate = &gate_addr;
 +        }
 +      else
 +        {
 +          type = STATIC_IFINDEX;
 +          ifp = if_lookup_by_name_vrf (gate_str, zvrf_id (zvrf));
 +          if (!ifp)
 +            {
 +              vty_out (vty, "%% Malformed Interface name %s%s", gate_str, VTY_NEWLINE);
 +              ifindex = IFINDEX_DELETED;
 +            }
 +          else
 +            ifindex = ifp->ifindex;
 +          ifname = gate_str;
 +        }
 +    }
 +
 +  if (add_cmd)
 +    static_add_route (AFI_IP6, SAFI_UNICAST, type, &p, (union g_addr *)gate,
 +                      ifindex, ifname, flag, tag, distance, zvrf, &snh_label);
 +  else
 +    static_delete_route (AFI_IP6, SAFI_UNICAST, type, &p, (union g_addr *)gate,
 +                         ifindex, tag, distance, zvrf, &snh_label);
 +
 +  return CMD_SUCCESS;
  }
  
 -DEFUN (no_ipv6_route_ifname_tag_vrf,
 -       no_ipv6_route_ifname_tag_vrf_cmd,
 -       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag <1-4294967295> " VRF_CMD_STR,
 -       NO_STR
 +DEFUN (ipv6_route,
 +       ipv6_route_cmd,
 +       "ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE|null0> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
         IP_STR
         "Establish static routes\n"
         "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
@@@ -2955,8 -5128,7 +2955,8 @@@ DEFUN (show_ipv6_route_protocol
         SHOW_STR
         IP_STR
         "IP routing table\n"
 -      FRR_IP6_REDIST_HELP_STR_ZEBRA)
 +       VRF_CMD_HELP_STR
-        QUAGGA_IP6_REDIST_HELP_STR_ZEBRA)
++       FRR_IP6_REDIST_HELP_STR_ZEBRA)
  {
    int type;
    struct route_table *table;
@@@ -3356,9 -5567,8 +3356,9 @@@ DEFUN (show_ipv6_route_vrf_all_protocol
         IP_STR
         "IP routing table\n"
         VRF_ALL_CMD_HELP_STR
-        QUAGGA_IP6_REDIST_HELP_STR_ZEBRA)
+        FRR_IP6_REDIST_HELP_STR_ZEBRA)
  {
 +  int idx_protocol = 5;
    int type;
    struct route_table *table;
    struct route_node *rn;