File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / bgpd / bgp_vty.c
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jul 21 23:54:38 2013 UTC (10 years, 11 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, HEAD
0.99.22

    1: /* BGP VTY interface.
    2:    Copyright (C) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro
    3: 
    4: This file is part of GNU Zebra.
    5: 
    6: GNU Zebra is free software; you can redistribute it and/or modify it
    7: under the terms of the GNU General Public License as published by the
    8: Free Software Foundation; either version 2, or (at your option) any
    9: later version.
   10: 
   11: GNU Zebra is distributed in the hope that it will be useful, but
   12: WITHOUT ANY WARRANTY; without even the implied warranty of
   13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   14: General Public License for more details.
   15: 
   16: You should have received a copy of the GNU General Public License
   17: along with GNU Zebra; see the file COPYING.  If not, write to the Free
   18: Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   19: 02111-1307, USA.  */
   20: 
   21: #include <zebra.h>
   22: 
   23: #include "command.h"
   24: #include "prefix.h"
   25: #include "plist.h"
   26: #include "buffer.h"
   27: #include "linklist.h"
   28: #include "stream.h"
   29: #include "thread.h"
   30: #include "log.h"
   31: #include "memory.h"
   32: #include "hash.h"
   33: 
   34: #include "bgpd/bgpd.h"
   35: #include "bgpd/bgp_advertise.h"
   36: #include "bgpd/bgp_attr.h"
   37: #include "bgpd/bgp_aspath.h"
   38: #include "bgpd/bgp_community.h"
   39: #include "bgpd/bgp_ecommunity.h"
   40: #include "bgpd/bgp_damp.h"
   41: #include "bgpd/bgp_debug.h"
   42: #include "bgpd/bgp_fsm.h"
   43: #include "bgpd/bgp_mplsvpn.h"
   44: #include "bgpd/bgp_nexthop.h"
   45: #include "bgpd/bgp_open.h"
   46: #include "bgpd/bgp_regex.h"
   47: #include "bgpd/bgp_route.h"
   48: #include "bgpd/bgp_zebra.h"
   49: #include "bgpd/bgp_table.h"
   50: #include "bgpd/bgp_vty.h"
   51: #include "bgpd/bgp_mpath.h"
   52: 
   53: extern struct in_addr router_id_zebra;
   54: 
   55: /* Utility function to get address family from current node.  */
   56: afi_t
   57: bgp_node_afi (struct vty *vty)
   58: {
   59:   if (vty->node == BGP_IPV6_NODE || vty->node == BGP_IPV6M_NODE)
   60:     return AFI_IP6;
   61:   return AFI_IP;
   62: }
   63: 
   64: /* Utility function to get subsequent address family from current
   65:    node.  */
   66: safi_t
   67: bgp_node_safi (struct vty *vty)
   68: {
   69:   if (vty->node == BGP_VPNV4_NODE)
   70:     return SAFI_MPLS_VPN;
   71:   if (vty->node == BGP_IPV4M_NODE || vty->node == BGP_IPV6M_NODE)
   72:     return SAFI_MULTICAST;
   73:   return SAFI_UNICAST;
   74: }
   75: 
   76: static int
   77: peer_address_self_check (union sockunion *su)
   78: {
   79:   struct interface *ifp = NULL;
   80: 
   81:   if (su->sa.sa_family == AF_INET)
   82:     ifp = if_lookup_by_ipv4_exact (&su->sin.sin_addr);
   83: #ifdef HAVE_IPV6
   84:   else if (su->sa.sa_family == AF_INET6)
   85:     ifp = if_lookup_by_ipv6_exact (&su->sin6.sin6_addr);
   86: #endif /* HAVE IPV6 */
   87: 
   88:   if (ifp)
   89:     return 1;
   90: 
   91:   return 0;
   92: }
   93: 
   94: /* Utility function for looking up peer from VTY.  */
   95: static struct peer *
   96: peer_lookup_vty (struct vty *vty, const char *ip_str)
   97: {
   98:   int ret;
   99:   struct bgp *bgp;
  100:   union sockunion su;
  101:   struct peer *peer;
  102: 
  103:   bgp = vty->index;
  104: 
  105:   ret = str2sockunion (ip_str, &su);
  106:   if (ret < 0)
  107:     {
  108:       vty_out (vty, "%% Malformed address: %s%s", ip_str, VTY_NEWLINE);
  109:       return NULL;
  110:     }
  111: 
  112:   peer = peer_lookup (bgp, &su);
  113:   if (! peer)
  114:     {
  115:       vty_out (vty, "%% Specify remote-as or peer-group commands first%s", VTY_NEWLINE);
  116:       return NULL;
  117:     }
  118:   return peer;
  119: }
  120: 
  121: /* Utility function for looking up peer or peer group.  */
  122: static struct peer *
  123: peer_and_group_lookup_vty (struct vty *vty, const char *peer_str)
  124: {
  125:   int ret;
  126:   struct bgp *bgp;
  127:   union sockunion su;
  128:   struct peer *peer;
  129:   struct peer_group *group;
  130: 
  131:   bgp = vty->index;
  132: 
  133:   ret = str2sockunion (peer_str, &su);
  134:   if (ret == 0)
  135:     {
  136:       peer = peer_lookup (bgp, &su);
  137:       if (peer)
  138: 	return peer;
  139:     }
  140:   else
  141:     {
  142:       group = peer_group_lookup (bgp, peer_str);
  143:       if (group)
  144: 	return group->conf;
  145:     }
  146: 
  147:   vty_out (vty, "%% Specify remote-as or peer-group commands first%s",
  148: 	   VTY_NEWLINE);
  149: 
  150:   return NULL;
  151: }
  152: 
  153: static int
  154: bgp_vty_return (struct vty *vty, int ret)
  155: {
  156:   const char *str = NULL;
  157: 
  158:   switch (ret)
  159:     {
  160:     case BGP_ERR_INVALID_VALUE:
  161:       str = "Invalid value";
  162:       break;
  163:     case BGP_ERR_INVALID_FLAG:
  164:       str = "Invalid flag";
  165:       break;
  166:     case BGP_ERR_PEER_INACTIVE:
  167:       str = "Activate the neighbor for the address family first";
  168:       break;
  169:     case BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER:
  170:       str = "Invalid command for a peer-group member";
  171:       break;
  172:     case BGP_ERR_PEER_GROUP_SHUTDOWN:
  173:       str = "Peer-group has been shutdown. Activate the peer-group first";
  174:       break;
  175:     case BGP_ERR_PEER_GROUP_HAS_THE_FLAG:
  176:       str = "This peer is a peer-group member.  Please change peer-group configuration";
  177:       break;
  178:     case BGP_ERR_PEER_FLAG_CONFLICT:
  179:       str = "Can't set override-capability and strict-capability-match at the same time";
  180:       break;
  181:     case BGP_ERR_PEER_GROUP_MEMBER_EXISTS:
  182:       str = "No activate for peergroup can be given only if peer-group has no members";
  183:       break;
  184:     case BGP_ERR_PEER_BELONGS_TO_GROUP:
  185:       str = "No activate for an individual peer-group member is invalid";
  186:       break;
  187:     case BGP_ERR_PEER_GROUP_AF_UNCONFIGURED:
  188:       str = "Activate the peer-group for the address family first";
  189:       break;
  190:     case BGP_ERR_PEER_GROUP_NO_REMOTE_AS:
  191:       str = "Specify remote-as or peer-group remote AS first";
  192:       break;
  193:     case BGP_ERR_PEER_GROUP_CANT_CHANGE:
  194:       str = "Cannot change the peer-group. Deconfigure first";
  195:       break;
  196:     case BGP_ERR_PEER_GROUP_MISMATCH:
  197:       str = "Cannot have different peer-group for the neighbor";
  198:       break;
  199:     case BGP_ERR_PEER_FILTER_CONFLICT:
  200:       str = "Prefix/distribute list can not co-exist";
  201:       break;
  202:     case BGP_ERR_NOT_INTERNAL_PEER:
  203:       str = "Invalid command. Not an internal neighbor";
  204:       break;
  205:     case BGP_ERR_REMOVE_PRIVATE_AS:
  206:       str = "Private AS cannot be removed for IBGP peers";
  207:       break;
  208:     case BGP_ERR_LOCAL_AS_ALLOWED_ONLY_FOR_EBGP:
  209:       str = "Local-AS allowed only for EBGP peers";
  210:       break;
  211:     case BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS:
  212:       str = "Cannot have local-as same as BGP AS number";
  213:       break;
  214:     case BGP_ERR_TCPSIG_FAILED:
  215:       str = "Error while applying TCP-Sig to session(s)";
  216:       break;
  217:     case BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK:
  218:       str = "ebgp-multihop and ttl-security cannot be configured together";
  219:       break;
  220:     case BGP_ERR_NO_IBGP_WITH_TTLHACK:
  221:       str = "ttl-security only allowed for EBGP peers";
  222:       break;
  223:     }
  224:   if (str)
  225:     {
  226:       vty_out (vty, "%% %s%s", str, VTY_NEWLINE);
  227:       return CMD_WARNING;
  228:     }
  229:   return CMD_SUCCESS;
  230: }
  231: 
  232: /* BGP global configuration.  */
  233: 
  234: DEFUN (bgp_multiple_instance_func,
  235:        bgp_multiple_instance_cmd,
  236:        "bgp multiple-instance",
  237:        BGP_STR
  238:        "Enable bgp multiple instance\n")
  239: {
  240:   bgp_option_set (BGP_OPT_MULTIPLE_INSTANCE);
  241:   return CMD_SUCCESS;
  242: }
  243: 
  244: DEFUN (no_bgp_multiple_instance,
  245:        no_bgp_multiple_instance_cmd,
  246:        "no bgp multiple-instance",
  247:        NO_STR
  248:        BGP_STR
  249:        "BGP multiple instance\n")
  250: {
  251:   int ret;
  252: 
  253:   ret = bgp_option_unset (BGP_OPT_MULTIPLE_INSTANCE);
  254:   if (ret < 0)
  255:     {
  256:       vty_out (vty, "%% There are more than two BGP instances%s", VTY_NEWLINE);
  257:       return CMD_WARNING;
  258:     }
  259:   return CMD_SUCCESS;
  260: }
  261: 
  262: DEFUN (bgp_config_type,
  263:        bgp_config_type_cmd,
  264:        "bgp config-type (cisco|zebra)",
  265:        BGP_STR
  266:        "Configuration type\n"
  267:        "cisco\n"
  268:        "zebra\n")
  269: {
  270:   if (strncmp (argv[0], "c", 1) == 0)
  271:     bgp_option_set (BGP_OPT_CONFIG_CISCO);
  272:   else
  273:     bgp_option_unset (BGP_OPT_CONFIG_CISCO);
  274: 
  275:   return CMD_SUCCESS;
  276: }
  277: 
  278: DEFUN (no_bgp_config_type,
  279:        no_bgp_config_type_cmd,
  280:        "no bgp config-type",
  281:        NO_STR
  282:        BGP_STR
  283:        "Display configuration type\n")
  284: {
  285:   bgp_option_unset (BGP_OPT_CONFIG_CISCO);
  286:   return CMD_SUCCESS;
  287: }
  288: 
  289: DEFUN (no_synchronization,
  290:        no_synchronization_cmd,
  291:        "no synchronization",
  292:        NO_STR
  293:        "Perform IGP synchronization\n")
  294: {
  295:   return CMD_SUCCESS;
  296: }
  297: 
  298: DEFUN (no_auto_summary,
  299:        no_auto_summary_cmd,
  300:        "no auto-summary",
  301:        NO_STR
  302:        "Enable automatic network number summarization\n")
  303: {
  304:   return CMD_SUCCESS;
  305: }
  306: 
  307: DEFUN_DEPRECATED (neighbor_version,
  308: 		  neighbor_version_cmd,
  309: 		  NEIGHBOR_CMD "version (4|4-)",
  310: 		  NEIGHBOR_STR
  311: 		  NEIGHBOR_ADDR_STR
  312: 		  "Set the BGP version to match a neighbor\n"
  313: 		  "Neighbor's BGP version\n")
  314: {
  315:   return CMD_SUCCESS;
  316: }
  317: 
  318: /* "router bgp" commands. */
  319: DEFUN (router_bgp, 
  320:        router_bgp_cmd, 
  321:        "router bgp " CMD_AS_RANGE,
  322:        ROUTER_STR
  323:        BGP_STR
  324:        AS_STR)
  325: {
  326:   int ret;
  327:   as_t as;
  328:   struct bgp *bgp;
  329:   const char *name = NULL;
  330: 
  331:   VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
  332: 
  333:   if (argc == 2)
  334:     name = argv[1];
  335: 
  336:   ret = bgp_get (&bgp, &as, name);
  337:   switch (ret)
  338:     {
  339:     case BGP_ERR_MULTIPLE_INSTANCE_NOT_SET:
  340:       vty_out (vty, "Please specify 'bgp multiple-instance' first%s", 
  341: 	       VTY_NEWLINE);
  342:       return CMD_WARNING;
  343:     case BGP_ERR_AS_MISMATCH:
  344:       vty_out (vty, "BGP is already running; AS is %u%s", as, VTY_NEWLINE);
  345:       return CMD_WARNING;
  346:     case BGP_ERR_INSTANCE_MISMATCH:
  347:       vty_out (vty, "BGP view name and AS number mismatch%s", VTY_NEWLINE);
  348:       vty_out (vty, "BGP instance is already running; AS is %u%s",
  349: 	       as, VTY_NEWLINE);
  350:       return CMD_WARNING;
  351:     }
  352: 
  353:   vty->node = BGP_NODE;
  354:   vty->index = bgp;
  355: 
  356:   return CMD_SUCCESS;
  357: }
  358: 
  359: ALIAS (router_bgp,
  360:        router_bgp_view_cmd,
  361:        "router bgp " CMD_AS_RANGE " view WORD",
  362:        ROUTER_STR
  363:        BGP_STR
  364:        AS_STR
  365:        "BGP view\n"
  366:        "view name\n")
  367: 
  368: /* "no router bgp" commands. */
  369: DEFUN (no_router_bgp,
  370:        no_router_bgp_cmd,
  371:        "no router bgp " CMD_AS_RANGE,
  372:        NO_STR
  373:        ROUTER_STR
  374:        BGP_STR
  375:        AS_STR)
  376: {
  377:   as_t as;
  378:   struct bgp *bgp;
  379:   const char *name = NULL;
  380: 
  381:   VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
  382: 
  383:   if (argc == 2)
  384:     name = argv[1];
  385: 
  386:   /* Lookup bgp structure. */
  387:   bgp = bgp_lookup (as, name);
  388:   if (! bgp)
  389:     {
  390:       vty_out (vty, "%% Can't find BGP instance%s", VTY_NEWLINE);
  391:       return CMD_WARNING;
  392:     }
  393: 
  394:   bgp_delete (bgp);
  395: 
  396:   return CMD_SUCCESS;
  397: }
  398: 
  399: ALIAS (no_router_bgp,
  400:        no_router_bgp_view_cmd,
  401:        "no router bgp " CMD_AS_RANGE " view WORD",
  402:        NO_STR
  403:        ROUTER_STR
  404:        BGP_STR
  405:        AS_STR
  406:        "BGP view\n"
  407:        "view name\n")
  408: 
  409: /* BGP router-id.  */
  410: 
  411: DEFUN (bgp_router_id,
  412:        bgp_router_id_cmd,
  413:        "bgp router-id A.B.C.D",
  414:        BGP_STR
  415:        "Override configured router identifier\n"
  416:        "Manually configured router identifier\n")
  417: {
  418:   int ret;
  419:   struct in_addr id;
  420:   struct bgp *bgp;
  421: 
  422:   bgp = vty->index;
  423: 
  424:   ret = inet_aton (argv[0], &id);
  425:   if (! ret)
  426:     {
  427:       vty_out (vty, "%% Malformed bgp router identifier%s", VTY_NEWLINE);
  428:       return CMD_WARNING;
  429:     }
  430: 
  431:   bgp->router_id_static = id;
  432:   bgp_router_id_set (bgp, &id);
  433: 
  434:   return CMD_SUCCESS;
  435: }
  436: 
  437: DEFUN (no_bgp_router_id,
  438:        no_bgp_router_id_cmd,
  439:        "no bgp router-id",
  440:        NO_STR
  441:        BGP_STR
  442:        "Override configured router identifier\n")
  443: {
  444:   int ret;
  445:   struct in_addr id;
  446:   struct bgp *bgp;
  447: 
  448:   bgp = vty->index;
  449: 
  450:   if (argc == 1)
  451:     {
  452:       ret = inet_aton (argv[0], &id);
  453:       if (! ret)
  454: 	{
  455: 	  vty_out (vty, "%% Malformed BGP router identifier%s", VTY_NEWLINE);
  456: 	  return CMD_WARNING;
  457: 	}
  458: 
  459:       if (! IPV4_ADDR_SAME (&bgp->router_id_static, &id))
  460: 	{
  461: 	  vty_out (vty, "%% BGP router-id doesn't match%s", VTY_NEWLINE);
  462: 	  return CMD_WARNING;
  463: 	}
  464:     }
  465: 
  466:   bgp->router_id_static.s_addr = 0;
  467:   bgp_router_id_set (bgp, &router_id_zebra);
  468: 
  469:   return CMD_SUCCESS;
  470: }
  471: 
  472: ALIAS (no_bgp_router_id,
  473:        no_bgp_router_id_val_cmd,
  474:        "no bgp router-id A.B.C.D",
  475:        NO_STR
  476:        BGP_STR
  477:        "Override configured router identifier\n"
  478:        "Manually configured router identifier\n")
  479: 
  480: /* BGP Cluster ID.  */
  481: 
  482: DEFUN (bgp_cluster_id,
  483:        bgp_cluster_id_cmd,
  484:        "bgp cluster-id A.B.C.D",
  485:        BGP_STR
  486:        "Configure Route-Reflector Cluster-id\n"
  487:        "Route-Reflector Cluster-id in IP address format\n")
  488: {
  489:   int ret;
  490:   struct bgp *bgp;
  491:   struct in_addr cluster;
  492: 
  493:   bgp = vty->index;
  494: 
  495:   ret = inet_aton (argv[0], &cluster);
  496:   if (! ret)
  497:     {
  498:       vty_out (vty, "%% Malformed bgp cluster identifier%s", VTY_NEWLINE);
  499:       return CMD_WARNING;
  500:     }
  501: 
  502:   bgp_cluster_id_set (bgp, &cluster);
  503: 
  504:   return CMD_SUCCESS;
  505: }
  506: 
  507: ALIAS (bgp_cluster_id,
  508:        bgp_cluster_id32_cmd,
  509:        "bgp cluster-id <1-4294967295>",
  510:        BGP_STR
  511:        "Configure Route-Reflector Cluster-id\n"
  512:        "Route-Reflector Cluster-id as 32 bit quantity\n")
  513: 
  514: DEFUN (no_bgp_cluster_id,
  515:        no_bgp_cluster_id_cmd,
  516:        "no bgp cluster-id",
  517:        NO_STR
  518:        BGP_STR
  519:        "Configure Route-Reflector Cluster-id\n")
  520: {
  521:   int ret;
  522:   struct bgp *bgp;
  523:   struct in_addr cluster;
  524: 
  525:   bgp = vty->index;
  526: 
  527:   if (argc == 1)
  528:     {
  529:       ret = inet_aton (argv[0], &cluster);
  530:       if (! ret)
  531: 	{
  532: 	  vty_out (vty, "%% Malformed bgp cluster identifier%s", VTY_NEWLINE);
  533: 	  return CMD_WARNING;
  534: 	}
  535:     }
  536: 
  537:   bgp_cluster_id_unset (bgp);
  538: 
  539:   return CMD_SUCCESS;
  540: }
  541: 
  542: ALIAS (no_bgp_cluster_id,
  543:        no_bgp_cluster_id_arg_cmd,
  544:        "no bgp cluster-id A.B.C.D",
  545:        NO_STR
  546:        BGP_STR
  547:        "Configure Route-Reflector Cluster-id\n"
  548:        "Route-Reflector Cluster-id in IP address format\n")
  549: 
  550: DEFUN (bgp_confederation_identifier,
  551:        bgp_confederation_identifier_cmd,
  552:        "bgp confederation identifier " CMD_AS_RANGE,
  553:        "BGP specific commands\n"
  554:        "AS confederation parameters\n"
  555:        "AS number\n"
  556:        "Set routing domain confederation AS\n")
  557: {
  558:   struct bgp *bgp;
  559:   as_t as;
  560: 
  561:   bgp = vty->index;
  562: 
  563:   VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
  564: 
  565:   bgp_confederation_id_set (bgp, as);
  566: 
  567:   return CMD_SUCCESS;
  568: }
  569: 
  570: DEFUN (no_bgp_confederation_identifier,
  571:        no_bgp_confederation_identifier_cmd,
  572:        "no bgp confederation identifier",
  573:        NO_STR
  574:        "BGP specific commands\n"
  575:        "AS confederation parameters\n"
  576:        "AS number\n")
  577: {
  578:   struct bgp *bgp;
  579:   as_t as;
  580: 
  581:   bgp = vty->index;
  582: 
  583:   if (argc == 1)
  584:     VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
  585: 
  586:   bgp_confederation_id_unset (bgp);
  587: 
  588:   return CMD_SUCCESS;
  589: }
  590: 
  591: ALIAS (no_bgp_confederation_identifier,
  592:        no_bgp_confederation_identifier_arg_cmd,
  593:        "no bgp confederation identifier " CMD_AS_RANGE,
  594:        NO_STR
  595:        "BGP specific commands\n"
  596:        "AS confederation parameters\n"
  597:        "AS number\n"
  598:        "Set routing domain confederation AS\n")
  599: 
  600: DEFUN (bgp_confederation_peers,
  601:        bgp_confederation_peers_cmd,
  602:        "bgp confederation peers ." CMD_AS_RANGE,
  603:        "BGP specific commands\n"
  604:        "AS confederation parameters\n"
  605:        "Peer ASs in BGP confederation\n"
  606:        AS_STR)
  607: {
  608:   struct bgp *bgp;
  609:   as_t as;
  610:   int i;
  611: 
  612:   bgp = vty->index;
  613: 
  614:   for (i = 0; i < argc; i++)
  615:     {
  616:       VTY_GET_INTEGER_RANGE ("AS", as, argv[i], 1, BGP_AS4_MAX);
  617: 
  618:       if (bgp->as == as)
  619: 	{
  620: 	  vty_out (vty, "%% Local member-AS not allowed in confed peer list%s",
  621: 		   VTY_NEWLINE);
  622: 	  continue;
  623: 	}
  624: 
  625:       bgp_confederation_peers_add (bgp, as);
  626:     }
  627:   return CMD_SUCCESS;
  628: }
  629: 
  630: DEFUN (no_bgp_confederation_peers,
  631:        no_bgp_confederation_peers_cmd,
  632:        "no bgp confederation peers ." CMD_AS_RANGE,
  633:        NO_STR
  634:        "BGP specific commands\n"
  635:        "AS confederation parameters\n"
  636:        "Peer ASs in BGP confederation\n"
  637:        AS_STR)
  638: {
  639:   struct bgp *bgp;
  640:   as_t as;
  641:   int i;
  642: 
  643:   bgp = vty->index;
  644: 
  645:   for (i = 0; i < argc; i++)
  646:     {
  647:       VTY_GET_INTEGER_RANGE ("AS", as, argv[i], 1, BGP_AS4_MAX);
  648: 
  649:       bgp_confederation_peers_remove (bgp, as);
  650:     }
  651:   return CMD_SUCCESS;
  652: }
  653: 
  654: /* Maximum-paths configuration */
  655: DEFUN (bgp_maxpaths,
  656:        bgp_maxpaths_cmd,
  657:        "maximum-paths <1-255>",
  658:        "Forward packets over multiple paths\n"
  659:        "Number of paths\n")
  660: {
  661:   struct bgp *bgp;
  662:   u_int16_t maxpaths;
  663:   int ret;
  664: 
  665:   bgp = vty->index;
  666: 
  667:   VTY_GET_INTEGER_RANGE ("maximum-paths", maxpaths, argv[0], 1, 255);
  668: 
  669:   ret = bgp_maximum_paths_set (bgp, bgp_node_afi (vty), bgp_node_safi(vty),
  670: 			       BGP_PEER_EBGP, maxpaths);
  671:   if (ret < 0)
  672:     {
  673:       vty_out (vty,
  674: 	       "%% Failed to set maximum-paths %u for afi %u, safi %u%s",
  675: 	       maxpaths, bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE);
  676:       return CMD_WARNING;
  677:     }
  678: 
  679:   return CMD_SUCCESS;
  680: }
  681: 
  682: DEFUN (bgp_maxpaths_ibgp,
  683:        bgp_maxpaths_ibgp_cmd,
  684:        "maximum-paths ibgp <1-255>",
  685:        "Forward packets over multiple paths\n"
  686:        "iBGP-multipath\n"
  687:        "Number of paths\n")
  688: {
  689:   struct bgp *bgp;
  690:   u_int16_t maxpaths;
  691:   int ret;
  692: 
  693:   bgp = vty->index;
  694: 
  695:   VTY_GET_INTEGER_RANGE ("maximum-paths", maxpaths, argv[0], 1, 255);
  696: 
  697:   ret = bgp_maximum_paths_set (bgp, bgp_node_afi (vty), bgp_node_safi(vty),
  698: 			       BGP_PEER_IBGP, maxpaths);
  699:   if (ret < 0)
  700:     {
  701:       vty_out (vty,
  702: 	       "%% Failed to set maximum-paths ibgp %u for afi %u, safi %u%s",
  703: 	       maxpaths, bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE);
  704:       return CMD_WARNING;
  705:     }
  706: 
  707:   return CMD_SUCCESS;
  708: }
  709: 
  710: DEFUN (no_bgp_maxpaths,
  711:        no_bgp_maxpaths_cmd,
  712:        "no maximum-paths",
  713:        NO_STR
  714:        "Forward packets over multiple paths\n"
  715:        "Number of paths\n")
  716: {
  717:   struct bgp *bgp;
  718:   int ret;
  719: 
  720:   bgp = vty->index;
  721: 
  722:   ret = bgp_maximum_paths_unset (bgp, bgp_node_afi (vty), bgp_node_safi(vty),
  723: 				 BGP_PEER_EBGP);
  724:   if (ret < 0)
  725:     {
  726:       vty_out (vty,
  727: 	       "%% Failed to unset maximum-paths for afi %u, safi %u%s",
  728: 	       bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE);
  729:       return CMD_WARNING;
  730:     }
  731: 
  732:   return CMD_SUCCESS;
  733: }
  734: 
  735: ALIAS (no_bgp_maxpaths,
  736:        no_bgp_maxpaths_arg_cmd,
  737:        "no maximum-paths <1-255>",
  738:        NO_STR
  739:        "Forward packets over multiple paths\n"
  740:        "Number of paths\n")
  741: 
  742: DEFUN (no_bgp_maxpaths_ibgp,
  743:        no_bgp_maxpaths_ibgp_cmd,
  744:        "no maximum-paths ibgp",
  745:        NO_STR
  746:        "Forward packets over multiple paths\n"
  747:        "iBGP-multipath\n"
  748:        "Number of paths\n")
  749: {
  750:   struct bgp *bgp;
  751:   int ret;
  752: 
  753:   bgp = vty->index;
  754: 
  755:   ret = bgp_maximum_paths_unset (bgp, bgp_node_afi (vty), bgp_node_safi(vty),
  756: 				 BGP_PEER_IBGP);
  757:   if (ret < 0)
  758:     {
  759:       vty_out (vty,
  760: 	       "%% Failed to unset maximum-paths ibgp for afi %u, safi %u%s",
  761: 	       bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE);
  762:       return CMD_WARNING;
  763:     }
  764: 
  765:   return CMD_SUCCESS;
  766: }
  767: 
  768: ALIAS (no_bgp_maxpaths_ibgp,
  769:        no_bgp_maxpaths_ibgp_arg_cmd,
  770:        "no maximum-paths ibgp <1-255>",
  771:        NO_STR
  772:        "Forward packets over multiple paths\n"
  773:        "iBGP-multipath\n"
  774:        "Number of paths\n")
  775: 
  776: int
  777: bgp_config_write_maxpaths (struct vty *vty, struct bgp *bgp, afi_t afi,
  778: 			   safi_t safi, int *write)
  779: {
  780:   if (bgp->maxpaths[afi][safi].maxpaths_ebgp != BGP_DEFAULT_MAXPATHS)
  781:     {
  782:       bgp_config_write_family_header (vty, afi, safi, write);
  783:       vty_out (vty, " maximum-paths %d%s",
  784: 	       bgp->maxpaths[afi][safi].maxpaths_ebgp, VTY_NEWLINE);
  785:     }
  786: 
  787:   if (bgp->maxpaths[afi][safi].maxpaths_ibgp != BGP_DEFAULT_MAXPATHS)
  788:     {
  789:       bgp_config_write_family_header (vty, afi, safi, write);
  790:       vty_out (vty, " maximum-paths ibgp %d%s",
  791: 	       bgp->maxpaths[afi][safi].maxpaths_ibgp, VTY_NEWLINE);
  792:     }
  793: 
  794:   return 0;
  795: }
  796: 
  797: /* BGP timers.  */
  798: 
  799: DEFUN (bgp_timers,
  800:        bgp_timers_cmd,
  801:        "timers bgp <0-65535> <0-65535>",
  802:        "Adjust routing timers\n"
  803:        "BGP timers\n"
  804:        "Keepalive interval\n"
  805:        "Holdtime\n")
  806: {
  807:   struct bgp *bgp;
  808:   unsigned long keepalive = 0;
  809:   unsigned long holdtime = 0;
  810: 
  811:   bgp = vty->index;
  812: 
  813:   VTY_GET_INTEGER ("keepalive", keepalive, argv[0]);
  814:   VTY_GET_INTEGER ("holdtime", holdtime, argv[1]);
  815: 
  816:   /* Holdtime value check. */
  817:   if (holdtime < 3 && holdtime != 0)
  818:     {
  819:       vty_out (vty, "%% hold time value must be either 0 or greater than 3%s",
  820: 	       VTY_NEWLINE);
  821:       return CMD_WARNING;
  822:     }
  823: 
  824:   bgp_timers_set (bgp, keepalive, holdtime);
  825: 
  826:   return CMD_SUCCESS;
  827: }
  828: 
  829: DEFUN (no_bgp_timers,
  830:        no_bgp_timers_cmd,
  831:        "no timers bgp",
  832:        NO_STR
  833:        "Adjust routing timers\n"
  834:        "BGP timers\n")
  835: {
  836:   struct bgp *bgp;
  837: 
  838:   bgp = vty->index;
  839:   bgp_timers_unset (bgp);
  840: 
  841:   return CMD_SUCCESS;
  842: }
  843: 
  844: ALIAS (no_bgp_timers,
  845:        no_bgp_timers_arg_cmd,
  846:        "no timers bgp <0-65535> <0-65535>",
  847:        NO_STR
  848:        "Adjust routing timers\n"
  849:        "BGP timers\n"
  850:        "Keepalive interval\n"
  851:        "Holdtime\n")
  852: 
  853: DEFUN (bgp_client_to_client_reflection,
  854:        bgp_client_to_client_reflection_cmd,
  855:        "bgp client-to-client reflection",
  856:        "BGP specific commands\n"
  857:        "Configure client to client route reflection\n"
  858:        "reflection of routes allowed\n")
  859: {
  860:   struct bgp *bgp;
  861: 
  862:   bgp = vty->index;
  863:   bgp_flag_unset (bgp, BGP_FLAG_NO_CLIENT_TO_CLIENT);
  864:   return CMD_SUCCESS;
  865: }
  866: 
  867: DEFUN (no_bgp_client_to_client_reflection,
  868:        no_bgp_client_to_client_reflection_cmd,
  869:        "no bgp client-to-client reflection",
  870:        NO_STR
  871:        "BGP specific commands\n"
  872:        "Configure client to client route reflection\n"
  873:        "reflection of routes allowed\n")
  874: {
  875:   struct bgp *bgp;
  876: 
  877:   bgp = vty->index;
  878:   bgp_flag_set (bgp, BGP_FLAG_NO_CLIENT_TO_CLIENT);
  879:   return CMD_SUCCESS;
  880: }
  881: 
  882: /* "bgp always-compare-med" configuration. */
  883: DEFUN (bgp_always_compare_med,
  884:        bgp_always_compare_med_cmd,
  885:        "bgp always-compare-med",
  886:        "BGP specific commands\n"
  887:        "Allow comparing MED from different neighbors\n")
  888: {
  889:   struct bgp *bgp;
  890: 
  891:   bgp = vty->index;
  892:   bgp_flag_set (bgp, BGP_FLAG_ALWAYS_COMPARE_MED);
  893:   return CMD_SUCCESS;
  894: }
  895: 
  896: DEFUN (no_bgp_always_compare_med,
  897:        no_bgp_always_compare_med_cmd,
  898:        "no bgp always-compare-med",
  899:        NO_STR
  900:        "BGP specific commands\n"
  901:        "Allow comparing MED from different neighbors\n")
  902: {
  903:   struct bgp *bgp;
  904: 
  905:   bgp = vty->index;
  906:   bgp_flag_unset (bgp, BGP_FLAG_ALWAYS_COMPARE_MED);
  907:   return CMD_SUCCESS;
  908: }
  909: 
  910: /* "bgp deterministic-med" configuration. */
  911: DEFUN (bgp_deterministic_med,
  912:        bgp_deterministic_med_cmd,
  913:        "bgp deterministic-med",
  914:        "BGP specific commands\n"
  915:        "Pick the best-MED path among paths advertised from the neighboring AS\n")
  916: {
  917:   struct bgp *bgp;
  918: 
  919:   bgp = vty->index;
  920:   bgp_flag_set (bgp, BGP_FLAG_DETERMINISTIC_MED);
  921:   return CMD_SUCCESS;
  922: }
  923: 
  924: DEFUN (no_bgp_deterministic_med,
  925:        no_bgp_deterministic_med_cmd,
  926:        "no bgp deterministic-med",
  927:        NO_STR
  928:        "BGP specific commands\n"
  929:        "Pick the best-MED path among paths advertised from the neighboring AS\n")
  930: {
  931:   struct bgp *bgp;
  932: 
  933:   bgp = vty->index;
  934:   bgp_flag_unset (bgp, BGP_FLAG_DETERMINISTIC_MED);
  935:   return CMD_SUCCESS;
  936: }
  937: 
  938: /* "bgp graceful-restart" configuration. */
  939: DEFUN (bgp_graceful_restart,
  940:        bgp_graceful_restart_cmd,
  941:        "bgp graceful-restart",
  942:        "BGP specific commands\n"
  943:        "Graceful restart capability parameters\n")
  944: {
  945:   struct bgp *bgp;
  946: 
  947:   bgp = vty->index;
  948:   bgp_flag_set (bgp, BGP_FLAG_GRACEFUL_RESTART);
  949:   return CMD_SUCCESS;
  950: }
  951: 
  952: DEFUN (no_bgp_graceful_restart,
  953:        no_bgp_graceful_restart_cmd,
  954:        "no bgp graceful-restart",
  955:        NO_STR
  956:        "BGP specific commands\n"
  957:        "Graceful restart capability parameters\n")
  958: {
  959:   struct bgp *bgp;
  960: 
  961:   bgp = vty->index;
  962:   bgp_flag_unset (bgp, BGP_FLAG_GRACEFUL_RESTART);
  963:   return CMD_SUCCESS;
  964: }
  965: 
  966: DEFUN (bgp_graceful_restart_stalepath_time,
  967:        bgp_graceful_restart_stalepath_time_cmd,
  968:        "bgp graceful-restart stalepath-time <1-3600>",
  969:        "BGP specific commands\n"
  970:        "Graceful restart capability parameters\n"
  971:        "Set the max time to hold onto restarting peer's stale paths\n"
  972:        "Delay value (seconds)\n")
  973: {
  974:   struct bgp *bgp;
  975:   u_int32_t stalepath;
  976: 
  977:   bgp = vty->index;
  978:   if (! bgp)
  979:     return CMD_WARNING;
  980: 
  981:   VTY_GET_INTEGER_RANGE ("stalepath-time", stalepath, argv[0], 1, 3600);
  982:   bgp->stalepath_time = stalepath;
  983:   return CMD_SUCCESS;
  984: }
  985: 
  986: DEFUN (no_bgp_graceful_restart_stalepath_time,
  987:        no_bgp_graceful_restart_stalepath_time_cmd,
  988:        "no bgp graceful-restart stalepath-time",
  989:        NO_STR
  990:        "BGP specific commands\n"
  991:        "Graceful restart capability parameters\n"
  992:        "Set the max time to hold onto restarting peer's stale paths\n")
  993: {
  994:   struct bgp *bgp;
  995: 
  996:   bgp = vty->index;
  997:   if (! bgp)
  998:     return CMD_WARNING;
  999: 
 1000:   bgp->stalepath_time = BGP_DEFAULT_STALEPATH_TIME;
 1001:   return CMD_SUCCESS;
 1002: }
 1003: 
 1004: ALIAS (no_bgp_graceful_restart_stalepath_time,
 1005:        no_bgp_graceful_restart_stalepath_time_val_cmd,
 1006:        "no bgp graceful-restart stalepath-time <1-3600>",
 1007:        NO_STR
 1008:        "BGP specific commands\n"
 1009:        "Graceful restart capability parameters\n"
 1010:        "Set the max time to hold onto restarting peer's stale paths\n"
 1011:        "Delay value (seconds)\n")
 1012: 
 1013: /* "bgp fast-external-failover" configuration. */
 1014: DEFUN (bgp_fast_external_failover,
 1015:        bgp_fast_external_failover_cmd,
 1016:        "bgp fast-external-failover",
 1017:        BGP_STR
 1018:        "Immediately reset session if a link to a directly connected external peer goes down\n")
 1019: {
 1020:   struct bgp *bgp;
 1021: 
 1022:   bgp = vty->index;
 1023:   bgp_flag_unset (bgp, BGP_FLAG_NO_FAST_EXT_FAILOVER);
 1024:   return CMD_SUCCESS;
 1025: }
 1026: 
 1027: DEFUN (no_bgp_fast_external_failover,
 1028:        no_bgp_fast_external_failover_cmd,
 1029:        "no bgp fast-external-failover",
 1030:        NO_STR
 1031:        BGP_STR
 1032:        "Immediately reset session if a link to a directly connected external peer goes down\n")
 1033: {
 1034:   struct bgp *bgp;
 1035: 
 1036:   bgp = vty->index;
 1037:   bgp_flag_set (bgp, BGP_FLAG_NO_FAST_EXT_FAILOVER);
 1038:   return CMD_SUCCESS;
 1039: }
 1040: 
 1041: /* "bgp enforce-first-as" configuration. */
 1042: DEFUN (bgp_enforce_first_as,
 1043:        bgp_enforce_first_as_cmd,
 1044:        "bgp enforce-first-as",
 1045:        BGP_STR
 1046:        "Enforce the first AS for EBGP routes\n")
 1047: {
 1048:   struct bgp *bgp;
 1049: 
 1050:   bgp = vty->index;
 1051:   bgp_flag_set (bgp, BGP_FLAG_ENFORCE_FIRST_AS);
 1052:   return CMD_SUCCESS;
 1053: }
 1054: 
 1055: DEFUN (no_bgp_enforce_first_as,
 1056:        no_bgp_enforce_first_as_cmd,
 1057:        "no bgp enforce-first-as",
 1058:        NO_STR
 1059:        BGP_STR
 1060:        "Enforce the first AS for EBGP routes\n")
 1061: {
 1062:   struct bgp *bgp;
 1063: 
 1064:   bgp = vty->index;
 1065:   bgp_flag_unset (bgp, BGP_FLAG_ENFORCE_FIRST_AS);
 1066:   return CMD_SUCCESS;
 1067: }
 1068: 
 1069: /* "bgp bestpath compare-routerid" configuration.  */
 1070: DEFUN (bgp_bestpath_compare_router_id,
 1071:        bgp_bestpath_compare_router_id_cmd,
 1072:        "bgp bestpath compare-routerid",
 1073:        "BGP specific commands\n"
 1074:        "Change the default bestpath selection\n"
 1075:        "Compare router-id for identical EBGP paths\n")
 1076: {
 1077:   struct bgp *bgp;
 1078: 
 1079:   bgp = vty->index;
 1080:   bgp_flag_set (bgp, BGP_FLAG_COMPARE_ROUTER_ID);
 1081:   return CMD_SUCCESS;
 1082: }
 1083: 
 1084: DEFUN (no_bgp_bestpath_compare_router_id,
 1085:        no_bgp_bestpath_compare_router_id_cmd,
 1086:        "no bgp bestpath compare-routerid",
 1087:        NO_STR
 1088:        "BGP specific commands\n"
 1089:        "Change the default bestpath selection\n"
 1090:        "Compare router-id for identical EBGP paths\n")
 1091: {
 1092:   struct bgp *bgp;
 1093: 
 1094:   bgp = vty->index;
 1095:   bgp_flag_unset (bgp, BGP_FLAG_COMPARE_ROUTER_ID);
 1096:   return CMD_SUCCESS;
 1097: }
 1098: 
 1099: /* "bgp bestpath as-path ignore" configuration.  */
 1100: DEFUN (bgp_bestpath_aspath_ignore,
 1101:        bgp_bestpath_aspath_ignore_cmd,
 1102:        "bgp bestpath as-path ignore",
 1103:        "BGP specific commands\n"
 1104:        "Change the default bestpath selection\n"
 1105:        "AS-path attribute\n"
 1106:        "Ignore as-path length in selecting a route\n")
 1107: {
 1108:   struct bgp *bgp;
 1109: 
 1110:   bgp = vty->index;
 1111:   bgp_flag_set (bgp, BGP_FLAG_ASPATH_IGNORE);
 1112:   return CMD_SUCCESS;
 1113: }
 1114: 
 1115: DEFUN (no_bgp_bestpath_aspath_ignore,
 1116:        no_bgp_bestpath_aspath_ignore_cmd,
 1117:        "no bgp bestpath as-path ignore",
 1118:        NO_STR
 1119:        "BGP specific commands\n"
 1120:        "Change the default bestpath selection\n"
 1121:        "AS-path attribute\n"
 1122:        "Ignore as-path length in selecting a route\n")
 1123: {
 1124:   struct bgp *bgp;
 1125: 
 1126:   bgp = vty->index;
 1127:   bgp_flag_unset (bgp, BGP_FLAG_ASPATH_IGNORE);
 1128:   return CMD_SUCCESS;
 1129: }
 1130: 
 1131: /* "bgp bestpath as-path confed" configuration.  */
 1132: DEFUN (bgp_bestpath_aspath_confed,
 1133:        bgp_bestpath_aspath_confed_cmd,
 1134:        "bgp bestpath as-path confed",
 1135:        "BGP specific commands\n"
 1136:        "Change the default bestpath selection\n"
 1137:        "AS-path attribute\n"
 1138:        "Compare path lengths including confederation sets & sequences in selecting a route\n")
 1139: {
 1140:   struct bgp *bgp;
 1141: 
 1142:   bgp = vty->index;
 1143:   bgp_flag_set (bgp, BGP_FLAG_ASPATH_CONFED);
 1144:   return CMD_SUCCESS;
 1145: }
 1146: 
 1147: DEFUN (no_bgp_bestpath_aspath_confed,
 1148:        no_bgp_bestpath_aspath_confed_cmd,
 1149:        "no bgp bestpath as-path confed",
 1150:        NO_STR
 1151:        "BGP specific commands\n"
 1152:        "Change the default bestpath selection\n"
 1153:        "AS-path attribute\n"
 1154:        "Compare path lengths including confederation sets & sequences in selecting a route\n")
 1155: {
 1156:   struct bgp *bgp;
 1157: 
 1158:   bgp = vty->index;
 1159:   bgp_flag_unset (bgp, BGP_FLAG_ASPATH_CONFED);
 1160:   return CMD_SUCCESS;
 1161: }
 1162: 
 1163: /* "bgp log-neighbor-changes" configuration.  */
 1164: DEFUN (bgp_log_neighbor_changes,
 1165:        bgp_log_neighbor_changes_cmd,
 1166:        "bgp log-neighbor-changes",
 1167:        "BGP specific commands\n"
 1168:        "Log neighbor up/down and reset reason\n")
 1169: {
 1170:   struct bgp *bgp;
 1171: 
 1172:   bgp = vty->index;
 1173:   bgp_flag_set (bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES);
 1174:   return CMD_SUCCESS;
 1175: }
 1176: 
 1177: DEFUN (no_bgp_log_neighbor_changes,
 1178:        no_bgp_log_neighbor_changes_cmd,
 1179:        "no bgp log-neighbor-changes",
 1180:        NO_STR
 1181:        "BGP specific commands\n"
 1182:        "Log neighbor up/down and reset reason\n")
 1183: {
 1184:   struct bgp *bgp;
 1185: 
 1186:   bgp = vty->index;
 1187:   bgp_flag_unset (bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES);
 1188:   return CMD_SUCCESS;
 1189: }
 1190: 
 1191: /* "bgp bestpath med" configuration. */
 1192: DEFUN (bgp_bestpath_med,
 1193:        bgp_bestpath_med_cmd,
 1194:        "bgp bestpath med (confed|missing-as-worst)",
 1195:        "BGP specific commands\n"
 1196:        "Change the default bestpath selection\n"
 1197:        "MED attribute\n"
 1198:        "Compare MED among confederation paths\n"
 1199:        "Treat missing MED as the least preferred one\n")
 1200: {
 1201:   struct bgp *bgp;
 1202:   
 1203:   bgp = vty->index;
 1204: 
 1205:   if (strncmp (argv[0], "confed", 1) == 0)
 1206:     bgp_flag_set (bgp, BGP_FLAG_MED_CONFED);
 1207:   else
 1208:     bgp_flag_set (bgp, BGP_FLAG_MED_MISSING_AS_WORST);
 1209: 
 1210:   return CMD_SUCCESS;
 1211: }
 1212: 
 1213: DEFUN (bgp_bestpath_med2,
 1214:        bgp_bestpath_med2_cmd,
 1215:        "bgp bestpath med confed missing-as-worst",
 1216:        "BGP specific commands\n"
 1217:        "Change the default bestpath selection\n"
 1218:        "MED attribute\n"
 1219:        "Compare MED among confederation paths\n"
 1220:        "Treat missing MED as the least preferred one\n")
 1221: {
 1222:   struct bgp *bgp;
 1223:   
 1224:   bgp = vty->index;
 1225:   bgp_flag_set (bgp, BGP_FLAG_MED_CONFED);
 1226:   bgp_flag_set (bgp, BGP_FLAG_MED_MISSING_AS_WORST);
 1227:   return CMD_SUCCESS;
 1228: }
 1229: 
 1230: ALIAS (bgp_bestpath_med2,
 1231:        bgp_bestpath_med3_cmd,
 1232:        "bgp bestpath med missing-as-worst confed",
 1233:        "BGP specific commands\n"
 1234:        "Change the default bestpath selection\n"
 1235:        "MED attribute\n"
 1236:        "Treat missing MED as the least preferred one\n"
 1237:        "Compare MED among confederation paths\n")
 1238: 
 1239: DEFUN (no_bgp_bestpath_med,
 1240:        no_bgp_bestpath_med_cmd,
 1241:        "no bgp bestpath med (confed|missing-as-worst)",
 1242:        NO_STR
 1243:        "BGP specific commands\n"
 1244:        "Change the default bestpath selection\n"
 1245:        "MED attribute\n"
 1246:        "Compare MED among confederation paths\n"
 1247:        "Treat missing MED as the least preferred one\n")
 1248: {
 1249:   struct bgp *bgp;
 1250: 
 1251:   bgp = vty->index;
 1252:   
 1253:   if (strncmp (argv[0], "confed", 1) == 0)
 1254:     bgp_flag_unset (bgp, BGP_FLAG_MED_CONFED);
 1255:   else
 1256:     bgp_flag_unset (bgp, BGP_FLAG_MED_MISSING_AS_WORST);
 1257: 
 1258:   return CMD_SUCCESS;
 1259: }
 1260: 
 1261: DEFUN (no_bgp_bestpath_med2,
 1262:        no_bgp_bestpath_med2_cmd,
 1263:        "no bgp bestpath med confed missing-as-worst",
 1264:        NO_STR
 1265:        "BGP specific commands\n"
 1266:        "Change the default bestpath selection\n"
 1267:        "MED attribute\n"
 1268:        "Compare MED among confederation paths\n"
 1269:        "Treat missing MED as the least preferred one\n")
 1270: {
 1271:   struct bgp *bgp;
 1272:   
 1273:   bgp = vty->index;
 1274:   bgp_flag_unset (bgp, BGP_FLAG_MED_CONFED);
 1275:   bgp_flag_unset (bgp, BGP_FLAG_MED_MISSING_AS_WORST);
 1276:   return CMD_SUCCESS;
 1277: }
 1278: 
 1279: ALIAS (no_bgp_bestpath_med2,
 1280:        no_bgp_bestpath_med3_cmd,
 1281:        "no bgp bestpath med missing-as-worst confed",
 1282:        NO_STR
 1283:        "BGP specific commands\n"
 1284:        "Change the default bestpath selection\n"
 1285:        "MED attribute\n"
 1286:        "Treat missing MED as the least preferred one\n"
 1287:        "Compare MED among confederation paths\n")
 1288: 
 1289: /* "no bgp default ipv4-unicast". */
 1290: DEFUN (no_bgp_default_ipv4_unicast,
 1291:        no_bgp_default_ipv4_unicast_cmd,
 1292:        "no bgp default ipv4-unicast",
 1293:        NO_STR
 1294:        "BGP specific commands\n"
 1295:        "Configure BGP defaults\n"
 1296:        "Activate ipv4-unicast for a peer by default\n")
 1297: {
 1298:   struct bgp *bgp;
 1299: 
 1300:   bgp = vty->index;
 1301:   bgp_flag_set (bgp, BGP_FLAG_NO_DEFAULT_IPV4);
 1302:   return CMD_SUCCESS;
 1303: }
 1304: 
 1305: DEFUN (bgp_default_ipv4_unicast,
 1306:        bgp_default_ipv4_unicast_cmd,
 1307:        "bgp default ipv4-unicast",
 1308:        "BGP specific commands\n"
 1309:        "Configure BGP defaults\n"
 1310:        "Activate ipv4-unicast for a peer by default\n")
 1311: {
 1312:   struct bgp *bgp;
 1313: 
 1314:   bgp = vty->index;
 1315:   bgp_flag_unset (bgp, BGP_FLAG_NO_DEFAULT_IPV4);
 1316:   return CMD_SUCCESS;
 1317: }
 1318: 
 1319: /* "bgp import-check" configuration.  */
 1320: DEFUN (bgp_network_import_check,
 1321:        bgp_network_import_check_cmd,
 1322:        "bgp network import-check",
 1323:        "BGP specific commands\n"
 1324:        "BGP network command\n"
 1325:        "Check BGP network route exists in IGP\n")
 1326: {
 1327:   struct bgp *bgp;
 1328: 
 1329:   bgp = vty->index;
 1330:   bgp_flag_set (bgp, BGP_FLAG_IMPORT_CHECK);
 1331:   return CMD_SUCCESS;
 1332: }
 1333: 
 1334: DEFUN (no_bgp_network_import_check,
 1335:        no_bgp_network_import_check_cmd,
 1336:        "no bgp network import-check",
 1337:        NO_STR
 1338:        "BGP specific commands\n"
 1339:        "BGP network command\n"
 1340:        "Check BGP network route exists in IGP\n")
 1341: {
 1342:   struct bgp *bgp;
 1343: 
 1344:   bgp = vty->index;
 1345:   bgp_flag_unset (bgp, BGP_FLAG_IMPORT_CHECK);
 1346:   return CMD_SUCCESS;
 1347: }
 1348: 
 1349: DEFUN (bgp_default_local_preference,
 1350:        bgp_default_local_preference_cmd,
 1351:        "bgp default local-preference <0-4294967295>",
 1352:        "BGP specific commands\n"
 1353:        "Configure BGP defaults\n"
 1354:        "local preference (higher=more preferred)\n"
 1355:        "Configure default local preference value\n")
 1356: {
 1357:   struct bgp *bgp;
 1358:   u_int32_t local_pref;
 1359: 
 1360:   bgp = vty->index;
 1361: 
 1362:   VTY_GET_INTEGER ("local preference", local_pref, argv[0]);
 1363: 
 1364:   bgp_default_local_preference_set (bgp, local_pref);
 1365: 
 1366:   return CMD_SUCCESS;
 1367: }
 1368: 
 1369: DEFUN (no_bgp_default_local_preference,
 1370:        no_bgp_default_local_preference_cmd,
 1371:        "no bgp default local-preference",
 1372:        NO_STR
 1373:        "BGP specific commands\n"
 1374:        "Configure BGP defaults\n"
 1375:        "local preference (higher=more preferred)\n")
 1376: {
 1377:   struct bgp *bgp;
 1378: 
 1379:   bgp = vty->index;
 1380:   bgp_default_local_preference_unset (bgp);
 1381:   return CMD_SUCCESS;
 1382: }
 1383: 
 1384: ALIAS (no_bgp_default_local_preference,
 1385:        no_bgp_default_local_preference_val_cmd,
 1386:        "no bgp default local-preference <0-4294967295>",
 1387:        NO_STR
 1388:        "BGP specific commands\n"
 1389:        "Configure BGP defaults\n"
 1390:        "local preference (higher=more preferred)\n"
 1391:        "Configure default local preference value\n")
 1392: 
 1393: static int
 1394: peer_remote_as_vty (struct vty *vty, const char *peer_str, 
 1395:                     const char *as_str, afi_t afi, safi_t safi)
 1396: {
 1397:   int ret;
 1398:   struct bgp *bgp;
 1399:   as_t as;
 1400:   union sockunion su;
 1401: 
 1402:   bgp = vty->index;
 1403: 
 1404:   /* Get AS number.  */
 1405:   VTY_GET_INTEGER_RANGE ("AS", as, as_str, 1, BGP_AS4_MAX);
 1406: 
 1407:   /* If peer is peer group, call proper function.  */
 1408:   ret = str2sockunion (peer_str, &su);
 1409:   if (ret < 0)
 1410:     {
 1411:       ret = peer_group_remote_as (bgp, peer_str, &as);
 1412:       if (ret < 0)
 1413: 	{
 1414: 	  vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE);
 1415: 	  return CMD_WARNING;
 1416: 	}
 1417:       return CMD_SUCCESS;
 1418:     }
 1419: 
 1420:   if (peer_address_self_check (&su))
 1421:     {
 1422:       vty_out (vty, "%% Can not configure the local system as neighbor%s",
 1423: 	       VTY_NEWLINE);
 1424:       return CMD_WARNING;
 1425:     }
 1426: 
 1427:   ret = peer_remote_as (bgp, &su, &as, afi, safi);
 1428: 
 1429:   /* This peer belongs to peer group.  */
 1430:   switch (ret)
 1431:     {
 1432:     case BGP_ERR_PEER_GROUP_MEMBER:
 1433:       vty_out (vty, "%% Peer-group AS %u. Cannot configure remote-as for member%s", as, VTY_NEWLINE);
 1434:       return CMD_WARNING;
 1435:     case BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT:
 1436:       vty_out (vty, "%% The AS# can not be changed from %u to %s, peer-group members must be all internal or all external%s", as, as_str, VTY_NEWLINE);
 1437:       return CMD_WARNING;
 1438:     }
 1439:   return bgp_vty_return (vty, ret);
 1440: }
 1441: 
 1442: DEFUN (neighbor_remote_as,
 1443:        neighbor_remote_as_cmd,
 1444:        NEIGHBOR_CMD2 "remote-as " CMD_AS_RANGE,
 1445:        NEIGHBOR_STR
 1446:        NEIGHBOR_ADDR_STR2
 1447:        "Specify a BGP neighbor\n"
 1448:        AS_STR)
 1449: {
 1450:   return peer_remote_as_vty (vty, argv[0], argv[1], AFI_IP, SAFI_UNICAST);
 1451: }
 1452: 
 1453: DEFUN (neighbor_peer_group,
 1454:        neighbor_peer_group_cmd,
 1455:        "neighbor WORD peer-group",
 1456:        NEIGHBOR_STR
 1457:        "Neighbor tag\n"
 1458:        "Configure peer-group\n")
 1459: {
 1460:   struct bgp *bgp;
 1461:   struct peer_group *group;
 1462: 
 1463:   bgp = vty->index;
 1464: 
 1465:   group = peer_group_get (bgp, argv[0]);
 1466:   if (! group)
 1467:     return CMD_WARNING;
 1468: 
 1469:   return CMD_SUCCESS;
 1470: }
 1471: 
 1472: DEFUN (no_neighbor,
 1473:        no_neighbor_cmd,
 1474:        NO_NEIGHBOR_CMD2,
 1475:        NO_STR
 1476:        NEIGHBOR_STR
 1477:        NEIGHBOR_ADDR_STR2)
 1478: {
 1479:   int ret;
 1480:   union sockunion su;
 1481:   struct peer_group *group;
 1482:   struct peer *peer;
 1483: 
 1484:   ret = str2sockunion (argv[0], &su);
 1485:   if (ret < 0)
 1486:     {
 1487:       group = peer_group_lookup (vty->index, argv[0]);
 1488:       if (group)
 1489: 	peer_group_delete (group);
 1490:       else
 1491: 	{
 1492: 	  vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE);
 1493: 	  return CMD_WARNING;
 1494: 	}
 1495:     }
 1496:   else
 1497:     {
 1498:       peer = peer_lookup (vty->index, &su);
 1499:       if (peer)
 1500:         peer_delete (peer);
 1501:     }
 1502: 
 1503:   return CMD_SUCCESS;
 1504: }
 1505: 
 1506: ALIAS (no_neighbor,
 1507:        no_neighbor_remote_as_cmd,
 1508:        NO_NEIGHBOR_CMD "remote-as " CMD_AS_RANGE,
 1509:        NO_STR
 1510:        NEIGHBOR_STR
 1511:        NEIGHBOR_ADDR_STR
 1512:        "Specify a BGP neighbor\n"
 1513:        AS_STR)
 1514: 
 1515: DEFUN (no_neighbor_peer_group,
 1516:        no_neighbor_peer_group_cmd,
 1517:        "no neighbor WORD peer-group",
 1518:        NO_STR
 1519:        NEIGHBOR_STR
 1520:        "Neighbor tag\n"
 1521:        "Configure peer-group\n")
 1522: {
 1523:   struct peer_group *group;
 1524: 
 1525:   group = peer_group_lookup (vty->index, argv[0]);
 1526:   if (group)
 1527:     peer_group_delete (group);
 1528:   else
 1529:     {
 1530:       vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE);
 1531:       return CMD_WARNING;
 1532:     }
 1533:   return CMD_SUCCESS;
 1534: }
 1535: 
 1536: DEFUN (no_neighbor_peer_group_remote_as,
 1537:        no_neighbor_peer_group_remote_as_cmd,
 1538:        "no neighbor WORD remote-as " CMD_AS_RANGE,
 1539:        NO_STR
 1540:        NEIGHBOR_STR
 1541:        "Neighbor tag\n"
 1542:        "Specify a BGP neighbor\n"
 1543:        AS_STR)
 1544: {
 1545:   struct peer_group *group;
 1546: 
 1547:   group = peer_group_lookup (vty->index, argv[0]);
 1548:   if (group)
 1549:     peer_group_remote_as_delete (group);
 1550:   else
 1551:     {
 1552:       vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE);
 1553:       return CMD_WARNING;
 1554:     }
 1555:   return CMD_SUCCESS;
 1556: }
 1557: 
 1558: DEFUN (neighbor_local_as,
 1559:        neighbor_local_as_cmd,
 1560:        NEIGHBOR_CMD2 "local-as " CMD_AS_RANGE,
 1561:        NEIGHBOR_STR
 1562:        NEIGHBOR_ADDR_STR2
 1563:        "Specify a local-as number\n"
 1564:        "AS number used as local AS\n")
 1565: {
 1566:   struct peer *peer;
 1567:   int ret;
 1568: 
 1569:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1570:   if (! peer)
 1571:     return CMD_WARNING;
 1572: 
 1573:   ret = peer_local_as_set (peer, atoi (argv[1]), 0, 0);
 1574:   return bgp_vty_return (vty, ret);
 1575: }
 1576: 
 1577: DEFUN (neighbor_local_as_no_prepend,
 1578:        neighbor_local_as_no_prepend_cmd,
 1579:        NEIGHBOR_CMD2 "local-as " CMD_AS_RANGE " no-prepend",
 1580:        NEIGHBOR_STR
 1581:        NEIGHBOR_ADDR_STR2
 1582:        "Specify a local-as number\n"
 1583:        "AS number used as local AS\n"
 1584:        "Do not prepend local-as to updates from ebgp peers\n")
 1585: {
 1586:   struct peer *peer;
 1587:   int ret;
 1588: 
 1589:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1590:   if (! peer)
 1591:     return CMD_WARNING;
 1592: 
 1593:   ret = peer_local_as_set (peer, atoi (argv[1]), 1, 0);
 1594:   return bgp_vty_return (vty, ret);
 1595: }
 1596: 
 1597: DEFUN (neighbor_local_as_no_prepend_replace_as,
 1598:        neighbor_local_as_no_prepend_replace_as_cmd,
 1599:        NEIGHBOR_CMD2 "local-as " CMD_AS_RANGE " no-prepend replace-as",
 1600:        NEIGHBOR_STR
 1601:        NEIGHBOR_ADDR_STR2
 1602:        "Specify a local-as number\n"
 1603:        "AS number used as local AS\n"
 1604:        "Do not prepend local-as to updates from ebgp peers\n"
 1605:        "Do not prepend local-as to updates from ibgp peers\n")
 1606: {
 1607:   struct peer *peer;
 1608:   int ret;
 1609: 
 1610:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1611:   if (! peer)
 1612:     return CMD_WARNING;
 1613: 
 1614:   ret = peer_local_as_set (peer, atoi (argv[1]), 1, 1);
 1615:   return bgp_vty_return (vty, ret);
 1616: }
 1617: 
 1618: 
 1619: DEFUN (no_neighbor_local_as,
 1620:        no_neighbor_local_as_cmd,
 1621:        NO_NEIGHBOR_CMD2 "local-as",
 1622:        NO_STR
 1623:        NEIGHBOR_STR
 1624:        NEIGHBOR_ADDR_STR2
 1625:        "Specify a local-as number\n")
 1626: {
 1627:   struct peer *peer;
 1628:   int ret;
 1629: 
 1630:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1631:   if (! peer)
 1632:     return CMD_WARNING;
 1633: 
 1634:   ret = peer_local_as_unset (peer);
 1635:   return bgp_vty_return (vty, ret);
 1636: }
 1637: 
 1638: ALIAS (no_neighbor_local_as,
 1639:        no_neighbor_local_as_val_cmd,
 1640:        NO_NEIGHBOR_CMD2 "local-as " CMD_AS_RANGE,
 1641:        NO_STR
 1642:        NEIGHBOR_STR
 1643:        NEIGHBOR_ADDR_STR2
 1644:        "Specify a local-as number\n"
 1645:        "AS number used as local AS\n")
 1646: 
 1647: ALIAS (no_neighbor_local_as,
 1648:        no_neighbor_local_as_val2_cmd,
 1649:        NO_NEIGHBOR_CMD2 "local-as " CMD_AS_RANGE " no-prepend",
 1650:        NO_STR
 1651:        NEIGHBOR_STR
 1652:        NEIGHBOR_ADDR_STR2
 1653:        "Specify a local-as number\n"
 1654:        "AS number used as local AS\n"
 1655:        "Do not prepend local-as to updates from ebgp peers\n")
 1656: 
 1657: ALIAS (no_neighbor_local_as,
 1658:        no_neighbor_local_as_val3_cmd,
 1659:        NO_NEIGHBOR_CMD2 "local-as " CMD_AS_RANGE " no-prepend replace-as",
 1660:        NO_STR
 1661:        NEIGHBOR_STR
 1662:        NEIGHBOR_ADDR_STR2
 1663:        "Specify a local-as number\n"
 1664:        "AS number used as local AS\n"
 1665:        "Do not prepend local-as to updates from ebgp peers\n"
 1666:        "Do not prepend local-as to updates from ibgp peers\n")
 1667: 
 1668: DEFUN (neighbor_password,
 1669:        neighbor_password_cmd,
 1670:        NEIGHBOR_CMD2 "password LINE",
 1671:        NEIGHBOR_STR
 1672:        NEIGHBOR_ADDR_STR2
 1673:        "Set a password\n"
 1674:        "The password\n")
 1675: {
 1676:   struct peer *peer;
 1677:   int ret;
 1678: 
 1679:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1680:   if (! peer)
 1681:     return CMD_WARNING;
 1682: 
 1683:   ret = peer_password_set (peer, argv[1]);
 1684:   return bgp_vty_return (vty, ret);
 1685: }
 1686: 
 1687: DEFUN (no_neighbor_password,
 1688:        no_neighbor_password_cmd,
 1689:        NO_NEIGHBOR_CMD2 "password",
 1690:        NO_STR
 1691:        NEIGHBOR_STR
 1692:        NEIGHBOR_ADDR_STR2
 1693:        "Set a password\n")
 1694: {
 1695:   struct peer *peer;
 1696:   int ret;
 1697: 
 1698:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1699:   if (! peer)
 1700:     return CMD_WARNING;
 1701: 
 1702:   ret = peer_password_unset (peer);
 1703:   return bgp_vty_return (vty, ret);
 1704: }
 1705: 
 1706: DEFUN (neighbor_activate,
 1707:        neighbor_activate_cmd,
 1708:        NEIGHBOR_CMD2 "activate",
 1709:        NEIGHBOR_STR
 1710:        NEIGHBOR_ADDR_STR2
 1711:        "Enable the Address Family for this Neighbor\n")
 1712: {
 1713:   struct peer *peer;
 1714: 
 1715:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1716:   if (! peer)
 1717:     return CMD_WARNING;
 1718: 
 1719:   peer_activate (peer, bgp_node_afi (vty), bgp_node_safi (vty));
 1720: 
 1721:   return CMD_SUCCESS;
 1722: }
 1723: 
 1724: DEFUN (no_neighbor_activate,
 1725:        no_neighbor_activate_cmd,
 1726:        NO_NEIGHBOR_CMD2 "activate",
 1727:        NO_STR
 1728:        NEIGHBOR_STR
 1729:        NEIGHBOR_ADDR_STR2
 1730:        "Enable the Address Family for this Neighbor\n")
 1731: {
 1732:   int ret;
 1733:   struct peer *peer;
 1734: 
 1735:   /* Lookup peer. */
 1736:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 1737:   if (! peer)
 1738:     return CMD_WARNING;
 1739: 
 1740:   ret = peer_deactivate (peer, bgp_node_afi (vty), bgp_node_safi (vty));
 1741: 
 1742:   return bgp_vty_return (vty, ret);
 1743: }
 1744: 
 1745: DEFUN (neighbor_set_peer_group,
 1746:        neighbor_set_peer_group_cmd,
 1747:        NEIGHBOR_CMD "peer-group WORD",
 1748:        NEIGHBOR_STR
 1749:        NEIGHBOR_ADDR_STR
 1750:        "Member of the peer-group\n"
 1751:        "peer-group name\n")
 1752: {
 1753:   int ret;
 1754:   as_t as;
 1755:   union sockunion su;
 1756:   struct bgp *bgp;
 1757:   struct peer_group *group;
 1758: 
 1759:   bgp = vty->index;
 1760: 
 1761:   ret = str2sockunion (argv[0], &su);
 1762:   if (ret < 0)
 1763:     {
 1764:       vty_out (vty, "%% Malformed address: %s%s", argv[0], VTY_NEWLINE);
 1765:       return CMD_WARNING;
 1766:     }
 1767: 
 1768:   group = peer_group_lookup (bgp, argv[1]);
 1769:   if (! group)
 1770:     {
 1771:       vty_out (vty, "%% Configure the peer-group first%s", VTY_NEWLINE);
 1772:       return CMD_WARNING;
 1773:     }
 1774: 
 1775:   if (peer_address_self_check (&su))
 1776:     {
 1777:       vty_out (vty, "%% Can not configure the local system as neighbor%s",
 1778: 	       VTY_NEWLINE);
 1779:       return CMD_WARNING;
 1780:     }
 1781: 
 1782:   ret = peer_group_bind (bgp, &su, group, bgp_node_afi (vty), 
 1783: 			 bgp_node_safi (vty), &as);
 1784: 
 1785:   if (ret == BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT)
 1786:     {
 1787:       vty_out (vty, "%% Peer with AS %u cannot be in this peer-group, members must be all internal or all external%s", as, VTY_NEWLINE);
 1788:       return CMD_WARNING;
 1789:     }
 1790: 
 1791:   return bgp_vty_return (vty, ret);
 1792: }
 1793: 
 1794: DEFUN (no_neighbor_set_peer_group,
 1795:        no_neighbor_set_peer_group_cmd,
 1796:        NO_NEIGHBOR_CMD "peer-group WORD",
 1797:        NO_STR
 1798:        NEIGHBOR_STR
 1799:        NEIGHBOR_ADDR_STR
 1800:        "Member of the peer-group\n"
 1801:        "peer-group name\n")
 1802: {
 1803:   int ret;
 1804:   struct bgp *bgp;
 1805:   struct peer *peer;
 1806:   struct peer_group *group;
 1807: 
 1808:   bgp = vty->index;
 1809: 
 1810:   peer = peer_lookup_vty (vty, argv[0]);
 1811:   if (! peer)
 1812:     return CMD_WARNING;
 1813: 
 1814:   group = peer_group_lookup (bgp, argv[1]);
 1815:   if (! group)
 1816:     {
 1817:       vty_out (vty, "%% Configure the peer-group first%s", VTY_NEWLINE);
 1818:       return CMD_WARNING;
 1819:     }
 1820: 
 1821:   ret = peer_group_unbind (bgp, peer, group, bgp_node_afi (vty),
 1822: 			   bgp_node_safi (vty));
 1823: 
 1824:   return bgp_vty_return (vty, ret);
 1825: }
 1826: 
 1827: static int
 1828: peer_flag_modify_vty (struct vty *vty, const char *ip_str, 
 1829:                       u_int16_t flag, int set)
 1830: {
 1831:   int ret;
 1832:   struct peer *peer;
 1833: 
 1834:   peer = peer_and_group_lookup_vty (vty, ip_str);
 1835:   if (! peer)
 1836:     return CMD_WARNING;
 1837: 
 1838:   if (set)
 1839:     ret = peer_flag_set (peer, flag);
 1840:   else
 1841:     ret = peer_flag_unset (peer, flag);
 1842: 
 1843:   return bgp_vty_return (vty, ret);
 1844: }
 1845: 
 1846: static int
 1847: peer_flag_set_vty (struct vty *vty, const char *ip_str, u_int16_t flag)
 1848: {
 1849:   return peer_flag_modify_vty (vty, ip_str, flag, 1);
 1850: }
 1851: 
 1852: static int
 1853: peer_flag_unset_vty (struct vty *vty, const char *ip_str, u_int16_t flag)
 1854: {
 1855:   return peer_flag_modify_vty (vty, ip_str, flag, 0);
 1856: }
 1857: 
 1858: /* neighbor passive. */
 1859: DEFUN (neighbor_passive,
 1860:        neighbor_passive_cmd,
 1861:        NEIGHBOR_CMD2 "passive",
 1862:        NEIGHBOR_STR
 1863:        NEIGHBOR_ADDR_STR2
 1864:        "Don't send open messages to this neighbor\n")
 1865: {
 1866:   return peer_flag_set_vty (vty, argv[0], PEER_FLAG_PASSIVE);
 1867: }
 1868: 
 1869: DEFUN (no_neighbor_passive,
 1870:        no_neighbor_passive_cmd,
 1871:        NO_NEIGHBOR_CMD2 "passive",
 1872:        NO_STR
 1873:        NEIGHBOR_STR
 1874:        NEIGHBOR_ADDR_STR2
 1875:        "Don't send open messages to this neighbor\n")
 1876: {
 1877:   return peer_flag_unset_vty (vty, argv[0], PEER_FLAG_PASSIVE);
 1878: }
 1879: 
 1880: /* neighbor shutdown. */
 1881: DEFUN (neighbor_shutdown,
 1882:        neighbor_shutdown_cmd,
 1883:        NEIGHBOR_CMD2 "shutdown",
 1884:        NEIGHBOR_STR
 1885:        NEIGHBOR_ADDR_STR2
 1886:        "Administratively shut down this neighbor\n")
 1887: {
 1888:   return peer_flag_set_vty (vty, argv[0], PEER_FLAG_SHUTDOWN);
 1889: }
 1890: 
 1891: DEFUN (no_neighbor_shutdown,
 1892:        no_neighbor_shutdown_cmd,
 1893:        NO_NEIGHBOR_CMD2 "shutdown",
 1894:        NO_STR
 1895:        NEIGHBOR_STR
 1896:        NEIGHBOR_ADDR_STR2
 1897:        "Administratively shut down this neighbor\n")
 1898: {
 1899:   return peer_flag_unset_vty (vty, argv[0], PEER_FLAG_SHUTDOWN);
 1900: }
 1901: 
 1902: /* Deprecated neighbor capability route-refresh. */
 1903: DEFUN_DEPRECATED (neighbor_capability_route_refresh,
 1904: 		  neighbor_capability_route_refresh_cmd,
 1905: 		  NEIGHBOR_CMD2 "capability route-refresh",
 1906: 		  NEIGHBOR_STR
 1907: 		  NEIGHBOR_ADDR_STR2
 1908: 		  "Advertise capability to the peer\n"
 1909: 		  "Advertise route-refresh capability to this neighbor\n")
 1910: {
 1911:   return CMD_SUCCESS;
 1912: }
 1913: 
 1914: DEFUN_DEPRECATED (no_neighbor_capability_route_refresh,
 1915: 		  no_neighbor_capability_route_refresh_cmd,
 1916: 		  NO_NEIGHBOR_CMD2 "capability route-refresh",
 1917: 		  NO_STR
 1918: 		  NEIGHBOR_STR
 1919: 		  NEIGHBOR_ADDR_STR2
 1920: 		  "Advertise capability to the peer\n"
 1921: 		  "Advertise route-refresh capability to this neighbor\n")
 1922: {
 1923:   return CMD_SUCCESS;
 1924: }
 1925: 
 1926: /* neighbor capability dynamic. */
 1927: DEFUN (neighbor_capability_dynamic,
 1928:        neighbor_capability_dynamic_cmd,
 1929:        NEIGHBOR_CMD2 "capability dynamic",
 1930:        NEIGHBOR_STR
 1931:        NEIGHBOR_ADDR_STR2
 1932:        "Advertise capability to the peer\n"
 1933:        "Advertise dynamic capability to this neighbor\n")
 1934: {
 1935:   return peer_flag_set_vty (vty, argv[0], PEER_FLAG_DYNAMIC_CAPABILITY);
 1936: }
 1937: 
 1938: DEFUN (no_neighbor_capability_dynamic,
 1939:        no_neighbor_capability_dynamic_cmd,
 1940:        NO_NEIGHBOR_CMD2 "capability dynamic",
 1941:        NO_STR
 1942:        NEIGHBOR_STR
 1943:        NEIGHBOR_ADDR_STR2
 1944:        "Advertise capability to the peer\n"
 1945:        "Advertise dynamic capability to this neighbor\n")
 1946: {
 1947:   return peer_flag_unset_vty (vty, argv[0], PEER_FLAG_DYNAMIC_CAPABILITY);
 1948: }
 1949: 
 1950: /* neighbor dont-capability-negotiate */
 1951: DEFUN (neighbor_dont_capability_negotiate,
 1952:        neighbor_dont_capability_negotiate_cmd,
 1953:        NEIGHBOR_CMD2 "dont-capability-negotiate",
 1954:        NEIGHBOR_STR
 1955:        NEIGHBOR_ADDR_STR2
 1956:        "Do not perform capability negotiation\n")
 1957: {
 1958:   return peer_flag_set_vty (vty, argv[0], PEER_FLAG_DONT_CAPABILITY);
 1959: }
 1960: 
 1961: DEFUN (no_neighbor_dont_capability_negotiate,
 1962:        no_neighbor_dont_capability_negotiate_cmd,
 1963:        NO_NEIGHBOR_CMD2 "dont-capability-negotiate",
 1964:        NO_STR
 1965:        NEIGHBOR_STR
 1966:        NEIGHBOR_ADDR_STR2
 1967:        "Do not perform capability negotiation\n")
 1968: {
 1969:   return peer_flag_unset_vty (vty, argv[0], PEER_FLAG_DONT_CAPABILITY);
 1970: }
 1971: 
 1972: static int
 1973: peer_af_flag_modify_vty (struct vty *vty, const char *peer_str, afi_t afi,
 1974: 			 safi_t safi, u_int32_t flag, int set)
 1975: {
 1976:   int ret;
 1977:   struct peer *peer;
 1978: 
 1979:   peer = peer_and_group_lookup_vty (vty, peer_str);
 1980:   if (! peer)
 1981:     return CMD_WARNING;
 1982: 
 1983:   if (set)
 1984:     ret = peer_af_flag_set (peer, afi, safi, flag);
 1985:   else
 1986:     ret = peer_af_flag_unset (peer, afi, safi, flag);
 1987: 
 1988:   return bgp_vty_return (vty, ret);
 1989: }
 1990: 
 1991: static int
 1992: peer_af_flag_set_vty (struct vty *vty, const char *peer_str, afi_t afi,
 1993: 		      safi_t safi, u_int32_t flag)
 1994: {
 1995:   return peer_af_flag_modify_vty (vty, peer_str, afi, safi, flag, 1);
 1996: }
 1997: 
 1998: static int
 1999: peer_af_flag_unset_vty (struct vty *vty, const char *peer_str, afi_t afi,
 2000: 			safi_t safi, u_int32_t flag)
 2001: {
 2002:   return peer_af_flag_modify_vty (vty, peer_str, afi, safi, flag, 0);
 2003: }
 2004: 
 2005: /* neighbor capability orf prefix-list. */
 2006: DEFUN (neighbor_capability_orf_prefix,
 2007:        neighbor_capability_orf_prefix_cmd,
 2008:        NEIGHBOR_CMD2 "capability orf prefix-list (both|send|receive)",
 2009:        NEIGHBOR_STR
 2010:        NEIGHBOR_ADDR_STR2
 2011:        "Advertise capability to the peer\n"
 2012:        "Advertise ORF capability to the peer\n"
 2013:        "Advertise prefixlist ORF capability to this neighbor\n"
 2014:        "Capability to SEND and RECEIVE the ORF to/from this neighbor\n"
 2015:        "Capability to RECEIVE the ORF from this neighbor\n"
 2016:        "Capability to SEND the ORF to this neighbor\n")
 2017: {
 2018:   u_int16_t flag = 0;
 2019: 
 2020:   if (strncmp (argv[1], "s", 1) == 0)
 2021:     flag = PEER_FLAG_ORF_PREFIX_SM;
 2022:   else if (strncmp (argv[1], "r", 1) == 0)
 2023:     flag = PEER_FLAG_ORF_PREFIX_RM;
 2024:   else if (strncmp (argv[1], "b", 1) == 0)
 2025:     flag = PEER_FLAG_ORF_PREFIX_SM|PEER_FLAG_ORF_PREFIX_RM;
 2026:   else
 2027:     return CMD_WARNING;
 2028: 
 2029:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2030: 			       bgp_node_safi (vty), flag);
 2031: }
 2032: 
 2033: DEFUN (no_neighbor_capability_orf_prefix,
 2034:        no_neighbor_capability_orf_prefix_cmd,
 2035:        NO_NEIGHBOR_CMD2 "capability orf prefix-list (both|send|receive)",
 2036:        NO_STR
 2037:        NEIGHBOR_STR
 2038:        NEIGHBOR_ADDR_STR2
 2039:        "Advertise capability to the peer\n"
 2040:        "Advertise ORF capability to the peer\n"
 2041:        "Advertise prefixlist ORF capability to this neighbor\n"
 2042:        "Capability to SEND and RECEIVE the ORF to/from this neighbor\n"
 2043:        "Capability to RECEIVE the ORF from this neighbor\n"
 2044:        "Capability to SEND the ORF to this neighbor\n")
 2045: {
 2046:   u_int16_t flag = 0;
 2047: 
 2048:   if (strncmp (argv[1], "s", 1) == 0)
 2049:     flag = PEER_FLAG_ORF_PREFIX_SM;
 2050:   else if (strncmp (argv[1], "r", 1) == 0)
 2051:     flag = PEER_FLAG_ORF_PREFIX_RM;
 2052:   else if (strncmp (argv[1], "b", 1) == 0)
 2053:     flag = PEER_FLAG_ORF_PREFIX_SM|PEER_FLAG_ORF_PREFIX_RM;
 2054:   else
 2055:     return CMD_WARNING;
 2056: 
 2057:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2058: 				 bgp_node_safi (vty), flag);
 2059: }
 2060: 
 2061: /* neighbor next-hop-self. */
 2062: DEFUN (neighbor_nexthop_self,
 2063:        neighbor_nexthop_self_cmd,
 2064:        NEIGHBOR_CMD2 "next-hop-self",
 2065:        NEIGHBOR_STR
 2066:        NEIGHBOR_ADDR_STR2
 2067:        "Disable the next hop calculation for this neighbor\n")
 2068: {
 2069:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2070: 			       bgp_node_safi (vty), PEER_FLAG_NEXTHOP_SELF);
 2071: }
 2072: 
 2073: DEFUN (no_neighbor_nexthop_self,
 2074:        no_neighbor_nexthop_self_cmd,
 2075:        NO_NEIGHBOR_CMD2 "next-hop-self",
 2076:        NO_STR
 2077:        NEIGHBOR_STR
 2078:        NEIGHBOR_ADDR_STR2
 2079:        "Disable the next hop calculation for this neighbor\n")
 2080: {
 2081:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2082: 				 bgp_node_safi (vty), PEER_FLAG_NEXTHOP_SELF);
 2083: }
 2084: 
 2085: /* neighbor remove-private-AS. */
 2086: DEFUN (neighbor_remove_private_as,
 2087:        neighbor_remove_private_as_cmd,
 2088:        NEIGHBOR_CMD2 "remove-private-AS",
 2089:        NEIGHBOR_STR
 2090:        NEIGHBOR_ADDR_STR2
 2091:        "Remove private AS number from outbound updates\n")
 2092: {
 2093:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2094: 			       bgp_node_safi (vty),
 2095: 			       PEER_FLAG_REMOVE_PRIVATE_AS);
 2096: }
 2097: 
 2098: DEFUN (no_neighbor_remove_private_as,
 2099:        no_neighbor_remove_private_as_cmd,
 2100:        NO_NEIGHBOR_CMD2 "remove-private-AS",
 2101:        NO_STR
 2102:        NEIGHBOR_STR
 2103:        NEIGHBOR_ADDR_STR2
 2104:        "Remove private AS number from outbound updates\n")
 2105: {
 2106:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2107: 				 bgp_node_safi (vty),
 2108: 				 PEER_FLAG_REMOVE_PRIVATE_AS);
 2109: }
 2110: 
 2111: /* neighbor send-community. */
 2112: DEFUN (neighbor_send_community,
 2113:        neighbor_send_community_cmd,
 2114:        NEIGHBOR_CMD2 "send-community",
 2115:        NEIGHBOR_STR
 2116:        NEIGHBOR_ADDR_STR2
 2117:        "Send Community attribute to this neighbor\n")
 2118: {
 2119:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2120: 			       bgp_node_safi (vty),
 2121: 			       PEER_FLAG_SEND_COMMUNITY);
 2122: }
 2123: 
 2124: DEFUN (no_neighbor_send_community,
 2125:        no_neighbor_send_community_cmd,
 2126:        NO_NEIGHBOR_CMD2 "send-community",
 2127:        NO_STR
 2128:        NEIGHBOR_STR
 2129:        NEIGHBOR_ADDR_STR2
 2130:        "Send Community attribute to this neighbor\n")
 2131: {
 2132:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2133: 				 bgp_node_safi (vty),
 2134: 				 PEER_FLAG_SEND_COMMUNITY);
 2135: }
 2136: 
 2137: /* neighbor send-community extended. */
 2138: DEFUN (neighbor_send_community_type,
 2139:        neighbor_send_community_type_cmd,
 2140:        NEIGHBOR_CMD2 "send-community (both|extended|standard)",
 2141:        NEIGHBOR_STR
 2142:        NEIGHBOR_ADDR_STR2
 2143:        "Send Community attribute to this neighbor\n"
 2144:        "Send Standard and Extended Community attributes\n"
 2145:        "Send Extended Community attributes\n"
 2146:        "Send Standard Community attributes\n")
 2147: {
 2148:   if (strncmp (argv[1], "s", 1) == 0)
 2149:     return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2150: 				 bgp_node_safi (vty),
 2151: 				 PEER_FLAG_SEND_COMMUNITY);
 2152:   if (strncmp (argv[1], "e", 1) == 0)
 2153:     return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2154: 				 bgp_node_safi (vty),
 2155: 				 PEER_FLAG_SEND_EXT_COMMUNITY);
 2156: 
 2157:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2158: 			       bgp_node_safi (vty),
 2159: 			       (PEER_FLAG_SEND_COMMUNITY|
 2160: 				PEER_FLAG_SEND_EXT_COMMUNITY));
 2161: }
 2162: 
 2163: DEFUN (no_neighbor_send_community_type,
 2164:        no_neighbor_send_community_type_cmd,
 2165:        NO_NEIGHBOR_CMD2 "send-community (both|extended|standard)",
 2166:        NO_STR
 2167:        NEIGHBOR_STR
 2168:        NEIGHBOR_ADDR_STR2
 2169:        "Send Community attribute to this neighbor\n"
 2170:        "Send Standard and Extended Community attributes\n"
 2171:        "Send Extended Community attributes\n"
 2172:        "Send Standard Community attributes\n")
 2173: {
 2174:   if (strncmp (argv[1], "s", 1) == 0)
 2175:     return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2176: 				   bgp_node_safi (vty),
 2177: 				   PEER_FLAG_SEND_COMMUNITY);
 2178:   if (strncmp (argv[1], "e", 1) == 0)
 2179:     return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2180: 				   bgp_node_safi (vty),
 2181: 				   PEER_FLAG_SEND_EXT_COMMUNITY);
 2182: 
 2183:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2184: 				 bgp_node_safi (vty),
 2185: 				 (PEER_FLAG_SEND_COMMUNITY |
 2186: 				  PEER_FLAG_SEND_EXT_COMMUNITY));
 2187: }
 2188: 
 2189: /* neighbor soft-reconfig. */
 2190: DEFUN (neighbor_soft_reconfiguration,
 2191:        neighbor_soft_reconfiguration_cmd,
 2192:        NEIGHBOR_CMD2 "soft-reconfiguration inbound",
 2193:        NEIGHBOR_STR
 2194:        NEIGHBOR_ADDR_STR2
 2195:        "Per neighbor soft reconfiguration\n"
 2196:        "Allow inbound soft reconfiguration for this neighbor\n")
 2197: {
 2198:   return peer_af_flag_set_vty (vty, argv[0],
 2199: 			       bgp_node_afi (vty), bgp_node_safi (vty),
 2200: 			       PEER_FLAG_SOFT_RECONFIG);
 2201: }
 2202: 
 2203: DEFUN (no_neighbor_soft_reconfiguration,
 2204:        no_neighbor_soft_reconfiguration_cmd,
 2205:        NO_NEIGHBOR_CMD2 "soft-reconfiguration inbound",
 2206:        NO_STR
 2207:        NEIGHBOR_STR
 2208:        NEIGHBOR_ADDR_STR2
 2209:        "Per neighbor soft reconfiguration\n"
 2210:        "Allow inbound soft reconfiguration for this neighbor\n")
 2211: {
 2212:   return peer_af_flag_unset_vty (vty, argv[0],
 2213: 				 bgp_node_afi (vty), bgp_node_safi (vty),
 2214: 				 PEER_FLAG_SOFT_RECONFIG);
 2215: }
 2216: 
 2217: DEFUN (neighbor_route_reflector_client,
 2218:        neighbor_route_reflector_client_cmd,
 2219:        NEIGHBOR_CMD2 "route-reflector-client",
 2220:        NEIGHBOR_STR
 2221:        NEIGHBOR_ADDR_STR2
 2222:        "Configure a neighbor as Route Reflector client\n")
 2223: {
 2224:   struct peer *peer;
 2225: 
 2226: 
 2227:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 2228:   if (! peer)
 2229:     return CMD_WARNING;
 2230: 
 2231:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2232: 			       bgp_node_safi (vty),
 2233: 			       PEER_FLAG_REFLECTOR_CLIENT);
 2234: }
 2235: 
 2236: DEFUN (no_neighbor_route_reflector_client,
 2237:        no_neighbor_route_reflector_client_cmd,
 2238:        NO_NEIGHBOR_CMD2 "route-reflector-client",
 2239:        NO_STR
 2240:        NEIGHBOR_STR
 2241:        NEIGHBOR_ADDR_STR2
 2242:        "Configure a neighbor as Route Reflector client\n")
 2243: {
 2244:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2245: 				 bgp_node_safi (vty),
 2246: 				 PEER_FLAG_REFLECTOR_CLIENT);
 2247: }
 2248: 
 2249: static int
 2250: peer_rsclient_set_vty (struct vty *vty, const char *peer_str, 
 2251:                        int afi, int safi)
 2252: {
 2253:   int ret;
 2254:   struct bgp *bgp;
 2255:   struct peer *peer;
 2256:   struct peer_group *group;
 2257:   struct listnode *node, *nnode;
 2258:   struct bgp_filter *pfilter;
 2259:   struct bgp_filter *gfilter;
 2260:   int locked_and_added = 0;
 2261: 
 2262:   bgp = vty->index;
 2263: 
 2264:   peer = peer_and_group_lookup_vty (vty, peer_str);
 2265:   if ( ! peer )
 2266:     return CMD_WARNING;
 2267: 
 2268:   /* If it is already a RS-Client, don't do anything. */
 2269:   if ( CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT) )
 2270:     return CMD_SUCCESS;
 2271: 
 2272:   if ( ! peer_rsclient_active (peer) )
 2273:     {
 2274:       peer = peer_lock (peer); /* rsclient peer list reference */
 2275:       listnode_add_sort (bgp->rsclient, peer);
 2276:       locked_and_added = 1;
 2277:     }
 2278: 
 2279:   ret = peer_af_flag_set (peer, afi, safi, PEER_FLAG_RSERVER_CLIENT);
 2280:   if (ret < 0)
 2281:     {
 2282:       if (locked_and_added)
 2283:         {
 2284:           listnode_delete (bgp->rsclient, peer);
 2285:           peer_unlock (peer); /* rsclient peer list reference */
 2286:         }
 2287: 
 2288:       return bgp_vty_return (vty, ret);
 2289:     }
 2290: 
 2291:   peer->rib[afi][safi] = bgp_table_init (afi, safi);
 2292:   peer->rib[afi][safi]->type = BGP_TABLE_RSCLIENT;
 2293:   /* RIB peer reference.  Released when table is free'd in bgp_table_free. */
 2294:   peer->rib[afi][safi]->owner = peer_lock (peer);
 2295: 
 2296:   /* Check for existing 'network' and 'redistribute' routes. */
 2297:   bgp_check_local_routes_rsclient (peer, afi, safi);
 2298: 
 2299:   /* Check for routes for peers configured with 'soft-reconfiguration'. */
 2300:   bgp_soft_reconfig_rsclient (peer, afi, safi);
 2301: 
 2302:   if (CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
 2303:     {
 2304:       group = peer->group;
 2305:       gfilter = &peer->filter[afi][safi];
 2306: 
 2307:       for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
 2308:         {
 2309:           pfilter = &peer->filter[afi][safi];
 2310: 
 2311:           /* Members of a non-RS-Client group should not be RS-Clients, as that 
 2312:              is checked when the become part of the peer-group */
 2313:           ret = peer_af_flag_set (peer, afi, safi, PEER_FLAG_RSERVER_CLIENT);
 2314:           if (ret < 0)
 2315:             return bgp_vty_return (vty, ret);
 2316: 
 2317:           /* Make peer's RIB point to group's RIB. */
 2318:           peer->rib[afi][safi] = group->conf->rib[afi][safi];
 2319: 
 2320:           /* Import policy. */
 2321:           if (pfilter->map[RMAP_IMPORT].name)
 2322:             free (pfilter->map[RMAP_IMPORT].name);
 2323:           if (gfilter->map[RMAP_IMPORT].name)
 2324:             {
 2325:               pfilter->map[RMAP_IMPORT].name = strdup (gfilter->map[RMAP_IMPORT].name);
 2326:               pfilter->map[RMAP_IMPORT].map = gfilter->map[RMAP_IMPORT].map;
 2327:             }
 2328:           else
 2329:             {
 2330:               pfilter->map[RMAP_IMPORT].name = NULL;
 2331:               pfilter->map[RMAP_IMPORT].map =NULL;
 2332:             }
 2333: 
 2334:           /* Export policy. */
 2335:           if (gfilter->map[RMAP_EXPORT].name && ! pfilter->map[RMAP_EXPORT].name)
 2336:             {
 2337:               pfilter->map[RMAP_EXPORT].name = strdup (gfilter->map[RMAP_EXPORT].name);
 2338:               pfilter->map[RMAP_EXPORT].map = gfilter->map[RMAP_EXPORT].map;
 2339:             }
 2340:         }
 2341:     }
 2342:   return CMD_SUCCESS;
 2343: }
 2344: 
 2345: static int
 2346: peer_rsclient_unset_vty (struct vty *vty, const char *peer_str, 
 2347:                          int afi, int safi)
 2348: {
 2349:   int ret;
 2350:   struct bgp *bgp;
 2351:   struct peer *peer;
 2352:   struct peer_group *group;
 2353:   struct listnode *node, *nnode;
 2354: 
 2355:   bgp = vty->index;
 2356: 
 2357:   peer = peer_and_group_lookup_vty (vty, peer_str);
 2358:   if ( ! peer )
 2359:     return CMD_WARNING;
 2360: 
 2361:   /* If it is not a RS-Client, don't do anything. */
 2362:   if ( ! CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT) )
 2363:     return CMD_SUCCESS;
 2364: 
 2365:   if (CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
 2366:     {
 2367:       group = peer->group;
 2368: 
 2369:       for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
 2370:         {
 2371:           ret = peer_af_flag_unset (peer, afi, safi, PEER_FLAG_RSERVER_CLIENT);
 2372:           if (ret < 0)
 2373:             return bgp_vty_return (vty, ret);
 2374: 
 2375:           peer->rib[afi][safi] = NULL;
 2376:         }
 2377: 
 2378:         peer = group->conf;
 2379:     }
 2380: 
 2381:   ret = peer_af_flag_unset (peer, afi, safi, PEER_FLAG_RSERVER_CLIENT);
 2382:   if (ret < 0)
 2383:     return bgp_vty_return (vty, ret);
 2384: 
 2385:   if ( ! peer_rsclient_active (peer) )
 2386:     {
 2387:       bgp_clear_route (peer, afi, safi, BGP_CLEAR_ROUTE_MY_RSCLIENT);
 2388:       listnode_delete (bgp->rsclient, peer);
 2389:       peer_unlock (peer); /* peer bgp rsclient reference */
 2390:     }
 2391: 
 2392:   bgp_table_finish (&peer->rib[bgp_node_afi(vty)][bgp_node_safi(vty)]);
 2393: 
 2394:   return CMD_SUCCESS;
 2395: }
 2396: 
 2397: /* neighbor route-server-client. */
 2398: DEFUN (neighbor_route_server_client,
 2399:        neighbor_route_server_client_cmd,
 2400:        NEIGHBOR_CMD2 "route-server-client",
 2401:        NEIGHBOR_STR
 2402:        NEIGHBOR_ADDR_STR2
 2403:        "Configure a neighbor as Route Server client\n")
 2404: {
 2405:   return peer_rsclient_set_vty (vty, argv[0], bgp_node_afi(vty),
 2406:                   bgp_node_safi(vty));
 2407: }
 2408: 
 2409: DEFUN (no_neighbor_route_server_client,
 2410:        no_neighbor_route_server_client_cmd,
 2411:        NO_NEIGHBOR_CMD2 "route-server-client",
 2412:        NO_STR
 2413:        NEIGHBOR_STR
 2414:        NEIGHBOR_ADDR_STR2
 2415:        "Configure a neighbor as Route Server client\n")
 2416: {
 2417:   return peer_rsclient_unset_vty (vty, argv[0], bgp_node_afi(vty),
 2418:                   bgp_node_safi(vty));
 2419: }
 2420: 
 2421: DEFUN (neighbor_nexthop_local_unchanged,
 2422:        neighbor_nexthop_local_unchanged_cmd,
 2423:        NEIGHBOR_CMD2 "nexthop-local unchanged",
 2424:        NEIGHBOR_STR
 2425:        NEIGHBOR_ADDR_STR2
 2426:        "Configure treatment of outgoing link-local nexthop attribute\n"
 2427:        "Leave link-local nexthop unchanged for this peer\n")
 2428: {
 2429:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2430:                                 bgp_node_safi (vty),
 2431:                                 PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED );
 2432: }
 2433: 
 2434: DEFUN (no_neighbor_nexthop_local_unchanged,
 2435:        no_neighbor_nexthop_local_unchanged_cmd,
 2436:        NO_NEIGHBOR_CMD2 "nexthop-local unchanged",
 2437:        NO_STR
 2438:        NEIGHBOR_STR
 2439:        NEIGHBOR_ADDR_STR2
 2440:        "Configure treatment of outgoing link-local-nexthop attribute\n"
 2441:        "Leave link-local nexthop unchanged for this peer\n")
 2442: {
 2443:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2444: 				 bgp_node_safi (vty),
 2445:                                 PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED );
 2446: }
 2447: 
 2448: DEFUN (neighbor_attr_unchanged,
 2449:        neighbor_attr_unchanged_cmd,
 2450:        NEIGHBOR_CMD2 "attribute-unchanged",
 2451:        NEIGHBOR_STR
 2452:        NEIGHBOR_ADDR_STR2
 2453:        "BGP attribute is propagated unchanged to this neighbor\n")
 2454: {
 2455:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2456: 			       bgp_node_safi (vty),
 2457: 			       (PEER_FLAG_AS_PATH_UNCHANGED |
 2458: 				PEER_FLAG_NEXTHOP_UNCHANGED |
 2459: 				PEER_FLAG_MED_UNCHANGED));
 2460: }
 2461: 
 2462: DEFUN (neighbor_attr_unchanged1,
 2463:        neighbor_attr_unchanged1_cmd,
 2464:        NEIGHBOR_CMD2 "attribute-unchanged (as-path|next-hop|med)",
 2465:        NEIGHBOR_STR
 2466:        NEIGHBOR_ADDR_STR2
 2467:        "BGP attribute is propagated unchanged to this neighbor\n"
 2468:        "As-path attribute\n"
 2469:        "Nexthop attribute\n"
 2470:        "Med attribute\n")
 2471: {
 2472:   u_int16_t flags = 0;
 2473: 
 2474:   if (strncmp (argv[1], "as-path", 1) == 0)
 2475:     SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
 2476:   else if (strncmp (argv[1], "next-hop", 1) == 0)
 2477:     SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
 2478:   else if (strncmp (argv[1], "med", 1) == 0)
 2479:     SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
 2480: 
 2481:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2482: 			       bgp_node_safi (vty), flags);
 2483: }
 2484: 
 2485: DEFUN (neighbor_attr_unchanged2,
 2486:        neighbor_attr_unchanged2_cmd,
 2487:        NEIGHBOR_CMD2 "attribute-unchanged as-path (next-hop|med)",
 2488:        NEIGHBOR_STR
 2489:        NEIGHBOR_ADDR_STR2
 2490:        "BGP attribute is propagated unchanged to this neighbor\n"
 2491:        "As-path attribute\n"
 2492:        "Nexthop attribute\n"
 2493:        "Med attribute\n")
 2494: {
 2495:   u_int16_t flags = PEER_FLAG_AS_PATH_UNCHANGED;
 2496: 
 2497:   if (strncmp (argv[1], "next-hop", 1) == 0)
 2498:     SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
 2499:   else if (strncmp (argv[1], "med", 1) == 0)
 2500:     SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
 2501: 
 2502:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2503: 			       bgp_node_safi (vty), flags);
 2504: 
 2505: }
 2506: 
 2507: DEFUN (neighbor_attr_unchanged3,
 2508:        neighbor_attr_unchanged3_cmd,
 2509:        NEIGHBOR_CMD2 "attribute-unchanged next-hop (as-path|med)",
 2510:        NEIGHBOR_STR
 2511:        NEIGHBOR_ADDR_STR2
 2512:        "BGP attribute is propagated unchanged to this neighbor\n"
 2513:        "Nexthop attribute\n"
 2514:        "As-path attribute\n"
 2515:        "Med attribute\n")
 2516: {
 2517:   u_int16_t flags = PEER_FLAG_NEXTHOP_UNCHANGED;
 2518: 
 2519:   if (strncmp (argv[1], "as-path", 1) == 0)
 2520:     SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
 2521:   else if (strncmp (argv[1], "med", 1) == 0)
 2522:     SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
 2523: 
 2524:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2525: 			       bgp_node_safi (vty), flags);
 2526: }
 2527: 
 2528: DEFUN (neighbor_attr_unchanged4,
 2529:        neighbor_attr_unchanged4_cmd,
 2530:        NEIGHBOR_CMD2 "attribute-unchanged med (as-path|next-hop)",
 2531:        NEIGHBOR_STR
 2532:        NEIGHBOR_ADDR_STR2
 2533:        "BGP attribute is propagated unchanged to this neighbor\n"
 2534:        "Med attribute\n"
 2535:        "As-path attribute\n"
 2536:        "Nexthop attribute\n")
 2537: {
 2538:   u_int16_t flags = PEER_FLAG_MED_UNCHANGED;
 2539: 
 2540:   if (strncmp (argv[1], "as-path", 1) == 0)
 2541:     SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
 2542:   else if (strncmp (argv[1], "next-hop", 1) == 0)
 2543:     SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
 2544: 
 2545:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2546: 			       bgp_node_safi (vty), flags);
 2547: }
 2548: 
 2549: ALIAS (neighbor_attr_unchanged,
 2550:        neighbor_attr_unchanged5_cmd,
 2551:        NEIGHBOR_CMD2 "attribute-unchanged as-path next-hop med",
 2552:        NEIGHBOR_STR
 2553:        NEIGHBOR_ADDR_STR2
 2554:        "BGP attribute is propagated unchanged to this neighbor\n"
 2555:        "As-path attribute\n"
 2556:        "Nexthop attribute\n"
 2557:        "Med attribute\n")
 2558: 
 2559: ALIAS (neighbor_attr_unchanged,
 2560:        neighbor_attr_unchanged6_cmd,
 2561:        NEIGHBOR_CMD2 "attribute-unchanged as-path med next-hop",
 2562:        NEIGHBOR_STR
 2563:        NEIGHBOR_ADDR_STR2
 2564:        "BGP attribute is propagated unchanged to this neighbor\n"
 2565:        "As-path attribute\n"
 2566:        "Med attribute\n"
 2567:        "Nexthop attribute\n")
 2568: 
 2569: ALIAS (neighbor_attr_unchanged,
 2570:        neighbor_attr_unchanged7_cmd,
 2571:        NEIGHBOR_CMD2 "attribute-unchanged next-hop med as-path",
 2572:        NEIGHBOR_STR
 2573:        NEIGHBOR_ADDR_STR2
 2574:        "BGP attribute is propagated unchanged to this neighbor\n"
 2575:        "Nexthop attribute\n"
 2576:        "Med attribute\n"
 2577:        "As-path attribute\n")
 2578: 
 2579: ALIAS (neighbor_attr_unchanged,
 2580:        neighbor_attr_unchanged8_cmd,
 2581:        NEIGHBOR_CMD2 "attribute-unchanged next-hop as-path med",
 2582:        NEIGHBOR_STR
 2583:        NEIGHBOR_ADDR_STR2
 2584:        "BGP attribute is propagated unchanged to this neighbor\n"
 2585:        "Nexthop attribute\n"
 2586:        "As-path attribute\n"
 2587:        "Med attribute\n")
 2588: 
 2589: ALIAS (neighbor_attr_unchanged,
 2590:        neighbor_attr_unchanged9_cmd,
 2591:        NEIGHBOR_CMD2 "attribute-unchanged med next-hop as-path",
 2592:        NEIGHBOR_STR
 2593:        NEIGHBOR_ADDR_STR2
 2594:        "BGP attribute is propagated unchanged to this neighbor\n"
 2595:        "Med attribute\n"
 2596:        "Nexthop attribute\n"
 2597:        "As-path attribute\n")
 2598: 
 2599: ALIAS (neighbor_attr_unchanged,
 2600:        neighbor_attr_unchanged10_cmd,
 2601:        NEIGHBOR_CMD2 "attribute-unchanged med as-path next-hop",
 2602:        NEIGHBOR_STR
 2603:        NEIGHBOR_ADDR_STR2
 2604:        "BGP attribute is propagated unchanged to this neighbor\n"
 2605:        "Med attribute\n"
 2606:        "As-path attribute\n"
 2607:        "Nexthop attribute\n")
 2608: 
 2609: DEFUN (no_neighbor_attr_unchanged,
 2610:        no_neighbor_attr_unchanged_cmd,
 2611:        NO_NEIGHBOR_CMD2 "attribute-unchanged",
 2612:        NO_STR	 
 2613:        NEIGHBOR_STR
 2614:        NEIGHBOR_ADDR_STR2
 2615:        "BGP attribute is propagated unchanged to this neighbor\n")
 2616: {
 2617:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2618: 				 bgp_node_safi (vty),
 2619: 				 (PEER_FLAG_AS_PATH_UNCHANGED |
 2620: 				  PEER_FLAG_NEXTHOP_UNCHANGED |
 2621: 				  PEER_FLAG_MED_UNCHANGED));
 2622: }
 2623: 
 2624: DEFUN (no_neighbor_attr_unchanged1,
 2625:        no_neighbor_attr_unchanged1_cmd,
 2626:        NO_NEIGHBOR_CMD2 "attribute-unchanged (as-path|next-hop|med)",
 2627:        NO_STR
 2628:        NEIGHBOR_STR
 2629:        NEIGHBOR_ADDR_STR2
 2630:        "BGP attribute is propagated unchanged to this neighbor\n"
 2631:        "As-path attribute\n"
 2632:        "Nexthop attribute\n"
 2633:        "Med attribute\n")
 2634: {
 2635:   u_int16_t flags = 0;
 2636: 
 2637:   if (strncmp (argv[1], "as-path", 1) == 0)
 2638:     SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
 2639:   else if (strncmp (argv[1], "next-hop", 1) == 0)
 2640:     SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
 2641:   else if (strncmp (argv[1], "med", 1) == 0)
 2642:     SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
 2643: 
 2644:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2645: 				 bgp_node_safi (vty), flags);
 2646: }
 2647: 
 2648: DEFUN (no_neighbor_attr_unchanged2,
 2649:        no_neighbor_attr_unchanged2_cmd,
 2650:        NO_NEIGHBOR_CMD2 "attribute-unchanged as-path (next-hop|med)",
 2651:        NO_STR
 2652:        NEIGHBOR_STR
 2653:        NEIGHBOR_ADDR_STR2
 2654:        "BGP attribute is propagated unchanged to this neighbor\n"
 2655:        "As-path attribute\n"
 2656:        "Nexthop attribute\n"
 2657:        "Med attribute\n")
 2658: {
 2659:   u_int16_t flags = PEER_FLAG_AS_PATH_UNCHANGED;
 2660: 
 2661:   if (strncmp (argv[1], "next-hop", 1) == 0)
 2662:     SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
 2663:   else if (strncmp (argv[1], "med", 1) == 0)
 2664:     SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
 2665: 
 2666:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2667: 			       bgp_node_safi (vty), flags);
 2668: }
 2669: 
 2670: DEFUN (no_neighbor_attr_unchanged3,
 2671:        no_neighbor_attr_unchanged3_cmd,
 2672:        NO_NEIGHBOR_CMD2 "attribute-unchanged next-hop (as-path|med)",
 2673:        NO_STR
 2674:        NEIGHBOR_STR
 2675:        NEIGHBOR_ADDR_STR2
 2676:        "BGP attribute is propagated unchanged to this neighbor\n"
 2677:        "Nexthop attribute\n"
 2678:        "As-path attribute\n"
 2679:        "Med attribute\n")
 2680: {
 2681:   u_int16_t flags = PEER_FLAG_NEXTHOP_UNCHANGED;
 2682: 
 2683:   if (strncmp (argv[1], "as-path", 1) == 0)
 2684:     SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
 2685:   else if (strncmp (argv[1], "med", 1) == 0)
 2686:     SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
 2687: 
 2688:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2689: 				 bgp_node_safi (vty), flags);
 2690: }
 2691: 
 2692: DEFUN (no_neighbor_attr_unchanged4,
 2693:        no_neighbor_attr_unchanged4_cmd,
 2694:        NO_NEIGHBOR_CMD2 "attribute-unchanged med (as-path|next-hop)",
 2695:        NO_STR
 2696:        NEIGHBOR_STR
 2697:        NEIGHBOR_ADDR_STR2
 2698:        "BGP attribute is propagated unchanged to this neighbor\n"
 2699:        "Med attribute\n"
 2700:        "As-path attribute\n"
 2701:        "Nexthop attribute\n")
 2702: {
 2703:   u_int16_t flags = PEER_FLAG_MED_UNCHANGED;
 2704: 
 2705:   if (strncmp (argv[1], "as-path", 1) == 0)
 2706:     SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
 2707:   else if (strncmp (argv[1], "next-hop", 1) == 0)
 2708:     SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
 2709: 
 2710:   return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
 2711: 			       bgp_node_safi (vty), flags);
 2712: }
 2713: 
 2714: ALIAS (no_neighbor_attr_unchanged,
 2715:        no_neighbor_attr_unchanged5_cmd,
 2716:        NO_NEIGHBOR_CMD2 "attribute-unchanged as-path next-hop med",
 2717:        NO_STR
 2718:        NEIGHBOR_STR
 2719:        NEIGHBOR_ADDR_STR2
 2720:        "BGP attribute is propagated unchanged to this neighbor\n"
 2721:        "As-path attribute\n"
 2722:        "Nexthop attribute\n"
 2723:        "Med attribute\n")
 2724: 
 2725: ALIAS (no_neighbor_attr_unchanged,
 2726:        no_neighbor_attr_unchanged6_cmd,
 2727:        NO_NEIGHBOR_CMD2 "attribute-unchanged as-path med next-hop",
 2728:        NO_STR
 2729:        NEIGHBOR_STR
 2730:        NEIGHBOR_ADDR_STR2
 2731:        "BGP attribute is propagated unchanged to this neighbor\n"
 2732:        "As-path attribute\n"
 2733:        "Med attribute\n"
 2734:        "Nexthop attribute\n")
 2735: 
 2736: ALIAS (no_neighbor_attr_unchanged,
 2737:        no_neighbor_attr_unchanged7_cmd,
 2738:        NO_NEIGHBOR_CMD2 "attribute-unchanged next-hop med as-path",
 2739:        NO_STR
 2740:        NEIGHBOR_STR
 2741:        NEIGHBOR_ADDR_STR2
 2742:        "BGP attribute is propagated unchanged to this neighbor\n"
 2743:        "Nexthop attribute\n"
 2744:        "Med attribute\n"
 2745:        "As-path attribute\n")
 2746: 
 2747: ALIAS (no_neighbor_attr_unchanged,
 2748:        no_neighbor_attr_unchanged8_cmd,
 2749:        NO_NEIGHBOR_CMD2 "attribute-unchanged next-hop as-path med",
 2750:        NO_STR
 2751:        NEIGHBOR_STR
 2752:        NEIGHBOR_ADDR_STR2
 2753:        "BGP attribute is propagated unchanged to this neighbor\n"
 2754:        "Nexthop attribute\n"
 2755:        "As-path attribute\n"
 2756:        "Med attribute\n")
 2757: 
 2758: ALIAS (no_neighbor_attr_unchanged,
 2759:        no_neighbor_attr_unchanged9_cmd,
 2760:        NO_NEIGHBOR_CMD2 "attribute-unchanged med next-hop as-path",
 2761:        NO_STR
 2762:        NEIGHBOR_STR
 2763:        NEIGHBOR_ADDR_STR2
 2764:        "BGP attribute is propagated unchanged to this neighbor\n"
 2765:        "Med attribute\n"
 2766:        "Nexthop attribute\n"
 2767:        "As-path attribute\n")
 2768: 
 2769: ALIAS (no_neighbor_attr_unchanged,
 2770:        no_neighbor_attr_unchanged10_cmd,
 2771:        NO_NEIGHBOR_CMD2 "attribute-unchanged med as-path next-hop",
 2772:        NO_STR
 2773:        NEIGHBOR_STR
 2774:        NEIGHBOR_ADDR_STR2
 2775:        "BGP attribute is propagated unchanged to this neighbor\n"
 2776:        "Med attribute\n"
 2777:        "As-path attribute\n"
 2778:        "Nexthop attribute\n")
 2779: 
 2780: /* For old version Zebra compatibility.  */
 2781: DEFUN_DEPRECATED (neighbor_transparent_as,
 2782: 		  neighbor_transparent_as_cmd,
 2783: 		  NEIGHBOR_CMD "transparent-as",
 2784: 		  NEIGHBOR_STR
 2785: 		  NEIGHBOR_ADDR_STR
 2786: 		  "Do not append my AS number even peer is EBGP peer\n")
 2787: {
 2788:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2789: 			       bgp_node_safi (vty),
 2790: 			       PEER_FLAG_AS_PATH_UNCHANGED);
 2791: }
 2792: 
 2793: DEFUN_DEPRECATED (neighbor_transparent_nexthop,
 2794: 		  neighbor_transparent_nexthop_cmd,
 2795: 		  NEIGHBOR_CMD "transparent-nexthop",
 2796: 		  NEIGHBOR_STR
 2797: 		  NEIGHBOR_ADDR_STR
 2798: 		  "Do not change nexthop even peer is EBGP peer\n")
 2799: {
 2800:   return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
 2801: 			       bgp_node_safi (vty),
 2802: 			       PEER_FLAG_NEXTHOP_UNCHANGED);
 2803: }
 2804: 
 2805: /* EBGP multihop configuration. */
 2806: static int
 2807: peer_ebgp_multihop_set_vty (struct vty *vty, const char *ip_str, 
 2808:                             const char *ttl_str)
 2809: {
 2810:   struct peer *peer;
 2811:   unsigned int ttl;
 2812: 
 2813:   peer = peer_and_group_lookup_vty (vty, ip_str);
 2814:   if (! peer)
 2815:     return CMD_WARNING;
 2816: 
 2817:   if (! ttl_str)
 2818:     ttl = TTL_MAX;
 2819:   else
 2820:     VTY_GET_INTEGER_RANGE ("TTL", ttl, ttl_str, 1, 255);
 2821: 
 2822:   return bgp_vty_return (vty,  peer_ebgp_multihop_set (peer, ttl));
 2823: }
 2824: 
 2825: static int
 2826: peer_ebgp_multihop_unset_vty (struct vty *vty, const char *ip_str) 
 2827: {
 2828:   struct peer *peer;
 2829: 
 2830:   peer = peer_and_group_lookup_vty (vty, ip_str);
 2831:   if (! peer)
 2832:     return CMD_WARNING;
 2833: 
 2834:   return bgp_vty_return (vty, peer_ebgp_multihop_unset (peer));
 2835: }
 2836: 
 2837: /* neighbor ebgp-multihop. */
 2838: DEFUN (neighbor_ebgp_multihop,
 2839:        neighbor_ebgp_multihop_cmd,
 2840:        NEIGHBOR_CMD2 "ebgp-multihop",
 2841:        NEIGHBOR_STR
 2842:        NEIGHBOR_ADDR_STR2
 2843:        "Allow EBGP neighbors not on directly connected networks\n")
 2844: {
 2845:   return peer_ebgp_multihop_set_vty (vty, argv[0], NULL);
 2846: }
 2847: 
 2848: DEFUN (neighbor_ebgp_multihop_ttl,
 2849:        neighbor_ebgp_multihop_ttl_cmd,
 2850:        NEIGHBOR_CMD2 "ebgp-multihop <1-255>",
 2851:        NEIGHBOR_STR
 2852:        NEIGHBOR_ADDR_STR2
 2853:        "Allow EBGP neighbors not on directly connected networks\n"
 2854:        "maximum hop count\n")
 2855: {
 2856:   return peer_ebgp_multihop_set_vty (vty, argv[0], argv[1]);
 2857: }
 2858: 
 2859: DEFUN (no_neighbor_ebgp_multihop,
 2860:        no_neighbor_ebgp_multihop_cmd,
 2861:        NO_NEIGHBOR_CMD2 "ebgp-multihop",
 2862:        NO_STR
 2863:        NEIGHBOR_STR
 2864:        NEIGHBOR_ADDR_STR2
 2865:        "Allow EBGP neighbors not on directly connected networks\n")
 2866: {
 2867:   return peer_ebgp_multihop_unset_vty (vty, argv[0]);
 2868: }
 2869: 
 2870: ALIAS (no_neighbor_ebgp_multihop,
 2871:        no_neighbor_ebgp_multihop_ttl_cmd,
 2872:        NO_NEIGHBOR_CMD2 "ebgp-multihop <1-255>",
 2873:        NO_STR
 2874:        NEIGHBOR_STR
 2875:        NEIGHBOR_ADDR_STR2
 2876:        "Allow EBGP neighbors not on directly connected networks\n"
 2877:        "maximum hop count\n")
 2878: 
 2879: /* disable-connected-check */
 2880: DEFUN (neighbor_disable_connected_check,
 2881:        neighbor_disable_connected_check_cmd,
 2882:        NEIGHBOR_CMD2 "disable-connected-check",
 2883:        NEIGHBOR_STR
 2884:        NEIGHBOR_ADDR_STR2
 2885:        "one-hop away EBGP peer using loopback address\n")
 2886: {
 2887:   return peer_flag_set_vty (vty, argv[0], PEER_FLAG_DISABLE_CONNECTED_CHECK);
 2888: }
 2889: 
 2890: DEFUN (no_neighbor_disable_connected_check,
 2891:        no_neighbor_disable_connected_check_cmd,
 2892:        NO_NEIGHBOR_CMD2 "disable-connected-check",
 2893:        NO_STR
 2894:        NEIGHBOR_STR
 2895:        NEIGHBOR_ADDR_STR2
 2896:        "one-hop away EBGP peer using loopback address\n")
 2897: {
 2898:   return peer_flag_unset_vty (vty, argv[0], PEER_FLAG_DISABLE_CONNECTED_CHECK);
 2899: }
 2900: 
 2901: /* Enforce multihop.  */
 2902: ALIAS (neighbor_disable_connected_check,
 2903:        neighbor_enforce_multihop_cmd,
 2904:        NEIGHBOR_CMD2 "enforce-multihop",
 2905:        NEIGHBOR_STR
 2906:        NEIGHBOR_ADDR_STR2
 2907:        "Enforce EBGP neighbors perform multihop\n")
 2908: 
 2909: /* Enforce multihop.  */
 2910: ALIAS (no_neighbor_disable_connected_check,
 2911:        no_neighbor_enforce_multihop_cmd,
 2912:        NO_NEIGHBOR_CMD2 "enforce-multihop",
 2913:        NO_STR
 2914:        NEIGHBOR_STR
 2915:        NEIGHBOR_ADDR_STR2
 2916:        "Enforce EBGP neighbors perform multihop\n")
 2917: 
 2918: DEFUN (neighbor_description,
 2919:        neighbor_description_cmd,
 2920:        NEIGHBOR_CMD2 "description .LINE",
 2921:        NEIGHBOR_STR
 2922:        NEIGHBOR_ADDR_STR2
 2923:        "Neighbor specific description\n"
 2924:        "Up to 80 characters describing this neighbor\n")
 2925: {
 2926:   struct peer *peer;
 2927:   char *str;
 2928: 
 2929:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 2930:   if (! peer)
 2931:     return CMD_WARNING;
 2932: 
 2933:   if (argc == 1)
 2934:     return CMD_SUCCESS;
 2935: 
 2936:   str = argv_concat(argv, argc, 1);
 2937: 
 2938:   peer_description_set (peer, str);
 2939: 
 2940:   XFREE (MTYPE_TMP, str);
 2941: 
 2942:   return CMD_SUCCESS;
 2943: }
 2944: 
 2945: DEFUN (no_neighbor_description,
 2946:        no_neighbor_description_cmd,
 2947:        NO_NEIGHBOR_CMD2 "description",
 2948:        NO_STR
 2949:        NEIGHBOR_STR
 2950:        NEIGHBOR_ADDR_STR2
 2951:        "Neighbor specific description\n")
 2952: {
 2953:   struct peer *peer;
 2954: 
 2955:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 2956:   if (! peer)
 2957:     return CMD_WARNING;
 2958: 
 2959:   peer_description_unset (peer);
 2960: 
 2961:   return CMD_SUCCESS;
 2962: }
 2963: 
 2964: ALIAS (no_neighbor_description,
 2965:        no_neighbor_description_val_cmd,
 2966:        NO_NEIGHBOR_CMD2 "description .LINE",
 2967:        NO_STR
 2968:        NEIGHBOR_STR
 2969:        NEIGHBOR_ADDR_STR2
 2970:        "Neighbor specific description\n"
 2971:        "Up to 80 characters describing this neighbor\n")
 2972: 
 2973: /* Neighbor update-source. */
 2974: static int
 2975: peer_update_source_vty (struct vty *vty, const char *peer_str, 
 2976:                         const char *source_str)
 2977: {
 2978:   struct peer *peer;
 2979: 
 2980:   peer = peer_and_group_lookup_vty (vty, peer_str);
 2981:   if (! peer)
 2982:     return CMD_WARNING;
 2983: 
 2984:   if (source_str)
 2985:     {
 2986:       union sockunion su;
 2987:       int ret = str2sockunion (source_str, &su);
 2988: 
 2989:       if (ret == 0)
 2990: 	peer_update_source_addr_set (peer, &su);
 2991:       else
 2992: 	peer_update_source_if_set (peer, source_str);
 2993:     }
 2994:   else
 2995:     peer_update_source_unset (peer);
 2996: 
 2997:   return CMD_SUCCESS;
 2998: }
 2999: 
 3000: #define BGP_UPDATE_SOURCE_STR "(A.B.C.D|X:X::X:X|WORD)"
 3001: #define BGP_UPDATE_SOURCE_HELP_STR \
 3002:   "IPv4 address\n" \
 3003:   "IPv6 address\n" \
 3004:   "Interface name (requires zebra to be running)\n"
 3005: 
 3006: DEFUN (neighbor_update_source,
 3007:        neighbor_update_source_cmd,
 3008:        NEIGHBOR_CMD2 "update-source " BGP_UPDATE_SOURCE_STR,
 3009:        NEIGHBOR_STR
 3010:        NEIGHBOR_ADDR_STR2
 3011:        "Source of routing updates\n"
 3012:        BGP_UPDATE_SOURCE_HELP_STR)
 3013: {
 3014:   return peer_update_source_vty (vty, argv[0], argv[1]);
 3015: }
 3016: 
 3017: DEFUN (no_neighbor_update_source,
 3018:        no_neighbor_update_source_cmd,
 3019:        NO_NEIGHBOR_CMD2 "update-source",
 3020:        NO_STR
 3021:        NEIGHBOR_STR
 3022:        NEIGHBOR_ADDR_STR2
 3023:        "Source of routing updates\n")
 3024: {
 3025:   return peer_update_source_vty (vty, argv[0], NULL);
 3026: }
 3027: 
 3028: static int
 3029: peer_default_originate_set_vty (struct vty *vty, const char *peer_str, 
 3030:                                 afi_t afi, safi_t safi, 
 3031:                                 const char *rmap, int set)
 3032: {
 3033:   int ret;
 3034:   struct peer *peer;
 3035: 
 3036:   peer = peer_and_group_lookup_vty (vty, peer_str);
 3037:   if (! peer)
 3038:     return CMD_WARNING;
 3039: 
 3040:   if (set)
 3041:     ret = peer_default_originate_set (peer, afi, safi, rmap);
 3042:   else
 3043:     ret = peer_default_originate_unset (peer, afi, safi);
 3044: 
 3045:   return bgp_vty_return (vty, ret);
 3046: }
 3047: 
 3048: /* neighbor default-originate. */
 3049: DEFUN (neighbor_default_originate,
 3050:        neighbor_default_originate_cmd,
 3051:        NEIGHBOR_CMD2 "default-originate",
 3052:        NEIGHBOR_STR
 3053:        NEIGHBOR_ADDR_STR2
 3054:        "Originate default route to this neighbor\n")
 3055: {
 3056:   return peer_default_originate_set_vty (vty, argv[0], bgp_node_afi (vty),
 3057: 					 bgp_node_safi (vty), NULL, 1);
 3058: }
 3059: 
 3060: DEFUN (neighbor_default_originate_rmap,
 3061:        neighbor_default_originate_rmap_cmd,
 3062:        NEIGHBOR_CMD2 "default-originate route-map WORD",
 3063:        NEIGHBOR_STR
 3064:        NEIGHBOR_ADDR_STR2
 3065:        "Originate default route to this neighbor\n"
 3066:        "Route-map to specify criteria to originate default\n"
 3067:        "route-map name\n")
 3068: {
 3069:   return peer_default_originate_set_vty (vty, argv[0], bgp_node_afi (vty),
 3070: 					 bgp_node_safi (vty), argv[1], 1);
 3071: }
 3072: 
 3073: DEFUN (no_neighbor_default_originate,
 3074:        no_neighbor_default_originate_cmd,
 3075:        NO_NEIGHBOR_CMD2 "default-originate",
 3076:        NO_STR
 3077:        NEIGHBOR_STR
 3078:        NEIGHBOR_ADDR_STR2
 3079:        "Originate default route to this neighbor\n")
 3080: {
 3081:   return peer_default_originate_set_vty (vty, argv[0], bgp_node_afi (vty),
 3082: 					 bgp_node_safi (vty), NULL, 0);
 3083: }
 3084: 
 3085: ALIAS (no_neighbor_default_originate,
 3086:        no_neighbor_default_originate_rmap_cmd,
 3087:        NO_NEIGHBOR_CMD2 "default-originate route-map WORD",
 3088:        NO_STR
 3089:        NEIGHBOR_STR
 3090:        NEIGHBOR_ADDR_STR2
 3091:        "Originate default route to this neighbor\n"
 3092:        "Route-map to specify criteria to originate default\n"
 3093:        "route-map name\n")
 3094: 
 3095: /* Set neighbor's BGP port.  */
 3096: static int
 3097: peer_port_vty (struct vty *vty, const char *ip_str, int afi, 
 3098:                const char *port_str)
 3099: {
 3100:   struct peer *peer;
 3101:   u_int16_t port;
 3102:   struct servent *sp;
 3103: 
 3104:   peer = peer_lookup_vty (vty, ip_str);
 3105:   if (! peer)
 3106:     return CMD_WARNING;
 3107: 
 3108:   if (! port_str)
 3109:     { 
 3110:       sp = getservbyname ("bgp", "tcp");
 3111:       port = (sp == NULL) ? BGP_PORT_DEFAULT : ntohs (sp->s_port);
 3112:     }
 3113:   else
 3114:     {
 3115:       VTY_GET_INTEGER("port", port, port_str);
 3116:     }
 3117: 
 3118:   peer_port_set (peer, port);
 3119: 
 3120:   return CMD_SUCCESS;
 3121: }
 3122: 
 3123: /* Set specified peer's BGP port.  */
 3124: DEFUN (neighbor_port,
 3125:        neighbor_port_cmd,
 3126:        NEIGHBOR_CMD "port <0-65535>",
 3127:        NEIGHBOR_STR
 3128:        NEIGHBOR_ADDR_STR
 3129:        "Neighbor's BGP port\n"
 3130:        "TCP port number\n")
 3131: {
 3132:   return peer_port_vty (vty, argv[0], AFI_IP, argv[1]);
 3133: }
 3134: 
 3135: DEFUN (no_neighbor_port,
 3136:        no_neighbor_port_cmd,
 3137:        NO_NEIGHBOR_CMD "port",
 3138:        NO_STR
 3139:        NEIGHBOR_STR
 3140:        NEIGHBOR_ADDR_STR
 3141:        "Neighbor's BGP port\n")
 3142: {
 3143:   return peer_port_vty (vty, argv[0], AFI_IP, NULL);
 3144: }
 3145: 
 3146: ALIAS (no_neighbor_port,
 3147:        no_neighbor_port_val_cmd,
 3148:        NO_NEIGHBOR_CMD "port <0-65535>",
 3149:        NO_STR
 3150:        NEIGHBOR_STR
 3151:        NEIGHBOR_ADDR_STR
 3152:        "Neighbor's BGP port\n"
 3153:        "TCP port number\n")
 3154: 
 3155: /* neighbor weight. */
 3156: static int
 3157: peer_weight_set_vty (struct vty *vty, const char *ip_str, 
 3158:                      const char *weight_str)
 3159: {
 3160:   int ret;
 3161:   struct peer *peer;
 3162:   unsigned long weight;
 3163: 
 3164:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3165:   if (! peer)
 3166:     return CMD_WARNING;
 3167: 
 3168:   VTY_GET_INTEGER_RANGE("weight", weight, weight_str, 0, 65535);
 3169: 
 3170:   ret = peer_weight_set (peer, weight);
 3171: 
 3172:   return CMD_SUCCESS;
 3173: }
 3174: 
 3175: static int
 3176: peer_weight_unset_vty (struct vty *vty, const char *ip_str)
 3177: {
 3178:   struct peer *peer;
 3179: 
 3180:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3181:   if (! peer)
 3182:     return CMD_WARNING;
 3183: 
 3184:   peer_weight_unset (peer);
 3185: 
 3186:   return CMD_SUCCESS;
 3187: }
 3188: 
 3189: DEFUN (neighbor_weight,
 3190:        neighbor_weight_cmd,
 3191:        NEIGHBOR_CMD2 "weight <0-65535>",
 3192:        NEIGHBOR_STR
 3193:        NEIGHBOR_ADDR_STR2
 3194:        "Set default weight for routes from this neighbor\n"
 3195:        "default weight\n")
 3196: {
 3197:   return peer_weight_set_vty (vty, argv[0], argv[1]);
 3198: }
 3199: 
 3200: DEFUN (no_neighbor_weight,
 3201:        no_neighbor_weight_cmd,
 3202:        NO_NEIGHBOR_CMD2 "weight",
 3203:        NO_STR
 3204:        NEIGHBOR_STR
 3205:        NEIGHBOR_ADDR_STR2
 3206:        "Set default weight for routes from this neighbor\n")
 3207: {
 3208:   return peer_weight_unset_vty (vty, argv[0]);
 3209: }
 3210: 
 3211: ALIAS (no_neighbor_weight,
 3212:        no_neighbor_weight_val_cmd,
 3213:        NO_NEIGHBOR_CMD2 "weight <0-65535>",
 3214:        NO_STR
 3215:        NEIGHBOR_STR
 3216:        NEIGHBOR_ADDR_STR2
 3217:        "Set default weight for routes from this neighbor\n"
 3218:        "default weight\n")
 3219: 
 3220: /* Override capability negotiation. */
 3221: DEFUN (neighbor_override_capability,
 3222:        neighbor_override_capability_cmd,
 3223:        NEIGHBOR_CMD2 "override-capability",
 3224:        NEIGHBOR_STR
 3225:        NEIGHBOR_ADDR_STR2
 3226:        "Override capability negotiation result\n")
 3227: {
 3228:   return peer_flag_set_vty (vty, argv[0], PEER_FLAG_OVERRIDE_CAPABILITY);
 3229: }
 3230: 
 3231: DEFUN (no_neighbor_override_capability,
 3232:        no_neighbor_override_capability_cmd,
 3233:        NO_NEIGHBOR_CMD2 "override-capability",
 3234:        NO_STR
 3235:        NEIGHBOR_STR
 3236:        NEIGHBOR_ADDR_STR2
 3237:        "Override capability negotiation result\n")
 3238: {
 3239:   return peer_flag_unset_vty (vty, argv[0], PEER_FLAG_OVERRIDE_CAPABILITY);
 3240: }
 3241: 
 3242: DEFUN (neighbor_strict_capability,
 3243:        neighbor_strict_capability_cmd,
 3244:        NEIGHBOR_CMD "strict-capability-match",
 3245:        NEIGHBOR_STR
 3246:        NEIGHBOR_ADDR_STR
 3247:        "Strict capability negotiation match\n")
 3248: {
 3249:   return peer_flag_set_vty (vty, argv[0], PEER_FLAG_STRICT_CAP_MATCH);
 3250: }
 3251: 
 3252: DEFUN (no_neighbor_strict_capability,
 3253:        no_neighbor_strict_capability_cmd,
 3254:        NO_NEIGHBOR_CMD "strict-capability-match",
 3255:        NO_STR
 3256:        NEIGHBOR_STR
 3257:        NEIGHBOR_ADDR_STR
 3258:        "Strict capability negotiation match\n")
 3259: {
 3260:   return peer_flag_unset_vty (vty, argv[0], PEER_FLAG_STRICT_CAP_MATCH);
 3261: }
 3262: 
 3263: static int
 3264: peer_timers_set_vty (struct vty *vty, const char *ip_str, 
 3265:                      const char *keep_str, const char *hold_str)
 3266: {
 3267:   int ret;
 3268:   struct peer *peer;
 3269:   u_int32_t keepalive;
 3270:   u_int32_t holdtime;
 3271: 
 3272:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3273:   if (! peer)
 3274:     return CMD_WARNING;
 3275: 
 3276:   VTY_GET_INTEGER_RANGE ("Keepalive", keepalive, keep_str, 0, 65535);
 3277:   VTY_GET_INTEGER_RANGE ("Holdtime", holdtime, hold_str, 0, 65535);
 3278: 
 3279:   ret = peer_timers_set (peer, keepalive, holdtime);
 3280: 
 3281:   return bgp_vty_return (vty, ret);
 3282: }
 3283: 
 3284: static int
 3285: peer_timers_unset_vty (struct vty *vty, const char *ip_str)
 3286: {
 3287:   int ret;
 3288:   struct peer *peer;
 3289: 
 3290:   peer = peer_lookup_vty (vty, ip_str);
 3291:   if (! peer)
 3292:     return CMD_WARNING;
 3293: 
 3294:   ret = peer_timers_unset (peer);
 3295: 
 3296:   return bgp_vty_return (vty, ret);
 3297: }
 3298: 
 3299: DEFUN (neighbor_timers,
 3300:        neighbor_timers_cmd,
 3301:        NEIGHBOR_CMD2 "timers <0-65535> <0-65535>",
 3302:        NEIGHBOR_STR
 3303:        NEIGHBOR_ADDR_STR2
 3304:        "BGP per neighbor timers\n"
 3305:        "Keepalive interval\n"
 3306:        "Holdtime\n")
 3307: {
 3308:   return peer_timers_set_vty (vty, argv[0], argv[1], argv[2]);
 3309: }
 3310: 
 3311: DEFUN (no_neighbor_timers,
 3312:        no_neighbor_timers_cmd,
 3313:        NO_NEIGHBOR_CMD2 "timers",
 3314:        NO_STR
 3315:        NEIGHBOR_STR
 3316:        NEIGHBOR_ADDR_STR2
 3317:        "BGP per neighbor timers\n")
 3318: {
 3319:   return peer_timers_unset_vty (vty, argv[0]);
 3320: }
 3321: 
 3322: static int
 3323: peer_timers_connect_set_vty (struct vty *vty, const char *ip_str, 
 3324:                              const char *time_str)
 3325: {
 3326:   int ret;
 3327:   struct peer *peer;
 3328:   u_int32_t connect;
 3329: 
 3330:   peer = peer_lookup_vty (vty, ip_str);
 3331:   if (! peer)
 3332:     return CMD_WARNING;
 3333: 
 3334:   VTY_GET_INTEGER_RANGE ("Connect time", connect, time_str, 0, 65535);
 3335: 
 3336:   ret = peer_timers_connect_set (peer, connect);
 3337: 
 3338:   return CMD_SUCCESS;
 3339: }
 3340: 
 3341: static int
 3342: peer_timers_connect_unset_vty (struct vty *vty, const char *ip_str)
 3343: {
 3344:   int ret;
 3345:   struct peer *peer;
 3346: 
 3347:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3348:   if (! peer)
 3349:     return CMD_WARNING;
 3350: 
 3351:   ret = peer_timers_connect_unset (peer);
 3352: 
 3353:   return CMD_SUCCESS;
 3354: }
 3355: 
 3356: DEFUN (neighbor_timers_connect,
 3357:        neighbor_timers_connect_cmd,
 3358:        NEIGHBOR_CMD "timers connect <0-65535>",
 3359:        NEIGHBOR_STR
 3360:        NEIGHBOR_ADDR_STR
 3361:        "BGP per neighbor timers\n"
 3362:        "BGP connect timer\n"
 3363:        "Connect timer\n")
 3364: {
 3365:   return peer_timers_connect_set_vty (vty, argv[0], argv[1]);
 3366: }
 3367: 
 3368: DEFUN (no_neighbor_timers_connect,
 3369:        no_neighbor_timers_connect_cmd,
 3370:        NO_NEIGHBOR_CMD "timers connect",
 3371:        NO_STR
 3372:        NEIGHBOR_STR
 3373:        NEIGHBOR_ADDR_STR
 3374:        "BGP per neighbor timers\n"
 3375:        "BGP connect timer\n")
 3376: {
 3377:   return peer_timers_connect_unset_vty (vty, argv[0]);
 3378: }
 3379: 
 3380: ALIAS (no_neighbor_timers_connect,
 3381:        no_neighbor_timers_connect_val_cmd,
 3382:        NO_NEIGHBOR_CMD "timers connect <0-65535>",
 3383:        NO_STR
 3384:        NEIGHBOR_STR
 3385:        NEIGHBOR_ADDR_STR
 3386:        "BGP per neighbor timers\n"
 3387:        "BGP connect timer\n"
 3388:        "Connect timer\n")
 3389: 
 3390: static int
 3391: peer_advertise_interval_vty (struct vty *vty, const char *ip_str, 
 3392:                              const char *time_str, int set)  
 3393: {
 3394:   int ret;
 3395:   struct peer *peer;
 3396:   u_int32_t routeadv = 0;
 3397: 
 3398:   peer = peer_lookup_vty (vty, ip_str);
 3399:   if (! peer)
 3400:     return CMD_WARNING;
 3401: 
 3402:   if (time_str)
 3403:     VTY_GET_INTEGER_RANGE ("advertise interval", routeadv, time_str, 0, 600);
 3404: 
 3405:   if (set)
 3406:     ret = peer_advertise_interval_set (peer, routeadv);
 3407:   else
 3408:     ret = peer_advertise_interval_unset (peer);
 3409: 
 3410:   return CMD_SUCCESS;
 3411: }
 3412: 
 3413: DEFUN (neighbor_advertise_interval,
 3414:        neighbor_advertise_interval_cmd,
 3415:        NEIGHBOR_CMD "advertisement-interval <0-600>",
 3416:        NEIGHBOR_STR
 3417:        NEIGHBOR_ADDR_STR
 3418:        "Minimum interval between sending BGP routing updates\n"
 3419:        "time in seconds\n")
 3420: {
 3421:   return peer_advertise_interval_vty (vty, argv[0], argv[1], 1);
 3422: }
 3423: 
 3424: DEFUN (no_neighbor_advertise_interval,
 3425:        no_neighbor_advertise_interval_cmd,
 3426:        NO_NEIGHBOR_CMD "advertisement-interval",
 3427:        NO_STR
 3428:        NEIGHBOR_STR
 3429:        NEIGHBOR_ADDR_STR
 3430:        "Minimum interval between sending BGP routing updates\n")
 3431: {
 3432:   return peer_advertise_interval_vty (vty, argv[0], NULL, 0);
 3433: }
 3434: 
 3435: ALIAS (no_neighbor_advertise_interval,
 3436:        no_neighbor_advertise_interval_val_cmd,
 3437:        NO_NEIGHBOR_CMD "advertisement-interval <0-600>",
 3438:        NO_STR
 3439:        NEIGHBOR_STR
 3440:        NEIGHBOR_ADDR_STR
 3441:        "Minimum interval between sending BGP routing updates\n"
 3442:        "time in seconds\n")
 3443: 
 3444: /* neighbor interface */
 3445: static int
 3446: peer_interface_vty (struct vty *vty, const char *ip_str, const char *str)
 3447: {
 3448:   int ret;
 3449:   struct peer *peer;
 3450: 
 3451:   peer = peer_lookup_vty (vty, ip_str);
 3452:   if (! peer)
 3453:     return CMD_WARNING;
 3454: 
 3455:   if (str)
 3456:     ret = peer_interface_set (peer, str);
 3457:   else
 3458:     ret = peer_interface_unset (peer);
 3459: 
 3460:   return CMD_SUCCESS;
 3461: }
 3462: 
 3463: DEFUN (neighbor_interface,
 3464:        neighbor_interface_cmd,
 3465:        NEIGHBOR_CMD "interface WORD",
 3466:        NEIGHBOR_STR
 3467:        NEIGHBOR_ADDR_STR
 3468:        "Interface\n"
 3469:        "Interface name\n")
 3470: {
 3471:   return peer_interface_vty (vty, argv[0], argv[1]);
 3472: }
 3473: 
 3474: DEFUN (no_neighbor_interface,
 3475:        no_neighbor_interface_cmd,
 3476:        NO_NEIGHBOR_CMD "interface WORD",
 3477:        NO_STR
 3478:        NEIGHBOR_STR
 3479:        NEIGHBOR_ADDR_STR
 3480:        "Interface\n"
 3481:        "Interface name\n")
 3482: {
 3483:   return peer_interface_vty (vty, argv[0], NULL);
 3484: }
 3485: 
 3486: /* Set distribute list to the peer. */
 3487: static int
 3488: peer_distribute_set_vty (struct vty *vty, const char *ip_str, 
 3489:                          afi_t afi, safi_t safi,
 3490: 			 const char *name_str, const char *direct_str)
 3491: {
 3492:   int ret;
 3493:   struct peer *peer;
 3494:   int direct = FILTER_IN;
 3495: 
 3496:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3497:   if (! peer)
 3498:     return CMD_WARNING;
 3499: 
 3500:   /* Check filter direction. */
 3501:   if (strncmp (direct_str, "i", 1) == 0)
 3502:     direct = FILTER_IN;
 3503:   else if (strncmp (direct_str, "o", 1) == 0)
 3504:     direct = FILTER_OUT;
 3505: 
 3506:   ret = peer_distribute_set (peer, afi, safi, direct, name_str);
 3507: 
 3508:   return bgp_vty_return (vty, ret);
 3509: }
 3510: 
 3511: static int
 3512: peer_distribute_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3513: 			   safi_t safi, const char *direct_str)
 3514: {
 3515:   int ret;
 3516:   struct peer *peer;
 3517:   int direct = FILTER_IN;
 3518: 
 3519:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3520:   if (! peer)
 3521:     return CMD_WARNING;
 3522: 
 3523:   /* Check filter direction. */
 3524:   if (strncmp (direct_str, "i", 1) == 0)
 3525:     direct = FILTER_IN;
 3526:   else if (strncmp (direct_str, "o", 1) == 0)
 3527:     direct = FILTER_OUT;
 3528: 
 3529:   ret = peer_distribute_unset (peer, afi, safi, direct);
 3530: 
 3531:   return bgp_vty_return (vty, ret);
 3532: }
 3533: 
 3534: DEFUN (neighbor_distribute_list,
 3535:        neighbor_distribute_list_cmd,
 3536:        NEIGHBOR_CMD2 "distribute-list (<1-199>|<1300-2699>|WORD) (in|out)",
 3537:        NEIGHBOR_STR
 3538:        NEIGHBOR_ADDR_STR2
 3539:        "Filter updates to/from this neighbor\n"
 3540:        "IP access-list number\n"
 3541:        "IP access-list number (expanded range)\n"
 3542:        "IP Access-list name\n"
 3543:        "Filter incoming updates\n"
 3544:        "Filter outgoing updates\n")
 3545: {
 3546:   return peer_distribute_set_vty (vty, argv[0], bgp_node_afi (vty),
 3547: 				  bgp_node_safi (vty), argv[1], argv[2]);
 3548: }
 3549: 
 3550: DEFUN (no_neighbor_distribute_list,
 3551:        no_neighbor_distribute_list_cmd,
 3552:        NO_NEIGHBOR_CMD2 "distribute-list (<1-199>|<1300-2699>|WORD) (in|out)",
 3553:        NO_STR
 3554:        NEIGHBOR_STR
 3555:        NEIGHBOR_ADDR_STR2
 3556:        "Filter updates to/from this neighbor\n"
 3557:        "IP access-list number\n"
 3558:        "IP access-list number (expanded range)\n"
 3559:        "IP Access-list name\n"
 3560:        "Filter incoming updates\n"
 3561:        "Filter outgoing updates\n")
 3562: {
 3563:   return peer_distribute_unset_vty (vty, argv[0], bgp_node_afi (vty),
 3564: 				    bgp_node_safi (vty), argv[2]);
 3565: }
 3566: 
 3567: /* Set prefix list to the peer. */
 3568: static int
 3569: peer_prefix_list_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3570: 			  safi_t safi, const char *name_str, 
 3571:                           const char *direct_str)
 3572: {
 3573:   int ret;
 3574:   struct peer *peer;
 3575:   int direct = FILTER_IN;
 3576: 
 3577:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3578:   if (! peer)
 3579:     return CMD_WARNING;
 3580: 
 3581:   /* Check filter direction. */
 3582:   if (strncmp (direct_str, "i", 1) == 0)
 3583:     direct = FILTER_IN;
 3584:   else if (strncmp (direct_str, "o", 1) == 0)
 3585:     direct = FILTER_OUT;
 3586: 
 3587:   ret = peer_prefix_list_set (peer, afi, safi, direct, name_str);
 3588: 
 3589:   return bgp_vty_return (vty, ret);
 3590: }
 3591: 
 3592: static int
 3593: peer_prefix_list_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3594: 			    safi_t safi, const char *direct_str)
 3595: {
 3596:   int ret;
 3597:   struct peer *peer;
 3598:   int direct = FILTER_IN;
 3599: 
 3600:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3601:   if (! peer)
 3602:     return CMD_WARNING;
 3603:   
 3604:   /* Check filter direction. */
 3605:   if (strncmp (direct_str, "i", 1) == 0)
 3606:     direct = FILTER_IN;
 3607:   else if (strncmp (direct_str, "o", 1) == 0)
 3608:     direct = FILTER_OUT;
 3609: 
 3610:   ret = peer_prefix_list_unset (peer, afi, safi, direct);
 3611: 
 3612:   return bgp_vty_return (vty, ret);
 3613: }
 3614: 
 3615: DEFUN (neighbor_prefix_list,
 3616:        neighbor_prefix_list_cmd,
 3617:        NEIGHBOR_CMD2 "prefix-list WORD (in|out)",
 3618:        NEIGHBOR_STR
 3619:        NEIGHBOR_ADDR_STR2
 3620:        "Filter updates to/from this neighbor\n"
 3621:        "Name of a prefix list\n"
 3622:        "Filter incoming updates\n"
 3623:        "Filter outgoing updates\n")
 3624: {
 3625:   return peer_prefix_list_set_vty (vty, argv[0], bgp_node_afi (vty),
 3626: 				   bgp_node_safi (vty), argv[1], argv[2]);
 3627: }
 3628: 
 3629: DEFUN (no_neighbor_prefix_list,
 3630:        no_neighbor_prefix_list_cmd,
 3631:        NO_NEIGHBOR_CMD2 "prefix-list WORD (in|out)",
 3632:        NO_STR
 3633:        NEIGHBOR_STR
 3634:        NEIGHBOR_ADDR_STR2
 3635:        "Filter updates to/from this neighbor\n"
 3636:        "Name of a prefix list\n"
 3637:        "Filter incoming updates\n"
 3638:        "Filter outgoing updates\n")
 3639: {
 3640:   return peer_prefix_list_unset_vty (vty, argv[0], bgp_node_afi (vty),
 3641: 				     bgp_node_safi (vty), argv[2]);
 3642: }
 3643: 
 3644: static int
 3645: peer_aslist_set_vty (struct vty *vty, const char *ip_str, 
 3646:                      afi_t afi, safi_t safi,
 3647: 		     const char *name_str, const char *direct_str)
 3648: {
 3649:   int ret;
 3650:   struct peer *peer;
 3651:   int direct = FILTER_IN;
 3652: 
 3653:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3654:   if (! peer)
 3655:     return CMD_WARNING;
 3656: 
 3657:   /* Check filter direction. */
 3658:   if (strncmp (direct_str, "i", 1) == 0)
 3659:     direct = FILTER_IN;
 3660:   else if (strncmp (direct_str, "o", 1) == 0)
 3661:     direct = FILTER_OUT;
 3662: 
 3663:   ret = peer_aslist_set (peer, afi, safi, direct, name_str);
 3664: 
 3665:   return bgp_vty_return (vty, ret);
 3666: }
 3667: 
 3668: static int
 3669: peer_aslist_unset_vty (struct vty *vty, const char *ip_str, 
 3670:                        afi_t afi, safi_t safi,
 3671: 		       const char *direct_str)
 3672: {
 3673:   int ret;
 3674:   struct peer *peer;
 3675:   int direct = FILTER_IN;
 3676: 
 3677:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3678:   if (! peer)
 3679:     return CMD_WARNING;
 3680: 
 3681:   /* Check filter direction. */
 3682:   if (strncmp (direct_str, "i", 1) == 0)
 3683:     direct = FILTER_IN;
 3684:   else if (strncmp (direct_str, "o", 1) == 0)
 3685:     direct = FILTER_OUT;
 3686: 
 3687:   ret = peer_aslist_unset (peer, afi, safi, direct);
 3688: 
 3689:   return bgp_vty_return (vty, ret);
 3690: }
 3691: 
 3692: DEFUN (neighbor_filter_list,
 3693:        neighbor_filter_list_cmd,
 3694:        NEIGHBOR_CMD2 "filter-list WORD (in|out)",
 3695:        NEIGHBOR_STR
 3696:        NEIGHBOR_ADDR_STR2
 3697:        "Establish BGP filters\n"
 3698:        "AS path access-list name\n"
 3699:        "Filter incoming routes\n"
 3700:        "Filter outgoing routes\n")
 3701: {
 3702:   return peer_aslist_set_vty (vty, argv[0], bgp_node_afi (vty),
 3703: 			      bgp_node_safi (vty), argv[1], argv[2]);
 3704: }
 3705: 
 3706: DEFUN (no_neighbor_filter_list,
 3707:        no_neighbor_filter_list_cmd,
 3708:        NO_NEIGHBOR_CMD2 "filter-list WORD (in|out)",
 3709:        NO_STR
 3710:        NEIGHBOR_STR
 3711:        NEIGHBOR_ADDR_STR2
 3712:        "Establish BGP filters\n"
 3713:        "AS path access-list name\n"
 3714:        "Filter incoming routes\n"
 3715:        "Filter outgoing routes\n")
 3716: {
 3717:   return peer_aslist_unset_vty (vty, argv[0], bgp_node_afi (vty),
 3718: 				bgp_node_safi (vty), argv[2]);
 3719: }
 3720: 
 3721: /* Set route-map to the peer. */
 3722: static int
 3723: peer_route_map_set_vty (struct vty *vty, const char *ip_str, 
 3724:                         afi_t afi, safi_t safi,
 3725: 			const char *name_str, const char *direct_str)
 3726: {
 3727:   int ret;
 3728:   struct peer *peer;
 3729:   int direct = RMAP_IN;
 3730: 
 3731:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3732:   if (! peer)
 3733:     return CMD_WARNING;
 3734: 
 3735:   /* Check filter direction. */
 3736:   if (strncmp (direct_str, "in", 2) == 0)
 3737:     direct = RMAP_IN;
 3738:   else if (strncmp (direct_str, "o", 1) == 0)
 3739:     direct = RMAP_OUT;
 3740:   else if (strncmp (direct_str, "im", 2) == 0)
 3741:     direct = RMAP_IMPORT;
 3742:   else if (strncmp (direct_str, "e", 1) == 0)
 3743:     direct = RMAP_EXPORT;
 3744: 
 3745:   ret = peer_route_map_set (peer, afi, safi, direct, name_str);
 3746: 
 3747:   return bgp_vty_return (vty, ret);
 3748: }
 3749: 
 3750: static int
 3751: peer_route_map_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3752: 			  safi_t safi, const char *direct_str)
 3753: {
 3754:   int ret;
 3755:   struct peer *peer;
 3756:   int direct = RMAP_IN;
 3757: 
 3758:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3759:   if (! peer)
 3760:     return CMD_WARNING;
 3761: 
 3762:   /* Check filter direction. */
 3763:   if (strncmp (direct_str, "in", 2) == 0)
 3764:     direct = RMAP_IN;
 3765:   else if (strncmp (direct_str, "o", 1) == 0)
 3766:     direct = RMAP_OUT;
 3767:   else if (strncmp (direct_str, "im", 2) == 0)
 3768:     direct = RMAP_IMPORT;
 3769:   else if (strncmp (direct_str, "e", 1) == 0)
 3770:     direct = RMAP_EXPORT;
 3771: 
 3772:   ret = peer_route_map_unset (peer, afi, safi, direct);
 3773: 
 3774:   return bgp_vty_return (vty, ret);
 3775: }
 3776: 
 3777: DEFUN (neighbor_route_map,
 3778:        neighbor_route_map_cmd,
 3779:        NEIGHBOR_CMD2 "route-map WORD (in|out|import|export)",
 3780:        NEIGHBOR_STR
 3781:        NEIGHBOR_ADDR_STR2
 3782:        "Apply route map to neighbor\n"
 3783:        "Name of route map\n"
 3784:        "Apply map to incoming routes\n"
 3785:        "Apply map to outbound routes\n"
 3786:        "Apply map to routes going into a Route-Server client's table\n"
 3787:        "Apply map to routes coming from a Route-Server client")
 3788: {
 3789:   return peer_route_map_set_vty (vty, argv[0], bgp_node_afi (vty),
 3790: 				 bgp_node_safi (vty), argv[1], argv[2]);
 3791: }
 3792: 
 3793: DEFUN (no_neighbor_route_map,
 3794:        no_neighbor_route_map_cmd,
 3795:        NO_NEIGHBOR_CMD2 "route-map WORD (in|out|import|export)",
 3796:        NO_STR
 3797:        NEIGHBOR_STR
 3798:        NEIGHBOR_ADDR_STR2
 3799:        "Apply route map to neighbor\n"
 3800:        "Name of route map\n"
 3801:        "Apply map to incoming routes\n"
 3802:        "Apply map to outbound routes\n"
 3803:        "Apply map to routes going into a Route-Server client's table\n"
 3804:        "Apply map to routes coming from a Route-Server client")
 3805: {
 3806:   return peer_route_map_unset_vty (vty, argv[0], bgp_node_afi (vty),
 3807: 				   bgp_node_safi (vty), argv[2]);
 3808: }
 3809: 
 3810: /* Set unsuppress-map to the peer. */
 3811: static int
 3812: peer_unsuppress_map_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3813: 			     safi_t safi, const char *name_str)
 3814: {
 3815:   int ret;
 3816:   struct peer *peer;
 3817: 
 3818:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3819:   if (! peer)
 3820:     return CMD_WARNING;
 3821: 
 3822:   ret = peer_unsuppress_map_set (peer, afi, safi, name_str);
 3823: 
 3824:   return bgp_vty_return (vty, ret);
 3825: }
 3826: 
 3827: /* Unset route-map from the peer. */
 3828: static int
 3829: peer_unsuppress_map_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3830: 			       safi_t safi)
 3831: {
 3832:   int ret;
 3833:   struct peer *peer;
 3834: 
 3835:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3836:   if (! peer)
 3837:     return CMD_WARNING;
 3838: 
 3839:   ret = peer_unsuppress_map_unset (peer, afi, safi);
 3840: 
 3841:   return bgp_vty_return (vty, ret);
 3842: }
 3843: 
 3844: DEFUN (neighbor_unsuppress_map,
 3845:        neighbor_unsuppress_map_cmd,
 3846:        NEIGHBOR_CMD2 "unsuppress-map WORD",
 3847:        NEIGHBOR_STR
 3848:        NEIGHBOR_ADDR_STR2
 3849:        "Route-map to selectively unsuppress suppressed routes\n"
 3850:        "Name of route map\n")
 3851: {
 3852:   return peer_unsuppress_map_set_vty (vty, argv[0], bgp_node_afi (vty),
 3853: 				      bgp_node_safi (vty), argv[1]);
 3854: }
 3855: 
 3856: DEFUN (no_neighbor_unsuppress_map,
 3857:        no_neighbor_unsuppress_map_cmd,
 3858:        NO_NEIGHBOR_CMD2 "unsuppress-map WORD",
 3859:        NO_STR
 3860:        NEIGHBOR_STR
 3861:        NEIGHBOR_ADDR_STR2
 3862:        "Route-map to selectively unsuppress suppressed routes\n"
 3863:        "Name of route map\n")
 3864: {
 3865:   return peer_unsuppress_map_unset_vty (vty, argv[0], bgp_node_afi (vty),
 3866: 					bgp_node_safi (vty));
 3867: }
 3868: 
 3869: static int
 3870: peer_maximum_prefix_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3871: 			     safi_t safi, const char *num_str,  
 3872: 			     const char *threshold_str, int warning,
 3873: 			     const char *restart_str)
 3874: {
 3875:   int ret;
 3876:   struct peer *peer;
 3877:   u_int32_t max;
 3878:   u_char threshold;
 3879:   u_int16_t restart;
 3880: 
 3881:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3882:   if (! peer)
 3883:     return CMD_WARNING;
 3884: 
 3885:   VTY_GET_INTEGER ("maximum number", max, num_str);
 3886:   if (threshold_str)
 3887:     threshold = atoi (threshold_str);
 3888:   else
 3889:     threshold = MAXIMUM_PREFIX_THRESHOLD_DEFAULT;
 3890: 
 3891:   if (restart_str)
 3892:     restart = atoi (restart_str);
 3893:   else
 3894:     restart = 0;
 3895: 
 3896:   ret = peer_maximum_prefix_set (peer, afi, safi, max, threshold, warning, restart);
 3897: 
 3898:   return bgp_vty_return (vty, ret);
 3899: }
 3900: 
 3901: static int
 3902: peer_maximum_prefix_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
 3903: 			       safi_t safi)
 3904: {
 3905:   int ret;
 3906:   struct peer *peer;
 3907: 
 3908:   peer = peer_and_group_lookup_vty (vty, ip_str);
 3909:   if (! peer)
 3910:     return CMD_WARNING;
 3911: 
 3912:   ret = peer_maximum_prefix_unset (peer, afi, safi);
 3913: 
 3914:   return bgp_vty_return (vty, ret);
 3915: }
 3916: 
 3917: /* Maximum number of prefix configuration.  prefix count is different
 3918:    for each peer configuration.  So this configuration can be set for
 3919:    each peer configuration. */
 3920: DEFUN (neighbor_maximum_prefix,
 3921:        neighbor_maximum_prefix_cmd,
 3922:        NEIGHBOR_CMD2 "maximum-prefix <1-4294967295>",
 3923:        NEIGHBOR_STR
 3924:        NEIGHBOR_ADDR_STR2
 3925:        "Maximum number of prefix accept from this peer\n"
 3926:        "maximum no. of prefix limit\n")
 3927: {
 3928:   return peer_maximum_prefix_set_vty (vty, argv[0], bgp_node_afi (vty),
 3929: 				      bgp_node_safi (vty), argv[1], NULL, 0,
 3930: 				      NULL);
 3931: }
 3932: 
 3933: DEFUN (neighbor_maximum_prefix_threshold,
 3934:        neighbor_maximum_prefix_threshold_cmd,
 3935:        NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> <1-100>",
 3936:        NEIGHBOR_STR
 3937:        NEIGHBOR_ADDR_STR2
 3938:        "Maximum number of prefix accept from this peer\n"
 3939:        "maximum no. of prefix limit\n"
 3940:        "Threshold value (%) at which to generate a warning msg\n")
 3941: {
 3942:   return peer_maximum_prefix_set_vty (vty, argv[0], bgp_node_afi (vty),
 3943: 				      bgp_node_safi (vty), argv[1], argv[2], 0,
 3944: 				      NULL);
 3945: }
 3946: 
 3947: DEFUN (neighbor_maximum_prefix_warning,
 3948:        neighbor_maximum_prefix_warning_cmd,
 3949:        NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> warning-only",
 3950:        NEIGHBOR_STR
 3951:        NEIGHBOR_ADDR_STR2
 3952:        "Maximum number of prefix accept from this peer\n"
 3953:        "maximum no. of prefix limit\n"
 3954:        "Only give warning message when limit is exceeded\n")
 3955: {
 3956:   return peer_maximum_prefix_set_vty (vty, argv[0], bgp_node_afi (vty),
 3957: 				      bgp_node_safi (vty), argv[1], NULL, 1,
 3958: 				      NULL);
 3959: }
 3960: 
 3961: DEFUN (neighbor_maximum_prefix_threshold_warning,
 3962:        neighbor_maximum_prefix_threshold_warning_cmd,
 3963:        NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> <1-100> warning-only",
 3964:        NEIGHBOR_STR
 3965:        NEIGHBOR_ADDR_STR2
 3966:        "Maximum number of prefix accept from this peer\n"
 3967:        "maximum no. of prefix limit\n"
 3968:        "Threshold value (%) at which to generate a warning msg\n"
 3969:        "Only give warning message when limit is exceeded\n")
 3970: {
 3971:   return peer_maximum_prefix_set_vty (vty, argv[0], bgp_node_afi (vty),
 3972: 				      bgp_node_safi (vty), argv[1], argv[2], 1, NULL);
 3973: }
 3974: 
 3975: DEFUN (neighbor_maximum_prefix_restart,
 3976:        neighbor_maximum_prefix_restart_cmd,
 3977:        NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> restart <1-65535>",
 3978:        NEIGHBOR_STR
 3979:        NEIGHBOR_ADDR_STR2
 3980:        "Maximum number of prefix accept from this peer\n"
 3981:        "maximum no. of prefix limit\n"
 3982:        "Restart bgp connection after limit is exceeded\n"
 3983:        "Restart interval in minutes")
 3984: {
 3985:   return peer_maximum_prefix_set_vty (vty, argv[0], bgp_node_afi (vty),
 3986: 				      bgp_node_safi (vty), argv[1], NULL, 0, argv[2]);
 3987: }
 3988: 
 3989: DEFUN (neighbor_maximum_prefix_threshold_restart,
 3990:        neighbor_maximum_prefix_threshold_restart_cmd,
 3991:        NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> <1-100> restart <1-65535>",
 3992:        NEIGHBOR_STR
 3993:        NEIGHBOR_ADDR_STR2
 3994:        "Maximum number of prefix accept from this peer\n"
 3995:        "maximum no. of prefix limit\n"
 3996:        "Threshold value (%) at which to generate a warning msg\n"
 3997:        "Restart bgp connection after limit is exceeded\n"
 3998:        "Restart interval in minutes")
 3999: {
 4000:   return peer_maximum_prefix_set_vty (vty, argv[0], bgp_node_afi (vty),
 4001: 				      bgp_node_safi (vty), argv[1], argv[2], 0, argv[3]);
 4002: }
 4003: 
 4004: DEFUN (no_neighbor_maximum_prefix,
 4005:        no_neighbor_maximum_prefix_cmd,
 4006:        NO_NEIGHBOR_CMD2 "maximum-prefix",
 4007:        NO_STR
 4008:        NEIGHBOR_STR
 4009:        NEIGHBOR_ADDR_STR2
 4010:        "Maximum number of prefix accept from this peer\n")
 4011: {
 4012:   return peer_maximum_prefix_unset_vty (vty, argv[0], bgp_node_afi (vty),
 4013: 					bgp_node_safi (vty));
 4014: }
 4015:  
 4016: ALIAS (no_neighbor_maximum_prefix,
 4017:        no_neighbor_maximum_prefix_val_cmd,
 4018:        NO_NEIGHBOR_CMD2 "maximum-prefix <1-4294967295>",
 4019:        NO_STR
 4020:        NEIGHBOR_STR
 4021:        NEIGHBOR_ADDR_STR2
 4022:        "Maximum number of prefix accept from this peer\n"
 4023:        "maximum no. of prefix limit\n")
 4024: 
 4025: ALIAS (no_neighbor_maximum_prefix,
 4026:        no_neighbor_maximum_prefix_threshold_cmd,
 4027:        NO_NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> warning-only",
 4028:        NO_STR
 4029:        NEIGHBOR_STR
 4030:        NEIGHBOR_ADDR_STR2
 4031:        "Maximum number of prefix accept from this peer\n"
 4032:        "maximum no. of prefix limit\n"
 4033:        "Threshold value (%) at which to generate a warning msg\n")
 4034: 
 4035: ALIAS (no_neighbor_maximum_prefix,
 4036:        no_neighbor_maximum_prefix_warning_cmd,
 4037:        NO_NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> warning-only",
 4038:        NO_STR
 4039:        NEIGHBOR_STR
 4040:        NEIGHBOR_ADDR_STR2
 4041:        "Maximum number of prefix accept from this peer\n"
 4042:        "maximum no. of prefix limit\n"
 4043:        "Only give warning message when limit is exceeded\n")
 4044: 
 4045: ALIAS (no_neighbor_maximum_prefix,
 4046:        no_neighbor_maximum_prefix_threshold_warning_cmd,
 4047:        NO_NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> <1-100> warning-only",
 4048:        NO_STR
 4049:        NEIGHBOR_STR
 4050:        NEIGHBOR_ADDR_STR2
 4051:        "Maximum number of prefix accept from this peer\n"
 4052:        "maximum no. of prefix limit\n"
 4053:        "Threshold value (%) at which to generate a warning msg\n"
 4054:        "Only give warning message when limit is exceeded\n")
 4055: 
 4056: ALIAS (no_neighbor_maximum_prefix,
 4057:        no_neighbor_maximum_prefix_restart_cmd,
 4058:        NO_NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> restart <1-65535>",
 4059:        NO_STR
 4060:        NEIGHBOR_STR
 4061:        NEIGHBOR_ADDR_STR2
 4062:        "Maximum number of prefix accept from this peer\n"
 4063:        "maximum no. of prefix limit\n"
 4064:        "Restart bgp connection after limit is exceeded\n"
 4065:        "Restart interval in minutes")
 4066: 
 4067: ALIAS (no_neighbor_maximum_prefix,
 4068:        no_neighbor_maximum_prefix_threshold_restart_cmd,
 4069:        NO_NEIGHBOR_CMD2 "maximum-prefix <1-4294967295> <1-100> restart <1-65535>",
 4070:        NO_STR
 4071:        NEIGHBOR_STR
 4072:        NEIGHBOR_ADDR_STR2
 4073:        "Maximum number of prefix accept from this peer\n"
 4074:        "maximum no. of prefix limit\n"
 4075:        "Threshold value (%) at which to generate a warning msg\n"
 4076:        "Restart bgp connection after limit is exceeded\n"
 4077:        "Restart interval in minutes")
 4078: 
 4079: /* "neighbor allowas-in" */
 4080: DEFUN (neighbor_allowas_in,
 4081:        neighbor_allowas_in_cmd,
 4082:        NEIGHBOR_CMD2 "allowas-in",
 4083:        NEIGHBOR_STR
 4084:        NEIGHBOR_ADDR_STR2
 4085:        "Accept as-path with my AS present in it\n")
 4086: {
 4087:   int ret;
 4088:   struct peer *peer;
 4089:   unsigned int allow_num;
 4090: 
 4091:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 4092:   if (! peer)
 4093:     return CMD_WARNING;
 4094: 
 4095:   if (argc == 1)
 4096:     allow_num = 3;
 4097:   else
 4098:     VTY_GET_INTEGER_RANGE ("AS number", allow_num, argv[1], 1, 10);
 4099: 
 4100:   ret = peer_allowas_in_set (peer, bgp_node_afi (vty), bgp_node_safi (vty),
 4101: 			     allow_num);
 4102: 
 4103:   return bgp_vty_return (vty, ret);
 4104: }
 4105: 
 4106: ALIAS (neighbor_allowas_in,
 4107:        neighbor_allowas_in_arg_cmd,
 4108:        NEIGHBOR_CMD2 "allowas-in <1-10>",
 4109:        NEIGHBOR_STR
 4110:        NEIGHBOR_ADDR_STR2
 4111:        "Accept as-path with my AS present in it\n"
 4112:        "Number of occurances of AS number\n")
 4113: 
 4114: DEFUN (no_neighbor_allowas_in,
 4115:        no_neighbor_allowas_in_cmd,
 4116:        NO_NEIGHBOR_CMD2 "allowas-in",
 4117:        NO_STR
 4118:        NEIGHBOR_STR
 4119:        NEIGHBOR_ADDR_STR2
 4120:        "allow local ASN appears in aspath attribute\n")
 4121: {
 4122:   int ret;
 4123:   struct peer *peer;
 4124: 
 4125:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 4126:   if (! peer)
 4127:     return CMD_WARNING;
 4128: 
 4129:   ret = peer_allowas_in_unset (peer, bgp_node_afi (vty), bgp_node_safi (vty));
 4130: 
 4131:   return bgp_vty_return (vty, ret);
 4132: }
 4133: 
 4134: DEFUN (neighbor_ttl_security,
 4135:        neighbor_ttl_security_cmd,
 4136:        NEIGHBOR_CMD2 "ttl-security hops <1-254>",
 4137:        NEIGHBOR_STR
 4138:        NEIGHBOR_ADDR_STR2
 4139:        "Specify the maximum number of hops to the BGP peer\n")
 4140: {
 4141:   struct peer *peer;
 4142:   int gtsm_hops;
 4143: 
 4144:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 4145:   if (! peer)
 4146:     return CMD_WARNING;
 4147:     
 4148:   VTY_GET_INTEGER_RANGE ("", gtsm_hops, argv[1], 1, 254);
 4149: 
 4150:   return bgp_vty_return (vty, peer_ttl_security_hops_set (peer, gtsm_hops));
 4151: }
 4152: 
 4153: DEFUN (no_neighbor_ttl_security,
 4154:        no_neighbor_ttl_security_cmd,
 4155:        NO_NEIGHBOR_CMD2 "ttl-security hops <1-254>",
 4156:        NO_STR
 4157:        NEIGHBOR_STR
 4158:        NEIGHBOR_ADDR_STR2
 4159:        "Specify the maximum number of hops to the BGP peer\n")
 4160: {
 4161:   struct peer *peer;
 4162: 
 4163:   peer = peer_and_group_lookup_vty (vty, argv[0]);
 4164:   if (! peer)
 4165:     return CMD_WARNING;
 4166: 
 4167:   return bgp_vty_return (vty, peer_ttl_security_hops_unset (peer));
 4168: }
 4169: 
 4170: /* Address family configuration.  */
 4171: DEFUN (address_family_ipv4,
 4172:        address_family_ipv4_cmd,
 4173:        "address-family ipv4",
 4174:        "Enter Address Family command mode\n"
 4175:        "Address family\n")
 4176: {
 4177:   vty->node = BGP_IPV4_NODE;
 4178:   return CMD_SUCCESS;
 4179: }
 4180: 
 4181: DEFUN (address_family_ipv4_safi,
 4182:        address_family_ipv4_safi_cmd,
 4183:        "address-family ipv4 (unicast|multicast)",
 4184:        "Enter Address Family command mode\n"
 4185:        "Address family\n"
 4186:        "Address Family modifier\n"
 4187:        "Address Family modifier\n")
 4188: {
 4189:   if (strncmp (argv[0], "m", 1) == 0)
 4190:     vty->node = BGP_IPV4M_NODE;
 4191:   else
 4192:     vty->node = BGP_IPV4_NODE;
 4193: 
 4194:   return CMD_SUCCESS;
 4195: }
 4196: 
 4197: DEFUN (address_family_ipv6,
 4198:        address_family_ipv6_cmd,
 4199:        "address-family ipv6",
 4200:        "Enter Address Family command mode\n"
 4201:        "Address family\n")
 4202: {
 4203:   vty->node = BGP_IPV6_NODE;
 4204:   return CMD_SUCCESS;
 4205: }
 4206: 
 4207: DEFUN (address_family_ipv6_safi,
 4208:        address_family_ipv6_safi_cmd,
 4209:        "address-family ipv6 (unicast|multicast)",
 4210:        "Enter Address Family command mode\n"
 4211:        "Address family\n"
 4212:        "Address Family modifier\n"
 4213:        "Address Family modifier\n")
 4214: {
 4215:   if (strncmp (argv[0], "m", 1) == 0)
 4216:     vty->node = BGP_IPV6M_NODE;
 4217:   else
 4218:     vty->node = BGP_IPV6_NODE;
 4219: 
 4220:   return CMD_SUCCESS;
 4221: }
 4222: 
 4223: DEFUN (address_family_vpnv4,
 4224:        address_family_vpnv4_cmd,
 4225:        "address-family vpnv4",
 4226:        "Enter Address Family command mode\n"
 4227:        "Address family\n")
 4228: {
 4229:   vty->node = BGP_VPNV4_NODE;
 4230:   return CMD_SUCCESS;
 4231: }
 4232: 
 4233: ALIAS (address_family_vpnv4,
 4234:        address_family_vpnv4_unicast_cmd,
 4235:        "address-family vpnv4 unicast",
 4236:        "Enter Address Family command mode\n"
 4237:        "Address family\n"
 4238:        "Address Family Modifier\n")
 4239: 
 4240: DEFUN (exit_address_family,
 4241:        exit_address_family_cmd,
 4242:        "exit-address-family",
 4243:        "Exit from Address Family configuration mode\n")
 4244: {
 4245:   if (vty->node == BGP_IPV4_NODE
 4246:       || vty->node == BGP_IPV4M_NODE
 4247:       || vty->node == BGP_VPNV4_NODE
 4248:       || vty->node == BGP_IPV6_NODE
 4249:       || vty->node == BGP_IPV6M_NODE)
 4250:     vty->node = BGP_NODE;
 4251:   return CMD_SUCCESS;
 4252: }
 4253: 
 4254: /* BGP clear sort. */
 4255: enum clear_sort
 4256: {
 4257:   clear_all,
 4258:   clear_peer,
 4259:   clear_group,
 4260:   clear_external,
 4261:   clear_as
 4262: };
 4263: 
 4264: static void
 4265: bgp_clear_vty_error (struct vty *vty, struct peer *peer, afi_t afi,
 4266: 		     safi_t safi, int error)
 4267: {
 4268:   switch (error)
 4269:     {
 4270:     case BGP_ERR_AF_UNCONFIGURED:
 4271:       vty_out (vty,
 4272: 	       "%%BGP: Enable %s %s address family for the neighbor %s%s",
 4273: 	       afi == AFI_IP6 ? "IPv6" : safi == SAFI_MPLS_VPN ? "VPNv4" : "IPv4",
 4274: 	       safi == SAFI_MULTICAST ? "Multicast" : "Unicast",
 4275: 	       peer->host, VTY_NEWLINE);
 4276:       break;
 4277:     case BGP_ERR_SOFT_RECONFIG_UNCONFIGURED:
 4278:       vty_out (vty, "%%BGP: Inbound soft reconfig for %s not possible as it%s      has neither refresh capability, nor inbound soft reconfig%s", peer->host, VTY_NEWLINE, VTY_NEWLINE);
 4279:       break;
 4280:     default:
 4281:       break;
 4282:     }
 4283: }
 4284: 
 4285: /* `clear ip bgp' functions. */
 4286: static int
 4287: bgp_clear (struct vty *vty, struct bgp *bgp,  afi_t afi, safi_t safi,
 4288:            enum clear_sort sort,enum bgp_clear_type stype, const char *arg)
 4289: {
 4290:   int ret;
 4291:   struct peer *peer;
 4292:   struct listnode *node, *nnode;
 4293: 
 4294:   /* Clear all neighbors. */
 4295:   if (sort == clear_all)
 4296:     {
 4297:       for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 4298: 	{
 4299: 	  if (stype == BGP_CLEAR_SOFT_NONE)
 4300: 	    ret = peer_clear (peer);
 4301: 	  else
 4302: 	    ret = peer_clear_soft (peer, afi, safi, stype);
 4303: 
 4304: 	  if (ret < 0)
 4305: 	    bgp_clear_vty_error (vty, peer, afi, safi, ret);
 4306: 	}
 4307:       return CMD_SUCCESS;
 4308:     }
 4309: 
 4310:   /* Clear specified neighbors. */
 4311:   if (sort == clear_peer)
 4312:     {
 4313:       union sockunion su;
 4314:       int ret;
 4315: 
 4316:       /* Make sockunion for lookup. */
 4317:       ret = str2sockunion (arg, &su);
 4318:       if (ret < 0)
 4319: 	{
 4320: 	  vty_out (vty, "Malformed address: %s%s", arg, VTY_NEWLINE);
 4321: 	  return CMD_WARNING;
 4322: 	}
 4323:       peer = peer_lookup (bgp, &su);
 4324:       if (! peer)
 4325: 	{
 4326: 	  vty_out (vty, "%%BGP: Unknown neighbor - \"%s\"%s", arg, VTY_NEWLINE);
 4327: 	  return CMD_WARNING;
 4328: 	}
 4329: 
 4330:       if (stype == BGP_CLEAR_SOFT_NONE)
 4331: 	ret = peer_clear (peer);
 4332:       else
 4333: 	ret = peer_clear_soft (peer, afi, safi, stype);
 4334: 
 4335:       if (ret < 0)
 4336: 	bgp_clear_vty_error (vty, peer, afi, safi, ret);
 4337: 
 4338:       return CMD_SUCCESS;
 4339:     }
 4340: 
 4341:   /* Clear all peer-group members. */
 4342:   if (sort == clear_group)
 4343:     {
 4344:       struct peer_group *group;
 4345: 
 4346:       group = peer_group_lookup (bgp, arg);
 4347:       if (! group)
 4348: 	{
 4349: 	  vty_out (vty, "%%BGP: No such peer-group %s%s", arg, VTY_NEWLINE);
 4350: 	  return CMD_WARNING; 
 4351: 	}
 4352: 
 4353:       for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
 4354: 	{
 4355: 	  if (stype == BGP_CLEAR_SOFT_NONE)
 4356: 	    {
 4357: 	      ret = peer_clear (peer);
 4358: 	      continue;
 4359: 	    }
 4360: 
 4361: 	  if (! peer->af_group[afi][safi])
 4362: 	    continue;
 4363: 
 4364: 	  ret = peer_clear_soft (peer, afi, safi, stype);
 4365: 
 4366: 	  if (ret < 0)
 4367: 	    bgp_clear_vty_error (vty, peer, afi, safi, ret);
 4368: 	}
 4369:       return CMD_SUCCESS;
 4370:     }
 4371: 
 4372:   if (sort == clear_external)
 4373:     {
 4374:       for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 4375: 	{
 4376: 	  if (peer->sort == BGP_PEER_IBGP)
 4377: 	    continue;
 4378: 
 4379: 	  if (stype == BGP_CLEAR_SOFT_NONE)
 4380: 	    ret = peer_clear (peer);
 4381: 	  else
 4382: 	    ret = peer_clear_soft (peer, afi, safi, stype);
 4383: 
 4384: 	  if (ret < 0)
 4385: 	    bgp_clear_vty_error (vty, peer, afi, safi, ret);
 4386: 	}
 4387:       return CMD_SUCCESS;
 4388:     }
 4389: 
 4390:   if (sort == clear_as)
 4391:     {
 4392:       as_t as;
 4393:       int find = 0;
 4394: 
 4395:       VTY_GET_INTEGER_RANGE ("AS", as, arg, 1, BGP_AS4_MAX);
 4396:       
 4397:       for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 4398: 	{
 4399: 	  if (peer->as != as) 
 4400: 	    continue;
 4401: 
 4402: 	  find = 1;
 4403: 	  if (stype == BGP_CLEAR_SOFT_NONE)
 4404: 	    ret = peer_clear (peer);
 4405: 	  else
 4406: 	    ret = peer_clear_soft (peer, afi, safi, stype);
 4407: 
 4408: 	  if (ret < 0)
 4409: 	    bgp_clear_vty_error (vty, peer, afi, safi, ret);
 4410: 	}
 4411:       if (! find)
 4412: 	vty_out (vty, "%%BGP: No peer is configured with AS %s%s", arg,
 4413: 		 VTY_NEWLINE);
 4414:       return CMD_SUCCESS;
 4415:     }
 4416: 
 4417:   return CMD_SUCCESS;
 4418: }
 4419: 
 4420: static int
 4421: bgp_clear_vty (struct vty *vty, const char *name, afi_t afi, safi_t safi,
 4422:                enum clear_sort sort, enum bgp_clear_type stype, 
 4423:                const char *arg)
 4424: {
 4425:   struct bgp *bgp;
 4426: 
 4427:   /* BGP structure lookup. */
 4428:   if (name)
 4429:     {
 4430:       bgp = bgp_lookup_by_name (name);
 4431:       if (bgp == NULL)
 4432:         {
 4433:           vty_out (vty, "Can't find BGP view %s%s", name, VTY_NEWLINE);
 4434:           return CMD_WARNING;
 4435:         }
 4436:     }
 4437:   else
 4438:     {
 4439:       bgp = bgp_get_default ();
 4440:       if (bgp == NULL)
 4441:         {
 4442:           vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
 4443:           return CMD_WARNING;
 4444:         }
 4445:     }
 4446: 
 4447:   return bgp_clear (vty, bgp, afi, safi, sort, stype, arg);
 4448: }
 4449:   
 4450: DEFUN (clear_ip_bgp_all,
 4451:        clear_ip_bgp_all_cmd,
 4452:        "clear ip bgp *",
 4453:        CLEAR_STR
 4454:        IP_STR
 4455:        BGP_STR
 4456:        "Clear all peers\n")
 4457: {
 4458:   if (argc == 1)
 4459:     return bgp_clear_vty (vty, argv[0], 0, 0, clear_all, BGP_CLEAR_SOFT_NONE, NULL);    
 4460: 
 4461:   return bgp_clear_vty (vty, NULL, 0, 0, clear_all, BGP_CLEAR_SOFT_NONE, NULL);
 4462: }
 4463: 
 4464: ALIAS (clear_ip_bgp_all,
 4465:        clear_bgp_all_cmd,
 4466:        "clear bgp *",
 4467:        CLEAR_STR
 4468:        BGP_STR
 4469:        "Clear all peers\n")
 4470: 
 4471: ALIAS (clear_ip_bgp_all,
 4472:        clear_bgp_ipv6_all_cmd,
 4473:        "clear bgp ipv6 *",
 4474:        CLEAR_STR
 4475:        BGP_STR
 4476:        "Address family\n"
 4477:        "Clear all peers\n")
 4478: 
 4479: ALIAS (clear_ip_bgp_all,
 4480:        clear_ip_bgp_instance_all_cmd,
 4481:        "clear ip bgp view WORD *",
 4482:        CLEAR_STR
 4483:        IP_STR
 4484:        BGP_STR
 4485:        "BGP view\n"
 4486:        "view name\n"
 4487:        "Clear all peers\n")
 4488: 
 4489: ALIAS (clear_ip_bgp_all,
 4490:        clear_bgp_instance_all_cmd,
 4491:        "clear bgp view WORD *",
 4492:        CLEAR_STR
 4493:        BGP_STR
 4494:        "BGP view\n"
 4495:        "view name\n"
 4496:        "Clear all peers\n")
 4497: 
 4498: DEFUN (clear_ip_bgp_peer,
 4499:        clear_ip_bgp_peer_cmd, 
 4500:        "clear ip bgp (A.B.C.D|X:X::X:X)",
 4501:        CLEAR_STR
 4502:        IP_STR
 4503:        BGP_STR
 4504:        "BGP neighbor IP address to clear\n"
 4505:        "BGP IPv6 neighbor to clear\n")
 4506: {
 4507:   return bgp_clear_vty (vty, NULL, 0, 0, clear_peer, BGP_CLEAR_SOFT_NONE, argv[0]);
 4508: }
 4509: 
 4510: ALIAS (clear_ip_bgp_peer,
 4511:        clear_bgp_peer_cmd, 
 4512:        "clear bgp (A.B.C.D|X:X::X:X)",
 4513:        CLEAR_STR
 4514:        BGP_STR
 4515:        "BGP neighbor address to clear\n"
 4516:        "BGP IPv6 neighbor to clear\n")
 4517: 
 4518: ALIAS (clear_ip_bgp_peer,
 4519:        clear_bgp_ipv6_peer_cmd, 
 4520:        "clear bgp ipv6 (A.B.C.D|X:X::X:X)",
 4521:        CLEAR_STR
 4522:        BGP_STR
 4523:        "Address family\n"
 4524:        "BGP neighbor address to clear\n"
 4525:        "BGP IPv6 neighbor to clear\n")
 4526: 
 4527: DEFUN (clear_ip_bgp_peer_group,
 4528:        clear_ip_bgp_peer_group_cmd, 
 4529:        "clear ip bgp peer-group WORD",
 4530:        CLEAR_STR
 4531:        IP_STR
 4532:        BGP_STR
 4533:        "Clear all members of peer-group\n"
 4534:        "BGP peer-group name\n")
 4535: {
 4536:   return bgp_clear_vty (vty, NULL, 0, 0, clear_group, BGP_CLEAR_SOFT_NONE, argv[0]);
 4537: }
 4538: 
 4539: ALIAS (clear_ip_bgp_peer_group,
 4540:        clear_bgp_peer_group_cmd, 
 4541:        "clear bgp peer-group WORD",
 4542:        CLEAR_STR
 4543:        BGP_STR
 4544:        "Clear all members of peer-group\n"
 4545:        "BGP peer-group name\n")
 4546: 
 4547: ALIAS (clear_ip_bgp_peer_group,
 4548:        clear_bgp_ipv6_peer_group_cmd, 
 4549:        "clear bgp ipv6 peer-group WORD",
 4550:        CLEAR_STR
 4551:        BGP_STR
 4552:        "Address family\n"
 4553:        "Clear all members of peer-group\n"
 4554:        "BGP peer-group name\n")
 4555: 
 4556: DEFUN (clear_ip_bgp_external,
 4557:        clear_ip_bgp_external_cmd,
 4558:        "clear ip bgp external",
 4559:        CLEAR_STR
 4560:        IP_STR
 4561:        BGP_STR
 4562:        "Clear all external peers\n")
 4563: {
 4564:   return bgp_clear_vty (vty, NULL, 0, 0, clear_external, BGP_CLEAR_SOFT_NONE, NULL);
 4565: }
 4566: 
 4567: ALIAS (clear_ip_bgp_external,
 4568:        clear_bgp_external_cmd, 
 4569:        "clear bgp external",
 4570:        CLEAR_STR
 4571:        BGP_STR
 4572:        "Clear all external peers\n")
 4573: 
 4574: ALIAS (clear_ip_bgp_external,
 4575:        clear_bgp_ipv6_external_cmd, 
 4576:        "clear bgp ipv6 external",
 4577:        CLEAR_STR
 4578:        BGP_STR
 4579:        "Address family\n"
 4580:        "Clear all external peers\n")
 4581: 
 4582: DEFUN (clear_ip_bgp_as,
 4583:        clear_ip_bgp_as_cmd,
 4584:        "clear ip bgp " CMD_AS_RANGE,
 4585:        CLEAR_STR
 4586:        IP_STR
 4587:        BGP_STR
 4588:        "Clear peers with the AS number\n")
 4589: {
 4590:   return bgp_clear_vty (vty, NULL, 0, 0, clear_as, BGP_CLEAR_SOFT_NONE, argv[0]);
 4591: }       
 4592: 
 4593: ALIAS (clear_ip_bgp_as,
 4594:        clear_bgp_as_cmd,
 4595:        "clear bgp " CMD_AS_RANGE,
 4596:        CLEAR_STR
 4597:        BGP_STR
 4598:        "Clear peers with the AS number\n")
 4599: 
 4600: ALIAS (clear_ip_bgp_as,
 4601:        clear_bgp_ipv6_as_cmd,
 4602:        "clear bgp ipv6 " CMD_AS_RANGE,
 4603:        CLEAR_STR
 4604:        BGP_STR
 4605:        "Address family\n"
 4606:        "Clear peers with the AS number\n")
 4607: 
 4608: /* Outbound soft-reconfiguration */
 4609: DEFUN (clear_ip_bgp_all_soft_out,
 4610:        clear_ip_bgp_all_soft_out_cmd,
 4611:        "clear ip bgp * soft out",
 4612:        CLEAR_STR
 4613:        IP_STR
 4614:        BGP_STR
 4615:        "Clear all peers\n"
 4616:        "Soft reconfig\n"
 4617:        "Soft reconfig outbound update\n")
 4618: {
 4619:   if (argc == 1)
 4620:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 4621:                           BGP_CLEAR_SOFT_OUT, NULL);
 4622: 
 4623:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 4624: 			BGP_CLEAR_SOFT_OUT, NULL);
 4625: }
 4626: 
 4627: ALIAS (clear_ip_bgp_all_soft_out,
 4628:        clear_ip_bgp_all_out_cmd,
 4629:        "clear ip bgp * out",
 4630:        CLEAR_STR
 4631:        IP_STR
 4632:        BGP_STR
 4633:        "Clear all peers\n"
 4634:        "Soft reconfig outbound update\n")
 4635: 
 4636: ALIAS (clear_ip_bgp_all_soft_out,
 4637:        clear_ip_bgp_instance_all_soft_out_cmd,
 4638:        "clear ip bgp view WORD * soft out",
 4639:        CLEAR_STR
 4640:        IP_STR
 4641:        BGP_STR
 4642:        "BGP view\n"
 4643:        "view name\n"
 4644:        "Clear all peers\n"
 4645:        "Soft reconfig\n"
 4646:        "Soft reconfig outbound update\n")
 4647: 
 4648: DEFUN (clear_ip_bgp_all_ipv4_soft_out,
 4649:        clear_ip_bgp_all_ipv4_soft_out_cmd,
 4650:        "clear ip bgp * ipv4 (unicast|multicast) soft out",
 4651:        CLEAR_STR
 4652:        IP_STR
 4653:        BGP_STR
 4654:        "Clear all peers\n"
 4655:        "Address family\n"
 4656:        "Address Family modifier\n"
 4657:        "Address Family modifier\n"
 4658:        "Soft reconfig\n"
 4659:        "Soft reconfig outbound update\n")
 4660: {
 4661:   if (strncmp (argv[0], "m", 1) == 0)
 4662:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 4663: 			  BGP_CLEAR_SOFT_OUT, NULL);
 4664: 
 4665:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 4666: 			BGP_CLEAR_SOFT_OUT, NULL);
 4667: }
 4668: 
 4669: ALIAS (clear_ip_bgp_all_ipv4_soft_out,
 4670:        clear_ip_bgp_all_ipv4_out_cmd,
 4671:        "clear ip bgp * ipv4 (unicast|multicast) out",
 4672:        CLEAR_STR
 4673:        IP_STR
 4674:        BGP_STR
 4675:        "Clear all peers\n"
 4676:        "Address family\n"
 4677:        "Address Family modifier\n"
 4678:        "Address Family modifier\n"
 4679:        "Soft reconfig outbound update\n")
 4680: 
 4681: DEFUN (clear_ip_bgp_instance_all_ipv4_soft_out,
 4682:        clear_ip_bgp_instance_all_ipv4_soft_out_cmd,
 4683:        "clear ip bgp view WORD * ipv4 (unicast|multicast) soft out",
 4684:        CLEAR_STR
 4685:        IP_STR
 4686:        BGP_STR
 4687:        "BGP view\n"
 4688:        "view name\n"
 4689:        "Clear all peers\n"
 4690:        "Address family\n"
 4691:        "Address Family modifier\n"
 4692:        "Address Family modifier\n"
 4693:        "Soft reconfig outbound update\n")
 4694: {
 4695:   if (strncmp (argv[1], "m", 1) == 0)
 4696:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST, clear_all,
 4697:                           BGP_CLEAR_SOFT_OUT, NULL);
 4698: 
 4699:   return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 4700:                         BGP_CLEAR_SOFT_OUT, NULL);
 4701: }
 4702: 
 4703: DEFUN (clear_ip_bgp_all_vpnv4_soft_out,
 4704:        clear_ip_bgp_all_vpnv4_soft_out_cmd,
 4705:        "clear ip bgp * vpnv4 unicast soft out",
 4706:        CLEAR_STR
 4707:        IP_STR
 4708:        BGP_STR
 4709:        "Clear all peers\n"
 4710:        "Address family\n"
 4711:        "Address Family Modifier\n"
 4712:        "Soft reconfig\n"
 4713:        "Soft reconfig outbound update\n")
 4714: {
 4715:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all,
 4716: 			BGP_CLEAR_SOFT_OUT, NULL);
 4717: }
 4718: 
 4719: ALIAS (clear_ip_bgp_all_vpnv4_soft_out,
 4720:        clear_ip_bgp_all_vpnv4_out_cmd,
 4721:        "clear ip bgp * vpnv4 unicast out",
 4722:        CLEAR_STR
 4723:        IP_STR
 4724:        BGP_STR
 4725:        "Clear all peers\n"
 4726:        "Address family\n"
 4727:        "Address Family Modifier\n"
 4728:        "Soft reconfig outbound update\n")
 4729: 
 4730: DEFUN (clear_bgp_all_soft_out,
 4731:        clear_bgp_all_soft_out_cmd,
 4732:        "clear bgp * soft out",
 4733:        CLEAR_STR
 4734:        BGP_STR
 4735:        "Clear all peers\n"
 4736:        "Soft reconfig\n"
 4737:        "Soft reconfig outbound update\n")
 4738: {
 4739:   if (argc == 1)
 4740:     return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all,
 4741:                           BGP_CLEAR_SOFT_OUT, NULL);
 4742: 
 4743:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 4744: 			BGP_CLEAR_SOFT_OUT, NULL);
 4745: }
 4746: 
 4747: ALIAS (clear_bgp_all_soft_out,
 4748:        clear_bgp_instance_all_soft_out_cmd,
 4749:        "clear bgp view WORD * soft out",
 4750:        CLEAR_STR
 4751:        BGP_STR
 4752:        "BGP view\n"
 4753:        "view name\n"
 4754:        "Clear all peers\n"
 4755:        "Soft reconfig\n"
 4756:        "Soft reconfig outbound update\n")
 4757: 
 4758: ALIAS (clear_bgp_all_soft_out,
 4759:        clear_bgp_all_out_cmd,
 4760:        "clear bgp * out",
 4761:        CLEAR_STR
 4762:        BGP_STR
 4763:        "Clear all peers\n"
 4764:        "Soft reconfig outbound update\n")
 4765: 
 4766: ALIAS (clear_bgp_all_soft_out,
 4767:        clear_bgp_ipv6_all_soft_out_cmd,
 4768:        "clear bgp ipv6 * soft out",
 4769:        CLEAR_STR
 4770:        BGP_STR
 4771:        "Address family\n"
 4772:        "Clear all peers\n"
 4773:        "Soft reconfig\n"
 4774:        "Soft reconfig outbound update\n")
 4775: 
 4776: ALIAS (clear_bgp_all_soft_out,
 4777:        clear_bgp_ipv6_all_out_cmd,
 4778:        "clear bgp ipv6 * out",
 4779:        CLEAR_STR
 4780:        BGP_STR
 4781:        "Address family\n"
 4782:        "Clear all peers\n"
 4783:        "Soft reconfig outbound update\n")
 4784: 
 4785: DEFUN (clear_ip_bgp_peer_soft_out,
 4786:        clear_ip_bgp_peer_soft_out_cmd,
 4787:        "clear ip bgp A.B.C.D soft out",
 4788:        CLEAR_STR
 4789:        IP_STR
 4790:        BGP_STR
 4791:        "BGP neighbor address to clear\n"
 4792:        "Soft reconfig\n"
 4793:        "Soft reconfig outbound update\n")
 4794: {
 4795:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 4796: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 4797: }
 4798: 
 4799: ALIAS (clear_ip_bgp_peer_soft_out,
 4800:        clear_ip_bgp_peer_out_cmd,
 4801:        "clear ip bgp A.B.C.D out",
 4802:        CLEAR_STR
 4803:        IP_STR
 4804:        BGP_STR
 4805:        "BGP neighbor address to clear\n"
 4806:        "Soft reconfig outbound update\n")
 4807: 
 4808: DEFUN (clear_ip_bgp_peer_ipv4_soft_out,
 4809:        clear_ip_bgp_peer_ipv4_soft_out_cmd,
 4810:        "clear ip bgp A.B.C.D ipv4 (unicast|multicast) soft out",
 4811:        CLEAR_STR
 4812:        IP_STR
 4813:        BGP_STR
 4814:        "BGP neighbor address to clear\n"
 4815:        "Address family\n"
 4816:        "Address Family modifier\n"
 4817:        "Address Family modifier\n"
 4818:        "Soft reconfig\n"
 4819:        "Soft reconfig outbound update\n")
 4820: {
 4821:   if (strncmp (argv[1], "m", 1) == 0)
 4822:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 4823: 			  BGP_CLEAR_SOFT_OUT, argv[0]);
 4824: 
 4825:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 4826: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 4827: }
 4828: 
 4829: ALIAS (clear_ip_bgp_peer_ipv4_soft_out,
 4830:        clear_ip_bgp_peer_ipv4_out_cmd,
 4831:        "clear ip bgp A.B.C.D ipv4 (unicast|multicast) out",
 4832:        CLEAR_STR
 4833:        IP_STR
 4834:        BGP_STR
 4835:        "BGP neighbor address to clear\n"
 4836:        "Address family\n"
 4837:        "Address Family modifier\n"
 4838:        "Address Family modifier\n"
 4839:        "Soft reconfig outbound update\n")
 4840: 
 4841: DEFUN (clear_ip_bgp_peer_vpnv4_soft_out,
 4842:        clear_ip_bgp_peer_vpnv4_soft_out_cmd,
 4843:        "clear ip bgp A.B.C.D vpnv4 unicast soft out",
 4844:        CLEAR_STR
 4845:        IP_STR
 4846:        BGP_STR
 4847:        "BGP neighbor address to clear\n"
 4848:        "Address family\n"
 4849:        "Address Family Modifier\n"
 4850:        "Soft reconfig\n"
 4851:        "Soft reconfig outbound update\n")
 4852: {
 4853:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer,
 4854: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 4855: }
 4856: 
 4857: ALIAS (clear_ip_bgp_peer_vpnv4_soft_out,
 4858:        clear_ip_bgp_peer_vpnv4_out_cmd,
 4859:        "clear ip bgp A.B.C.D vpnv4 unicast out",
 4860:        CLEAR_STR
 4861:        IP_STR
 4862:        BGP_STR
 4863:        "BGP neighbor address to clear\n"
 4864:        "Address family\n"
 4865:        "Address Family Modifier\n"
 4866:        "Soft reconfig outbound update\n")
 4867: 
 4868: DEFUN (clear_bgp_peer_soft_out,
 4869:        clear_bgp_peer_soft_out_cmd,
 4870:        "clear bgp (A.B.C.D|X:X::X:X) soft out",
 4871:        CLEAR_STR
 4872:        BGP_STR
 4873:        "BGP neighbor address to clear\n"
 4874:        "BGP IPv6 neighbor to clear\n"
 4875:        "Soft reconfig\n"
 4876:        "Soft reconfig outbound update\n")
 4877: {
 4878:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 4879: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 4880: }
 4881: 
 4882: ALIAS (clear_bgp_peer_soft_out,
 4883:        clear_bgp_ipv6_peer_soft_out_cmd,
 4884:        "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft out",
 4885:        CLEAR_STR
 4886:        BGP_STR
 4887:        "Address family\n"
 4888:        "BGP neighbor address to clear\n"
 4889:        "BGP IPv6 neighbor to clear\n"
 4890:        "Soft reconfig\n"
 4891:        "Soft reconfig outbound update\n")
 4892: 
 4893: ALIAS (clear_bgp_peer_soft_out,
 4894:        clear_bgp_peer_out_cmd,
 4895:        "clear bgp (A.B.C.D|X:X::X:X) out",
 4896:        CLEAR_STR
 4897:        BGP_STR
 4898:        "BGP neighbor address to clear\n"
 4899:        "BGP IPv6 neighbor to clear\n"
 4900:        "Soft reconfig outbound update\n")
 4901: 
 4902: ALIAS (clear_bgp_peer_soft_out,
 4903:        clear_bgp_ipv6_peer_out_cmd,
 4904:        "clear bgp ipv6 (A.B.C.D|X:X::X:X) out",
 4905:        CLEAR_STR
 4906:        BGP_STR
 4907:        "Address family\n"
 4908:        "BGP neighbor address to clear\n"
 4909:        "BGP IPv6 neighbor to clear\n"
 4910:        "Soft reconfig outbound update\n")
 4911: 
 4912: DEFUN (clear_ip_bgp_peer_group_soft_out,
 4913:        clear_ip_bgp_peer_group_soft_out_cmd, 
 4914:        "clear ip bgp peer-group WORD soft out",
 4915:        CLEAR_STR
 4916:        IP_STR
 4917:        BGP_STR
 4918:        "Clear all members of peer-group\n"
 4919:        "BGP peer-group name\n"
 4920:        "Soft reconfig\n"
 4921:        "Soft reconfig outbound update\n")
 4922: {
 4923:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 4924: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 4925: }
 4926: 
 4927: ALIAS (clear_ip_bgp_peer_group_soft_out,
 4928:        clear_ip_bgp_peer_group_out_cmd, 
 4929:        "clear ip bgp peer-group WORD out",
 4930:        CLEAR_STR
 4931:        IP_STR
 4932:        BGP_STR
 4933:        "Clear all members of peer-group\n"
 4934:        "BGP peer-group name\n"
 4935:        "Soft reconfig outbound update\n")
 4936: 
 4937: DEFUN (clear_ip_bgp_peer_group_ipv4_soft_out,
 4938:        clear_ip_bgp_peer_group_ipv4_soft_out_cmd,
 4939:        "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft out",
 4940:        CLEAR_STR
 4941:        IP_STR
 4942:        BGP_STR
 4943:        "Clear all members of peer-group\n"
 4944:        "BGP peer-group name\n"
 4945:        "Address family\n"
 4946:        "Address Family modifier\n"
 4947:        "Address Family modifier\n"
 4948:        "Soft reconfig\n"
 4949:        "Soft reconfig outbound update\n")
 4950: {
 4951:   if (strncmp (argv[1], "m", 1) == 0)
 4952:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 4953: 			  BGP_CLEAR_SOFT_OUT, argv[0]);
 4954: 
 4955:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 4956: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 4957: }
 4958: 
 4959: ALIAS (clear_ip_bgp_peer_group_ipv4_soft_out,
 4960:        clear_ip_bgp_peer_group_ipv4_out_cmd,
 4961:        "clear ip bgp peer-group WORD ipv4 (unicast|multicast) out",
 4962:        CLEAR_STR
 4963:        IP_STR
 4964:        BGP_STR
 4965:        "Clear all members of peer-group\n"
 4966:        "BGP peer-group name\n"
 4967:        "Address family\n"
 4968:        "Address Family modifier\n"
 4969:        "Address Family modifier\n"
 4970:        "Soft reconfig outbound update\n")
 4971: 
 4972: DEFUN (clear_bgp_peer_group_soft_out,
 4973:        clear_bgp_peer_group_soft_out_cmd,
 4974:        "clear bgp peer-group WORD soft out",
 4975:        CLEAR_STR
 4976:        BGP_STR
 4977:        "Clear all members of peer-group\n"
 4978:        "BGP peer-group name\n"
 4979:        "Soft reconfig\n"
 4980:        "Soft reconfig outbound update\n")
 4981: {
 4982:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 4983: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 4984: }
 4985: 
 4986: ALIAS (clear_bgp_peer_group_soft_out,
 4987:        clear_bgp_ipv6_peer_group_soft_out_cmd,
 4988:        "clear bgp ipv6 peer-group WORD soft out",
 4989:        CLEAR_STR
 4990:        BGP_STR
 4991:        "Address family\n"
 4992:        "Clear all members of peer-group\n"
 4993:        "BGP peer-group name\n"
 4994:        "Soft reconfig\n"
 4995:        "Soft reconfig outbound update\n")
 4996: 
 4997: ALIAS (clear_bgp_peer_group_soft_out,
 4998:        clear_bgp_peer_group_out_cmd,
 4999:        "clear bgp peer-group WORD out",
 5000:        CLEAR_STR
 5001:        BGP_STR
 5002:        "Clear all members of peer-group\n"
 5003:        "BGP peer-group name\n"
 5004:        "Soft reconfig outbound update\n")
 5005: 
 5006: ALIAS (clear_bgp_peer_group_soft_out,
 5007:        clear_bgp_ipv6_peer_group_out_cmd,
 5008:        "clear bgp ipv6 peer-group WORD out",
 5009:        CLEAR_STR
 5010:        BGP_STR
 5011:        "Address family\n"
 5012:        "Clear all members of peer-group\n"
 5013:        "BGP peer-group name\n"
 5014:        "Soft reconfig outbound update\n")
 5015: 
 5016: DEFUN (clear_ip_bgp_external_soft_out,
 5017:        clear_ip_bgp_external_soft_out_cmd, 
 5018:        "clear ip bgp external soft out",
 5019:        CLEAR_STR
 5020:        IP_STR
 5021:        BGP_STR
 5022:        "Clear all external peers\n"
 5023:        "Soft reconfig\n"
 5024:        "Soft reconfig outbound update\n")
 5025: {
 5026:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 5027: 			BGP_CLEAR_SOFT_OUT, NULL);
 5028: }
 5029: 
 5030: ALIAS (clear_ip_bgp_external_soft_out,
 5031:        clear_ip_bgp_external_out_cmd, 
 5032:        "clear ip bgp external out",
 5033:        CLEAR_STR
 5034:        IP_STR
 5035:        BGP_STR
 5036:        "Clear all external peers\n"
 5037:        "Soft reconfig outbound update\n")
 5038: 
 5039: DEFUN (clear_ip_bgp_external_ipv4_soft_out,
 5040:        clear_ip_bgp_external_ipv4_soft_out_cmd,
 5041:        "clear ip bgp external ipv4 (unicast|multicast) soft out",
 5042:        CLEAR_STR
 5043:        IP_STR
 5044:        BGP_STR
 5045:        "Clear all external peers\n"
 5046:        "Address family\n"
 5047:        "Address Family modifier\n"
 5048:        "Address Family modifier\n"
 5049:        "Soft reconfig\n"
 5050:        "Soft reconfig outbound update\n")
 5051: {
 5052:   if (strncmp (argv[0], "m", 1) == 0)
 5053:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 5054: 			  BGP_CLEAR_SOFT_OUT, NULL);
 5055: 
 5056:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 5057: 			BGP_CLEAR_SOFT_OUT, NULL);
 5058: }
 5059: 
 5060: ALIAS (clear_ip_bgp_external_ipv4_soft_out,
 5061:        clear_ip_bgp_external_ipv4_out_cmd,
 5062:        "clear ip bgp external ipv4 (unicast|multicast) out",
 5063:        CLEAR_STR
 5064:        IP_STR
 5065:        BGP_STR
 5066:        "Clear all external peers\n"
 5067:        "Address family\n"
 5068:        "Address Family modifier\n"
 5069:        "Address Family modifier\n"
 5070:        "Soft reconfig outbound update\n")
 5071: 
 5072: DEFUN (clear_bgp_external_soft_out,
 5073:        clear_bgp_external_soft_out_cmd,
 5074:        "clear bgp external soft out",
 5075:        CLEAR_STR
 5076:        BGP_STR
 5077:        "Clear all external peers\n"
 5078:        "Soft reconfig\n"
 5079:        "Soft reconfig outbound update\n")
 5080: {
 5081:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 5082: 			BGP_CLEAR_SOFT_OUT, NULL);
 5083: }
 5084: 
 5085: ALIAS (clear_bgp_external_soft_out,
 5086:        clear_bgp_ipv6_external_soft_out_cmd,
 5087:        "clear bgp ipv6 external soft out",
 5088:        CLEAR_STR
 5089:        BGP_STR
 5090:        "Address family\n"
 5091:        "Clear all external peers\n"
 5092:        "Soft reconfig\n"
 5093:        "Soft reconfig outbound update\n")
 5094: 
 5095: ALIAS (clear_bgp_external_soft_out,
 5096:        clear_bgp_external_out_cmd,
 5097:        "clear bgp external out",
 5098:        CLEAR_STR
 5099:        BGP_STR
 5100:        "Clear all external peers\n"
 5101:        "Soft reconfig outbound update\n")
 5102: 
 5103: ALIAS (clear_bgp_external_soft_out,
 5104:        clear_bgp_ipv6_external_out_cmd,
 5105:        "clear bgp ipv6 external WORD out",
 5106:        CLEAR_STR
 5107:        BGP_STR
 5108:        "Address family\n"
 5109:        "Clear all external peers\n"
 5110:        "Soft reconfig outbound update\n")
 5111: 
 5112: DEFUN (clear_ip_bgp_as_soft_out,
 5113:        clear_ip_bgp_as_soft_out_cmd,
 5114:        "clear ip bgp " CMD_AS_RANGE " soft out",
 5115:        CLEAR_STR
 5116:        IP_STR
 5117:        BGP_STR
 5118:        "Clear peers with the AS number\n"
 5119:        "Soft reconfig\n"
 5120:        "Soft reconfig outbound update\n")
 5121: {
 5122:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 5123: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 5124: }
 5125: 
 5126: ALIAS (clear_ip_bgp_as_soft_out,
 5127:        clear_ip_bgp_as_out_cmd,
 5128:        "clear ip bgp " CMD_AS_RANGE " out",
 5129:        CLEAR_STR
 5130:        IP_STR
 5131:        BGP_STR
 5132:        "Clear peers with the AS number\n"
 5133:        "Soft reconfig outbound update\n")
 5134: 
 5135: DEFUN (clear_ip_bgp_as_ipv4_soft_out,
 5136:        clear_ip_bgp_as_ipv4_soft_out_cmd,
 5137:        "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) soft out",
 5138:        CLEAR_STR
 5139:        IP_STR
 5140:        BGP_STR
 5141:        "Clear peers with the AS number\n"
 5142:        "Address family\n"
 5143:        "Address Family modifier\n"
 5144:        "Address Family modifier\n"
 5145:        "Soft reconfig\n"
 5146:        "Soft reconfig outbound update\n")
 5147: {
 5148:   if (strncmp (argv[1], "m", 1) == 0)
 5149:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 5150: 			  BGP_CLEAR_SOFT_OUT, argv[0]);
 5151: 
 5152:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 5153: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 5154: }
 5155: 
 5156: ALIAS (clear_ip_bgp_as_ipv4_soft_out,
 5157:        clear_ip_bgp_as_ipv4_out_cmd,
 5158:        "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) out",
 5159:        CLEAR_STR
 5160:        IP_STR
 5161:        BGP_STR
 5162:        "Clear peers with the AS number\n"
 5163:        "Address family\n"
 5164:        "Address Family modifier\n"
 5165:        "Address Family modifier\n"
 5166:        "Soft reconfig outbound update\n")
 5167: 
 5168: DEFUN (clear_ip_bgp_as_vpnv4_soft_out,
 5169:        clear_ip_bgp_as_vpnv4_soft_out_cmd,
 5170:        "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast soft out",
 5171:        CLEAR_STR
 5172:        IP_STR
 5173:        BGP_STR
 5174:        "Clear peers with the AS number\n"
 5175:        "Address family\n"
 5176:        "Address Family modifier\n"
 5177:        "Soft reconfig\n"
 5178:        "Soft reconfig outbound update\n")
 5179: {
 5180:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as,
 5181: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 5182: }
 5183: 
 5184: ALIAS (clear_ip_bgp_as_vpnv4_soft_out,
 5185:        clear_ip_bgp_as_vpnv4_out_cmd,
 5186:        "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast out",
 5187:        CLEAR_STR
 5188:        IP_STR
 5189:        BGP_STR
 5190:        "Clear peers with the AS number\n"
 5191:        "Address family\n"
 5192:        "Address Family modifier\n"
 5193:        "Soft reconfig outbound update\n")
 5194: 
 5195: DEFUN (clear_bgp_as_soft_out,
 5196:        clear_bgp_as_soft_out_cmd,
 5197:        "clear bgp " CMD_AS_RANGE " soft out",
 5198:        CLEAR_STR
 5199:        BGP_STR
 5200:        "Clear peers with the AS number\n"
 5201:        "Soft reconfig\n"
 5202:        "Soft reconfig outbound update\n")
 5203: {
 5204:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 5205: 			BGP_CLEAR_SOFT_OUT, argv[0]);
 5206: }
 5207: 
 5208: ALIAS (clear_bgp_as_soft_out,
 5209:        clear_bgp_ipv6_as_soft_out_cmd,
 5210:        "clear bgp ipv6 " CMD_AS_RANGE " soft out",
 5211:        CLEAR_STR
 5212:        BGP_STR
 5213:        "Address family\n"
 5214:        "Clear peers with the AS number\n"
 5215:        "Soft reconfig\n"
 5216:        "Soft reconfig outbound update\n")
 5217: 
 5218: ALIAS (clear_bgp_as_soft_out,
 5219:        clear_bgp_as_out_cmd,
 5220:        "clear bgp " CMD_AS_RANGE " out",
 5221:        CLEAR_STR
 5222:        BGP_STR
 5223:        "Clear peers with the AS number\n"
 5224:        "Soft reconfig outbound update\n")
 5225: 
 5226: ALIAS (clear_bgp_as_soft_out,
 5227:        clear_bgp_ipv6_as_out_cmd,
 5228:        "clear bgp ipv6 " CMD_AS_RANGE " out",
 5229:        CLEAR_STR
 5230:        BGP_STR
 5231:        "Address family\n"
 5232:        "Clear peers with the AS number\n"
 5233:        "Soft reconfig outbound update\n")
 5234: 
 5235: /* Inbound soft-reconfiguration */
 5236: DEFUN (clear_ip_bgp_all_soft_in,
 5237:        clear_ip_bgp_all_soft_in_cmd,
 5238:        "clear ip bgp * soft in",
 5239:        CLEAR_STR
 5240:        IP_STR
 5241:        BGP_STR
 5242:        "Clear all peers\n"
 5243:        "Soft reconfig\n"
 5244:        "Soft reconfig inbound update\n")
 5245: {
 5246:   if (argc == 1)
 5247:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 5248:                           BGP_CLEAR_SOFT_IN, NULL);
 5249: 
 5250:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 5251: 			BGP_CLEAR_SOFT_IN, NULL);
 5252: }
 5253: 
 5254: ALIAS (clear_ip_bgp_all_soft_in,
 5255:        clear_ip_bgp_instance_all_soft_in_cmd,
 5256:        "clear ip bgp view WORD * soft in",
 5257:        CLEAR_STR
 5258:        IP_STR
 5259:        BGP_STR
 5260:        "BGP view\n"
 5261:        "view name\n"
 5262:        "Clear all peers\n"
 5263:        "Soft reconfig\n"
 5264:        "Soft reconfig inbound update\n")
 5265: 
 5266: ALIAS (clear_ip_bgp_all_soft_in,
 5267:        clear_ip_bgp_all_in_cmd,
 5268:        "clear ip bgp * in",
 5269:        CLEAR_STR
 5270:        IP_STR
 5271:        BGP_STR
 5272:        "Clear all peers\n"
 5273:        "Soft reconfig inbound update\n")
 5274: 
 5275: DEFUN (clear_ip_bgp_all_in_prefix_filter,
 5276:        clear_ip_bgp_all_in_prefix_filter_cmd,
 5277:        "clear ip bgp * in prefix-filter",
 5278:        CLEAR_STR
 5279:        IP_STR
 5280:        BGP_STR
 5281:        "Clear all peers\n"
 5282:        "Soft reconfig inbound update\n"
 5283:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5284: {
 5285:   if (argc== 1)
 5286:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 5287:                           BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5288: 
 5289:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 5290: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5291: }
 5292: 
 5293: ALIAS (clear_ip_bgp_all_in_prefix_filter,
 5294:        clear_ip_bgp_instance_all_in_prefix_filter_cmd,
 5295:        "clear ip bgp view WORD * in prefix-filter",
 5296:        CLEAR_STR
 5297:        IP_STR
 5298:        BGP_STR
 5299:        "BGP view\n"
 5300:        "view name\n"
 5301:        "Clear all peers\n"
 5302:        "Soft reconfig inbound update\n"
 5303:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5304: 
 5305: 
 5306: DEFUN (clear_ip_bgp_all_ipv4_soft_in,
 5307:        clear_ip_bgp_all_ipv4_soft_in_cmd,
 5308:        "clear ip bgp * ipv4 (unicast|multicast) soft in",
 5309:        CLEAR_STR
 5310:        IP_STR
 5311:        BGP_STR
 5312:        "Clear all peers\n"
 5313:        "Address family\n"
 5314:        "Address Family modifier\n"
 5315:        "Address Family modifier\n"
 5316:        "Soft reconfig\n"
 5317:        "Soft reconfig inbound update\n")
 5318: {
 5319:   if (strncmp (argv[0], "m", 1) == 0)
 5320:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 5321: 			  BGP_CLEAR_SOFT_IN, NULL);
 5322: 
 5323:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 5324: 			BGP_CLEAR_SOFT_IN, NULL);
 5325: }
 5326: 
 5327: ALIAS (clear_ip_bgp_all_ipv4_soft_in,
 5328:        clear_ip_bgp_all_ipv4_in_cmd,
 5329:        "clear ip bgp * ipv4 (unicast|multicast) in",
 5330:        CLEAR_STR
 5331:        IP_STR
 5332:        BGP_STR
 5333:        "Clear all peers\n"
 5334:        "Address family\n"
 5335:        "Address Family modifier\n"
 5336:        "Address Family modifier\n"
 5337:        "Soft reconfig inbound update\n")
 5338: 
 5339: DEFUN (clear_ip_bgp_instance_all_ipv4_soft_in,
 5340:        clear_ip_bgp_instance_all_ipv4_soft_in_cmd,
 5341:        "clear ip bgp view WORD * ipv4 (unicast|multicast) soft in",
 5342:        CLEAR_STR
 5343:        IP_STR
 5344:        BGP_STR
 5345:        "BGP view\n"
 5346:        "view name\n"
 5347:        "Clear all peers\n"
 5348:        "Address family\n"
 5349:        "Address Family modifier\n"
 5350:        "Address Family modifier\n"
 5351:        "Soft reconfig\n"
 5352:        "Soft reconfig inbound update\n")
 5353: {
 5354:   if (strncmp (argv[1], "m", 1) == 0)
 5355:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST, clear_all,
 5356:                           BGP_CLEAR_SOFT_IN, NULL);
 5357: 
 5358:   return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 5359:                         BGP_CLEAR_SOFT_IN, NULL);
 5360: }
 5361: 
 5362: DEFUN (clear_ip_bgp_all_ipv4_in_prefix_filter,
 5363:        clear_ip_bgp_all_ipv4_in_prefix_filter_cmd,
 5364:        "clear ip bgp * ipv4 (unicast|multicast) in prefix-filter",
 5365:        CLEAR_STR
 5366:        IP_STR
 5367:        BGP_STR
 5368:        "Clear all peers\n"
 5369:        "Address family\n"
 5370:        "Address Family modifier\n"
 5371:        "Address Family modifier\n"
 5372:        "Soft reconfig inbound update\n"
 5373:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5374: {
 5375:   if (strncmp (argv[0], "m", 1) == 0)
 5376:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 5377: 			  BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5378: 
 5379:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 5380: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5381: }
 5382: 
 5383: DEFUN (clear_ip_bgp_instance_all_ipv4_in_prefix_filter,
 5384:        clear_ip_bgp_instance_all_ipv4_in_prefix_filter_cmd,
 5385:        "clear ip bgp view WORD * ipv4 (unicast|multicast) in prefix-filter",
 5386:        CLEAR_STR
 5387:        IP_STR
 5388:        BGP_STR
 5389:        "Clear all peers\n"
 5390:        "Address family\n"
 5391:        "Address Family modifier\n"
 5392:        "Address Family modifier\n"
 5393:        "Soft reconfig inbound update\n"
 5394:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5395: {
 5396:   if (strncmp (argv[1], "m", 1) == 0)
 5397:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST, clear_all,
 5398:                           BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5399: 
 5400:   return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 5401:                         BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5402: }
 5403: 
 5404: DEFUN (clear_ip_bgp_all_vpnv4_soft_in,
 5405:        clear_ip_bgp_all_vpnv4_soft_in_cmd,
 5406:        "clear ip bgp * vpnv4 unicast soft in",
 5407:        CLEAR_STR
 5408:        IP_STR
 5409:        BGP_STR
 5410:        "Clear all peers\n"
 5411:        "Address family\n"
 5412:        "Address Family Modifier\n"
 5413:        "Soft reconfig\n"
 5414:        "Soft reconfig inbound update\n")
 5415: {
 5416:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all,
 5417: 			BGP_CLEAR_SOFT_IN, NULL);
 5418: }
 5419: 
 5420: ALIAS (clear_ip_bgp_all_vpnv4_soft_in,
 5421:        clear_ip_bgp_all_vpnv4_in_cmd,
 5422:        "clear ip bgp * vpnv4 unicast in",
 5423:        CLEAR_STR
 5424:        IP_STR
 5425:        BGP_STR
 5426:        "Clear all peers\n"
 5427:        "Address family\n"
 5428:        "Address Family Modifier\n"
 5429:        "Soft reconfig inbound update\n")
 5430: 
 5431: DEFUN (clear_bgp_all_soft_in,
 5432:        clear_bgp_all_soft_in_cmd,
 5433:        "clear bgp * soft in",
 5434:        CLEAR_STR
 5435:        BGP_STR
 5436:        "Clear all peers\n"
 5437:        "Soft reconfig\n"
 5438:        "Soft reconfig inbound update\n")
 5439: {
 5440:   if (argc == 1)
 5441:     return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all,
 5442:                         BGP_CLEAR_SOFT_IN, NULL);
 5443: 
 5444:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 5445: 			BGP_CLEAR_SOFT_IN, NULL);
 5446: }
 5447: 
 5448: ALIAS (clear_bgp_all_soft_in,
 5449:        clear_bgp_instance_all_soft_in_cmd,
 5450:        "clear bgp view WORD * soft in",
 5451:        CLEAR_STR
 5452:        BGP_STR
 5453:        "BGP view\n"
 5454:        "view name\n"
 5455:        "Clear all peers\n"
 5456:        "Soft reconfig\n"
 5457:        "Soft reconfig inbound update\n")
 5458: 
 5459: ALIAS (clear_bgp_all_soft_in,
 5460:        clear_bgp_ipv6_all_soft_in_cmd,
 5461:        "clear bgp ipv6 * soft in",
 5462:        CLEAR_STR
 5463:        BGP_STR
 5464:        "Address family\n"
 5465:        "Clear all peers\n"
 5466:        "Soft reconfig\n"
 5467:        "Soft reconfig inbound update\n")
 5468: 
 5469: ALIAS (clear_bgp_all_soft_in,
 5470:        clear_bgp_all_in_cmd,
 5471:        "clear bgp * in",
 5472:        CLEAR_STR
 5473:        BGP_STR
 5474:        "Clear all peers\n"
 5475:        "Soft reconfig inbound update\n")
 5476: 
 5477: ALIAS (clear_bgp_all_soft_in,
 5478:        clear_bgp_ipv6_all_in_cmd,
 5479:        "clear bgp ipv6 * in",
 5480:        CLEAR_STR
 5481:        BGP_STR
 5482:        "Address family\n"
 5483:        "Clear all peers\n"
 5484:        "Soft reconfig inbound update\n")
 5485: 
 5486: DEFUN (clear_bgp_all_in_prefix_filter,
 5487:        clear_bgp_all_in_prefix_filter_cmd,
 5488:        "clear bgp * in prefix-filter",
 5489:        CLEAR_STR
 5490:        BGP_STR
 5491:        "Clear all peers\n"
 5492:        "Soft reconfig inbound update\n"
 5493:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5494: {
 5495:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 5496: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5497: }
 5498: 
 5499: ALIAS (clear_bgp_all_in_prefix_filter,
 5500:        clear_bgp_ipv6_all_in_prefix_filter_cmd,
 5501:        "clear bgp ipv6 * in prefix-filter",
 5502:        CLEAR_STR
 5503:        BGP_STR
 5504:        "Address family\n"
 5505:        "Clear all peers\n"
 5506:        "Soft reconfig inbound update\n"
 5507:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5508: 
 5509: DEFUN (clear_ip_bgp_peer_soft_in,
 5510:        clear_ip_bgp_peer_soft_in_cmd,
 5511:        "clear ip bgp A.B.C.D soft in",
 5512:        CLEAR_STR
 5513:        IP_STR
 5514:        BGP_STR
 5515:        "BGP neighbor address to clear\n"
 5516:        "Soft reconfig\n"
 5517:        "Soft reconfig inbound update\n")
 5518: {
 5519:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 5520: 			BGP_CLEAR_SOFT_IN, argv[0]);
 5521: }
 5522: 
 5523: ALIAS (clear_ip_bgp_peer_soft_in,
 5524:        clear_ip_bgp_peer_in_cmd,
 5525:        "clear ip bgp A.B.C.D in",
 5526:        CLEAR_STR
 5527:        IP_STR
 5528:        BGP_STR
 5529:        "BGP neighbor address to clear\n"
 5530:        "Soft reconfig inbound update\n")
 5531:        
 5532: DEFUN (clear_ip_bgp_peer_in_prefix_filter,
 5533:        clear_ip_bgp_peer_in_prefix_filter_cmd,
 5534:        "clear ip bgp A.B.C.D in prefix-filter",
 5535:        CLEAR_STR
 5536:        IP_STR
 5537:        BGP_STR
 5538:        "BGP neighbor address to clear\n"
 5539:        "Soft reconfig inbound update\n"
 5540:        "Push out the existing ORF prefix-list\n")
 5541: {
 5542:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 5543: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5544: }
 5545: 
 5546: DEFUN (clear_ip_bgp_peer_ipv4_soft_in,
 5547:        clear_ip_bgp_peer_ipv4_soft_in_cmd,
 5548:        "clear ip bgp A.B.C.D ipv4 (unicast|multicast) soft in",
 5549:        CLEAR_STR
 5550:        IP_STR
 5551:        BGP_STR
 5552:        "BGP neighbor address to clear\n"
 5553:        "Address family\n"
 5554:        "Address Family modifier\n"
 5555:        "Address Family modifier\n"
 5556:        "Soft reconfig\n"
 5557:        "Soft reconfig inbound update\n")
 5558: {
 5559:   if (strncmp (argv[1], "m", 1) == 0)
 5560:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 5561: 			  BGP_CLEAR_SOFT_IN, argv[0]);
 5562: 
 5563:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 5564: 			BGP_CLEAR_SOFT_IN, argv[0]);
 5565: }
 5566: 
 5567: ALIAS (clear_ip_bgp_peer_ipv4_soft_in,
 5568:        clear_ip_bgp_peer_ipv4_in_cmd,
 5569:        "clear ip bgp A.B.C.D ipv4 (unicast|multicast) in",
 5570:        CLEAR_STR
 5571:        IP_STR
 5572:        BGP_STR
 5573:        "BGP neighbor address to clear\n"
 5574:        "Address family\n"
 5575:        "Address Family modifier\n"
 5576:        "Address Family modifier\n"
 5577:        "Soft reconfig inbound update\n")
 5578: 
 5579: DEFUN (clear_ip_bgp_peer_ipv4_in_prefix_filter,
 5580:        clear_ip_bgp_peer_ipv4_in_prefix_filter_cmd,
 5581:        "clear ip bgp A.B.C.D ipv4 (unicast|multicast) in prefix-filter",
 5582:        CLEAR_STR
 5583:        IP_STR
 5584:        BGP_STR
 5585:        "BGP neighbor address to clear\n"
 5586:        "Address family\n"
 5587:        "Address Family modifier\n"
 5588:        "Address Family modifier\n"
 5589:        "Soft reconfig inbound update\n"
 5590:        "Push out the existing ORF prefix-list\n")
 5591: {
 5592:   if (strncmp (argv[1], "m", 1) == 0)
 5593:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 5594: 			  BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5595: 
 5596:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 5597: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5598: }
 5599: 
 5600: DEFUN (clear_ip_bgp_peer_vpnv4_soft_in,
 5601:        clear_ip_bgp_peer_vpnv4_soft_in_cmd,
 5602:        "clear ip bgp A.B.C.D vpnv4 unicast soft in",
 5603:        CLEAR_STR
 5604:        IP_STR
 5605:        BGP_STR
 5606:        "BGP neighbor address to clear\n"
 5607:        "Address family\n"
 5608:        "Address Family Modifier\n"
 5609:        "Soft reconfig\n"
 5610:        "Soft reconfig inbound update\n")
 5611: {
 5612:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer,
 5613: 			BGP_CLEAR_SOFT_IN, argv[0]);
 5614: }
 5615: 
 5616: ALIAS (clear_ip_bgp_peer_vpnv4_soft_in,
 5617:        clear_ip_bgp_peer_vpnv4_in_cmd,
 5618:        "clear ip bgp A.B.C.D vpnv4 unicast in",
 5619:        CLEAR_STR
 5620:        IP_STR
 5621:        BGP_STR
 5622:        "BGP neighbor address to clear\n"
 5623:        "Address family\n"
 5624:        "Address Family Modifier\n"
 5625:        "Soft reconfig inbound update\n")
 5626: 
 5627: DEFUN (clear_bgp_peer_soft_in,
 5628:        clear_bgp_peer_soft_in_cmd,
 5629:        "clear bgp (A.B.C.D|X:X::X:X) soft in",
 5630:        CLEAR_STR
 5631:        BGP_STR
 5632:        "BGP neighbor address to clear\n"
 5633:        "BGP IPv6 neighbor to clear\n"
 5634:        "Soft reconfig\n"
 5635:        "Soft reconfig inbound update\n")
 5636: {
 5637:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 5638: 			BGP_CLEAR_SOFT_IN, argv[0]);
 5639: }
 5640: 
 5641: ALIAS (clear_bgp_peer_soft_in,
 5642:        clear_bgp_ipv6_peer_soft_in_cmd,
 5643:        "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft in",
 5644:        CLEAR_STR
 5645:        BGP_STR
 5646:        "Address family\n"
 5647:        "BGP neighbor address to clear\n"
 5648:        "BGP IPv6 neighbor to clear\n"
 5649:        "Soft reconfig\n"
 5650:        "Soft reconfig inbound update\n")
 5651: 
 5652: ALIAS (clear_bgp_peer_soft_in,
 5653:        clear_bgp_peer_in_cmd,
 5654:        "clear bgp (A.B.C.D|X:X::X:X) in",
 5655:        CLEAR_STR
 5656:        BGP_STR
 5657:        "BGP neighbor address to clear\n"
 5658:        "BGP IPv6 neighbor to clear\n"
 5659:        "Soft reconfig inbound update\n")
 5660: 
 5661: ALIAS (clear_bgp_peer_soft_in,
 5662:        clear_bgp_ipv6_peer_in_cmd,
 5663:        "clear bgp ipv6 (A.B.C.D|X:X::X:X) in",
 5664:        CLEAR_STR
 5665:        BGP_STR
 5666:        "Address family\n"
 5667:        "BGP neighbor address to clear\n"
 5668:        "BGP IPv6 neighbor to clear\n"
 5669:        "Soft reconfig inbound update\n")
 5670: 
 5671: DEFUN (clear_bgp_peer_in_prefix_filter,
 5672:        clear_bgp_peer_in_prefix_filter_cmd,
 5673:        "clear bgp (A.B.C.D|X:X::X:X) in prefix-filter",
 5674:        CLEAR_STR
 5675:        BGP_STR
 5676:        "BGP neighbor address to clear\n"
 5677:        "BGP IPv6 neighbor to clear\n"
 5678:        "Soft reconfig inbound update\n"
 5679:        "Push out the existing ORF prefix-list\n")
 5680: {
 5681:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 5682: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5683: }
 5684: 
 5685: ALIAS (clear_bgp_peer_in_prefix_filter,
 5686:        clear_bgp_ipv6_peer_in_prefix_filter_cmd,
 5687:        "clear bgp ipv6 (A.B.C.D|X:X::X:X) in prefix-filter",
 5688:        CLEAR_STR
 5689:        BGP_STR
 5690:        "Address family\n"
 5691:        "BGP neighbor address to clear\n"
 5692:        "BGP IPv6 neighbor to clear\n"
 5693:        "Soft reconfig inbound update\n"
 5694:        "Push out the existing ORF prefix-list\n")
 5695: 
 5696: DEFUN (clear_ip_bgp_peer_group_soft_in,
 5697:        clear_ip_bgp_peer_group_soft_in_cmd,
 5698:        "clear ip bgp peer-group WORD soft in",
 5699:        CLEAR_STR
 5700:        IP_STR
 5701:        BGP_STR
 5702:        "Clear all members of peer-group\n"
 5703:        "BGP peer-group name\n"
 5704:        "Soft reconfig\n"
 5705:        "Soft reconfig inbound update\n")
 5706: {
 5707:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 5708: 			BGP_CLEAR_SOFT_IN, argv[0]);
 5709: }
 5710: 
 5711: ALIAS (clear_ip_bgp_peer_group_soft_in,
 5712:        clear_ip_bgp_peer_group_in_cmd,
 5713:        "clear ip bgp peer-group WORD in",
 5714:        CLEAR_STR
 5715:        IP_STR
 5716:        BGP_STR
 5717:        "Clear all members of peer-group\n"
 5718:        "BGP peer-group name\n"
 5719:        "Soft reconfig inbound update\n")
 5720: 
 5721: DEFUN (clear_ip_bgp_peer_group_in_prefix_filter,
 5722:        clear_ip_bgp_peer_group_in_prefix_filter_cmd,
 5723:        "clear ip bgp peer-group WORD in prefix-filter",
 5724:        CLEAR_STR
 5725:        IP_STR
 5726:        BGP_STR
 5727:        "Clear all members of peer-group\n"
 5728:        "BGP peer-group name\n"
 5729:        "Soft reconfig inbound update\n"
 5730:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5731: {
 5732:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 5733: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5734: }
 5735: 
 5736: DEFUN (clear_ip_bgp_peer_group_ipv4_soft_in,
 5737:        clear_ip_bgp_peer_group_ipv4_soft_in_cmd,
 5738:        "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft in",
 5739:        CLEAR_STR
 5740:        IP_STR
 5741:        BGP_STR
 5742:        "Clear all members of peer-group\n"
 5743:        "BGP peer-group name\n"
 5744:        "Address family\n"
 5745:        "Address Family modifier\n"
 5746:        "Address Family modifier\n"
 5747:        "Soft reconfig\n"
 5748:        "Soft reconfig inbound update\n")
 5749: {
 5750:   if (strncmp (argv[1], "m", 1) == 0)
 5751:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 5752: 			  BGP_CLEAR_SOFT_IN, argv[0]);
 5753: 
 5754:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 5755: 			BGP_CLEAR_SOFT_IN, argv[0]);
 5756: }
 5757: 
 5758: ALIAS (clear_ip_bgp_peer_group_ipv4_soft_in,
 5759:        clear_ip_bgp_peer_group_ipv4_in_cmd,
 5760:        "clear ip bgp peer-group WORD ipv4 (unicast|multicast) in",
 5761:        CLEAR_STR
 5762:        IP_STR
 5763:        BGP_STR
 5764:        "Clear all members of peer-group\n"
 5765:        "BGP peer-group name\n"
 5766:        "Address family\n"
 5767:        "Address Family modifier\n"
 5768:        "Address Family modifier\n"
 5769:        "Soft reconfig inbound update\n")
 5770: 
 5771: DEFUN (clear_ip_bgp_peer_group_ipv4_in_prefix_filter,
 5772:        clear_ip_bgp_peer_group_ipv4_in_prefix_filter_cmd,
 5773:        "clear ip bgp peer-group WORD ipv4 (unicast|multicast) in prefix-filter",
 5774:        CLEAR_STR
 5775:        IP_STR
 5776:        BGP_STR
 5777:        "Clear all members of peer-group\n"
 5778:        "BGP peer-group name\n"
 5779:        "Address family\n"
 5780:        "Address Family modifier\n"
 5781:        "Address Family modifier\n"
 5782:        "Soft reconfig inbound update\n"
 5783:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5784: {
 5785:   if (strncmp (argv[1], "m", 1) == 0)
 5786:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 5787: 			  BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5788: 
 5789:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 5790: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5791: }
 5792: 
 5793: DEFUN (clear_bgp_peer_group_soft_in,
 5794:        clear_bgp_peer_group_soft_in_cmd,
 5795:        "clear bgp peer-group WORD soft in",
 5796:        CLEAR_STR
 5797:        BGP_STR
 5798:        "Clear all members of peer-group\n"
 5799:        "BGP peer-group name\n"
 5800:        "Soft reconfig\n"
 5801:        "Soft reconfig inbound update\n")
 5802: {
 5803:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 5804: 			BGP_CLEAR_SOFT_IN, argv[0]);
 5805: }
 5806: 
 5807: ALIAS (clear_bgp_peer_group_soft_in,
 5808:        clear_bgp_ipv6_peer_group_soft_in_cmd,
 5809:        "clear bgp ipv6 peer-group WORD soft in",
 5810:        CLEAR_STR
 5811:        BGP_STR
 5812:        "Address family\n"
 5813:        "Clear all members of peer-group\n"
 5814:        "BGP peer-group name\n"
 5815:        "Soft reconfig\n"
 5816:        "Soft reconfig inbound update\n")
 5817: 
 5818: ALIAS (clear_bgp_peer_group_soft_in,
 5819:        clear_bgp_peer_group_in_cmd,
 5820:        "clear bgp peer-group WORD in",
 5821:        CLEAR_STR
 5822:        BGP_STR
 5823:        "Clear all members of peer-group\n"
 5824:        "BGP peer-group name\n"
 5825:        "Soft reconfig inbound update\n")
 5826: 
 5827: ALIAS (clear_bgp_peer_group_soft_in,
 5828:        clear_bgp_ipv6_peer_group_in_cmd,
 5829:        "clear bgp ipv6 peer-group WORD in",
 5830:        CLEAR_STR
 5831:        BGP_STR
 5832:        "Address family\n"
 5833:        "Clear all members of peer-group\n"
 5834:        "BGP peer-group name\n"
 5835:        "Soft reconfig inbound update\n")
 5836: 
 5837: DEFUN (clear_bgp_peer_group_in_prefix_filter,
 5838:        clear_bgp_peer_group_in_prefix_filter_cmd,
 5839:        "clear bgp peer-group WORD in prefix-filter",
 5840:        CLEAR_STR
 5841:        BGP_STR
 5842:        "Clear all members of peer-group\n"
 5843:        "BGP peer-group name\n"
 5844:        "Soft reconfig inbound update\n"
 5845:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5846: {
 5847:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 5848: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 5849: }
 5850: 
 5851: ALIAS (clear_bgp_peer_group_in_prefix_filter,
 5852:        clear_bgp_ipv6_peer_group_in_prefix_filter_cmd,
 5853:        "clear bgp ipv6 peer-group WORD in prefix-filter",
 5854:        CLEAR_STR
 5855:        BGP_STR
 5856:        "Address family\n"
 5857:        "Clear all members of peer-group\n"
 5858:        "BGP peer-group name\n"
 5859:        "Soft reconfig inbound update\n"
 5860:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5861: 
 5862: DEFUN (clear_ip_bgp_external_soft_in,
 5863:        clear_ip_bgp_external_soft_in_cmd,
 5864:        "clear ip bgp external soft in",
 5865:        CLEAR_STR
 5866:        IP_STR
 5867:        BGP_STR
 5868:        "Clear all external peers\n"
 5869:        "Soft reconfig\n"
 5870:        "Soft reconfig inbound update\n")
 5871: {
 5872:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 5873: 			BGP_CLEAR_SOFT_IN, NULL);
 5874: }
 5875: 
 5876: ALIAS (clear_ip_bgp_external_soft_in,
 5877:        clear_ip_bgp_external_in_cmd,
 5878:        "clear ip bgp external in",
 5879:        CLEAR_STR
 5880:        IP_STR
 5881:        BGP_STR
 5882:        "Clear all external peers\n"
 5883:        "Soft reconfig inbound update\n")
 5884: 
 5885: DEFUN (clear_ip_bgp_external_in_prefix_filter,
 5886:        clear_ip_bgp_external_in_prefix_filter_cmd,
 5887:        "clear ip bgp external in prefix-filter",
 5888:        CLEAR_STR
 5889:        IP_STR
 5890:        BGP_STR
 5891:        "Clear all external peers\n"
 5892:        "Soft reconfig inbound update\n"
 5893:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5894: {
 5895:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 5896: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5897: }
 5898: 
 5899: DEFUN (clear_ip_bgp_external_ipv4_soft_in,
 5900:        clear_ip_bgp_external_ipv4_soft_in_cmd,
 5901:        "clear ip bgp external ipv4 (unicast|multicast) soft in",
 5902:        CLEAR_STR
 5903:        IP_STR
 5904:        BGP_STR
 5905:        "Clear all external peers\n"
 5906:        "Address family\n"
 5907:        "Address Family modifier\n"
 5908:        "Address Family modifier\n"
 5909:        "Soft reconfig\n"
 5910:        "Soft reconfig inbound update\n")
 5911: {
 5912:   if (strncmp (argv[0], "m", 1) == 0)
 5913:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 5914: 			  BGP_CLEAR_SOFT_IN, NULL);
 5915: 
 5916:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 5917: 			BGP_CLEAR_SOFT_IN, NULL);
 5918: }
 5919: 
 5920: ALIAS (clear_ip_bgp_external_ipv4_soft_in,
 5921:        clear_ip_bgp_external_ipv4_in_cmd,
 5922:        "clear ip bgp external ipv4 (unicast|multicast) in",
 5923:        CLEAR_STR
 5924:        IP_STR
 5925:        BGP_STR
 5926:        "Clear all external peers\n"
 5927:        "Address family\n"
 5928:        "Address Family modifier\n"
 5929:        "Address Family modifier\n"
 5930:        "Soft reconfig inbound update\n")
 5931: 
 5932: DEFUN (clear_ip_bgp_external_ipv4_in_prefix_filter,
 5933:        clear_ip_bgp_external_ipv4_in_prefix_filter_cmd,
 5934:        "clear ip bgp external ipv4 (unicast|multicast) in prefix-filter",
 5935:        CLEAR_STR
 5936:        IP_STR
 5937:        BGP_STR
 5938:        "Clear all external peers\n"
 5939:        "Address family\n"
 5940:        "Address Family modifier\n"
 5941:        "Address Family modifier\n"
 5942:        "Soft reconfig inbound update\n"
 5943:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 5944: {
 5945:   if (strncmp (argv[0], "m", 1) == 0)
 5946:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 5947: 			  BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5948: 
 5949:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 5950: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 5951: }
 5952: 
 5953: DEFUN (clear_bgp_external_soft_in,
 5954:        clear_bgp_external_soft_in_cmd,
 5955:        "clear bgp external soft in",
 5956:        CLEAR_STR
 5957:        BGP_STR
 5958:        "Clear all external peers\n"
 5959:        "Soft reconfig\n"
 5960:        "Soft reconfig inbound update\n")
 5961: {
 5962:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 5963: 			BGP_CLEAR_SOFT_IN, NULL);
 5964: }
 5965: 
 5966: ALIAS (clear_bgp_external_soft_in,
 5967:        clear_bgp_ipv6_external_soft_in_cmd,
 5968:        "clear bgp ipv6 external soft in",
 5969:        CLEAR_STR
 5970:        BGP_STR
 5971:        "Address family\n"
 5972:        "Clear all external peers\n"
 5973:        "Soft reconfig\n"
 5974:        "Soft reconfig inbound update\n")
 5975: 
 5976: ALIAS (clear_bgp_external_soft_in,
 5977:        clear_bgp_external_in_cmd,
 5978:        "clear bgp external in",
 5979:        CLEAR_STR
 5980:        BGP_STR
 5981:        "Clear all external peers\n"
 5982:        "Soft reconfig inbound update\n")
 5983: 
 5984: ALIAS (clear_bgp_external_soft_in,
 5985:        clear_bgp_ipv6_external_in_cmd,
 5986:        "clear bgp ipv6 external WORD in",
 5987:        CLEAR_STR
 5988:        BGP_STR
 5989:        "Address family\n"
 5990:        "Clear all external peers\n"
 5991:        "Soft reconfig inbound update\n")
 5992: 
 5993: DEFUN (clear_bgp_external_in_prefix_filter,
 5994:        clear_bgp_external_in_prefix_filter_cmd,
 5995:        "clear bgp external in prefix-filter",
 5996:        CLEAR_STR
 5997:        BGP_STR
 5998:        "Clear all external peers\n"
 5999:        "Soft reconfig inbound update\n"
 6000:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 6001: {
 6002:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 6003: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, NULL);
 6004: }
 6005: 
 6006: ALIAS (clear_bgp_external_in_prefix_filter,
 6007:        clear_bgp_ipv6_external_in_prefix_filter_cmd,
 6008:        "clear bgp ipv6 external in prefix-filter",
 6009:        CLEAR_STR
 6010:        BGP_STR
 6011:        "Address family\n"
 6012:        "Clear all external peers\n"
 6013:        "Soft reconfig inbound update\n"
 6014:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 6015: 
 6016: DEFUN (clear_ip_bgp_as_soft_in,
 6017:        clear_ip_bgp_as_soft_in_cmd,
 6018:        "clear ip bgp " CMD_AS_RANGE " soft in",
 6019:        CLEAR_STR
 6020:        IP_STR
 6021:        BGP_STR
 6022:        "Clear peers with the AS number\n"
 6023:        "Soft reconfig\n"
 6024:        "Soft reconfig inbound update\n")
 6025: {
 6026:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 6027: 			BGP_CLEAR_SOFT_IN, argv[0]);
 6028: }
 6029: 
 6030: ALIAS (clear_ip_bgp_as_soft_in,
 6031:        clear_ip_bgp_as_in_cmd,
 6032:        "clear ip bgp " CMD_AS_RANGE " in",
 6033:        CLEAR_STR
 6034:        IP_STR
 6035:        BGP_STR
 6036:        "Clear peers with the AS number\n"
 6037:        "Soft reconfig inbound update\n")
 6038: 
 6039: DEFUN (clear_ip_bgp_as_in_prefix_filter,
 6040:        clear_ip_bgp_as_in_prefix_filter_cmd,
 6041:        "clear ip bgp " CMD_AS_RANGE " in prefix-filter",
 6042:        CLEAR_STR
 6043:        IP_STR
 6044:        BGP_STR
 6045:        "Clear peers with the AS number\n"
 6046:        "Soft reconfig inbound update\n"
 6047:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 6048: {
 6049:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 6050: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 6051: }
 6052: 
 6053: DEFUN (clear_ip_bgp_as_ipv4_soft_in,
 6054:        clear_ip_bgp_as_ipv4_soft_in_cmd,
 6055:        "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) soft in",
 6056:        CLEAR_STR
 6057:        IP_STR
 6058:        BGP_STR
 6059:        "Clear peers with the AS number\n"
 6060:        "Address family\n"
 6061:        "Address Family modifier\n"
 6062:        "Address Family modifier\n"
 6063:        "Soft reconfig\n"
 6064:        "Soft reconfig inbound update\n")
 6065: {
 6066:   if (strncmp (argv[1], "m", 1) == 0)
 6067:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 6068: 			  BGP_CLEAR_SOFT_IN, argv[0]);
 6069: 
 6070:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 6071: 			BGP_CLEAR_SOFT_IN, argv[0]);
 6072: }
 6073: 
 6074: ALIAS (clear_ip_bgp_as_ipv4_soft_in,
 6075:        clear_ip_bgp_as_ipv4_in_cmd,
 6076:        "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) in",
 6077:        CLEAR_STR
 6078:        IP_STR
 6079:        BGP_STR
 6080:        "Clear peers with the AS number\n"
 6081:        "Address family\n"
 6082:        "Address Family modifier\n"
 6083:        "Address Family modifier\n"
 6084:        "Soft reconfig inbound update\n")
 6085: 
 6086: DEFUN (clear_ip_bgp_as_ipv4_in_prefix_filter,
 6087:        clear_ip_bgp_as_ipv4_in_prefix_filter_cmd,
 6088:        "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) in prefix-filter",
 6089:        CLEAR_STR
 6090:        IP_STR
 6091:        BGP_STR
 6092:        "Clear peers with the AS number\n"
 6093:        "Address family\n"
 6094:        "Address Family modifier\n"
 6095:        "Address Family modifier\n"
 6096:        "Soft reconfig inbound update\n"
 6097:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 6098: {
 6099:   if (strncmp (argv[1], "m", 1) == 0)
 6100:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 6101: 			  BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 6102: 
 6103:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 6104: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 6105: }
 6106: 
 6107: DEFUN (clear_ip_bgp_as_vpnv4_soft_in,
 6108:        clear_ip_bgp_as_vpnv4_soft_in_cmd,
 6109:        "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast soft in",
 6110:        CLEAR_STR
 6111:        IP_STR
 6112:        BGP_STR
 6113:        "Clear peers with the AS number\n"
 6114:        "Address family\n"
 6115:        "Address Family modifier\n"
 6116:        "Soft reconfig\n"
 6117:        "Soft reconfig inbound update\n")
 6118: {
 6119:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as,
 6120: 			BGP_CLEAR_SOFT_IN, argv[0]);
 6121: }
 6122: 
 6123: ALIAS (clear_ip_bgp_as_vpnv4_soft_in,
 6124:        clear_ip_bgp_as_vpnv4_in_cmd,
 6125:        "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast in",
 6126:        CLEAR_STR
 6127:        IP_STR
 6128:        BGP_STR
 6129:        "Clear peers with the AS number\n"
 6130:        "Address family\n"
 6131:        "Address Family modifier\n"
 6132:        "Soft reconfig inbound update\n")
 6133: 
 6134: DEFUN (clear_bgp_as_soft_in,
 6135:        clear_bgp_as_soft_in_cmd,
 6136:        "clear bgp " CMD_AS_RANGE " soft in",
 6137:        CLEAR_STR
 6138:        BGP_STR
 6139:        "Clear peers with the AS number\n"
 6140:        "Soft reconfig\n"
 6141:        "Soft reconfig inbound update\n")
 6142: {
 6143:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 6144: 			BGP_CLEAR_SOFT_IN, argv[0]);
 6145: }
 6146: 
 6147: ALIAS (clear_bgp_as_soft_in,
 6148:        clear_bgp_ipv6_as_soft_in_cmd,
 6149:        "clear bgp ipv6 " CMD_AS_RANGE " soft in",
 6150:        CLEAR_STR
 6151:        BGP_STR
 6152:        "Address family\n"
 6153:        "Clear peers with the AS number\n"
 6154:        "Soft reconfig\n"
 6155:        "Soft reconfig inbound update\n")
 6156: 
 6157: ALIAS (clear_bgp_as_soft_in,
 6158:        clear_bgp_as_in_cmd,
 6159:        "clear bgp " CMD_AS_RANGE " in",
 6160:        CLEAR_STR
 6161:        BGP_STR
 6162:        "Clear peers with the AS number\n"
 6163:        "Soft reconfig inbound update\n")
 6164: 
 6165: ALIAS (clear_bgp_as_soft_in,
 6166:        clear_bgp_ipv6_as_in_cmd,
 6167:        "clear bgp ipv6 " CMD_AS_RANGE " in",
 6168:        CLEAR_STR
 6169:        BGP_STR
 6170:        "Address family\n"
 6171:        "Clear peers with the AS number\n"
 6172:        "Soft reconfig inbound update\n")
 6173: 
 6174: DEFUN (clear_bgp_as_in_prefix_filter,
 6175:        clear_bgp_as_in_prefix_filter_cmd,
 6176:        "clear bgp " CMD_AS_RANGE " in prefix-filter",
 6177:        CLEAR_STR
 6178:        BGP_STR
 6179:        "Clear peers with the AS number\n"
 6180:        "Soft reconfig inbound update\n"
 6181:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 6182: {
 6183:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 6184: 			BGP_CLEAR_SOFT_IN_ORF_PREFIX, argv[0]);
 6185: }
 6186: 
 6187: ALIAS (clear_bgp_as_in_prefix_filter,
 6188:        clear_bgp_ipv6_as_in_prefix_filter_cmd,
 6189:        "clear bgp ipv6 " CMD_AS_RANGE " in prefix-filter",
 6190:        CLEAR_STR
 6191:        BGP_STR
 6192:        "Address family\n"
 6193:        "Clear peers with the AS number\n"
 6194:        "Soft reconfig inbound update\n"
 6195:        "Push out prefix-list ORF and do inbound soft reconfig\n")
 6196: 
 6197: /* Both soft-reconfiguration */
 6198: DEFUN (clear_ip_bgp_all_soft,
 6199:        clear_ip_bgp_all_soft_cmd,
 6200:        "clear ip bgp * soft",
 6201:        CLEAR_STR
 6202:        IP_STR
 6203:        BGP_STR
 6204:        "Clear all peers\n"
 6205:        "Soft reconfig\n")
 6206: {
 6207:   if (argc == 1)
 6208:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 6209:                         BGP_CLEAR_SOFT_BOTH, NULL);
 6210: 
 6211:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 6212: 			BGP_CLEAR_SOFT_BOTH, NULL);
 6213: }
 6214: 
 6215: ALIAS (clear_ip_bgp_all_soft,
 6216:        clear_ip_bgp_instance_all_soft_cmd,
 6217:        "clear ip bgp view WORD * soft",
 6218:        CLEAR_STR
 6219:        IP_STR
 6220:        BGP_STR
 6221:        "BGP view\n"
 6222:        "view name\n"
 6223:        "Clear all peers\n"
 6224:        "Soft reconfig\n")
 6225: 
 6226: 
 6227: DEFUN (clear_ip_bgp_all_ipv4_soft,
 6228:        clear_ip_bgp_all_ipv4_soft_cmd,
 6229:        "clear ip bgp * ipv4 (unicast|multicast) soft",
 6230:        CLEAR_STR
 6231:        IP_STR
 6232:        BGP_STR
 6233:        "Clear all peers\n"
 6234:        "Address family\n"
 6235:        "Address Family Modifier\n"
 6236:        "Address Family Modifier\n"
 6237:        "Soft reconfig\n")
 6238: {
 6239:   if (strncmp (argv[0], "m", 1) == 0)
 6240:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 6241: 			  BGP_CLEAR_SOFT_BOTH, NULL);
 6242: 
 6243:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 6244: 			BGP_CLEAR_SOFT_BOTH, NULL);
 6245: }
 6246: 
 6247: DEFUN (clear_ip_bgp_instance_all_ipv4_soft,
 6248:        clear_ip_bgp_instance_all_ipv4_soft_cmd,
 6249:        "clear ip bgp view WORD * ipv4 (unicast|multicast) soft",
 6250:        CLEAR_STR
 6251:        IP_STR
 6252:        BGP_STR
 6253:        "BGP view\n"
 6254:        "view name\n"
 6255:        "Clear all peers\n"
 6256:        "Address family\n"
 6257:        "Address Family Modifier\n"
 6258:        "Address Family Modifier\n"
 6259:        "Soft reconfig\n")
 6260: {
 6261:   if (strncmp (argv[1], "m", 1) == 0)
 6262:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all,
 6263:                           BGP_CLEAR_SOFT_BOTH, NULL);
 6264: 
 6265:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 6266:                         BGP_CLEAR_SOFT_BOTH, NULL);
 6267: }
 6268: 
 6269: DEFUN (clear_ip_bgp_all_vpnv4_soft,
 6270:        clear_ip_bgp_all_vpnv4_soft_cmd,
 6271:        "clear ip bgp * vpnv4 unicast soft",
 6272:        CLEAR_STR
 6273:        IP_STR
 6274:        BGP_STR
 6275:        "Clear all peers\n"
 6276:        "Address family\n"
 6277:        "Address Family Modifier\n"
 6278:        "Soft reconfig\n")
 6279: {
 6280:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all,
 6281: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6282: }
 6283: 
 6284: DEFUN (clear_bgp_all_soft,
 6285:        clear_bgp_all_soft_cmd,
 6286:        "clear bgp * soft",
 6287:        CLEAR_STR
 6288:        BGP_STR
 6289:        "Clear all peers\n"
 6290:        "Soft reconfig\n")
 6291: {
 6292:   if (argc == 1)
 6293:     return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all,
 6294:                         BGP_CLEAR_SOFT_BOTH, argv[0]);
 6295:  
 6296:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 6297: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6298: }
 6299: 
 6300: ALIAS (clear_bgp_all_soft,
 6301:        clear_bgp_instance_all_soft_cmd,
 6302:        "clear bgp view WORD * soft",
 6303:        CLEAR_STR
 6304:        BGP_STR
 6305:        "BGP view\n"
 6306:        "view name\n"
 6307:        "Clear all peers\n"
 6308:        "Soft reconfig\n")
 6309: 
 6310: ALIAS (clear_bgp_all_soft,
 6311:        clear_bgp_ipv6_all_soft_cmd,
 6312:        "clear bgp ipv6 * soft",
 6313:        CLEAR_STR
 6314:        BGP_STR
 6315:        "Address family\n"
 6316:        "Clear all peers\n"
 6317:        "Soft reconfig\n")
 6318: 
 6319: DEFUN (clear_ip_bgp_peer_soft,
 6320:        clear_ip_bgp_peer_soft_cmd,
 6321:        "clear ip bgp A.B.C.D soft",
 6322:        CLEAR_STR
 6323:        IP_STR
 6324:        BGP_STR
 6325:        "BGP neighbor address to clear\n"
 6326:        "Soft reconfig\n")
 6327: {
 6328:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 6329: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6330: }
 6331: 
 6332: DEFUN (clear_ip_bgp_peer_ipv4_soft,
 6333:        clear_ip_bgp_peer_ipv4_soft_cmd,
 6334:        "clear ip bgp A.B.C.D ipv4 (unicast|multicast) soft",
 6335:        CLEAR_STR
 6336:        IP_STR
 6337:        BGP_STR
 6338:        "BGP neighbor address to clear\n"
 6339:        "Address family\n"
 6340:        "Address Family Modifier\n"
 6341:        "Address Family Modifier\n"
 6342:        "Soft reconfig\n")
 6343: {
 6344:   if (strncmp (argv[1], "m", 1) == 0)
 6345:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer,
 6346: 			  BGP_CLEAR_SOFT_BOTH, argv[0]);
 6347: 
 6348:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 6349: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6350: }
 6351: 
 6352: DEFUN (clear_ip_bgp_peer_vpnv4_soft,
 6353:        clear_ip_bgp_peer_vpnv4_soft_cmd,
 6354:        "clear ip bgp A.B.C.D vpnv4 unicast soft",
 6355:        CLEAR_STR
 6356:        IP_STR
 6357:        BGP_STR
 6358:        "BGP neighbor address to clear\n"
 6359:        "Address family\n"
 6360:        "Address Family Modifier\n"
 6361:        "Soft reconfig\n")
 6362: {
 6363:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer,
 6364: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6365: }
 6366: 
 6367: DEFUN (clear_bgp_peer_soft,
 6368:        clear_bgp_peer_soft_cmd,
 6369:        "clear bgp (A.B.C.D|X:X::X:X) soft",
 6370:        CLEAR_STR
 6371:        BGP_STR
 6372:        "BGP neighbor address to clear\n"
 6373:        "BGP IPv6 neighbor to clear\n"
 6374:        "Soft reconfig\n")
 6375: {
 6376:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 6377: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6378: }
 6379: 
 6380: ALIAS (clear_bgp_peer_soft,
 6381:        clear_bgp_ipv6_peer_soft_cmd,
 6382:        "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft",
 6383:        CLEAR_STR
 6384:        BGP_STR
 6385:        "Address family\n"
 6386:        "BGP neighbor address to clear\n"
 6387:        "BGP IPv6 neighbor to clear\n"
 6388:        "Soft reconfig\n")
 6389: 
 6390: DEFUN (clear_ip_bgp_peer_group_soft,
 6391:        clear_ip_bgp_peer_group_soft_cmd,
 6392:        "clear ip bgp peer-group WORD soft",
 6393:        CLEAR_STR
 6394:        IP_STR
 6395:        BGP_STR
 6396:        "Clear all members of peer-group\n"
 6397:        "BGP peer-group name\n"
 6398:        "Soft reconfig\n")
 6399: {
 6400:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 6401: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6402: }
 6403: 
 6404: DEFUN (clear_ip_bgp_peer_group_ipv4_soft,
 6405:        clear_ip_bgp_peer_group_ipv4_soft_cmd,
 6406:        "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft",
 6407:        CLEAR_STR
 6408:        IP_STR
 6409:        BGP_STR
 6410:        "Clear all members of peer-group\n"
 6411:        "BGP peer-group name\n"
 6412:        "Address family\n"
 6413:        "Address Family modifier\n"
 6414:        "Address Family modifier\n"
 6415:        "Soft reconfig\n")
 6416: {
 6417:   if (strncmp (argv[1], "m", 1) == 0)
 6418:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group,
 6419: 			  BGP_CLEAR_SOFT_BOTH, argv[0]);
 6420: 
 6421:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group,
 6422: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6423: }
 6424: 
 6425: DEFUN (clear_bgp_peer_group_soft,
 6426:        clear_bgp_peer_group_soft_cmd,
 6427:        "clear bgp peer-group WORD soft",
 6428:        CLEAR_STR
 6429:        BGP_STR
 6430:        "Clear all members of peer-group\n"
 6431:        "BGP peer-group name\n"
 6432:        "Soft reconfig\n")
 6433: {
 6434:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group,
 6435: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6436: }
 6437: 
 6438: ALIAS (clear_bgp_peer_group_soft,
 6439:        clear_bgp_ipv6_peer_group_soft_cmd,
 6440:        "clear bgp ipv6 peer-group WORD soft",
 6441:        CLEAR_STR
 6442:        BGP_STR
 6443:        "Address family\n"
 6444:        "Clear all members of peer-group\n"
 6445:        "BGP peer-group name\n"
 6446:        "Soft reconfig\n")
 6447: 
 6448: DEFUN (clear_ip_bgp_external_soft,
 6449:        clear_ip_bgp_external_soft_cmd,
 6450:        "clear ip bgp external soft",
 6451:        CLEAR_STR
 6452:        IP_STR
 6453:        BGP_STR
 6454:        "Clear all external peers\n"
 6455:        "Soft reconfig\n")
 6456: {
 6457:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 6458: 			BGP_CLEAR_SOFT_BOTH, NULL);
 6459: }
 6460: 
 6461: DEFUN (clear_ip_bgp_external_ipv4_soft,
 6462:        clear_ip_bgp_external_ipv4_soft_cmd,
 6463:        "clear ip bgp external ipv4 (unicast|multicast) soft",
 6464:        CLEAR_STR
 6465:        IP_STR
 6466:        BGP_STR
 6467:        "Clear all external peers\n"
 6468:        "Address family\n"
 6469:        "Address Family modifier\n"
 6470:        "Address Family modifier\n"
 6471:        "Soft reconfig\n")
 6472: {
 6473:   if (strncmp (argv[0], "m", 1) == 0)
 6474:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external,
 6475: 			  BGP_CLEAR_SOFT_BOTH, NULL);
 6476: 
 6477:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external,
 6478: 			BGP_CLEAR_SOFT_BOTH, NULL);
 6479: }
 6480: 
 6481: DEFUN (clear_bgp_external_soft,
 6482:        clear_bgp_external_soft_cmd,
 6483:        "clear bgp external soft",
 6484:        CLEAR_STR
 6485:        BGP_STR
 6486:        "Clear all external peers\n"
 6487:        "Soft reconfig\n")
 6488: {
 6489:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external,
 6490: 			BGP_CLEAR_SOFT_BOTH, NULL);
 6491: }
 6492: 
 6493: ALIAS (clear_bgp_external_soft,
 6494:        clear_bgp_ipv6_external_soft_cmd,
 6495:        "clear bgp ipv6 external soft",
 6496:        CLEAR_STR
 6497:        BGP_STR
 6498:        "Address family\n"
 6499:        "Clear all external peers\n"
 6500:        "Soft reconfig\n")
 6501: 
 6502: DEFUN (clear_ip_bgp_as_soft,
 6503:        clear_ip_bgp_as_soft_cmd,
 6504:        "clear ip bgp " CMD_AS_RANGE " soft",
 6505:        CLEAR_STR
 6506:        IP_STR
 6507:        BGP_STR
 6508:        "Clear peers with the AS number\n"
 6509:        "Soft reconfig\n")
 6510: {
 6511:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as,
 6512: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6513: }
 6514: 
 6515: DEFUN (clear_ip_bgp_as_ipv4_soft,
 6516:        clear_ip_bgp_as_ipv4_soft_cmd,
 6517:        "clear ip bgp " CMD_AS_RANGE " ipv4 (unicast|multicast) soft",
 6518:        CLEAR_STR
 6519:        IP_STR
 6520:        BGP_STR
 6521:        "Clear peers with the AS number\n"
 6522:        "Address family\n"
 6523:        "Address Family Modifier\n"
 6524:        "Address Family Modifier\n"
 6525:        "Soft reconfig\n")
 6526: {
 6527:   if (strncmp (argv[1], "m", 1) == 0)
 6528:     return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as,
 6529: 			  BGP_CLEAR_SOFT_BOTH, argv[0]);
 6530: 
 6531:   return bgp_clear_vty (vty, NULL,AFI_IP, SAFI_UNICAST, clear_as,
 6532: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6533: }
 6534: 
 6535: DEFUN (clear_ip_bgp_as_vpnv4_soft,
 6536:        clear_ip_bgp_as_vpnv4_soft_cmd,
 6537:        "clear ip bgp " CMD_AS_RANGE " vpnv4 unicast soft",
 6538:        CLEAR_STR
 6539:        IP_STR
 6540:        BGP_STR
 6541:        "Clear peers with the AS number\n"
 6542:        "Address family\n"
 6543:        "Address Family Modifier\n"
 6544:        "Soft reconfig\n")
 6545: {
 6546:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as,
 6547: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6548: }
 6549: 
 6550: DEFUN (clear_bgp_as_soft,
 6551:        clear_bgp_as_soft_cmd,
 6552:        "clear bgp " CMD_AS_RANGE " soft",
 6553:        CLEAR_STR
 6554:        BGP_STR
 6555:        "Clear peers with the AS number\n"
 6556:        "Soft reconfig\n")
 6557: {
 6558:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as,
 6559: 			BGP_CLEAR_SOFT_BOTH, argv[0]);
 6560: }
 6561: 
 6562: ALIAS (clear_bgp_as_soft,
 6563:        clear_bgp_ipv6_as_soft_cmd,
 6564:        "clear bgp ipv6 " CMD_AS_RANGE " soft",
 6565:        CLEAR_STR
 6566:        BGP_STR
 6567:        "Address family\n"
 6568:        "Clear peers with the AS number\n"
 6569:        "Soft reconfig\n")
 6570: 
 6571: /* RS-client soft reconfiguration. */
 6572: #ifdef HAVE_IPV6
 6573: DEFUN (clear_bgp_all_rsclient,
 6574:        clear_bgp_all_rsclient_cmd,
 6575:        "clear bgp * rsclient",
 6576:        CLEAR_STR
 6577:        BGP_STR
 6578:        "Clear all peers\n"
 6579:        "Soft reconfig for rsclient RIB\n")
 6580: {
 6581:   if (argc == 1)
 6582:     return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all,
 6583:                           BGP_CLEAR_SOFT_RSCLIENT, NULL);
 6584: 
 6585:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all,
 6586:                         BGP_CLEAR_SOFT_RSCLIENT, NULL);
 6587: }
 6588: 
 6589: ALIAS (clear_bgp_all_rsclient,
 6590:        clear_bgp_ipv6_all_rsclient_cmd,
 6591:        "clear bgp ipv6 * rsclient",
 6592:        CLEAR_STR
 6593:        BGP_STR
 6594:        "Address family\n"
 6595:        "Clear all peers\n"
 6596:        "Soft reconfig for rsclient RIB\n")
 6597: 
 6598: ALIAS (clear_bgp_all_rsclient,
 6599:        clear_bgp_instance_all_rsclient_cmd,
 6600:        "clear bgp view WORD * rsclient",
 6601:        CLEAR_STR
 6602:        BGP_STR
 6603:        "BGP view\n"
 6604:        "view name\n"
 6605:        "Clear all peers\n"
 6606:        "Soft reconfig for rsclient RIB\n")
 6607: 
 6608: ALIAS (clear_bgp_all_rsclient,
 6609:        clear_bgp_ipv6_instance_all_rsclient_cmd,
 6610:        "clear bgp ipv6 view WORD * rsclient",
 6611:        CLEAR_STR
 6612:        BGP_STR
 6613:        "Address family\n"
 6614:        "BGP view\n"
 6615:        "view name\n"
 6616:        "Clear all peers\n"
 6617:        "Soft reconfig for rsclient RIB\n")
 6618: #endif /* HAVE_IPV6 */
 6619: 
 6620: DEFUN (clear_ip_bgp_all_rsclient,
 6621:        clear_ip_bgp_all_rsclient_cmd,
 6622:        "clear ip bgp * rsclient",
 6623:        CLEAR_STR
 6624:        IP_STR
 6625:        BGP_STR
 6626:        "Clear all peers\n"
 6627:        "Soft reconfig for rsclient RIB\n")
 6628: {
 6629:   if (argc == 1)
 6630:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all,
 6631:                           BGP_CLEAR_SOFT_RSCLIENT, NULL);
 6632: 
 6633:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_all,
 6634:                         BGP_CLEAR_SOFT_RSCLIENT, NULL);
 6635: }
 6636: 
 6637: ALIAS (clear_ip_bgp_all_rsclient,
 6638:        clear_ip_bgp_instance_all_rsclient_cmd,
 6639:        "clear ip bgp view WORD * rsclient",
 6640:        CLEAR_STR
 6641:        IP_STR
 6642:        BGP_STR
 6643:        "BGP view\n"
 6644:        "view name\n"
 6645:        "Clear all peers\n"
 6646:        "Soft reconfig for rsclient RIB\n")
 6647: 
 6648: #ifdef HAVE_IPV6
 6649: DEFUN (clear_bgp_peer_rsclient,
 6650:        clear_bgp_peer_rsclient_cmd,
 6651:        "clear bgp (A.B.C.D|X:X::X:X) rsclient",
 6652:        CLEAR_STR
 6653:        BGP_STR
 6654:        "BGP neighbor IP address to clear\n"
 6655:        "BGP IPv6 neighbor to clear\n"
 6656:        "Soft reconfig for rsclient RIB\n")
 6657: {
 6658:   if (argc == 2)
 6659:     return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_peer,
 6660:                           BGP_CLEAR_SOFT_RSCLIENT, argv[1]);
 6661: 
 6662:   return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer,
 6663:                         BGP_CLEAR_SOFT_RSCLIENT, argv[0]);
 6664: }
 6665: 
 6666: ALIAS (clear_bgp_peer_rsclient,
 6667:        clear_bgp_ipv6_peer_rsclient_cmd,
 6668:        "clear bgp ipv6 (A.B.C.D|X:X::X:X) rsclient",
 6669:        CLEAR_STR
 6670:        BGP_STR
 6671:        "Address family\n"
 6672:        "BGP neighbor IP address to clear\n"
 6673:        "BGP IPv6 neighbor to clear\n"
 6674:        "Soft reconfig for rsclient RIB\n")
 6675: 
 6676: ALIAS (clear_bgp_peer_rsclient,
 6677:        clear_bgp_instance_peer_rsclient_cmd,
 6678:        "clear bgp view WORD (A.B.C.D|X:X::X:X) rsclient",
 6679:        CLEAR_STR
 6680:        BGP_STR
 6681:        "BGP view\n"
 6682:        "view name\n"
 6683:        "BGP neighbor IP address to clear\n"
 6684:        "BGP IPv6 neighbor to clear\n"
 6685:        "Soft reconfig for rsclient RIB\n")
 6686: 
 6687: ALIAS (clear_bgp_peer_rsclient,
 6688:        clear_bgp_ipv6_instance_peer_rsclient_cmd,
 6689:        "clear bgp ipv6 view WORD (A.B.C.D|X:X::X:X) rsclient",
 6690:        CLEAR_STR
 6691:        BGP_STR
 6692:        "Address family\n"
 6693:        "BGP view\n"
 6694:        "view name\n"
 6695:        "BGP neighbor IP address to clear\n"
 6696:        "BGP IPv6 neighbor to clear\n"
 6697:        "Soft reconfig for rsclient RIB\n")
 6698: #endif /* HAVE_IPV6 */
 6699: 
 6700: DEFUN (clear_ip_bgp_peer_rsclient,
 6701:        clear_ip_bgp_peer_rsclient_cmd,
 6702:        "clear ip bgp (A.B.C.D|X:X::X:X) rsclient",
 6703:        CLEAR_STR
 6704:        IP_STR
 6705:        BGP_STR
 6706:        "BGP neighbor IP address to clear\n"
 6707:        "BGP IPv6 neighbor to clear\n"
 6708:        "Soft reconfig for rsclient RIB\n")
 6709: {
 6710:   if (argc == 2)
 6711:     return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_peer,
 6712:                           BGP_CLEAR_SOFT_RSCLIENT, argv[1]);
 6713: 
 6714:   return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer,
 6715:                         BGP_CLEAR_SOFT_RSCLIENT, argv[0]);
 6716: }
 6717: 
 6718: ALIAS (clear_ip_bgp_peer_rsclient,
 6719:        clear_ip_bgp_instance_peer_rsclient_cmd,
 6720:        "clear ip bgp view WORD (A.B.C.D|X:X::X:X) rsclient",
 6721:        CLEAR_STR
 6722:        IP_STR
 6723:        BGP_STR
 6724:        "BGP view\n"
 6725:        "view name\n"
 6726:        "BGP neighbor IP address to clear\n"
 6727:        "BGP IPv6 neighbor to clear\n"
 6728:        "Soft reconfig for rsclient RIB\n")
 6729: 
 6730: DEFUN (show_bgp_views,
 6731:        show_bgp_views_cmd,
 6732:        "show bgp views",
 6733:        SHOW_STR
 6734:        BGP_STR
 6735:        "Show the defined BGP views\n")
 6736: {
 6737:   struct list *inst = bm->bgp;
 6738:   struct listnode *node;
 6739:   struct bgp *bgp;
 6740: 
 6741:   if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
 6742:     {
 6743:       vty_out (vty, "Multiple BGP views are not defined%s", VTY_NEWLINE);
 6744:       return CMD_WARNING;
 6745:     }
 6746:   
 6747:   vty_out (vty, "Defined BGP views:%s", VTY_NEWLINE);
 6748:   for (ALL_LIST_ELEMENTS_RO(inst, node, bgp))
 6749:     vty_out (vty, "\t%s (AS%u)%s", 
 6750:              bgp->name ? bgp->name : "(null)",
 6751:              bgp->as, VTY_NEWLINE);
 6752:   
 6753:   return CMD_SUCCESS;
 6754: }
 6755: 
 6756: DEFUN (show_bgp_memory, 
 6757:        show_bgp_memory_cmd,
 6758:        "show bgp memory",
 6759:        SHOW_STR
 6760:        BGP_STR
 6761:        "Global BGP memory statistics\n")
 6762: {
 6763:   char memstrbuf[MTYPE_MEMSTR_LEN];
 6764:   unsigned long count;
 6765:   
 6766:   /* RIB related usage stats */
 6767:   count = mtype_stats_alloc (MTYPE_BGP_NODE);
 6768:   vty_out (vty, "%ld RIB nodes, using %s of memory%s", count,
 6769:            mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6770:                          count * sizeof (struct bgp_node)),
 6771:            VTY_NEWLINE);
 6772:   
 6773:   count = mtype_stats_alloc (MTYPE_BGP_ROUTE);
 6774:   vty_out (vty, "%ld BGP routes, using %s of memory%s", count,
 6775:            mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6776:                          count * sizeof (struct bgp_info)),
 6777:            VTY_NEWLINE);
 6778:   if ((count = mtype_stats_alloc (MTYPE_BGP_ROUTE_EXTRA)))
 6779:     vty_out (vty, "%ld BGP route ancillaries, using %s of memory%s", count,
 6780:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6781:                            count * sizeof (struct bgp_info_extra)),
 6782:              VTY_NEWLINE);
 6783:   
 6784:   if ((count = mtype_stats_alloc (MTYPE_BGP_STATIC)))
 6785:     vty_out (vty, "%ld Static routes, using %s of memory%s", count,
 6786:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6787:                          count * sizeof (struct bgp_static)),
 6788:              VTY_NEWLINE);
 6789:   
 6790:   /* Adj-In/Out */
 6791:   if ((count = mtype_stats_alloc (MTYPE_BGP_ADJ_IN)))
 6792:     vty_out (vty, "%ld Adj-In entries, using %s of memory%s", count,
 6793:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6794:                            count * sizeof (struct bgp_adj_in)),
 6795:              VTY_NEWLINE);
 6796:   if ((count = mtype_stats_alloc (MTYPE_BGP_ADJ_OUT)))
 6797:     vty_out (vty, "%ld Adj-Out entries, using %s of memory%s", count,
 6798:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6799:                            count * sizeof (struct bgp_adj_out)),
 6800:              VTY_NEWLINE);
 6801:   
 6802:   if ((count = mtype_stats_alloc (MTYPE_BGP_NEXTHOP_CACHE)))
 6803:     vty_out (vty, "%ld Nexthop cache entries, using %s of memory%s", count,
 6804:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6805:                          count * sizeof (struct bgp_nexthop_cache)),
 6806:              VTY_NEWLINE);
 6807: 
 6808:   if ((count = mtype_stats_alloc (MTYPE_BGP_DAMP_INFO)))
 6809:     vty_out (vty, "%ld Dampening entries, using %s of memory%s", count,
 6810:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6811:                          count * sizeof (struct bgp_damp_info)),
 6812:              VTY_NEWLINE);
 6813: 
 6814:   /* Attributes */
 6815:   count = attr_count();
 6816:   vty_out (vty, "%ld BGP attributes, using %s of memory%s", count, 
 6817:            mtype_memstr (memstrbuf, sizeof (memstrbuf), 
 6818:                          count * sizeof(struct attr)), 
 6819:            VTY_NEWLINE);
 6820:   if ((count = mtype_stats_alloc (MTYPE_ATTR_EXTRA)))
 6821:     vty_out (vty, "%ld BGP extra attributes, using %s of memory%s", count, 
 6822:              mtype_memstr (memstrbuf, sizeof (memstrbuf), 
 6823:                            count * sizeof(struct attr_extra)), 
 6824:              VTY_NEWLINE);
 6825:   
 6826:   if ((count = attr_unknown_count()))
 6827:     vty_out (vty, "%ld unknown attributes%s", count, VTY_NEWLINE);
 6828:   
 6829:   /* AS_PATH attributes */
 6830:   count = aspath_count ();
 6831:   vty_out (vty, "%ld BGP AS-PATH entries, using %s of memory%s", count,
 6832:            mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6833:                          count * sizeof (struct aspath)),
 6834:            VTY_NEWLINE);
 6835:   
 6836:   count = mtype_stats_alloc (MTYPE_AS_SEG);
 6837:   vty_out (vty, "%ld BGP AS-PATH segments, using %s of memory%s", count,
 6838:            mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6839:                          count * sizeof (struct assegment)),
 6840:            VTY_NEWLINE);
 6841:   
 6842:   /* Other attributes */
 6843:   if ((count = community_count ()))
 6844:     vty_out (vty, "%ld BGP community entries, using %s of memory%s", count,
 6845:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6846:                          count * sizeof (struct community)),
 6847:              VTY_NEWLINE);
 6848:   if ((count = mtype_stats_alloc (MTYPE_ECOMMUNITY)))
 6849:     vty_out (vty, "%ld BGP community entries, using %s of memory%s", count,
 6850:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6851:                          count * sizeof (struct ecommunity)),
 6852:              VTY_NEWLINE);
 6853:   
 6854:   if ((count = mtype_stats_alloc (MTYPE_CLUSTER)))
 6855:     vty_out (vty, "%ld Cluster lists, using %s of memory%s", count,
 6856:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6857:                          count * sizeof (struct cluster_list)),
 6858:              VTY_NEWLINE);
 6859:   
 6860:   /* Peer related usage */
 6861:   count = mtype_stats_alloc (MTYPE_BGP_PEER);
 6862:   vty_out (vty, "%ld peers, using %s of memory%s", count,
 6863:            mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6864:                          count * sizeof (struct peer)),
 6865:            VTY_NEWLINE);
 6866:   
 6867:   if ((count = mtype_stats_alloc (MTYPE_PEER_GROUP)))
 6868:     vty_out (vty, "%ld peer groups, using %s of memory%s", count,
 6869:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6870:                            count * sizeof (struct peer_group)),
 6871:              VTY_NEWLINE);
 6872:   
 6873:   /* Other */
 6874:   if ((count = mtype_stats_alloc (MTYPE_HASH)))
 6875:     vty_out (vty, "%ld hash tables, using %s of memory%s", count,
 6876:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6877:                            count * sizeof (struct hash)),
 6878:              VTY_NEWLINE);
 6879:   if ((count = mtype_stats_alloc (MTYPE_HASH_BACKET)))
 6880:     vty_out (vty, "%ld hash buckets, using %s of memory%s", count,
 6881:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6882:                            count * sizeof (struct hash_backet)),
 6883:              VTY_NEWLINE);
 6884:   if ((count = mtype_stats_alloc (MTYPE_BGP_REGEXP)))
 6885:     vty_out (vty, "%ld compiled regexes, using %s of memory%s", count,
 6886:              mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6887:                            count * sizeof (regex_t)),
 6888:              VTY_NEWLINE);
 6889:   return CMD_SUCCESS;
 6890: }
 6891: 
 6892: /* Show BGP peer's summary information. */
 6893: static int
 6894: bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi)
 6895: {
 6896:   struct peer *peer;
 6897:   struct listnode *node, *nnode;
 6898:   unsigned int count = 0;
 6899:   char timebuf[BGP_UPTIME_LEN];
 6900:   int len;
 6901: 
 6902:   /* Header string for each address family. */
 6903:   static char header[] = "Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd";
 6904:   
 6905:   for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 6906:     {
 6907:       if (peer->afc[afi][safi])
 6908: 	{
 6909:           if (!count)
 6910:             {
 6911:               unsigned long ents;
 6912:               char memstrbuf[MTYPE_MEMSTR_LEN];
 6913:               
 6914:               /* Usage summary and header */
 6915:               vty_out (vty,
 6916:                        "BGP router identifier %s, local AS number %u%s",
 6917:                        inet_ntoa (bgp->router_id), bgp->as, VTY_NEWLINE);
 6918: 
 6919:               ents = bgp_table_count (bgp->rib[afi][safi]);
 6920:               vty_out (vty, "RIB entries %ld, using %s of memory%s", ents,
 6921:                        mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6922:                                      ents * sizeof (struct bgp_node)),
 6923:                        VTY_NEWLINE);
 6924:               
 6925:               /* Peer related usage */
 6926:               ents = listcount (bgp->peer);
 6927:               vty_out (vty, "Peers %ld, using %s of memory%s",
 6928:                        ents,
 6929:                        mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6930:                                      ents * sizeof (struct peer)),
 6931:                        VTY_NEWLINE);
 6932:               
 6933:               if ((ents = listcount (bgp->rsclient)))
 6934:                 vty_out (vty, "RS-Client peers %ld, using %s of memory%s",
 6935:                          ents,
 6936:                          mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6937:                                        ents * sizeof (struct peer)),
 6938:                          VTY_NEWLINE);
 6939:               
 6940:               if ((ents = listcount (bgp->group)))
 6941:                 vty_out (vty, "Peer groups %ld, using %s of memory%s", ents,
 6942:                          mtype_memstr (memstrbuf, sizeof (memstrbuf),
 6943:                                        ents * sizeof (struct peer_group)),
 6944:                          VTY_NEWLINE);
 6945: 
 6946:               if (CHECK_FLAG (bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING))
 6947:                 vty_out (vty, "Dampening enabled.%s", VTY_NEWLINE);
 6948:               vty_out (vty, "%s", VTY_NEWLINE);
 6949:               vty_out (vty, "%s%s", header, VTY_NEWLINE);
 6950:             }
 6951:           
 6952: 	  count++;
 6953: 
 6954: 	  len = vty_out (vty, "%s", peer->host);
 6955: 	  len = 16 - len;
 6956: 	  if (len < 1)
 6957: 	    vty_out (vty, "%s%*s", VTY_NEWLINE, 16, " ");
 6958: 	  else
 6959: 	    vty_out (vty, "%*s", len, " ");
 6960: 
 6961: 	  vty_out (vty, "4 ");
 6962: 
 6963: 	  vty_out (vty, "%5u %7d %7d %8d %4d %4lu ",
 6964: 		   peer->as,
 6965: 		   peer->open_in + peer->update_in + peer->keepalive_in
 6966: 		   + peer->notify_in + peer->refresh_in + peer->dynamic_cap_in,
 6967: 		   peer->open_out + peer->update_out + peer->keepalive_out
 6968: 		   + peer->notify_out + peer->refresh_out
 6969: 		   + peer->dynamic_cap_out,
 6970: 		   0, 0, (unsigned long) peer->obuf->count);
 6971: 
 6972: 	  vty_out (vty, "%8s", 
 6973: 		   peer_uptime (peer->uptime, timebuf, BGP_UPTIME_LEN));
 6974: 
 6975: 	  if (peer->status == Established)
 6976: 	    {
 6977: 	      vty_out (vty, " %8ld", peer->pcount[afi][safi]);
 6978: 	    }
 6979: 	  else
 6980: 	    {
 6981: 	      if (CHECK_FLAG (peer->flags, PEER_FLAG_SHUTDOWN))
 6982: 		vty_out (vty, " Idle (Admin)");
 6983: 	      else if (CHECK_FLAG (peer->sflags, PEER_STATUS_PREFIX_OVERFLOW))
 6984: 		vty_out (vty, " Idle (PfxCt)");
 6985: 	      else
 6986: 		vty_out (vty, " %-11s", LOOKUP(bgp_status_msg, peer->status));
 6987: 	    }
 6988: 
 6989: 	  vty_out (vty, "%s", VTY_NEWLINE);
 6990: 	}
 6991:     }
 6992: 
 6993:   if (count)
 6994:     vty_out (vty, "%sTotal number of neighbors %d%s", VTY_NEWLINE,
 6995: 	     count, VTY_NEWLINE);
 6996:   else
 6997:     vty_out (vty, "No %s neighbor is configured%s",
 6998: 	     afi == AFI_IP ? "IPv4" : "IPv6", VTY_NEWLINE);
 6999:   return CMD_SUCCESS;
 7000: }
 7001: 
 7002: static int 
 7003: bgp_show_summary_vty (struct vty *vty, const char *name, 
 7004:                       afi_t afi, safi_t safi)
 7005: {
 7006:   struct bgp *bgp;
 7007: 
 7008:   if (name)
 7009:     {
 7010:       bgp = bgp_lookup_by_name (name);
 7011:       
 7012:       if (! bgp)
 7013: 	{
 7014: 	  vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE); 
 7015: 	  return CMD_WARNING;
 7016: 	}
 7017: 
 7018:       bgp_show_summary (vty, bgp, afi, safi);
 7019:       return CMD_SUCCESS;
 7020:     }
 7021:   
 7022:   bgp = bgp_get_default ();
 7023: 
 7024:   if (bgp)
 7025:     bgp_show_summary (vty, bgp, afi, safi);    
 7026:  
 7027:   return CMD_SUCCESS;
 7028: }
 7029: 
 7030: /* `show ip bgp summary' commands. */
 7031: DEFUN (show_ip_bgp_summary, 
 7032:        show_ip_bgp_summary_cmd,
 7033:        "show ip bgp summary",
 7034:        SHOW_STR
 7035:        IP_STR
 7036:        BGP_STR
 7037:        "Summary of BGP neighbor status\n")
 7038: {
 7039:   return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_UNICAST);
 7040: }
 7041: 
 7042: DEFUN (show_ip_bgp_instance_summary,
 7043:        show_ip_bgp_instance_summary_cmd,
 7044:        "show ip bgp view WORD summary",
 7045:        SHOW_STR
 7046:        IP_STR
 7047:        BGP_STR
 7048:        "BGP view\n"
 7049:        "View name\n"
 7050:        "Summary of BGP neighbor status\n")
 7051: {
 7052:   return bgp_show_summary_vty (vty, argv[0], AFI_IP, SAFI_UNICAST);  
 7053: }
 7054: 
 7055: DEFUN (show_ip_bgp_ipv4_summary, 
 7056:        show_ip_bgp_ipv4_summary_cmd,
 7057:        "show ip bgp ipv4 (unicast|multicast) summary",
 7058:        SHOW_STR
 7059:        IP_STR
 7060:        BGP_STR
 7061:        "Address family\n"
 7062:        "Address Family modifier\n"
 7063:        "Address Family modifier\n"
 7064:        "Summary of BGP neighbor status\n")
 7065: {
 7066:   if (strncmp (argv[0], "m", 1) == 0)
 7067:     return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MULTICAST);
 7068: 
 7069:   return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_UNICAST);
 7070: }
 7071: 
 7072: ALIAS (show_ip_bgp_ipv4_summary,
 7073:        show_bgp_ipv4_safi_summary_cmd,
 7074:        "show bgp ipv4 (unicast|multicast) summary",
 7075:        SHOW_STR
 7076:        BGP_STR
 7077:        "Address family\n"
 7078:        "Address Family modifier\n"
 7079:        "Address Family modifier\n"
 7080:        "Summary of BGP neighbor status\n")
 7081: 
 7082: DEFUN (show_ip_bgp_instance_ipv4_summary,
 7083:        show_ip_bgp_instance_ipv4_summary_cmd,
 7084:        "show ip bgp view WORD ipv4 (unicast|multicast) summary",
 7085:        SHOW_STR
 7086:        IP_STR
 7087:        BGP_STR
 7088:        "BGP view\n"
 7089:        "View name\n"
 7090:        "Address family\n"
 7091:        "Address Family modifier\n"
 7092:        "Address Family modifier\n"
 7093:        "Summary of BGP neighbor status\n")
 7094: {
 7095:   if (strncmp (argv[1], "m", 1) == 0)
 7096:     return bgp_show_summary_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST);
 7097:   else
 7098:     return bgp_show_summary_vty (vty, argv[0], AFI_IP, SAFI_UNICAST);
 7099: }
 7100: 
 7101: ALIAS (show_ip_bgp_instance_ipv4_summary,
 7102:        show_bgp_instance_ipv4_safi_summary_cmd,
 7103:        "show bgp view WORD ipv4 (unicast|multicast) summary",
 7104:        SHOW_STR
 7105:        BGP_STR
 7106:        "BGP view\n"
 7107:        "View name\n"
 7108:        "Address family\n"
 7109:        "Address Family modifier\n"
 7110:        "Address Family modifier\n"
 7111:        "Summary of BGP neighbor status\n")
 7112: 
 7113: DEFUN (show_ip_bgp_vpnv4_all_summary,
 7114:        show_ip_bgp_vpnv4_all_summary_cmd,
 7115:        "show ip bgp vpnv4 all summary",
 7116:        SHOW_STR
 7117:        IP_STR
 7118:        BGP_STR
 7119:        "Display VPNv4 NLRI specific information\n"
 7120:        "Display information about all VPNv4 NLRIs\n"
 7121:        "Summary of BGP neighbor status\n")
 7122: {
 7123:   return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN);
 7124: }
 7125: 
 7126: DEFUN (show_ip_bgp_vpnv4_rd_summary,
 7127:        show_ip_bgp_vpnv4_rd_summary_cmd,
 7128:        "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn summary",
 7129:        SHOW_STR
 7130:        IP_STR
 7131:        BGP_STR
 7132:        "Display VPNv4 NLRI specific information\n"
 7133:        "Display information for a route distinguisher\n"
 7134:        "VPN Route Distinguisher\n"
 7135:        "Summary of BGP neighbor status\n")
 7136: {
 7137:   int ret;
 7138:   struct prefix_rd prd;
 7139: 
 7140:   ret = str2prefix_rd (argv[0], &prd);
 7141:   if (! ret)
 7142:     {
 7143:       vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
 7144:       return CMD_WARNING;
 7145:     }
 7146: 
 7147:   return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN);
 7148: }
 7149: 
 7150: #ifdef HAVE_IPV6
 7151: DEFUN (show_bgp_summary, 
 7152:        show_bgp_summary_cmd,
 7153:        "show bgp summary",
 7154:        SHOW_STR
 7155:        BGP_STR
 7156:        "Summary of BGP neighbor status\n")
 7157: {
 7158:   return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST);
 7159: }
 7160: 
 7161: DEFUN (show_bgp_instance_summary,
 7162:        show_bgp_instance_summary_cmd,
 7163:        "show bgp view WORD summary",
 7164:        SHOW_STR
 7165:        BGP_STR
 7166:        "BGP view\n"
 7167:        "View name\n"
 7168:        "Summary of BGP neighbor status\n")
 7169: {
 7170:   return bgp_show_summary_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST);
 7171: }
 7172: 
 7173: ALIAS (show_bgp_summary, 
 7174:        show_bgp_ipv6_summary_cmd,
 7175:        "show bgp ipv6 summary",
 7176:        SHOW_STR
 7177:        BGP_STR
 7178:        "Address family\n"
 7179:        "Summary of BGP neighbor status\n")
 7180: 
 7181: ALIAS (show_bgp_instance_summary,
 7182:        show_bgp_instance_ipv6_summary_cmd,
 7183:        "show bgp view WORD ipv6 summary",
 7184:        SHOW_STR
 7185:        BGP_STR
 7186:        "BGP view\n"
 7187:        "View name\n"
 7188:        "Address family\n"
 7189:        "Summary of BGP neighbor status\n")
 7190: 
 7191: DEFUN (show_bgp_ipv6_safi_summary,
 7192:        show_bgp_ipv6_safi_summary_cmd,
 7193:        "show bgp ipv6 (unicast|multicast) summary",
 7194:        SHOW_STR
 7195:        BGP_STR
 7196:        "Address family\n"
 7197:        "Address Family modifier\n"
 7198:        "Address Family modifier\n"
 7199:        "Summary of BGP neighbor status\n")
 7200: {
 7201:   if (strncmp (argv[0], "m", 1) == 0)
 7202:     return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_MULTICAST);
 7203: 
 7204:   return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST);
 7205: }
 7206: 
 7207: DEFUN (show_bgp_instance_ipv6_safi_summary,
 7208:        show_bgp_instance_ipv6_safi_summary_cmd,
 7209:        "show bgp view WORD ipv6 (unicast|multicast) summary",
 7210:        SHOW_STR
 7211:        BGP_STR
 7212:        "BGP view\n"
 7213:        "View name\n"
 7214:        "Address family\n"
 7215:        "Address Family modifier\n"
 7216:        "Address Family modifier\n"
 7217:        "Summary of BGP neighbor status\n")
 7218: {
 7219:   if (strncmp (argv[1], "m", 1) == 0)
 7220:     return bgp_show_summary_vty (vty, argv[0], AFI_IP6, SAFI_MULTICAST);
 7221: 
 7222:   return bgp_show_summary_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST);
 7223: }
 7224: 
 7225: /* old command */
 7226: DEFUN (show_ipv6_bgp_summary, 
 7227:        show_ipv6_bgp_summary_cmd,
 7228:        "show ipv6 bgp summary",
 7229:        SHOW_STR
 7230:        IPV6_STR
 7231:        BGP_STR
 7232:        "Summary of BGP neighbor status\n")
 7233: {
 7234:   return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST);
 7235: }
 7236: 
 7237: /* old command */
 7238: DEFUN (show_ipv6_mbgp_summary, 
 7239:        show_ipv6_mbgp_summary_cmd,
 7240:        "show ipv6 mbgp summary",
 7241:        SHOW_STR
 7242:        IPV6_STR
 7243:        MBGP_STR
 7244:        "Summary of BGP neighbor status\n")
 7245: {
 7246:   return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_MULTICAST);
 7247: }
 7248: #endif /* HAVE_IPV6 */
 7249: 
 7250: const char *
 7251: afi_safi_print (afi_t afi, safi_t safi)
 7252: {
 7253:   if (afi == AFI_IP && safi == SAFI_UNICAST)
 7254:     return "IPv4 Unicast";
 7255:   else if (afi == AFI_IP && safi == SAFI_MULTICAST)
 7256:     return "IPv4 Multicast";
 7257:   else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
 7258:     return "VPNv4 Unicast";
 7259:   else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
 7260:     return "IPv6 Unicast";
 7261:   else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
 7262:     return "IPv6 Multicast";
 7263:   else
 7264:     return "Unknown";
 7265: }
 7266: 
 7267: /* Show BGP peer's information. */
 7268: enum show_type
 7269: {
 7270:   show_all,
 7271:   show_peer
 7272: };
 7273: 
 7274: static void
 7275: bgp_show_peer_afi_orf_cap (struct vty *vty, struct peer *p,
 7276: 			   afi_t afi, safi_t safi,
 7277: 			   u_int16_t adv_smcap, u_int16_t adv_rmcap,
 7278: 			   u_int16_t rcv_smcap, u_int16_t rcv_rmcap)
 7279: {
 7280:   /* Send-Mode */
 7281:   if (CHECK_FLAG (p->af_cap[afi][safi], adv_smcap)
 7282:       || CHECK_FLAG (p->af_cap[afi][safi], rcv_smcap))
 7283:     {
 7284:       vty_out (vty, "      Send-mode: ");
 7285:       if (CHECK_FLAG (p->af_cap[afi][safi], adv_smcap))
 7286: 	vty_out (vty, "advertised");
 7287:       if (CHECK_FLAG (p->af_cap[afi][safi], rcv_smcap))
 7288: 	vty_out (vty, "%sreceived",
 7289: 		 CHECK_FLAG (p->af_cap[afi][safi], adv_smcap) ?
 7290: 		 ", " : "");
 7291:       vty_out (vty, "%s", VTY_NEWLINE);
 7292:     }
 7293: 
 7294:   /* Receive-Mode */
 7295:   if (CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap)
 7296:       || CHECK_FLAG (p->af_cap[afi][safi], rcv_rmcap))
 7297:     {
 7298:       vty_out (vty, "      Receive-mode: ");
 7299:       if (CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap))
 7300: 	vty_out (vty, "advertised");
 7301:       if (CHECK_FLAG (p->af_cap[afi][safi], rcv_rmcap))
 7302: 	vty_out (vty, "%sreceived",
 7303: 		 CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap) ?
 7304: 		 ", " : "");
 7305:       vty_out (vty, "%s", VTY_NEWLINE);
 7306:     }
 7307: }
 7308: 
 7309: static void
 7310: bgp_show_peer_afi (struct vty *vty, struct peer *p, afi_t afi, safi_t safi)
 7311: {
 7312:   struct bgp_filter *filter;
 7313:   char orf_pfx_name[BUFSIZ];
 7314:   int orf_pfx_count;
 7315: 
 7316:   filter = &p->filter[afi][safi];
 7317: 
 7318:   vty_out (vty, " For address family: %s%s", afi_safi_print (afi, safi),
 7319: 	   VTY_NEWLINE);
 7320: 
 7321:   if (p->af_group[afi][safi])
 7322:     vty_out (vty, "  %s peer-group member%s", p->group->name, VTY_NEWLINE);
 7323: 
 7324:   if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
 7325:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
 7326:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
 7327:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
 7328:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV)
 7329:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
 7330:     vty_out (vty, "  AF-dependant capabilities:%s", VTY_NEWLINE);
 7331: 
 7332:   if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
 7333:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
 7334:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
 7335:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV))
 7336:     {
 7337:       vty_out (vty, "    Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
 7338: 	       ORF_TYPE_PREFIX, VTY_NEWLINE);
 7339:       bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
 7340: 				 PEER_CAP_ORF_PREFIX_SM_ADV,
 7341: 				 PEER_CAP_ORF_PREFIX_RM_ADV,
 7342: 				 PEER_CAP_ORF_PREFIX_SM_RCV,
 7343: 				 PEER_CAP_ORF_PREFIX_RM_RCV);
 7344:     }
 7345:   if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
 7346:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
 7347:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
 7348:       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
 7349:     {
 7350:       vty_out (vty, "    Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
 7351: 	       ORF_TYPE_PREFIX_OLD, VTY_NEWLINE);
 7352:       bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
 7353: 				 PEER_CAP_ORF_PREFIX_SM_ADV,
 7354: 				 PEER_CAP_ORF_PREFIX_RM_ADV,
 7355: 				 PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
 7356: 				 PEER_CAP_ORF_PREFIX_RM_OLD_RCV);
 7357:     }
 7358: 
 7359:   sprintf (orf_pfx_name, "%s.%d.%d", p->host, afi, safi);
 7360:   orf_pfx_count =  prefix_bgp_show_prefix_list (NULL, afi, orf_pfx_name);
 7361: 
 7362:   if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND)
 7363:       || orf_pfx_count)
 7364:     {
 7365:       vty_out (vty, "  Outbound Route Filter (ORF):");
 7366:       if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND))
 7367: 	  vty_out (vty, " sent;");
 7368:       if (orf_pfx_count)
 7369: 	vty_out (vty, " received (%d entries)", orf_pfx_count);
 7370:       vty_out (vty, "%s", VTY_NEWLINE);
 7371:     }
 7372:   if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_WAIT_REFRESH))
 7373:       vty_out (vty, "  First update is deferred until ORF or ROUTE-REFRESH is received%s", VTY_NEWLINE);
 7374: 
 7375:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REFLECTOR_CLIENT))
 7376:     vty_out (vty, "  Route-Reflector Client%s", VTY_NEWLINE);
 7377:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
 7378:     vty_out (vty, "  Route-Server Client%s", VTY_NEWLINE);
 7379:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
 7380:     vty_out (vty, "  Inbound soft reconfiguration allowed%s", VTY_NEWLINE);
 7381:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS))
 7382:     vty_out (vty, "  Private AS number removed from updates to this neighbor%s", VTY_NEWLINE);
 7383:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_SELF))
 7384:     vty_out (vty, "  NEXT_HOP is always this router%s", VTY_NEWLINE);
 7385:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED))
 7386:     vty_out (vty, "  AS_PATH is propagated unchanged to this neighbor%s", VTY_NEWLINE);
 7387:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_UNCHANGED))
 7388:     vty_out (vty, "  NEXT_HOP is propagated unchanged to this neighbor%s", VTY_NEWLINE);
 7389:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED))
 7390:     vty_out (vty, "  MED is propagated unchanged to this neighbor%s", VTY_NEWLINE);
 7391:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
 7392:       || CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY))
 7393:     {
 7394:       vty_out (vty, "  Community attribute sent to this neighbor");
 7395:       if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
 7396: 	&& CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY))
 7397: 	vty_out (vty, "(both)%s", VTY_NEWLINE);
 7398:       else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY))
 7399: 	vty_out (vty, "(extended)%s", VTY_NEWLINE);
 7400:       else 
 7401: 	vty_out (vty, "(standard)%s", VTY_NEWLINE);
 7402:     }
 7403:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE))
 7404:     {
 7405:       vty_out (vty, "  Default information originate,");
 7406: 
 7407:       if (p->default_rmap[afi][safi].name)
 7408: 	vty_out (vty, " default route-map %s%s,",
 7409: 		 p->default_rmap[afi][safi].map ? "*" : "",
 7410: 		 p->default_rmap[afi][safi].name);
 7411:       if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_DEFAULT_ORIGINATE))
 7412: 	vty_out (vty, " default sent%s", VTY_NEWLINE);
 7413:       else
 7414: 	vty_out (vty, " default not sent%s", VTY_NEWLINE);
 7415:     }
 7416: 
 7417:   if (filter->plist[FILTER_IN].name
 7418:       || filter->dlist[FILTER_IN].name
 7419:       || filter->aslist[FILTER_IN].name
 7420:       || filter->map[RMAP_IN].name)
 7421:     vty_out (vty, "  Inbound path policy configured%s", VTY_NEWLINE);
 7422:   if (filter->plist[FILTER_OUT].name
 7423:       || filter->dlist[FILTER_OUT].name
 7424:       || filter->aslist[FILTER_OUT].name
 7425:       || filter->map[RMAP_OUT].name
 7426:       || filter->usmap.name)
 7427:     vty_out (vty, "  Outbound path policy configured%s", VTY_NEWLINE);
 7428:   if (filter->map[RMAP_IMPORT].name)
 7429:     vty_out (vty, "  Import policy for this RS-client configured%s", VTY_NEWLINE);
 7430:   if (filter->map[RMAP_EXPORT].name)
 7431:     vty_out (vty, "  Export policy for this RS-client configured%s", VTY_NEWLINE);
 7432: 
 7433:   /* prefix-list */
 7434:   if (filter->plist[FILTER_IN].name)
 7435:     vty_out (vty, "  Incoming update prefix filter list is %s%s%s",
 7436: 	     filter->plist[FILTER_IN].plist ? "*" : "",
 7437: 	     filter->plist[FILTER_IN].name,
 7438: 	     VTY_NEWLINE);
 7439:   if (filter->plist[FILTER_OUT].name)
 7440:     vty_out (vty, "  Outgoing update prefix filter list is %s%s%s",
 7441: 	     filter->plist[FILTER_OUT].plist ? "*" : "",
 7442: 	     filter->plist[FILTER_OUT].name,
 7443: 	     VTY_NEWLINE);
 7444: 
 7445:   /* distribute-list */
 7446:   if (filter->dlist[FILTER_IN].name)
 7447:     vty_out (vty, "  Incoming update network filter list is %s%s%s",
 7448: 	     filter->dlist[FILTER_IN].alist ? "*" : "",
 7449: 	     filter->dlist[FILTER_IN].name,
 7450: 	     VTY_NEWLINE);
 7451:   if (filter->dlist[FILTER_OUT].name)
 7452:     vty_out (vty, "  Outgoing update network filter list is %s%s%s",
 7453: 	     filter->dlist[FILTER_OUT].alist ? "*" : "",
 7454: 	     filter->dlist[FILTER_OUT].name,
 7455: 	     VTY_NEWLINE);
 7456: 
 7457:   /* filter-list. */
 7458:   if (filter->aslist[FILTER_IN].name)
 7459:     vty_out (vty, "  Incoming update AS path filter list is %s%s%s",
 7460: 	     filter->aslist[FILTER_IN].aslist ? "*" : "",
 7461: 	     filter->aslist[FILTER_IN].name,
 7462: 	     VTY_NEWLINE);
 7463:   if (filter->aslist[FILTER_OUT].name)
 7464:     vty_out (vty, "  Outgoing update AS path filter list is %s%s%s",
 7465: 	     filter->aslist[FILTER_OUT].aslist ? "*" : "",
 7466: 	     filter->aslist[FILTER_OUT].name,
 7467: 	     VTY_NEWLINE);
 7468: 
 7469:   /* route-map. */
 7470:   if (filter->map[RMAP_IN].name)
 7471:     vty_out (vty, "  Route map for incoming advertisements is %s%s%s",
 7472:             filter->map[RMAP_IN].map ? "*" : "",
 7473:             filter->map[RMAP_IN].name,
 7474: 	     VTY_NEWLINE);
 7475:   if (filter->map[RMAP_OUT].name)
 7476:     vty_out (vty, "  Route map for outgoing advertisements is %s%s%s",
 7477:             filter->map[RMAP_OUT].map ? "*" : "",
 7478:             filter->map[RMAP_OUT].name,
 7479:             VTY_NEWLINE);
 7480:   if (filter->map[RMAP_IMPORT].name)
 7481:     vty_out (vty, "  Route map for advertisements going into this RS-client's table is %s%s%s",
 7482:             filter->map[RMAP_IMPORT].map ? "*" : "",
 7483:             filter->map[RMAP_IMPORT].name,
 7484:             VTY_NEWLINE);
 7485:   if (filter->map[RMAP_EXPORT].name)
 7486:     vty_out (vty, "  Route map for advertisements coming from this RS-client is %s%s%s",
 7487:             filter->map[RMAP_EXPORT].map ? "*" : "",
 7488:             filter->map[RMAP_EXPORT].name,
 7489: 	     VTY_NEWLINE);
 7490: 
 7491:   /* unsuppress-map */
 7492:   if (filter->usmap.name)
 7493:     vty_out (vty, "  Route map for selective unsuppress is %s%s%s",
 7494: 	     filter->usmap.map ? "*" : "",
 7495: 	     filter->usmap.name, VTY_NEWLINE);
 7496: 
 7497:   /* Receive prefix count */
 7498:   vty_out (vty, "  %ld accepted prefixes%s", p->pcount[afi][safi], VTY_NEWLINE);
 7499: 
 7500:   /* Maximum prefix */
 7501:   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX))
 7502:     {
 7503:       vty_out (vty, "  Maximum prefixes allowed %ld%s%s", p->pmax[afi][safi],
 7504: 	       CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX_WARNING)
 7505: 	       ? " (warning-only)" : "", VTY_NEWLINE);
 7506:       vty_out (vty, "  Threshold for warning message %d%%",
 7507: 	       p->pmax_threshold[afi][safi]);
 7508:       if (p->pmax_restart[afi][safi])
 7509: 	vty_out (vty, ", restart interval %d min", p->pmax_restart[afi][safi]);
 7510:       vty_out (vty, "%s", VTY_NEWLINE);
 7511:     }
 7512: 
 7513:   vty_out (vty, "%s", VTY_NEWLINE);
 7514: }
 7515: 
 7516: static void
 7517: bgp_show_peer (struct vty *vty, struct peer *p)
 7518: {
 7519:   struct bgp *bgp;
 7520:   char buf1[BUFSIZ];
 7521:   char timebuf[BGP_UPTIME_LEN];
 7522:   afi_t afi;
 7523:   safi_t safi;
 7524: 
 7525:   bgp = p->bgp;
 7526: 
 7527:   /* Configured IP address. */
 7528:   vty_out (vty, "BGP neighbor is %s, ", p->host);
 7529:   vty_out (vty, "remote AS %u, ", p->as);
 7530:   vty_out (vty, "local AS %u%s%s, ",
 7531: 	   p->change_local_as ? p->change_local_as : p->local_as,
 7532: 	   CHECK_FLAG (p->flags, PEER_FLAG_LOCAL_AS_NO_PREPEND) ?
 7533: 	   " no-prepend" : "",
 7534: 	   CHECK_FLAG (p->flags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ?
 7535: 	   " replace-as" : "");
 7536:   vty_out (vty, "%s link%s",
 7537: 	   p->as == p->local_as ? "internal" : "external",
 7538: 	   VTY_NEWLINE);
 7539: 
 7540:   /* Description. */
 7541:   if (p->desc)
 7542:     vty_out (vty, " Description: %s%s", p->desc, VTY_NEWLINE);
 7543:   
 7544:   /* Peer-group */
 7545:   if (p->group)
 7546:     vty_out (vty, " Member of peer-group %s for session parameters%s",
 7547: 	     p->group->name, VTY_NEWLINE);
 7548: 
 7549:   /* Administrative shutdown. */
 7550:   if (CHECK_FLAG (p->flags, PEER_FLAG_SHUTDOWN))
 7551:     vty_out (vty, " Administratively shut down%s", VTY_NEWLINE);
 7552: 
 7553:   /* BGP Version. */
 7554:   vty_out (vty, "  BGP version 4");
 7555:   vty_out (vty, ", remote router ID %s%s", 
 7556: 	   inet_ntop (AF_INET, &p->remote_id, buf1, BUFSIZ),
 7557: 	   VTY_NEWLINE);
 7558: 
 7559:   /* Confederation */
 7560:   if (CHECK_FLAG (bgp->config, BGP_CONFIG_CONFEDERATION)
 7561:       && bgp_confederation_peers_check (bgp, p->as))
 7562:     vty_out (vty, "  Neighbor under common administration%s", VTY_NEWLINE);
 7563:   
 7564:   /* Status. */
 7565:   vty_out (vty, "  BGP state = %s",  
 7566: 	   LOOKUP (bgp_status_msg, p->status));
 7567:   if (p->status == Established) 
 7568:     vty_out (vty, ", up for %8s", 
 7569: 	     peer_uptime (p->uptime, timebuf, BGP_UPTIME_LEN));
 7570:   else if (p->status == Active)
 7571:     {
 7572:       if (CHECK_FLAG (p->flags, PEER_FLAG_PASSIVE))
 7573: 	vty_out (vty, " (passive)"); 
 7574:       else if (CHECK_FLAG (p->sflags, PEER_STATUS_NSF_WAIT))
 7575: 	vty_out (vty, " (NSF passive)"); 
 7576:     }
 7577:   vty_out (vty, "%s", VTY_NEWLINE);
 7578:   
 7579:   /* read timer */
 7580:   vty_out (vty, "  Last read %s", peer_uptime (p->readtime, timebuf, BGP_UPTIME_LEN));
 7581: 
 7582:   /* Configured timer values. */
 7583:   vty_out (vty, ", hold time is %d, keepalive interval is %d seconds%s",
 7584: 	   p->v_holdtime, p->v_keepalive, VTY_NEWLINE);
 7585:   if (CHECK_FLAG (p->config, PEER_CONFIG_TIMER))
 7586:     {
 7587:       vty_out (vty, "  Configured hold time is %d", p->holdtime);
 7588:       vty_out (vty, ", keepalive interval is %d seconds%s",
 7589: 	       p->keepalive, VTY_NEWLINE);
 7590:     }
 7591: 
 7592:   /* Capability. */
 7593:   if (p->status == Established) 
 7594:     {
 7595:       if (p->cap
 7596: 	  || p->afc_adv[AFI_IP][SAFI_UNICAST]
 7597: 	  || p->afc_recv[AFI_IP][SAFI_UNICAST]
 7598: 	  || p->afc_adv[AFI_IP][SAFI_MULTICAST]
 7599: 	  || p->afc_recv[AFI_IP][SAFI_MULTICAST]
 7600: #ifdef HAVE_IPV6
 7601: 	  || p->afc_adv[AFI_IP6][SAFI_UNICAST]
 7602: 	  || p->afc_recv[AFI_IP6][SAFI_UNICAST]
 7603: 	  || p->afc_adv[AFI_IP6][SAFI_MULTICAST]
 7604: 	  || p->afc_recv[AFI_IP6][SAFI_MULTICAST]
 7605: #endif /* HAVE_IPV6 */
 7606: 	  || p->afc_adv[AFI_IP][SAFI_MPLS_VPN]
 7607: 	  || p->afc_recv[AFI_IP][SAFI_MPLS_VPN])
 7608: 	{
 7609: 	  vty_out (vty, "  Neighbor capabilities:%s", VTY_NEWLINE);
 7610: 
 7611: 	  /* AS4 */
 7612: 	  if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV)
 7613: 	      || CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
 7614: 	    {
 7615: 	      vty_out (vty, "    4 Byte AS:");
 7616: 	      if (CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
 7617: 		vty_out (vty, " advertised");
 7618: 	      if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV))
 7619: 		vty_out (vty, " %sreceived",
 7620: 			 CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV) ? "and " : "");
 7621: 	      vty_out (vty, "%s", VTY_NEWLINE);
 7622: 	    }
 7623: 	  /* Dynamic */
 7624: 	  if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV)
 7625: 	      || CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
 7626: 	    {
 7627: 	      vty_out (vty, "    Dynamic:");
 7628: 	      if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
 7629: 		vty_out (vty, " advertised");
 7630: 	      if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV))
 7631: 		vty_out (vty, " %sreceived",
 7632: 			 CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV) ? "and " : "");
 7633: 	      vty_out (vty, "%s", VTY_NEWLINE);
 7634: 	    }
 7635: 
 7636: 	  /* Route Refresh */
 7637: 	  if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV)
 7638: 	      || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)
 7639: 	      || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
 7640: 	    {
 7641: 	      vty_out (vty, "    Route refresh:");
 7642:  	      if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV))
 7643: 		vty_out (vty, " advertised");
 7644: 	      if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)
 7645: 		  || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
 7646: 		vty_out (vty, " %sreceived(%s)",
 7647: 			 CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV) ? "and " : "",
 7648: 			 (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV)
 7649: 			  && CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)) ?
 7650: 			 "old & new" : CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV) ? "old" : "new");
 7651: 
 7652: 	      vty_out (vty, "%s", VTY_NEWLINE);
 7653: 	    }
 7654: 
 7655: 	  /* Multiprotocol Extensions */
 7656: 	  for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
 7657: 	    for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
 7658: 	      if (p->afc_adv[afi][safi] || p->afc_recv[afi][safi])
 7659: 		{
 7660: 		  vty_out (vty, "    Address family %s:", afi_safi_print (afi, safi));
 7661: 		  if (p->afc_adv[afi][safi]) 
 7662: 		    vty_out (vty, " advertised");
 7663: 		  if (p->afc_recv[afi][safi])
 7664: 		    vty_out (vty, " %sreceived", p->afc_adv[afi][safi] ? "and " : "");
 7665: 		  vty_out (vty, "%s", VTY_NEWLINE);
 7666: 		} 
 7667: 
 7668: 	  /* Gracefull Restart */
 7669: 	  if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV)
 7670: 	      || CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
 7671: 	    {
 7672: 	      vty_out (vty, "    Graceful Restart Capabilty:");
 7673: 	      if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
 7674: 		vty_out (vty, " advertised");
 7675: 	      if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
 7676: 		vty_out (vty, " %sreceived",
 7677: 			 CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV) ? "and " : "");
 7678: 	      vty_out (vty, "%s", VTY_NEWLINE);
 7679: 
 7680: 	      if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
 7681: 		{
 7682: 		  int restart_af_count = 0;
 7683: 
 7684: 		  vty_out (vty, "      Remote Restart timer is %d seconds%s",
 7685: 			   p->v_gr_restart, VTY_NEWLINE);	
 7686: 		  vty_out (vty, "      Address families by peer:%s        ", VTY_NEWLINE);
 7687: 
 7688: 		  for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
 7689: 		    for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
 7690: 		      if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_RESTART_AF_RCV))
 7691: 			{
 7692: 			  vty_out (vty, "%s%s(%s)", restart_af_count ? ", " : "",
 7693: 				   afi_safi_print (afi, safi),
 7694: 				   CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_RESTART_AF_PRESERVE_RCV) ?
 7695: 				   "preserved" : "not preserved");
 7696: 			  restart_af_count++;
 7697: 			}
 7698: 		  if (! restart_af_count)
 7699: 		    vty_out (vty, "none");
 7700: 		  vty_out (vty, "%s", VTY_NEWLINE);
 7701: 		}
 7702: 	    }
 7703: 	}
 7704:     }
 7705: 
 7706:   /* graceful restart information */
 7707:   if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV)
 7708:       || p->t_gr_restart
 7709:       || p->t_gr_stale)
 7710:     {
 7711:       int eor_send_af_count = 0;
 7712:       int eor_receive_af_count = 0;
 7713: 
 7714:       vty_out (vty, "  Graceful restart informations:%s", VTY_NEWLINE);
 7715:       if (p->status == Established) 
 7716: 	{
 7717: 	  vty_out (vty, "    End-of-RIB send: ");
 7718: 	  for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
 7719: 	    for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
 7720: 	      if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_SEND))
 7721: 		{
 7722: 		  vty_out (vty, "%s%s", eor_send_af_count ? ", " : "",
 7723: 			   afi_safi_print (afi, safi));
 7724: 		  eor_send_af_count++;
 7725: 		}
 7726: 	  vty_out (vty, "%s", VTY_NEWLINE);
 7727: 
 7728: 	  vty_out (vty, "    End-of-RIB received: ");
 7729: 	  for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
 7730: 	    for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
 7731: 	      if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_RECEIVED))
 7732: 		{
 7733: 		  vty_out (vty, "%s%s", eor_receive_af_count ? ", " : "",
 7734: 			   afi_safi_print (afi, safi));
 7735: 		  eor_receive_af_count++;
 7736: 		}
 7737: 	  vty_out (vty, "%s", VTY_NEWLINE);
 7738: 	}
 7739: 
 7740:       if (p->t_gr_restart)
 7741:         vty_out (vty, "    The remaining time of restart timer is %ld%s",
 7742:                  thread_timer_remain_second (p->t_gr_restart), VTY_NEWLINE);
 7743:       
 7744:       if (p->t_gr_stale)
 7745:         vty_out (vty, "    The remaining time of stalepath timer is %ld%s",
 7746:                  thread_timer_remain_second (p->t_gr_stale), VTY_NEWLINE);
 7747:     }
 7748: 
 7749:   /* Packet counts. */
 7750:   vty_out (vty, "  Message statistics:%s", VTY_NEWLINE);
 7751:   vty_out (vty, "    Inq depth is 0%s", VTY_NEWLINE);
 7752:   vty_out (vty, "    Outq depth is %lu%s", (unsigned long) p->obuf->count, VTY_NEWLINE);
 7753:   vty_out (vty, "                         Sent       Rcvd%s", VTY_NEWLINE);
 7754:   vty_out (vty, "    Opens:         %10d %10d%s", p->open_out, p->open_in, VTY_NEWLINE);
 7755:   vty_out (vty, "    Notifications: %10d %10d%s", p->notify_out, p->notify_in, VTY_NEWLINE);
 7756:   vty_out (vty, "    Updates:       %10d %10d%s", p->update_out, p->update_in, VTY_NEWLINE);
 7757:   vty_out (vty, "    Keepalives:    %10d %10d%s", p->keepalive_out, p->keepalive_in, VTY_NEWLINE);
 7758:   vty_out (vty, "    Route Refresh: %10d %10d%s", p->refresh_out, p->refresh_in, VTY_NEWLINE);
 7759:   vty_out (vty, "    Capability:    %10d %10d%s", p->dynamic_cap_out, p->dynamic_cap_in, VTY_NEWLINE);
 7760:   vty_out (vty, "    Total:         %10d %10d%s", p->open_out + p->notify_out +
 7761: 	   p->update_out + p->keepalive_out + p->refresh_out + p->dynamic_cap_out,
 7762: 	   p->open_in + p->notify_in + p->update_in + p->keepalive_in + p->refresh_in +
 7763: 	   p->dynamic_cap_in, VTY_NEWLINE);
 7764: 
 7765:   /* advertisement-interval */
 7766:   vty_out (vty, "  Minimum time between advertisement runs is %d seconds%s",
 7767: 	   p->v_routeadv, VTY_NEWLINE);
 7768: 
 7769:   /* Update-source. */
 7770:   if (p->update_if || p->update_source)
 7771:     {
 7772:       vty_out (vty, "  Update source is ");
 7773:       if (p->update_if)
 7774: 	vty_out (vty, "%s", p->update_if);
 7775:       else if (p->update_source)
 7776: 	vty_out (vty, "%s",
 7777: 		 sockunion2str (p->update_source, buf1, SU_ADDRSTRLEN));
 7778:       vty_out (vty, "%s", VTY_NEWLINE);
 7779:     }
 7780: 
 7781:   /* Default weight */
 7782:   if (CHECK_FLAG (p->config, PEER_CONFIG_WEIGHT))
 7783:     vty_out (vty, "  Default weight %d%s", p->weight,
 7784: 	     VTY_NEWLINE);
 7785: 
 7786:   vty_out (vty, "%s", VTY_NEWLINE);
 7787: 
 7788:   /* Address Family Information */
 7789:   for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
 7790:     for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
 7791:       if (p->afc[afi][safi])
 7792: 	bgp_show_peer_afi (vty, p, afi, safi);
 7793: 
 7794:   vty_out (vty, "  Connections established %d; dropped %d%s",
 7795: 	   p->established, p->dropped,
 7796: 	   VTY_NEWLINE);
 7797: 
 7798:   if (! p->dropped)
 7799:     vty_out (vty, "  Last reset never%s", VTY_NEWLINE);
 7800:   else
 7801:     vty_out (vty, "  Last reset %s, due to %s%s",
 7802:             peer_uptime (p->resettime, timebuf, BGP_UPTIME_LEN),
 7803:             peer_down_str[(int) p->last_reset], VTY_NEWLINE);
 7804: 
 7805:   if (CHECK_FLAG (p->sflags, PEER_STATUS_PREFIX_OVERFLOW))
 7806:     {
 7807:       vty_out (vty, "  Peer had exceeded the max. no. of prefixes configured.%s", VTY_NEWLINE);
 7808: 
 7809:       if (p->t_pmax_restart)
 7810: 	vty_out (vty, "  Reduce the no. of prefix from %s, will restart in %ld seconds%s",
 7811: 		 p->host, thread_timer_remain_second (p->t_pmax_restart),
 7812: 		 VTY_NEWLINE);
 7813:       else
 7814: 	vty_out (vty, "  Reduce the no. of prefix and clear ip bgp %s to restore peering%s",
 7815: 		 p->host, VTY_NEWLINE);
 7816:     }
 7817: 
 7818:   /* EBGP Multihop and GTSM */
 7819:   if (p->sort != BGP_PEER_IBGP)
 7820:     {
 7821:       if (p->gtsm_hops > 0)
 7822: 	vty_out (vty, "  External BGP neighbor may be up to %d hops away.%s",
 7823: 		 p->gtsm_hops, VTY_NEWLINE);
 7824:       else if (p->ttl > 1)
 7825: 	vty_out (vty, "  External BGP neighbor may be up to %d hops away.%s",
 7826: 		 p->ttl, VTY_NEWLINE);
 7827:     }
 7828: 
 7829:   /* Local address. */
 7830:   if (p->su_local)
 7831:     {
 7832:       vty_out (vty, "Local host: %s, Local port: %d%s",
 7833: 	       sockunion2str (p->su_local, buf1, SU_ADDRSTRLEN),
 7834: 	       ntohs (p->su_local->sin.sin_port),
 7835: 	       VTY_NEWLINE);
 7836:     }
 7837:       
 7838:   /* Remote address. */
 7839:   if (p->su_remote)
 7840:     {
 7841:       vty_out (vty, "Foreign host: %s, Foreign port: %d%s",
 7842: 	       sockunion2str (p->su_remote, buf1, SU_ADDRSTRLEN),
 7843: 	       ntohs (p->su_remote->sin.sin_port),
 7844: 	       VTY_NEWLINE);
 7845:     }
 7846: 
 7847:   /* Nexthop display. */
 7848:   if (p->su_local)
 7849:     {
 7850:       vty_out (vty, "Nexthop: %s%s", 
 7851: 	       inet_ntop (AF_INET, &p->nexthop.v4, buf1, BUFSIZ),
 7852: 	       VTY_NEWLINE);
 7853: #ifdef HAVE_IPV6
 7854:       vty_out (vty, "Nexthop global: %s%s", 
 7855: 	       inet_ntop (AF_INET6, &p->nexthop.v6_global, buf1, BUFSIZ),
 7856: 	       VTY_NEWLINE);
 7857:       vty_out (vty, "Nexthop local: %s%s",
 7858: 	       inet_ntop (AF_INET6, &p->nexthop.v6_local, buf1, BUFSIZ),
 7859: 	       VTY_NEWLINE);
 7860:       vty_out (vty, "BGP connection: %s%s",
 7861: 	       p->shared_network ? "shared network" : "non shared network",
 7862: 	       VTY_NEWLINE);
 7863: #endif /* HAVE_IPV6 */
 7864:     }
 7865: 
 7866:   /* Timer information. */
 7867:   if (p->t_start)
 7868:     vty_out (vty, "Next start timer due in %ld seconds%s",
 7869: 	     thread_timer_remain_second (p->t_start), VTY_NEWLINE);
 7870:   if (p->t_connect)
 7871:     vty_out (vty, "Next connect timer due in %ld seconds%s",
 7872: 	     thread_timer_remain_second (p->t_connect), VTY_NEWLINE);
 7873:   
 7874:   vty_out (vty, "Read thread: %s  Write thread: %s%s", 
 7875: 	   p->t_read ? "on" : "off",
 7876: 	   p->t_write ? "on" : "off",
 7877: 	   VTY_NEWLINE);
 7878: 
 7879:   if (p->notify.code == BGP_NOTIFY_OPEN_ERR
 7880:       && p->notify.subcode == BGP_NOTIFY_OPEN_UNSUP_CAPBL)
 7881:     bgp_capability_vty_out (vty, p);
 7882:  
 7883:   vty_out (vty, "%s", VTY_NEWLINE);
 7884: }
 7885: 
 7886: static int
 7887: bgp_show_neighbor (struct vty *vty, struct bgp *bgp,
 7888: 		   enum show_type type, union sockunion *su)
 7889: {
 7890:   struct listnode *node, *nnode;
 7891:   struct peer *peer;
 7892:   int find = 0;
 7893: 
 7894:   for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 7895:     {
 7896:       switch (type)
 7897: 	{
 7898: 	case show_all:
 7899: 	  bgp_show_peer (vty, peer);
 7900: 	  break;
 7901: 	case show_peer:
 7902: 	  if (sockunion_same (&peer->su, su))
 7903: 	    {
 7904: 	      find = 1;
 7905: 	      bgp_show_peer (vty, peer);
 7906: 	    }
 7907: 	  break;
 7908: 	}
 7909:     }
 7910: 
 7911:   if (type == show_peer && ! find)
 7912:     vty_out (vty, "%% No such neighbor%s", VTY_NEWLINE);
 7913:   
 7914:   return CMD_SUCCESS;
 7915: }
 7916: 
 7917: static int 
 7918: bgp_show_neighbor_vty (struct vty *vty, const char *name, 
 7919:                        enum show_type type, const char *ip_str)
 7920: {
 7921:   int ret;
 7922:   struct bgp *bgp;
 7923:   union sockunion su;
 7924: 
 7925:   if (ip_str)
 7926:     {
 7927:       ret = str2sockunion (ip_str, &su);
 7928:       if (ret < 0)
 7929:         {
 7930:           vty_out (vty, "%% Malformed address: %s%s", ip_str, VTY_NEWLINE);
 7931:           return CMD_WARNING;
 7932:         }
 7933:     }
 7934: 
 7935:   if (name)
 7936:     {
 7937:       bgp = bgp_lookup_by_name (name);
 7938:       
 7939:       if (! bgp)
 7940:         {
 7941:           vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE); 
 7942:           return CMD_WARNING;
 7943:         }
 7944: 
 7945:       bgp_show_neighbor (vty, bgp, type, &su);
 7946: 
 7947:       return CMD_SUCCESS;
 7948:     }
 7949: 
 7950:   bgp = bgp_get_default ();
 7951: 
 7952:   if (bgp)
 7953:     bgp_show_neighbor (vty, bgp, type, &su);
 7954: 
 7955:   return CMD_SUCCESS;
 7956: }
 7957: 
 7958: /* "show ip bgp neighbors" commands.  */
 7959: DEFUN (show_ip_bgp_neighbors,
 7960:        show_ip_bgp_neighbors_cmd,
 7961:        "show ip bgp neighbors",
 7962:        SHOW_STR
 7963:        IP_STR
 7964:        BGP_STR
 7965:        "Detailed information on TCP and BGP neighbor connections\n")
 7966: {
 7967:   return bgp_show_neighbor_vty (vty, NULL, show_all, NULL);
 7968: }
 7969: 
 7970: ALIAS (show_ip_bgp_neighbors,
 7971:        show_ip_bgp_ipv4_neighbors_cmd,
 7972:        "show ip bgp ipv4 (unicast|multicast) neighbors",
 7973:        SHOW_STR
 7974:        IP_STR
 7975:        BGP_STR
 7976:        "Address family\n"
 7977:        "Address Family modifier\n"
 7978:        "Address Family modifier\n"
 7979:        "Detailed information on TCP and BGP neighbor connections\n")
 7980: 
 7981: ALIAS (show_ip_bgp_neighbors,
 7982:        show_ip_bgp_vpnv4_all_neighbors_cmd,
 7983:        "show ip bgp vpnv4 all neighbors",
 7984:        SHOW_STR
 7985:        IP_STR
 7986:        BGP_STR
 7987:        "Display VPNv4 NLRI specific information\n"
 7988:        "Display information about all VPNv4 NLRIs\n"
 7989:        "Detailed information on TCP and BGP neighbor connections\n")
 7990: 
 7991: ALIAS (show_ip_bgp_neighbors,
 7992:        show_ip_bgp_vpnv4_rd_neighbors_cmd,
 7993:        "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors",
 7994:        SHOW_STR
 7995:        IP_STR
 7996:        BGP_STR
 7997:        "Display VPNv4 NLRI specific information\n"
 7998:        "Display information for a route distinguisher\n"
 7999:        "VPN Route Distinguisher\n"
 8000:        "Detailed information on TCP and BGP neighbor connections\n")
 8001: 
 8002: ALIAS (show_ip_bgp_neighbors,
 8003:        show_bgp_neighbors_cmd,
 8004:        "show bgp neighbors",
 8005:        SHOW_STR
 8006:        BGP_STR
 8007:        "Detailed information on TCP and BGP neighbor connections\n")
 8008: 
 8009: ALIAS (show_ip_bgp_neighbors,
 8010:        show_bgp_ipv6_neighbors_cmd,
 8011:        "show bgp ipv6 neighbors",
 8012:        SHOW_STR
 8013:        BGP_STR
 8014:        "Address family\n"
 8015:        "Detailed information on TCP and BGP neighbor connections\n")
 8016: 
 8017: DEFUN (show_ip_bgp_neighbors_peer,
 8018:        show_ip_bgp_neighbors_peer_cmd,
 8019:        "show ip bgp neighbors (A.B.C.D|X:X::X:X)",
 8020:        SHOW_STR
 8021:        IP_STR
 8022:        BGP_STR
 8023:        "Detailed information on TCP and BGP neighbor connections\n"
 8024:        "Neighbor to display information about\n"
 8025:        "Neighbor to display information about\n")
 8026: {
 8027:   return bgp_show_neighbor_vty (vty, NULL, show_peer, argv[argc - 1]);
 8028: }
 8029: 
 8030: ALIAS (show_ip_bgp_neighbors_peer,
 8031:        show_ip_bgp_ipv4_neighbors_peer_cmd,
 8032:        "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X)",
 8033:        SHOW_STR
 8034:        IP_STR
 8035:        BGP_STR
 8036:        "Address family\n"
 8037:        "Address Family modifier\n"
 8038:        "Address Family modifier\n"
 8039:        "Detailed information on TCP and BGP neighbor connections\n"
 8040:        "Neighbor to display information about\n"
 8041:        "Neighbor to display information about\n")
 8042: 
 8043: ALIAS (show_ip_bgp_neighbors_peer,
 8044:        show_ip_bgp_vpnv4_all_neighbors_peer_cmd,
 8045:        "show ip bgp vpnv4 all neighbors A.B.C.D",
 8046:        SHOW_STR
 8047:        IP_STR
 8048:        BGP_STR
 8049:        "Display VPNv4 NLRI specific information\n"
 8050:        "Display information about all VPNv4 NLRIs\n"
 8051:        "Detailed information on TCP and BGP neighbor connections\n"
 8052:        "Neighbor to display information about\n")
 8053: 
 8054: ALIAS (show_ip_bgp_neighbors_peer,
 8055:        show_ip_bgp_vpnv4_rd_neighbors_peer_cmd,
 8056:        "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D",
 8057:        SHOW_STR
 8058:        IP_STR
 8059:        BGP_STR
 8060:        "Display VPNv4 NLRI specific information\n"
 8061:        "Display information about all VPNv4 NLRIs\n"
 8062:        "Detailed information on TCP and BGP neighbor connections\n"
 8063:        "Neighbor to display information about\n")
 8064: 
 8065: ALIAS (show_ip_bgp_neighbors_peer,
 8066:        show_bgp_neighbors_peer_cmd,
 8067:        "show bgp neighbors (A.B.C.D|X:X::X:X)",
 8068:        SHOW_STR
 8069:        BGP_STR
 8070:        "Detailed information on TCP and BGP neighbor connections\n"
 8071:        "Neighbor to display information about\n"
 8072:        "Neighbor to display information about\n")
 8073: 
 8074: ALIAS (show_ip_bgp_neighbors_peer,
 8075:        show_bgp_ipv6_neighbors_peer_cmd,
 8076:        "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X)",
 8077:        SHOW_STR
 8078:        BGP_STR
 8079:        "Address family\n"
 8080:        "Detailed information on TCP and BGP neighbor connections\n"
 8081:        "Neighbor to display information about\n"
 8082:        "Neighbor to display information about\n")
 8083: 
 8084: DEFUN (show_ip_bgp_instance_neighbors,
 8085:        show_ip_bgp_instance_neighbors_cmd,
 8086:        "show ip bgp view WORD neighbors",
 8087:        SHOW_STR
 8088:        IP_STR
 8089:        BGP_STR
 8090:        "BGP view\n"
 8091:        "View name\n"
 8092:        "Detailed information on TCP and BGP neighbor connections\n")
 8093: {
 8094:   return bgp_show_neighbor_vty (vty, argv[0], show_all, NULL);
 8095: }
 8096: 
 8097: ALIAS (show_ip_bgp_instance_neighbors,
 8098:        show_bgp_instance_neighbors_cmd,
 8099:        "show bgp view WORD neighbors",
 8100:        SHOW_STR
 8101:        BGP_STR
 8102:        "BGP view\n"
 8103:        "View name\n"
 8104:        "Detailed information on TCP and BGP neighbor connections\n")
 8105: 
 8106: ALIAS (show_ip_bgp_instance_neighbors,
 8107:        show_bgp_instance_ipv6_neighbors_cmd,
 8108:        "show bgp view WORD ipv6 neighbors",
 8109:        SHOW_STR
 8110:        BGP_STR
 8111:        "BGP view\n"
 8112:        "View name\n"
 8113:        "Address family\n"
 8114:        "Detailed information on TCP and BGP neighbor connections\n")
 8115: 
 8116: DEFUN (show_ip_bgp_instance_neighbors_peer,
 8117:        show_ip_bgp_instance_neighbors_peer_cmd,
 8118:        "show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X)",
 8119:        SHOW_STR
 8120:        IP_STR
 8121:        BGP_STR
 8122:        "BGP view\n"
 8123:        "View name\n"
 8124:        "Detailed information on TCP and BGP neighbor connections\n"
 8125:        "Neighbor to display information about\n"
 8126:        "Neighbor to display information about\n")
 8127: {
 8128:   return bgp_show_neighbor_vty (vty, argv[0], show_peer, argv[1]);
 8129: }
 8130: 
 8131: ALIAS (show_ip_bgp_instance_neighbors_peer,
 8132:        show_bgp_instance_neighbors_peer_cmd,
 8133:        "show bgp view WORD neighbors (A.B.C.D|X:X::X:X)",
 8134:        SHOW_STR
 8135:        BGP_STR
 8136:        "BGP view\n"
 8137:        "View name\n"
 8138:        "Detailed information on TCP and BGP neighbor connections\n"
 8139:        "Neighbor to display information about\n"
 8140:        "Neighbor to display information about\n")
 8141: 
 8142: ALIAS (show_ip_bgp_instance_neighbors_peer,
 8143:        show_bgp_instance_ipv6_neighbors_peer_cmd,
 8144:        "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X)",
 8145:        SHOW_STR
 8146:        BGP_STR
 8147:        "BGP view\n"
 8148:        "View name\n"
 8149:        "Address family\n"
 8150:        "Detailed information on TCP and BGP neighbor connections\n"
 8151:        "Neighbor to display information about\n"
 8152:        "Neighbor to display information about\n")
 8153:        
 8154: /* Show BGP's AS paths internal data.  There are both `show ip bgp
 8155:    paths' and `show ip mbgp paths'.  Those functions results are the
 8156:    same.*/
 8157: DEFUN (show_ip_bgp_paths, 
 8158:        show_ip_bgp_paths_cmd,
 8159:        "show ip bgp paths",
 8160:        SHOW_STR
 8161:        IP_STR
 8162:        BGP_STR
 8163:        "Path information\n")
 8164: {
 8165:   vty_out (vty, "Address Refcnt Path%s", VTY_NEWLINE);
 8166:   aspath_print_all_vty (vty);
 8167:   return CMD_SUCCESS;
 8168: }
 8169: 
 8170: DEFUN (show_ip_bgp_ipv4_paths, 
 8171:        show_ip_bgp_ipv4_paths_cmd,
 8172:        "show ip bgp ipv4 (unicast|multicast) paths",
 8173:        SHOW_STR
 8174:        IP_STR
 8175:        BGP_STR
 8176:        "Address family\n"
 8177:        "Address Family modifier\n"
 8178:        "Address Family modifier\n"
 8179:        "Path information\n")
 8180: {
 8181:   vty_out (vty, "Address Refcnt Path\r\n");
 8182:   aspath_print_all_vty (vty);
 8183: 
 8184:   return CMD_SUCCESS;
 8185: }
 8186: 
 8187: #include "hash.h"
 8188: 
 8189: static void
 8190: community_show_all_iterator (struct hash_backet *backet, struct vty *vty)
 8191: {
 8192:   struct community *com;
 8193: 
 8194:   com = (struct community *) backet->data;
 8195:   vty_out (vty, "[%p] (%ld) %s%s", backet, com->refcnt,
 8196: 	   community_str (com), VTY_NEWLINE);
 8197: }
 8198: 
 8199: /* Show BGP's community internal data. */
 8200: DEFUN (show_ip_bgp_community_info, 
 8201:        show_ip_bgp_community_info_cmd,
 8202:        "show ip bgp community-info",
 8203:        SHOW_STR
 8204:        IP_STR
 8205:        BGP_STR
 8206:        "List all bgp community information\n")
 8207: {
 8208:   vty_out (vty, "Address Refcnt Community%s", VTY_NEWLINE);
 8209: 
 8210:   hash_iterate (community_hash (), 
 8211: 		(void (*) (struct hash_backet *, void *))
 8212: 		community_show_all_iterator,
 8213: 		vty);
 8214: 
 8215:   return CMD_SUCCESS;
 8216: }
 8217: 
 8218: DEFUN (show_ip_bgp_attr_info, 
 8219:        show_ip_bgp_attr_info_cmd,
 8220:        "show ip bgp attribute-info",
 8221:        SHOW_STR
 8222:        IP_STR
 8223:        BGP_STR
 8224:        "List all bgp attribute information\n")
 8225: {
 8226:   attr_show_all (vty);
 8227:   return CMD_SUCCESS;
 8228: }
 8229: 
 8230: static int
 8231: bgp_write_rsclient_summary (struct vty *vty, struct peer *rsclient,
 8232:         afi_t afi, safi_t safi)
 8233: {
 8234:   char timebuf[BGP_UPTIME_LEN];
 8235:   char rmbuf[14];
 8236:   const char *rmname;
 8237:   struct peer *peer;
 8238:   struct listnode *node, *nnode;
 8239:   int len;
 8240:   int count = 0;
 8241: 
 8242:   if (CHECK_FLAG (rsclient->sflags, PEER_STATUS_GROUP))
 8243:     {
 8244:       for (ALL_LIST_ELEMENTS (rsclient->group->peer, node, nnode, peer))
 8245:         {
 8246:           count++;
 8247:           bgp_write_rsclient_summary (vty, peer, afi, safi);
 8248:         }
 8249:       return count;
 8250:     }
 8251: 
 8252:   len = vty_out (vty, "%s", rsclient->host);
 8253:   len = 16 - len;
 8254: 
 8255:   if (len < 1)
 8256:     vty_out (vty, "%s%*s", VTY_NEWLINE, 16, " ");
 8257:   else
 8258:     vty_out (vty, "%*s", len, " ");
 8259: 
 8260:   vty_out (vty, "4 ");
 8261: 
 8262:   vty_out (vty, "%11d ", rsclient->as);
 8263: 
 8264:   rmname = ROUTE_MAP_EXPORT_NAME(&rsclient->filter[afi][safi]);
 8265:   if ( rmname && strlen (rmname) > 13 )
 8266:     {
 8267:       sprintf (rmbuf, "%13s", "...");
 8268:       rmname = strncpy (rmbuf, rmname, 10);
 8269:     }
 8270:   else if (! rmname)
 8271:     rmname = "<none>";
 8272:   vty_out (vty, " %13s ", rmname);
 8273: 
 8274:   rmname = ROUTE_MAP_IMPORT_NAME(&rsclient->filter[afi][safi]);
 8275:   if ( rmname && strlen (rmname) > 13 )
 8276:     {
 8277:       sprintf (rmbuf, "%13s", "...");
 8278:       rmname = strncpy (rmbuf, rmname, 10);
 8279:     }
 8280:   else if (! rmname)
 8281:     rmname = "<none>";
 8282:   vty_out (vty, " %13s ", rmname);
 8283: 
 8284:   vty_out (vty, "%8s", peer_uptime (rsclient->uptime, timebuf, BGP_UPTIME_LEN));
 8285: 
 8286:   if (CHECK_FLAG (rsclient->flags, PEER_FLAG_SHUTDOWN))
 8287:     vty_out (vty, " Idle (Admin)");
 8288:   else if (CHECK_FLAG (rsclient->sflags, PEER_STATUS_PREFIX_OVERFLOW))
 8289:     vty_out (vty, " Idle (PfxCt)");
 8290:   else
 8291:     vty_out (vty, " %-11s", LOOKUP(bgp_status_msg, rsclient->status));
 8292: 
 8293:   vty_out (vty, "%s", VTY_NEWLINE);
 8294: 
 8295:   return 1;
 8296: }
 8297: 
 8298: static int
 8299: bgp_show_rsclient_summary (struct vty *vty, struct bgp *bgp, 
 8300:                            afi_t afi, safi_t safi)
 8301: {
 8302:   struct peer *peer;
 8303:   struct listnode *node, *nnode;
 8304:   int count = 0;
 8305: 
 8306:   /* Header string for each address family. */
 8307:   static char header[] = "Neighbor        V    AS  Export-Policy  Import-Policy  Up/Down  State";
 8308: 
 8309:   for (ALL_LIST_ELEMENTS (bgp->rsclient, node, nnode, peer))
 8310:     {
 8311:       if (peer->afc[afi][safi] &&
 8312:          CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
 8313:        {
 8314:          if (! count)
 8315:            {
 8316:              vty_out (vty,
 8317:                       "Route Server's BGP router identifier %s%s",
 8318:                       inet_ntoa (bgp->router_id), VTY_NEWLINE);
 8319:              vty_out (vty,
 8320:               "Route Server's local AS number %u%s", bgp->as,
 8321:                        VTY_NEWLINE);
 8322: 
 8323:              vty_out (vty, "%s", VTY_NEWLINE);
 8324:              vty_out (vty, "%s%s", header, VTY_NEWLINE);
 8325:            }
 8326: 
 8327:          count += bgp_write_rsclient_summary (vty, peer, afi, safi);
 8328:        }
 8329:     }
 8330: 
 8331:   if (count)
 8332:     vty_out (vty, "%sTotal number of Route Server Clients %d%s", VTY_NEWLINE,
 8333:             count, VTY_NEWLINE);
 8334:   else
 8335:     vty_out (vty, "No %s Route Server Client is configured%s",
 8336:             afi == AFI_IP ? "IPv4" : "IPv6", VTY_NEWLINE);
 8337: 
 8338:   return CMD_SUCCESS;
 8339: }
 8340: 
 8341: static int
 8342: bgp_show_rsclient_summary_vty (struct vty *vty, const char *name, 
 8343:                                afi_t afi, safi_t safi)
 8344: {
 8345:   struct bgp *bgp;
 8346: 
 8347:   if (name)
 8348:     {
 8349:       bgp = bgp_lookup_by_name (name);
 8350: 
 8351:       if (! bgp)
 8352:        {
 8353:          vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
 8354:          return CMD_WARNING;
 8355:        }
 8356: 
 8357:       bgp_show_rsclient_summary (vty, bgp, afi, safi);
 8358:       return CMD_SUCCESS;
 8359:     }
 8360: 
 8361:   bgp = bgp_get_default ();
 8362: 
 8363:   if (bgp)
 8364:     bgp_show_rsclient_summary (vty, bgp, afi, safi);
 8365: 
 8366:   return CMD_SUCCESS;
 8367: }
 8368: 
 8369: /* 'show bgp rsclient' commands. */
 8370: DEFUN (show_ip_bgp_rsclient_summary,
 8371:        show_ip_bgp_rsclient_summary_cmd,
 8372:        "show ip bgp rsclient summary",
 8373:        SHOW_STR
 8374:        IP_STR
 8375:        BGP_STR
 8376:        "Information about Route Server Clients\n"
 8377:        "Summary of all Route Server Clients\n")
 8378: {
 8379:   return bgp_show_rsclient_summary_vty (vty, NULL, AFI_IP, SAFI_UNICAST);
 8380: }
 8381: 
 8382: DEFUN (show_ip_bgp_instance_rsclient_summary,
 8383:        show_ip_bgp_instance_rsclient_summary_cmd,
 8384:        "show ip bgp view WORD rsclient summary",
 8385:        SHOW_STR
 8386:        IP_STR
 8387:        BGP_STR
 8388:        "BGP view\n"
 8389:        "View name\n"
 8390:        "Information about Route Server Clients\n"
 8391:        "Summary of all Route Server Clients\n")
 8392: {
 8393:   return bgp_show_rsclient_summary_vty (vty, argv[0], AFI_IP, SAFI_UNICAST);
 8394: }
 8395: 
 8396: DEFUN (show_ip_bgp_ipv4_rsclient_summary,
 8397:       show_ip_bgp_ipv4_rsclient_summary_cmd,
 8398:       "show ip bgp ipv4 (unicast|multicast) rsclient summary",
 8399:        SHOW_STR
 8400:        IP_STR
 8401:        BGP_STR
 8402:        "Address family\n"
 8403:        "Address Family modifier\n"
 8404:        "Address Family modifier\n"
 8405:        "Information about Route Server Clients\n"
 8406:        "Summary of all Route Server Clients\n")
 8407: {
 8408:   if (strncmp (argv[0], "m", 1) == 0)
 8409:     return bgp_show_rsclient_summary_vty (vty, NULL, AFI_IP, SAFI_MULTICAST);
 8410: 
 8411:   return bgp_show_rsclient_summary_vty (vty, NULL, AFI_IP, SAFI_UNICAST);
 8412: }
 8413: 
 8414: DEFUN (show_ip_bgp_instance_ipv4_rsclient_summary,
 8415:       show_ip_bgp_instance_ipv4_rsclient_summary_cmd,
 8416:       "show ip bgp view WORD ipv4 (unicast|multicast) rsclient summary",
 8417:        SHOW_STR
 8418:        IP_STR
 8419:        BGP_STR
 8420:        "BGP view\n"
 8421:        "View name\n"
 8422:        "Address family\n"
 8423:        "Address Family modifier\n"
 8424:        "Address Family modifier\n"
 8425:        "Information about Route Server Clients\n"
 8426:        "Summary of all Route Server Clients\n")
 8427: {
 8428:   if (strncmp (argv[1], "m", 1) == 0)
 8429:     return bgp_show_rsclient_summary_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST);
 8430: 
 8431:   return bgp_show_rsclient_summary_vty (vty, argv[0], AFI_IP, SAFI_UNICAST);
 8432: }
 8433: 
 8434: DEFUN (show_bgp_instance_ipv4_safi_rsclient_summary,
 8435:        show_bgp_instance_ipv4_safi_rsclient_summary_cmd,
 8436:        "show bgp view WORD ipv4 (unicast|multicast) rsclient summary",
 8437:        SHOW_STR
 8438:        BGP_STR
 8439:        "BGP view\n"
 8440:        "View name\n"
 8441:        "Address family\n"
 8442:        "Address Family modifier\n"
 8443:        "Address Family modifier\n"
 8444:        "Information about Route Server Clients\n"
 8445:        "Summary of all Route Server Clients\n")
 8446: {
 8447:   safi_t safi;
 8448: 
 8449:   if (argc == 2) {
 8450:     safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
 8451:     return bgp_show_rsclient_summary_vty (vty, argv[0], AFI_IP, safi);
 8452:   } else {
 8453:     safi = (strncmp (argv[0], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
 8454:     return bgp_show_rsclient_summary_vty (vty, NULL, AFI_IP, safi);
 8455:   }
 8456: }
 8457: 
 8458: ALIAS (show_bgp_instance_ipv4_safi_rsclient_summary,
 8459:        show_bgp_ipv4_safi_rsclient_summary_cmd,
 8460:        "show bgp ipv4 (unicast|multicast) rsclient summary",
 8461:        SHOW_STR
 8462:        BGP_STR
 8463:        "Address family\n"
 8464:        "Address Family modifier\n"
 8465:        "Address Family modifier\n"
 8466:        "Information about Route Server Clients\n"
 8467:        "Summary of all Route Server Clients\n")
 8468: 
 8469: #ifdef HAVE_IPV6
 8470: DEFUN (show_bgp_rsclient_summary,
 8471:        show_bgp_rsclient_summary_cmd,
 8472:        "show bgp rsclient summary",
 8473:        SHOW_STR
 8474:        BGP_STR
 8475:        "Information about Route Server Clients\n"
 8476:        "Summary of all Route Server Clients\n")
 8477: {
 8478:   return bgp_show_rsclient_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST);
 8479: }
 8480: 
 8481: DEFUN (show_bgp_instance_rsclient_summary,
 8482:        show_bgp_instance_rsclient_summary_cmd,
 8483:        "show bgp view WORD rsclient summary",
 8484:        SHOW_STR
 8485:        BGP_STR
 8486:        "BGP view\n"
 8487:        "View name\n"
 8488:        "Information about Route Server Clients\n"
 8489:        "Summary of all Route Server Clients\n")
 8490: {
 8491:   return bgp_show_rsclient_summary_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST);
 8492: }
 8493: 
 8494: ALIAS (show_bgp_rsclient_summary,
 8495:       show_bgp_ipv6_rsclient_summary_cmd,
 8496:       "show bgp ipv6 rsclient summary",
 8497:        SHOW_STR
 8498:        BGP_STR
 8499:        "Address family\n"
 8500:        "Information about Route Server Clients\n"
 8501:        "Summary of all Route Server Clients\n")
 8502: 
 8503: ALIAS (show_bgp_instance_rsclient_summary,
 8504:       show_bgp_instance_ipv6_rsclient_summary_cmd,
 8505:        "show bgp view WORD ipv6 rsclient summary",
 8506:        SHOW_STR
 8507:        BGP_STR
 8508:        "BGP view\n"
 8509:        "View name\n"
 8510:        "Address family\n"
 8511:        "Information about Route Server Clients\n"
 8512:        "Summary of all Route Server Clients\n")
 8513: 
 8514: DEFUN (show_bgp_instance_ipv6_safi_rsclient_summary,
 8515:        show_bgp_instance_ipv6_safi_rsclient_summary_cmd,
 8516:        "show bgp view WORD ipv6 (unicast|multicast) rsclient summary",
 8517:        SHOW_STR
 8518:        BGP_STR
 8519:        "BGP view\n"
 8520:        "View name\n"
 8521:        "Address family\n"
 8522:        "Address Family modifier\n"
 8523:        "Address Family modifier\n"
 8524:        "Information about Route Server Clients\n"
 8525:        "Summary of all Route Server Clients\n")
 8526: {
 8527:   safi_t safi;
 8528: 
 8529:   if (argc == 2) {
 8530:     safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
 8531:     return bgp_show_rsclient_summary_vty (vty, argv[0], AFI_IP6, safi);
 8532:   } else {
 8533:     safi = (strncmp (argv[0], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
 8534:     return bgp_show_rsclient_summary_vty (vty, NULL, AFI_IP6, safi);
 8535:   }
 8536: }
 8537: 
 8538: ALIAS (show_bgp_instance_ipv6_safi_rsclient_summary,
 8539:        show_bgp_ipv6_safi_rsclient_summary_cmd,
 8540:        "show bgp ipv6 (unicast|multicast) rsclient summary",
 8541:        SHOW_STR
 8542:        BGP_STR
 8543:        "Address family\n"
 8544:        "Address Family modifier\n"
 8545:        "Address Family modifier\n"
 8546:        "Information about Route Server Clients\n"
 8547:        "Summary of all Route Server Clients\n")
 8548: 
 8549: #endif /* HAVE IPV6 */
 8550: 
 8551: /* Redistribute VTY commands.  */
 8552: 
 8553: DEFUN (bgp_redistribute_ipv4,
 8554:        bgp_redistribute_ipv4_cmd,
 8555:        "redistribute " QUAGGA_IP_REDIST_STR_BGPD,
 8556:        "Redistribute information from another routing protocol\n"
 8557:        QUAGGA_IP_REDIST_HELP_STR_BGPD)
 8558: {
 8559:   int type;
 8560: 
 8561:   type = proto_redistnum (AFI_IP, argv[0]);
 8562:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8563:     {
 8564:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8565:       return CMD_WARNING;
 8566:     }
 8567:   return bgp_redistribute_set (vty->index, AFI_IP, type);
 8568: }
 8569: 
 8570: DEFUN (bgp_redistribute_ipv4_rmap,
 8571:        bgp_redistribute_ipv4_rmap_cmd,
 8572:        "redistribute " QUAGGA_IP_REDIST_STR_BGPD " route-map WORD",
 8573:        "Redistribute information from another routing protocol\n"
 8574:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8575:        "Route map reference\n"
 8576:        "Pointer to route-map entries\n")
 8577: {
 8578:   int type;
 8579: 
 8580:   type = proto_redistnum (AFI_IP, argv[0]);
 8581:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8582:     {
 8583:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8584:       return CMD_WARNING;
 8585:     }
 8586: 
 8587:   bgp_redistribute_rmap_set (vty->index, AFI_IP, type, argv[1]);
 8588:   return bgp_redistribute_set (vty->index, AFI_IP, type);
 8589: }
 8590: 
 8591: DEFUN (bgp_redistribute_ipv4_metric,
 8592:        bgp_redistribute_ipv4_metric_cmd,
 8593:        "redistribute " QUAGGA_IP_REDIST_STR_BGPD " metric <0-4294967295>",
 8594:        "Redistribute information from another routing protocol\n"
 8595:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8596:        "Metric for redistributed routes\n"
 8597:        "Default metric\n")
 8598: {
 8599:   int type;
 8600:   u_int32_t metric;
 8601: 
 8602:   type = proto_redistnum (AFI_IP, argv[0]);
 8603:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8604:     {
 8605:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8606:       return CMD_WARNING;
 8607:     }
 8608:   VTY_GET_INTEGER ("metric", metric, argv[1]);
 8609: 
 8610:   bgp_redistribute_metric_set (vty->index, AFI_IP, type, metric);
 8611:   return bgp_redistribute_set (vty->index, AFI_IP, type);
 8612: }
 8613: 
 8614: DEFUN (bgp_redistribute_ipv4_rmap_metric,
 8615:        bgp_redistribute_ipv4_rmap_metric_cmd,
 8616:        "redistribute " QUAGGA_IP_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>",
 8617:        "Redistribute information from another routing protocol\n"
 8618:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8619:        "Route map reference\n"
 8620:        "Pointer to route-map entries\n"
 8621:        "Metric for redistributed routes\n"
 8622:        "Default metric\n")
 8623: {
 8624:   int type;
 8625:   u_int32_t metric;
 8626: 
 8627:   type = proto_redistnum (AFI_IP, argv[0]);
 8628:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8629:     {
 8630:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8631:       return CMD_WARNING;
 8632:     }
 8633:   VTY_GET_INTEGER ("metric", metric, argv[2]);
 8634: 
 8635:   bgp_redistribute_rmap_set (vty->index, AFI_IP, type, argv[1]);
 8636:   bgp_redistribute_metric_set (vty->index, AFI_IP, type, metric);
 8637:   return bgp_redistribute_set (vty->index, AFI_IP, type);
 8638: }
 8639: 
 8640: DEFUN (bgp_redistribute_ipv4_metric_rmap,
 8641:        bgp_redistribute_ipv4_metric_rmap_cmd,
 8642:        "redistribute " QUAGGA_IP_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD",
 8643:        "Redistribute information from another routing protocol\n"
 8644:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8645:        "Metric for redistributed routes\n"
 8646:        "Default metric\n"
 8647:        "Route map reference\n"
 8648:        "Pointer to route-map entries\n")
 8649: {
 8650:   int type;
 8651:   u_int32_t metric;
 8652: 
 8653:   type = proto_redistnum (AFI_IP, argv[0]);
 8654:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8655:     {
 8656:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8657:       return CMD_WARNING;
 8658:     }
 8659:   VTY_GET_INTEGER ("metric", metric, argv[1]);
 8660: 
 8661:   bgp_redistribute_metric_set (vty->index, AFI_IP, type, metric);
 8662:   bgp_redistribute_rmap_set (vty->index, AFI_IP, type, argv[2]);
 8663:   return bgp_redistribute_set (vty->index, AFI_IP, type);
 8664: }
 8665: 
 8666: DEFUN (no_bgp_redistribute_ipv4,
 8667:        no_bgp_redistribute_ipv4_cmd,
 8668:        "no redistribute " QUAGGA_IP_REDIST_STR_BGPD,
 8669:        NO_STR
 8670:        "Redistribute information from another routing protocol\n"
 8671:        QUAGGA_IP_REDIST_HELP_STR_BGPD)
 8672: {
 8673:   int type;
 8674: 
 8675:   type = proto_redistnum (AFI_IP, argv[0]);
 8676:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8677:     {
 8678:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8679:       return CMD_WARNING;
 8680:     }
 8681: 
 8682:   return bgp_redistribute_unset (vty->index, AFI_IP, type);
 8683: }
 8684: 
 8685: DEFUN (no_bgp_redistribute_ipv4_rmap,
 8686:        no_bgp_redistribute_ipv4_rmap_cmd,
 8687:        "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " route-map WORD",
 8688:        NO_STR
 8689:        "Redistribute information from another routing protocol\n"
 8690:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8691:        "Route map reference\n"
 8692:        "Pointer to route-map entries\n")
 8693: {
 8694:   int type;
 8695: 
 8696:   type = proto_redistnum (AFI_IP, argv[0]);
 8697:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8698:     {
 8699:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8700:       return CMD_WARNING;
 8701:     }
 8702: 
 8703:   bgp_redistribute_routemap_unset (vty->index, AFI_IP, type);
 8704:   return CMD_SUCCESS;
 8705: }
 8706: 
 8707: DEFUN (no_bgp_redistribute_ipv4_metric,
 8708:        no_bgp_redistribute_ipv4_metric_cmd,
 8709:        "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " metric <0-4294967295>",
 8710:        NO_STR
 8711:        "Redistribute information from another routing protocol\n"
 8712:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8713:        "Metric for redistributed routes\n"
 8714:        "Default metric\n")
 8715: {
 8716:   int type;
 8717: 
 8718:   type = proto_redistnum (AFI_IP, argv[0]);
 8719:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8720:     {
 8721:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8722:       return CMD_WARNING;
 8723:     }
 8724: 
 8725:   bgp_redistribute_metric_unset (vty->index, AFI_IP, type);
 8726:   return CMD_SUCCESS;
 8727: }
 8728: 
 8729: DEFUN (no_bgp_redistribute_ipv4_rmap_metric,
 8730:        no_bgp_redistribute_ipv4_rmap_metric_cmd,
 8731:        "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>",
 8732:        NO_STR
 8733:        "Redistribute information from another routing protocol\n"
 8734:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8735:        "Route map reference\n"
 8736:        "Pointer to route-map entries\n"
 8737:        "Metric for redistributed routes\n"
 8738:        "Default metric\n")
 8739: {
 8740:   int type;
 8741: 
 8742:   type = proto_redistnum (AFI_IP, argv[0]);
 8743:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8744:     {
 8745:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8746:       return CMD_WARNING;
 8747:     }
 8748: 
 8749:   bgp_redistribute_metric_unset (vty->index, AFI_IP, type);
 8750:   bgp_redistribute_routemap_unset (vty->index, AFI_IP, type);
 8751:   return CMD_SUCCESS;
 8752: }
 8753: 
 8754: ALIAS (no_bgp_redistribute_ipv4_rmap_metric,
 8755:        no_bgp_redistribute_ipv4_metric_rmap_cmd,
 8756:        "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD",
 8757:        NO_STR
 8758:        "Redistribute information from another routing protocol\n"
 8759:        QUAGGA_IP_REDIST_HELP_STR_BGPD
 8760:        "Metric for redistributed routes\n"
 8761:        "Default metric\n"
 8762:        "Route map reference\n"
 8763:        "Pointer to route-map entries\n")
 8764: 
 8765: #ifdef HAVE_IPV6
 8766: DEFUN (bgp_redistribute_ipv6,
 8767:        bgp_redistribute_ipv6_cmd,
 8768:        "redistribute " QUAGGA_IP6_REDIST_STR_BGPD,
 8769:        "Redistribute information from another routing protocol\n"
 8770:        QUAGGA_IP6_REDIST_HELP_STR_BGPD)
 8771: {
 8772:   int type;
 8773: 
 8774:   type = proto_redistnum (AFI_IP6, argv[0]);
 8775:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8776:     {
 8777:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8778:       return CMD_WARNING;
 8779:     }
 8780: 
 8781:   return bgp_redistribute_set (vty->index, AFI_IP6, type);
 8782: }
 8783: 
 8784: DEFUN (bgp_redistribute_ipv6_rmap,
 8785:        bgp_redistribute_ipv6_rmap_cmd,
 8786:        "redistribute " QUAGGA_IP6_REDIST_STR_BGPD " route-map WORD",
 8787:        "Redistribute information from another routing protocol\n"
 8788:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8789:        "Route map reference\n"
 8790:        "Pointer to route-map entries\n")
 8791: {
 8792:   int type;
 8793: 
 8794:   type = proto_redistnum (AFI_IP6, argv[0]);
 8795:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8796:     {
 8797:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8798:       return CMD_WARNING;
 8799:     }
 8800: 
 8801:   bgp_redistribute_rmap_set (vty->index, AFI_IP6, type, argv[1]);
 8802:   return bgp_redistribute_set (vty->index, AFI_IP6, type);
 8803: }
 8804: 
 8805: DEFUN (bgp_redistribute_ipv6_metric,
 8806:        bgp_redistribute_ipv6_metric_cmd,
 8807:        "redistribute " QUAGGA_IP6_REDIST_STR_BGPD " metric <0-4294967295>",
 8808:        "Redistribute information from another routing protocol\n"
 8809:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8810:        "Metric for redistributed routes\n"
 8811:        "Default metric\n")
 8812: {
 8813:   int type;
 8814:   u_int32_t metric;
 8815: 
 8816:   type = proto_redistnum (AFI_IP6, argv[0]);
 8817:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8818:     {
 8819:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8820:       return CMD_WARNING;
 8821:     }
 8822:   VTY_GET_INTEGER ("metric", metric, argv[1]);
 8823: 
 8824:   bgp_redistribute_metric_set (vty->index, AFI_IP6, type, metric);
 8825:   return bgp_redistribute_set (vty->index, AFI_IP6, type);
 8826: }
 8827: 
 8828: DEFUN (bgp_redistribute_ipv6_rmap_metric,
 8829:        bgp_redistribute_ipv6_rmap_metric_cmd,
 8830:        "redistribute " QUAGGA_IP6_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>",
 8831:        "Redistribute information from another routing protocol\n"
 8832:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8833:        "Route map reference\n"
 8834:        "Pointer to route-map entries\n"
 8835:        "Metric for redistributed routes\n"
 8836:        "Default metric\n")
 8837: {
 8838:   int type;
 8839:   u_int32_t metric;
 8840: 
 8841:   type = proto_redistnum (AFI_IP6, argv[0]);
 8842:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8843:     {
 8844:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8845:       return CMD_WARNING;
 8846:     }
 8847:   VTY_GET_INTEGER ("metric", metric, argv[2]);
 8848: 
 8849:   bgp_redistribute_rmap_set (vty->index, AFI_IP6, type, argv[1]);
 8850:   bgp_redistribute_metric_set (vty->index, AFI_IP6, type, metric);
 8851:   return bgp_redistribute_set (vty->index, AFI_IP6, type);
 8852: }
 8853: 
 8854: DEFUN (bgp_redistribute_ipv6_metric_rmap,
 8855:        bgp_redistribute_ipv6_metric_rmap_cmd,
 8856:        "redistribute " QUAGGA_IP6_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD",
 8857:        "Redistribute information from another routing protocol\n"
 8858:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8859:        "Metric for redistributed routes\n"
 8860:        "Default metric\n"
 8861:        "Route map reference\n"
 8862:        "Pointer to route-map entries\n")
 8863: {
 8864:   int type;
 8865:   u_int32_t metric;
 8866: 
 8867:   type = proto_redistnum (AFI_IP6, argv[0]);
 8868:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8869:     {
 8870:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8871:       return CMD_WARNING;
 8872:     }
 8873:   VTY_GET_INTEGER ("metric", metric, argv[1]);
 8874: 
 8875:   bgp_redistribute_metric_set (vty->index, AFI_IP6, type, metric);
 8876:   bgp_redistribute_rmap_set (vty->index, AFI_IP6, type, argv[2]);
 8877:   return bgp_redistribute_set (vty->index, AFI_IP6, type);
 8878: }
 8879: 
 8880: DEFUN (no_bgp_redistribute_ipv6,
 8881:        no_bgp_redistribute_ipv6_cmd,
 8882:        "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD,
 8883:        NO_STR
 8884:        "Redistribute information from another routing protocol\n"
 8885:        QUAGGA_IP6_REDIST_HELP_STR_BGPD)
 8886: {
 8887:   int type;
 8888: 
 8889:   type = proto_redistnum (AFI_IP6, argv[0]);
 8890:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8891:     {
 8892:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8893:       return CMD_WARNING;
 8894:     }
 8895: 
 8896:   return bgp_redistribute_unset (vty->index, AFI_IP6, type);
 8897: }
 8898: 
 8899: DEFUN (no_bgp_redistribute_ipv6_rmap,
 8900:        no_bgp_redistribute_ipv6_rmap_cmd,
 8901:        "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " route-map WORD",
 8902:        NO_STR
 8903:        "Redistribute information from another routing protocol\n"
 8904:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8905:        "Route map reference\n"
 8906:        "Pointer to route-map entries\n")
 8907: {
 8908:   int type;
 8909: 
 8910:   type = proto_redistnum (AFI_IP6, argv[0]);
 8911:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8912:     {
 8913:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8914:       return CMD_WARNING;
 8915:     }
 8916: 
 8917:   bgp_redistribute_routemap_unset (vty->index, AFI_IP6, type);
 8918:   return CMD_SUCCESS;
 8919: }
 8920: 
 8921: DEFUN (no_bgp_redistribute_ipv6_metric,
 8922:        no_bgp_redistribute_ipv6_metric_cmd,
 8923:        "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " metric <0-4294967295>",
 8924:        NO_STR
 8925:        "Redistribute information from another routing protocol\n"
 8926:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8927:        "Metric for redistributed routes\n"
 8928:        "Default metric\n")
 8929: {
 8930:   int type;
 8931: 
 8932:   type = proto_redistnum (AFI_IP6, argv[0]);
 8933:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8934:     {
 8935:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8936:       return CMD_WARNING;
 8937:     }
 8938: 
 8939:   bgp_redistribute_metric_unset (vty->index, AFI_IP6, type);
 8940:   return CMD_SUCCESS;
 8941: }
 8942: 
 8943: DEFUN (no_bgp_redistribute_ipv6_rmap_metric,
 8944:        no_bgp_redistribute_ipv6_rmap_metric_cmd,
 8945:        "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>",
 8946:        NO_STR
 8947:        "Redistribute information from another routing protocol\n"
 8948:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8949:        "Route map reference\n"
 8950:        "Pointer to route-map entries\n"
 8951:        "Metric for redistributed routes\n"
 8952:        "Default metric\n")
 8953: {
 8954:   int type;
 8955: 
 8956:   type = proto_redistnum (AFI_IP6, argv[0]);
 8957:   if (type < 0 || type == ZEBRA_ROUTE_BGP)
 8958:     {
 8959:       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
 8960:       return CMD_WARNING;
 8961:     }
 8962: 
 8963:   bgp_redistribute_metric_unset (vty->index, AFI_IP6, type);
 8964:   bgp_redistribute_routemap_unset (vty->index, AFI_IP6, type);
 8965:   return CMD_SUCCESS;
 8966: }
 8967: 
 8968: ALIAS (no_bgp_redistribute_ipv6_rmap_metric,
 8969:        no_bgp_redistribute_ipv6_metric_rmap_cmd,
 8970:        "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD",
 8971:        NO_STR
 8972:        "Redistribute information from another routing protocol\n"
 8973:        QUAGGA_IP6_REDIST_HELP_STR_BGPD
 8974:        "Metric for redistributed routes\n"
 8975:        "Default metric\n"
 8976:        "Route map reference\n"
 8977:        "Pointer to route-map entries\n")
 8978: #endif /* HAVE_IPV6 */
 8979: 
 8980: int
 8981: bgp_config_write_redistribute (struct vty *vty, struct bgp *bgp, afi_t afi,
 8982: 			       safi_t safi, int *write)
 8983: {
 8984:   int i;
 8985: 
 8986:   /* Unicast redistribution only.  */
 8987:   if (safi != SAFI_UNICAST)
 8988:     return 0;
 8989: 
 8990:   for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
 8991:     {
 8992:       /* Redistribute BGP does not make sense.  */
 8993:       if (bgp->redist[afi][i] && i != ZEBRA_ROUTE_BGP)
 8994: 	{
 8995: 	  /* Display "address-family" when it is not yet diplayed.  */
 8996: 	  bgp_config_write_family_header (vty, afi, safi, write);
 8997: 
 8998: 	  /* "redistribute" configuration.  */
 8999: 	  vty_out (vty, " redistribute %s", zebra_route_string(i));
 9000: 
 9001: 	  if (bgp->redist_metric_flag[afi][i])
 9002: 	    vty_out (vty, " metric %u", bgp->redist_metric[afi][i]);
 9003: 
 9004: 	  if (bgp->rmap[afi][i].name)
 9005: 	    vty_out (vty, " route-map %s", bgp->rmap[afi][i].name);
 9006: 
 9007: 	  vty_out (vty, "%s", VTY_NEWLINE);
 9008: 	}
 9009:     }
 9010:   return *write;
 9011: }
 9012: 
 9013: /* BGP node structure. */
 9014: static struct cmd_node bgp_node =
 9015: {
 9016:   BGP_NODE,
 9017:   "%s(config-router)# ",
 9018:   1,
 9019: };
 9020: 
 9021: static struct cmd_node bgp_ipv4_unicast_node =
 9022: {
 9023:   BGP_IPV4_NODE,
 9024:   "%s(config-router-af)# ",
 9025:   1,
 9026: };
 9027: 
 9028: static struct cmd_node bgp_ipv4_multicast_node =
 9029: {
 9030:   BGP_IPV4M_NODE,
 9031:   "%s(config-router-af)# ",
 9032:   1,
 9033: };
 9034: 
 9035: static struct cmd_node bgp_ipv6_unicast_node =
 9036: {
 9037:   BGP_IPV6_NODE,
 9038:   "%s(config-router-af)# ",
 9039:   1,
 9040: };
 9041: 
 9042: static struct cmd_node bgp_ipv6_multicast_node =
 9043: {
 9044:   BGP_IPV6M_NODE,
 9045:   "%s(config-router-af)# ",
 9046:   1,
 9047: };
 9048: 
 9049: static struct cmd_node bgp_vpnv4_node =
 9050: {
 9051:   BGP_VPNV4_NODE,
 9052:   "%s(config-router-af)# ",
 9053:   1
 9054: };
 9055: 
 9056: static void community_list_vty (void);
 9057: 
 9058: void
 9059: bgp_vty_init (void)
 9060: {
 9061:   /* Install bgp top node. */
 9062:   install_node (&bgp_node, bgp_config_write);
 9063:   install_node (&bgp_ipv4_unicast_node, NULL);
 9064:   install_node (&bgp_ipv4_multicast_node, NULL);
 9065:   install_node (&bgp_ipv6_unicast_node, NULL);
 9066:   install_node (&bgp_ipv6_multicast_node, NULL);
 9067:   install_node (&bgp_vpnv4_node, NULL);
 9068: 
 9069:   /* Install default VTY commands to new nodes.  */
 9070:   install_default (BGP_NODE);
 9071:   install_default (BGP_IPV4_NODE);
 9072:   install_default (BGP_IPV4M_NODE);
 9073:   install_default (BGP_IPV6_NODE);
 9074:   install_default (BGP_IPV6M_NODE);
 9075:   install_default (BGP_VPNV4_NODE);
 9076:   
 9077:   /* "bgp multiple-instance" commands. */
 9078:   install_element (CONFIG_NODE, &bgp_multiple_instance_cmd);
 9079:   install_element (CONFIG_NODE, &no_bgp_multiple_instance_cmd);
 9080: 
 9081:   /* "bgp config-type" commands. */
 9082:   install_element (CONFIG_NODE, &bgp_config_type_cmd);
 9083:   install_element (CONFIG_NODE, &no_bgp_config_type_cmd);
 9084: 
 9085:   /* Dummy commands (Currently not supported) */
 9086:   install_element (BGP_NODE, &no_synchronization_cmd);
 9087:   install_element (BGP_NODE, &no_auto_summary_cmd);
 9088: 
 9089:   /* "router bgp" commands. */
 9090:   install_element (CONFIG_NODE, &router_bgp_cmd);
 9091:   install_element (CONFIG_NODE, &router_bgp_view_cmd);
 9092: 
 9093:   /* "no router bgp" commands. */
 9094:   install_element (CONFIG_NODE, &no_router_bgp_cmd);
 9095:   install_element (CONFIG_NODE, &no_router_bgp_view_cmd);
 9096: 
 9097:   /* "bgp router-id" commands. */
 9098:   install_element (BGP_NODE, &bgp_router_id_cmd);
 9099:   install_element (BGP_NODE, &no_bgp_router_id_cmd);
 9100:   install_element (BGP_NODE, &no_bgp_router_id_val_cmd);
 9101: 
 9102:   /* "bgp cluster-id" commands. */
 9103:   install_element (BGP_NODE, &bgp_cluster_id_cmd);
 9104:   install_element (BGP_NODE, &bgp_cluster_id32_cmd);
 9105:   install_element (BGP_NODE, &no_bgp_cluster_id_cmd);
 9106:   install_element (BGP_NODE, &no_bgp_cluster_id_arg_cmd);
 9107: 
 9108:   /* "bgp confederation" commands. */
 9109:   install_element (BGP_NODE, &bgp_confederation_identifier_cmd);
 9110:   install_element (BGP_NODE, &no_bgp_confederation_identifier_cmd);
 9111:   install_element (BGP_NODE, &no_bgp_confederation_identifier_arg_cmd);
 9112: 
 9113:   /* "bgp confederation peers" commands. */
 9114:   install_element (BGP_NODE, &bgp_confederation_peers_cmd);
 9115:   install_element (BGP_NODE, &no_bgp_confederation_peers_cmd);
 9116: 
 9117:   /* "maximum-paths" commands. */
 9118:   install_element (BGP_NODE, &bgp_maxpaths_cmd);
 9119:   install_element (BGP_NODE, &no_bgp_maxpaths_cmd);
 9120:   install_element (BGP_NODE, &no_bgp_maxpaths_arg_cmd);
 9121:   install_element (BGP_IPV4_NODE, &bgp_maxpaths_cmd);
 9122:   install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_cmd);
 9123:   install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_arg_cmd);
 9124:   install_element (BGP_NODE, &bgp_maxpaths_ibgp_cmd);
 9125:   install_element (BGP_NODE, &no_bgp_maxpaths_ibgp_cmd);
 9126:   install_element (BGP_NODE, &no_bgp_maxpaths_ibgp_arg_cmd);
 9127:   install_element (BGP_IPV4_NODE, &bgp_maxpaths_ibgp_cmd);
 9128:   install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_ibgp_cmd);
 9129:   install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_ibgp_arg_cmd);
 9130: 
 9131:   /* "timers bgp" commands. */
 9132:   install_element (BGP_NODE, &bgp_timers_cmd);
 9133:   install_element (BGP_NODE, &no_bgp_timers_cmd);
 9134:   install_element (BGP_NODE, &no_bgp_timers_arg_cmd);
 9135: 
 9136:   /* "bgp client-to-client reflection" commands */
 9137:   install_element (BGP_NODE, &no_bgp_client_to_client_reflection_cmd);
 9138:   install_element (BGP_NODE, &bgp_client_to_client_reflection_cmd);
 9139: 
 9140:   /* "bgp always-compare-med" commands */
 9141:   install_element (BGP_NODE, &bgp_always_compare_med_cmd);
 9142:   install_element (BGP_NODE, &no_bgp_always_compare_med_cmd);
 9143:   
 9144:   /* "bgp deterministic-med" commands */
 9145:   install_element (BGP_NODE, &bgp_deterministic_med_cmd);
 9146:   install_element (BGP_NODE, &no_bgp_deterministic_med_cmd);
 9147: 
 9148:   /* "bgp graceful-restart" commands */
 9149:   install_element (BGP_NODE, &bgp_graceful_restart_cmd);
 9150:   install_element (BGP_NODE, &no_bgp_graceful_restart_cmd);
 9151:   install_element (BGP_NODE, &bgp_graceful_restart_stalepath_time_cmd);
 9152:   install_element (BGP_NODE, &no_bgp_graceful_restart_stalepath_time_cmd);
 9153:   install_element (BGP_NODE, &no_bgp_graceful_restart_stalepath_time_val_cmd);
 9154:  
 9155:   /* "bgp fast-external-failover" commands */
 9156:   install_element (BGP_NODE, &bgp_fast_external_failover_cmd);
 9157:   install_element (BGP_NODE, &no_bgp_fast_external_failover_cmd);
 9158: 
 9159:   /* "bgp enforce-first-as" commands */
 9160:   install_element (BGP_NODE, &bgp_enforce_first_as_cmd);
 9161:   install_element (BGP_NODE, &no_bgp_enforce_first_as_cmd);
 9162: 
 9163:   /* "bgp bestpath compare-routerid" commands */
 9164:   install_element (BGP_NODE, &bgp_bestpath_compare_router_id_cmd);
 9165:   install_element (BGP_NODE, &no_bgp_bestpath_compare_router_id_cmd);
 9166: 
 9167:   /* "bgp bestpath as-path ignore" commands */
 9168:   install_element (BGP_NODE, &bgp_bestpath_aspath_ignore_cmd);
 9169:   install_element (BGP_NODE, &no_bgp_bestpath_aspath_ignore_cmd);
 9170: 
 9171:   /* "bgp bestpath as-path confed" commands */
 9172:   install_element (BGP_NODE, &bgp_bestpath_aspath_confed_cmd);
 9173:   install_element (BGP_NODE, &no_bgp_bestpath_aspath_confed_cmd);
 9174: 
 9175:   /* "bgp log-neighbor-changes" commands */
 9176:   install_element (BGP_NODE, &bgp_log_neighbor_changes_cmd);
 9177:   install_element (BGP_NODE, &no_bgp_log_neighbor_changes_cmd);
 9178: 
 9179:   /* "bgp bestpath med" commands */
 9180:   install_element (BGP_NODE, &bgp_bestpath_med_cmd);
 9181:   install_element (BGP_NODE, &bgp_bestpath_med2_cmd);
 9182:   install_element (BGP_NODE, &bgp_bestpath_med3_cmd);
 9183:   install_element (BGP_NODE, &no_bgp_bestpath_med_cmd);
 9184:   install_element (BGP_NODE, &no_bgp_bestpath_med2_cmd);
 9185:   install_element (BGP_NODE, &no_bgp_bestpath_med3_cmd);
 9186: 
 9187:   /* "no bgp default ipv4-unicast" commands. */
 9188:   install_element (BGP_NODE, &no_bgp_default_ipv4_unicast_cmd);
 9189:   install_element (BGP_NODE, &bgp_default_ipv4_unicast_cmd);
 9190:   
 9191:   /* "bgp network import-check" commands. */
 9192:   install_element (BGP_NODE, &bgp_network_import_check_cmd);
 9193:   install_element (BGP_NODE, &no_bgp_network_import_check_cmd);
 9194: 
 9195:   /* "bgp default local-preference" commands. */
 9196:   install_element (BGP_NODE, &bgp_default_local_preference_cmd);
 9197:   install_element (BGP_NODE, &no_bgp_default_local_preference_cmd);
 9198:   install_element (BGP_NODE, &no_bgp_default_local_preference_val_cmd);
 9199: 
 9200:   /* "neighbor remote-as" commands. */
 9201:   install_element (BGP_NODE, &neighbor_remote_as_cmd);
 9202:   install_element (BGP_NODE, &no_neighbor_cmd);
 9203:   install_element (BGP_NODE, &no_neighbor_remote_as_cmd);
 9204: 
 9205:   /* "neighbor peer-group" commands. */
 9206:   install_element (BGP_NODE, &neighbor_peer_group_cmd);
 9207:   install_element (BGP_NODE, &no_neighbor_peer_group_cmd);
 9208:   install_element (BGP_NODE, &no_neighbor_peer_group_remote_as_cmd);
 9209: 
 9210:   /* "neighbor local-as" commands. */
 9211:   install_element (BGP_NODE, &neighbor_local_as_cmd);
 9212:   install_element (BGP_NODE, &neighbor_local_as_no_prepend_cmd);
 9213:   install_element (BGP_NODE, &neighbor_local_as_no_prepend_replace_as_cmd);
 9214:   install_element (BGP_NODE, &no_neighbor_local_as_cmd);
 9215:   install_element (BGP_NODE, &no_neighbor_local_as_val_cmd);
 9216:   install_element (BGP_NODE, &no_neighbor_local_as_val2_cmd);
 9217:   install_element (BGP_NODE, &no_neighbor_local_as_val3_cmd);
 9218: 
 9219:   /* "neighbor password" commands. */
 9220:   install_element (BGP_NODE, &neighbor_password_cmd);
 9221:   install_element (BGP_NODE, &no_neighbor_password_cmd);
 9222: 
 9223:   /* "neighbor activate" commands. */
 9224:   install_element (BGP_NODE, &neighbor_activate_cmd);
 9225:   install_element (BGP_IPV4_NODE, &neighbor_activate_cmd);
 9226:   install_element (BGP_IPV4M_NODE, &neighbor_activate_cmd);
 9227:   install_element (BGP_IPV6_NODE, &neighbor_activate_cmd);
 9228:   install_element (BGP_IPV6M_NODE, &neighbor_activate_cmd);
 9229:   install_element (BGP_VPNV4_NODE, &neighbor_activate_cmd);
 9230: 
 9231:   /* "no neighbor activate" commands. */
 9232:   install_element (BGP_NODE, &no_neighbor_activate_cmd);
 9233:   install_element (BGP_IPV4_NODE, &no_neighbor_activate_cmd);
 9234:   install_element (BGP_IPV4M_NODE, &no_neighbor_activate_cmd);
 9235:   install_element (BGP_IPV6_NODE, &no_neighbor_activate_cmd);
 9236:   install_element (BGP_IPV6M_NODE, &no_neighbor_activate_cmd);
 9237:   install_element (BGP_VPNV4_NODE, &no_neighbor_activate_cmd);
 9238: 
 9239:   /* "neighbor peer-group set" commands. */
 9240:   install_element (BGP_NODE, &neighbor_set_peer_group_cmd);
 9241:   install_element (BGP_IPV4_NODE, &neighbor_set_peer_group_cmd);
 9242:   install_element (BGP_IPV4M_NODE, &neighbor_set_peer_group_cmd);
 9243:   install_element (BGP_IPV6_NODE, &neighbor_set_peer_group_cmd);
 9244:   install_element (BGP_IPV6M_NODE, &neighbor_set_peer_group_cmd);
 9245:   install_element (BGP_VPNV4_NODE, &neighbor_set_peer_group_cmd);
 9246:   
 9247:   /* "no neighbor peer-group unset" commands. */
 9248:   install_element (BGP_NODE, &no_neighbor_set_peer_group_cmd);
 9249:   install_element (BGP_IPV4_NODE, &no_neighbor_set_peer_group_cmd);
 9250:   install_element (BGP_IPV4M_NODE, &no_neighbor_set_peer_group_cmd);
 9251:   install_element (BGP_IPV6_NODE, &no_neighbor_set_peer_group_cmd);
 9252:   install_element (BGP_IPV6M_NODE, &no_neighbor_set_peer_group_cmd);
 9253:   install_element (BGP_VPNV4_NODE, &no_neighbor_set_peer_group_cmd);
 9254:   
 9255:   /* "neighbor softreconfiguration inbound" commands.*/
 9256:   install_element (BGP_NODE, &neighbor_soft_reconfiguration_cmd);
 9257:   install_element (BGP_NODE, &no_neighbor_soft_reconfiguration_cmd);
 9258:   install_element (BGP_IPV4_NODE, &neighbor_soft_reconfiguration_cmd);
 9259:   install_element (BGP_IPV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
 9260:   install_element (BGP_IPV4M_NODE, &neighbor_soft_reconfiguration_cmd);
 9261:   install_element (BGP_IPV4M_NODE, &no_neighbor_soft_reconfiguration_cmd);
 9262:   install_element (BGP_IPV6_NODE, &neighbor_soft_reconfiguration_cmd);
 9263:   install_element (BGP_IPV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
 9264:   install_element (BGP_IPV6M_NODE, &neighbor_soft_reconfiguration_cmd);
 9265:   install_element (BGP_IPV6M_NODE, &no_neighbor_soft_reconfiguration_cmd);
 9266:   install_element (BGP_VPNV4_NODE, &neighbor_soft_reconfiguration_cmd);
 9267:   install_element (BGP_VPNV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
 9268: 
 9269:   /* "neighbor attribute-unchanged" commands.  */
 9270:   install_element (BGP_NODE, &neighbor_attr_unchanged_cmd);
 9271:   install_element (BGP_NODE, &neighbor_attr_unchanged1_cmd);
 9272:   install_element (BGP_NODE, &neighbor_attr_unchanged2_cmd);
 9273:   install_element (BGP_NODE, &neighbor_attr_unchanged3_cmd);
 9274:   install_element (BGP_NODE, &neighbor_attr_unchanged4_cmd);
 9275:   install_element (BGP_NODE, &neighbor_attr_unchanged5_cmd);
 9276:   install_element (BGP_NODE, &neighbor_attr_unchanged6_cmd);
 9277:   install_element (BGP_NODE, &neighbor_attr_unchanged7_cmd);
 9278:   install_element (BGP_NODE, &neighbor_attr_unchanged8_cmd);
 9279:   install_element (BGP_NODE, &neighbor_attr_unchanged9_cmd);
 9280:   install_element (BGP_NODE, &neighbor_attr_unchanged10_cmd);
 9281:   install_element (BGP_NODE, &no_neighbor_attr_unchanged_cmd);
 9282:   install_element (BGP_NODE, &no_neighbor_attr_unchanged1_cmd);
 9283:   install_element (BGP_NODE, &no_neighbor_attr_unchanged2_cmd);
 9284:   install_element (BGP_NODE, &no_neighbor_attr_unchanged3_cmd);
 9285:   install_element (BGP_NODE, &no_neighbor_attr_unchanged4_cmd);
 9286:   install_element (BGP_NODE, &no_neighbor_attr_unchanged5_cmd);
 9287:   install_element (BGP_NODE, &no_neighbor_attr_unchanged6_cmd);
 9288:   install_element (BGP_NODE, &no_neighbor_attr_unchanged7_cmd);
 9289:   install_element (BGP_NODE, &no_neighbor_attr_unchanged8_cmd);
 9290:   install_element (BGP_NODE, &no_neighbor_attr_unchanged9_cmd);
 9291:   install_element (BGP_NODE, &no_neighbor_attr_unchanged10_cmd);
 9292:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged_cmd);
 9293:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged1_cmd);
 9294:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged2_cmd);
 9295:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged3_cmd);
 9296:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged4_cmd);
 9297:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged5_cmd);
 9298:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged6_cmd);
 9299:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged7_cmd);
 9300:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged8_cmd);
 9301:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged9_cmd);
 9302:   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged10_cmd);
 9303:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged_cmd);
 9304:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged1_cmd);
 9305:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged2_cmd);
 9306:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged3_cmd);
 9307:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged4_cmd);
 9308:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged5_cmd);
 9309:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged6_cmd);
 9310:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged7_cmd);
 9311:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged8_cmd);
 9312:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged9_cmd);
 9313:   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged10_cmd);
 9314:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged_cmd);
 9315:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged1_cmd);
 9316:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged2_cmd);
 9317:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged3_cmd);
 9318:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged4_cmd);
 9319:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged5_cmd);
 9320:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged6_cmd);
 9321:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged7_cmd);
 9322:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged8_cmd);
 9323:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged9_cmd);
 9324:   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged10_cmd);
 9325:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged_cmd);
 9326:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged1_cmd);
 9327:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged2_cmd);
 9328:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged3_cmd);
 9329:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged4_cmd);
 9330:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged5_cmd);
 9331:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged6_cmd);
 9332:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged7_cmd);
 9333:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged8_cmd);
 9334:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged9_cmd);
 9335:   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged10_cmd);
 9336:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged_cmd);
 9337:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged1_cmd);
 9338:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged2_cmd);
 9339:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged3_cmd);
 9340:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged4_cmd);
 9341:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged5_cmd);
 9342:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged6_cmd);
 9343:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged7_cmd);
 9344:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged8_cmd);
 9345:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged9_cmd);
 9346:   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged10_cmd);
 9347:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged_cmd);
 9348:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged1_cmd);
 9349:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged2_cmd);
 9350:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged3_cmd);
 9351:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged4_cmd);
 9352:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged5_cmd);
 9353:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged6_cmd);
 9354:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged7_cmd);
 9355:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged8_cmd);
 9356:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged9_cmd);
 9357:   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged10_cmd);
 9358:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged_cmd);
 9359:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged1_cmd);
 9360:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged2_cmd);
 9361:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged3_cmd);
 9362:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged4_cmd);
 9363:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged5_cmd);
 9364:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged6_cmd);
 9365:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged7_cmd);
 9366:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged8_cmd);
 9367:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged9_cmd);
 9368:   install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged10_cmd);
 9369:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged_cmd);
 9370:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged1_cmd);
 9371:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged2_cmd);
 9372:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged3_cmd);
 9373:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged4_cmd);
 9374:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged5_cmd);
 9375:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged6_cmd);
 9376:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged7_cmd);
 9377:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged8_cmd);
 9378:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged9_cmd);
 9379:   install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged10_cmd);
 9380:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged_cmd);
 9381:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged1_cmd);
 9382:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged2_cmd);
 9383:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged3_cmd);
 9384:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged4_cmd);
 9385:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged5_cmd);
 9386:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged6_cmd);
 9387:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged7_cmd);
 9388:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged8_cmd);
 9389:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged9_cmd);
 9390:   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged10_cmd);
 9391:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged_cmd);
 9392:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged1_cmd);
 9393:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged2_cmd);
 9394:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged3_cmd);
 9395:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged4_cmd);
 9396:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged5_cmd);
 9397:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged6_cmd);
 9398:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged7_cmd);
 9399:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged8_cmd);
 9400:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged9_cmd);
 9401:   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged10_cmd);
 9402: 
 9403:   /* "nexthop-local unchanged" commands */
 9404:   install_element (BGP_IPV6_NODE, &neighbor_nexthop_local_unchanged_cmd);
 9405:   install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_local_unchanged_cmd);
 9406: 
 9407:   /* "transparent-as" and "transparent-nexthop" for old version
 9408:      compatibility.  */
 9409:   install_element (BGP_NODE, &neighbor_transparent_as_cmd);
 9410:   install_element (BGP_NODE, &neighbor_transparent_nexthop_cmd);
 9411: 
 9412:   /* "neighbor next-hop-self" commands. */
 9413:   install_element (BGP_NODE, &neighbor_nexthop_self_cmd);
 9414:   install_element (BGP_NODE, &no_neighbor_nexthop_self_cmd);
 9415:   install_element (BGP_IPV4_NODE, &neighbor_nexthop_self_cmd);
 9416:   install_element (BGP_IPV4_NODE, &no_neighbor_nexthop_self_cmd);
 9417:   install_element (BGP_IPV4M_NODE, &neighbor_nexthop_self_cmd);
 9418:   install_element (BGP_IPV4M_NODE, &no_neighbor_nexthop_self_cmd);
 9419:   install_element (BGP_IPV6_NODE, &neighbor_nexthop_self_cmd);
 9420:   install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_self_cmd);
 9421:   install_element (BGP_IPV6M_NODE, &neighbor_nexthop_self_cmd);
 9422:   install_element (BGP_IPV6M_NODE, &no_neighbor_nexthop_self_cmd);
 9423:   install_element (BGP_VPNV4_NODE, &neighbor_nexthop_self_cmd);
 9424:   install_element (BGP_VPNV4_NODE, &no_neighbor_nexthop_self_cmd);
 9425: 
 9426:   /* "neighbor remove-private-AS" commands. */
 9427:   install_element (BGP_NODE, &neighbor_remove_private_as_cmd);
 9428:   install_element (BGP_NODE, &no_neighbor_remove_private_as_cmd);
 9429:   install_element (BGP_IPV4_NODE, &neighbor_remove_private_as_cmd);
 9430:   install_element (BGP_IPV4_NODE, &no_neighbor_remove_private_as_cmd);
 9431:   install_element (BGP_IPV4M_NODE, &neighbor_remove_private_as_cmd);
 9432:   install_element (BGP_IPV4M_NODE, &no_neighbor_remove_private_as_cmd);
 9433:   install_element (BGP_IPV6_NODE, &neighbor_remove_private_as_cmd);
 9434:   install_element (BGP_IPV6_NODE, &no_neighbor_remove_private_as_cmd);
 9435:   install_element (BGP_IPV6M_NODE, &neighbor_remove_private_as_cmd);
 9436:   install_element (BGP_IPV6M_NODE, &no_neighbor_remove_private_as_cmd);
 9437:   install_element (BGP_VPNV4_NODE, &neighbor_remove_private_as_cmd);
 9438:   install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_cmd);
 9439: 
 9440:   /* "neighbor send-community" commands.*/
 9441:   install_element (BGP_NODE, &neighbor_send_community_cmd);
 9442:   install_element (BGP_NODE, &neighbor_send_community_type_cmd);
 9443:   install_element (BGP_NODE, &no_neighbor_send_community_cmd);
 9444:   install_element (BGP_NODE, &no_neighbor_send_community_type_cmd);
 9445:   install_element (BGP_IPV4_NODE, &neighbor_send_community_cmd);
 9446:   install_element (BGP_IPV4_NODE, &neighbor_send_community_type_cmd);
 9447:   install_element (BGP_IPV4_NODE, &no_neighbor_send_community_cmd);
 9448:   install_element (BGP_IPV4_NODE, &no_neighbor_send_community_type_cmd);
 9449:   install_element (BGP_IPV4M_NODE, &neighbor_send_community_cmd);
 9450:   install_element (BGP_IPV4M_NODE, &neighbor_send_community_type_cmd);
 9451:   install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_cmd);
 9452:   install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_type_cmd);
 9453:   install_element (BGP_IPV6_NODE, &neighbor_send_community_cmd);
 9454:   install_element (BGP_IPV6_NODE, &neighbor_send_community_type_cmd);
 9455:   install_element (BGP_IPV6_NODE, &no_neighbor_send_community_cmd);
 9456:   install_element (BGP_IPV6_NODE, &no_neighbor_send_community_type_cmd);
 9457:   install_element (BGP_IPV6M_NODE, &neighbor_send_community_cmd);
 9458:   install_element (BGP_IPV6M_NODE, &neighbor_send_community_type_cmd);
 9459:   install_element (BGP_IPV6M_NODE, &no_neighbor_send_community_cmd);
 9460:   install_element (BGP_IPV6M_NODE, &no_neighbor_send_community_type_cmd);
 9461:   install_element (BGP_VPNV4_NODE, &neighbor_send_community_cmd);
 9462:   install_element (BGP_VPNV4_NODE, &neighbor_send_community_type_cmd);
 9463:   install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_cmd);
 9464:   install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_type_cmd);
 9465: 
 9466:   /* "neighbor route-reflector" commands.*/
 9467:   install_element (BGP_NODE, &neighbor_route_reflector_client_cmd);
 9468:   install_element (BGP_NODE, &no_neighbor_route_reflector_client_cmd);
 9469:   install_element (BGP_IPV4_NODE, &neighbor_route_reflector_client_cmd);
 9470:   install_element (BGP_IPV4_NODE, &no_neighbor_route_reflector_client_cmd);
 9471:   install_element (BGP_IPV4M_NODE, &neighbor_route_reflector_client_cmd);
 9472:   install_element (BGP_IPV4M_NODE, &no_neighbor_route_reflector_client_cmd);
 9473:   install_element (BGP_IPV6_NODE, &neighbor_route_reflector_client_cmd);
 9474:   install_element (BGP_IPV6_NODE, &no_neighbor_route_reflector_client_cmd);
 9475:   install_element (BGP_IPV6M_NODE, &neighbor_route_reflector_client_cmd);
 9476:   install_element (BGP_IPV6M_NODE, &no_neighbor_route_reflector_client_cmd);
 9477:   install_element (BGP_VPNV4_NODE, &neighbor_route_reflector_client_cmd);
 9478:   install_element (BGP_VPNV4_NODE, &no_neighbor_route_reflector_client_cmd);
 9479: 
 9480:   /* "neighbor route-server" commands.*/
 9481:   install_element (BGP_NODE, &neighbor_route_server_client_cmd);
 9482:   install_element (BGP_NODE, &no_neighbor_route_server_client_cmd);
 9483:   install_element (BGP_IPV4_NODE, &neighbor_route_server_client_cmd);
 9484:   install_element (BGP_IPV4_NODE, &no_neighbor_route_server_client_cmd);
 9485:   install_element (BGP_IPV4M_NODE, &neighbor_route_server_client_cmd);
 9486:   install_element (BGP_IPV4M_NODE, &no_neighbor_route_server_client_cmd);
 9487:   install_element (BGP_IPV6_NODE, &neighbor_route_server_client_cmd);
 9488:   install_element (BGP_IPV6_NODE, &no_neighbor_route_server_client_cmd);
 9489:   install_element (BGP_IPV6M_NODE, &neighbor_route_server_client_cmd);
 9490:   install_element (BGP_IPV6M_NODE, &no_neighbor_route_server_client_cmd);
 9491:   install_element (BGP_VPNV4_NODE, &neighbor_route_server_client_cmd);
 9492:   install_element (BGP_VPNV4_NODE, &no_neighbor_route_server_client_cmd);
 9493: 
 9494:   /* "neighbor passive" commands. */
 9495:   install_element (BGP_NODE, &neighbor_passive_cmd);
 9496:   install_element (BGP_NODE, &no_neighbor_passive_cmd);
 9497: 
 9498:   /* "neighbor shutdown" commands. */
 9499:   install_element (BGP_NODE, &neighbor_shutdown_cmd);
 9500:   install_element (BGP_NODE, &no_neighbor_shutdown_cmd);
 9501: 
 9502:   /* Deprecated "neighbor capability route-refresh" commands.*/
 9503:   install_element (BGP_NODE, &neighbor_capability_route_refresh_cmd);
 9504:   install_element (BGP_NODE, &no_neighbor_capability_route_refresh_cmd);
 9505: 
 9506:   /* "neighbor capability orf prefix-list" commands.*/
 9507:   install_element (BGP_NODE, &neighbor_capability_orf_prefix_cmd);
 9508:   install_element (BGP_NODE, &no_neighbor_capability_orf_prefix_cmd);
 9509:   install_element (BGP_IPV4_NODE, &neighbor_capability_orf_prefix_cmd);
 9510:   install_element (BGP_IPV4_NODE, &no_neighbor_capability_orf_prefix_cmd);
 9511:   install_element (BGP_IPV4M_NODE, &neighbor_capability_orf_prefix_cmd);
 9512:   install_element (BGP_IPV4M_NODE, &no_neighbor_capability_orf_prefix_cmd);
 9513:   install_element (BGP_IPV6_NODE, &neighbor_capability_orf_prefix_cmd);
 9514:   install_element (BGP_IPV6_NODE, &no_neighbor_capability_orf_prefix_cmd);
 9515:   install_element (BGP_IPV6M_NODE, &neighbor_capability_orf_prefix_cmd);
 9516:   install_element (BGP_IPV6M_NODE, &no_neighbor_capability_orf_prefix_cmd);
 9517: 
 9518:   /* "neighbor capability dynamic" commands.*/
 9519:   install_element (BGP_NODE, &neighbor_capability_dynamic_cmd);
 9520:   install_element (BGP_NODE, &no_neighbor_capability_dynamic_cmd);
 9521: 
 9522:   /* "neighbor dont-capability-negotiate" commands. */
 9523:   install_element (BGP_NODE, &neighbor_dont_capability_negotiate_cmd);
 9524:   install_element (BGP_NODE, &no_neighbor_dont_capability_negotiate_cmd);
 9525: 
 9526:   /* "neighbor ebgp-multihop" commands. */
 9527:   install_element (BGP_NODE, &neighbor_ebgp_multihop_cmd);
 9528:   install_element (BGP_NODE, &neighbor_ebgp_multihop_ttl_cmd);
 9529:   install_element (BGP_NODE, &no_neighbor_ebgp_multihop_cmd);
 9530:   install_element (BGP_NODE, &no_neighbor_ebgp_multihop_ttl_cmd);
 9531: 
 9532:   /* "neighbor disable-connected-check" commands.  */
 9533:   install_element (BGP_NODE, &neighbor_disable_connected_check_cmd);
 9534:   install_element (BGP_NODE, &no_neighbor_disable_connected_check_cmd);
 9535:   install_element (BGP_NODE, &neighbor_enforce_multihop_cmd);
 9536:   install_element (BGP_NODE, &no_neighbor_enforce_multihop_cmd);
 9537: 
 9538:   /* "neighbor description" commands. */
 9539:   install_element (BGP_NODE, &neighbor_description_cmd);
 9540:   install_element (BGP_NODE, &no_neighbor_description_cmd);
 9541:   install_element (BGP_NODE, &no_neighbor_description_val_cmd);
 9542: 
 9543:   /* "neighbor update-source" commands. "*/
 9544:   install_element (BGP_NODE, &neighbor_update_source_cmd);
 9545:   install_element (BGP_NODE, &no_neighbor_update_source_cmd);
 9546: 
 9547:   /* "neighbor default-originate" commands. */
 9548:   install_element (BGP_NODE, &neighbor_default_originate_cmd);
 9549:   install_element (BGP_NODE, &neighbor_default_originate_rmap_cmd);
 9550:   install_element (BGP_NODE, &no_neighbor_default_originate_cmd);
 9551:   install_element (BGP_NODE, &no_neighbor_default_originate_rmap_cmd);
 9552:   install_element (BGP_IPV4_NODE, &neighbor_default_originate_cmd);
 9553:   install_element (BGP_IPV4_NODE, &neighbor_default_originate_rmap_cmd);
 9554:   install_element (BGP_IPV4_NODE, &no_neighbor_default_originate_cmd);
 9555:   install_element (BGP_IPV4_NODE, &no_neighbor_default_originate_rmap_cmd);
 9556:   install_element (BGP_IPV4M_NODE, &neighbor_default_originate_cmd);
 9557:   install_element (BGP_IPV4M_NODE, &neighbor_default_originate_rmap_cmd);
 9558:   install_element (BGP_IPV4M_NODE, &no_neighbor_default_originate_cmd);
 9559:   install_element (BGP_IPV4M_NODE, &no_neighbor_default_originate_rmap_cmd);
 9560:   install_element (BGP_IPV6_NODE, &neighbor_default_originate_cmd);
 9561:   install_element (BGP_IPV6_NODE, &neighbor_default_originate_rmap_cmd);
 9562:   install_element (BGP_IPV6_NODE, &no_neighbor_default_originate_cmd);
 9563:   install_element (BGP_IPV6_NODE, &no_neighbor_default_originate_rmap_cmd);
 9564:   install_element (BGP_IPV6M_NODE, &neighbor_default_originate_cmd);
 9565:   install_element (BGP_IPV6M_NODE, &neighbor_default_originate_rmap_cmd);
 9566:   install_element (BGP_IPV6M_NODE, &no_neighbor_default_originate_cmd);
 9567:   install_element (BGP_IPV6M_NODE, &no_neighbor_default_originate_rmap_cmd);
 9568: 
 9569:   /* "neighbor port" commands. */
 9570:   install_element (BGP_NODE, &neighbor_port_cmd);
 9571:   install_element (BGP_NODE, &no_neighbor_port_cmd);
 9572:   install_element (BGP_NODE, &no_neighbor_port_val_cmd);
 9573: 
 9574:   /* "neighbor weight" commands. */
 9575:   install_element (BGP_NODE, &neighbor_weight_cmd);
 9576:   install_element (BGP_NODE, &no_neighbor_weight_cmd);
 9577:   install_element (BGP_NODE, &no_neighbor_weight_val_cmd);
 9578: 
 9579:   /* "neighbor override-capability" commands. */
 9580:   install_element (BGP_NODE, &neighbor_override_capability_cmd);
 9581:   install_element (BGP_NODE, &no_neighbor_override_capability_cmd);
 9582: 
 9583:   /* "neighbor strict-capability-match" commands. */
 9584:   install_element (BGP_NODE, &neighbor_strict_capability_cmd);
 9585:   install_element (BGP_NODE, &no_neighbor_strict_capability_cmd);
 9586: 
 9587:   /* "neighbor timers" commands. */
 9588:   install_element (BGP_NODE, &neighbor_timers_cmd);
 9589:   install_element (BGP_NODE, &no_neighbor_timers_cmd);
 9590: 
 9591:   /* "neighbor timers connect" commands. */
 9592:   install_element (BGP_NODE, &neighbor_timers_connect_cmd);
 9593:   install_element (BGP_NODE, &no_neighbor_timers_connect_cmd);
 9594:   install_element (BGP_NODE, &no_neighbor_timers_connect_val_cmd);
 9595: 
 9596:   /* "neighbor advertisement-interval" commands. */
 9597:   install_element (BGP_NODE, &neighbor_advertise_interval_cmd);
 9598:   install_element (BGP_NODE, &no_neighbor_advertise_interval_cmd);
 9599:   install_element (BGP_NODE, &no_neighbor_advertise_interval_val_cmd);
 9600: 
 9601:   /* "neighbor version" commands. */
 9602:   install_element (BGP_NODE, &neighbor_version_cmd);
 9603: 
 9604:   /* "neighbor interface" commands. */
 9605:   install_element (BGP_NODE, &neighbor_interface_cmd);
 9606:   install_element (BGP_NODE, &no_neighbor_interface_cmd);
 9607: 
 9608:   /* "neighbor distribute" commands. */
 9609:   install_element (BGP_NODE, &neighbor_distribute_list_cmd);
 9610:   install_element (BGP_NODE, &no_neighbor_distribute_list_cmd);
 9611:   install_element (BGP_IPV4_NODE, &neighbor_distribute_list_cmd);
 9612:   install_element (BGP_IPV4_NODE, &no_neighbor_distribute_list_cmd);
 9613:   install_element (BGP_IPV4M_NODE, &neighbor_distribute_list_cmd);
 9614:   install_element (BGP_IPV4M_NODE, &no_neighbor_distribute_list_cmd);
 9615:   install_element (BGP_IPV6_NODE, &neighbor_distribute_list_cmd);
 9616:   install_element (BGP_IPV6_NODE, &no_neighbor_distribute_list_cmd);
 9617:   install_element (BGP_IPV6M_NODE, &neighbor_distribute_list_cmd);
 9618:   install_element (BGP_IPV6M_NODE, &no_neighbor_distribute_list_cmd);
 9619:   install_element (BGP_VPNV4_NODE, &neighbor_distribute_list_cmd);
 9620:   install_element (BGP_VPNV4_NODE, &no_neighbor_distribute_list_cmd);
 9621: 
 9622:   /* "neighbor prefix-list" commands. */
 9623:   install_element (BGP_NODE, &neighbor_prefix_list_cmd);
 9624:   install_element (BGP_NODE, &no_neighbor_prefix_list_cmd);
 9625:   install_element (BGP_IPV4_NODE, &neighbor_prefix_list_cmd);
 9626:   install_element (BGP_IPV4_NODE, &no_neighbor_prefix_list_cmd);
 9627:   install_element (BGP_IPV4M_NODE, &neighbor_prefix_list_cmd);
 9628:   install_element (BGP_IPV4M_NODE, &no_neighbor_prefix_list_cmd);
 9629:   install_element (BGP_IPV6_NODE, &neighbor_prefix_list_cmd);
 9630:   install_element (BGP_IPV6_NODE, &no_neighbor_prefix_list_cmd);
 9631:   install_element (BGP_IPV6M_NODE, &neighbor_prefix_list_cmd);
 9632:   install_element (BGP_IPV6M_NODE, &no_neighbor_prefix_list_cmd);
 9633:   install_element (BGP_VPNV4_NODE, &neighbor_prefix_list_cmd);
 9634:   install_element (BGP_VPNV4_NODE, &no_neighbor_prefix_list_cmd);
 9635: 
 9636:   /* "neighbor filter-list" commands. */
 9637:   install_element (BGP_NODE, &neighbor_filter_list_cmd);
 9638:   install_element (BGP_NODE, &no_neighbor_filter_list_cmd);
 9639:   install_element (BGP_IPV4_NODE, &neighbor_filter_list_cmd);
 9640:   install_element (BGP_IPV4_NODE, &no_neighbor_filter_list_cmd);
 9641:   install_element (BGP_IPV4M_NODE, &neighbor_filter_list_cmd);
 9642:   install_element (BGP_IPV4M_NODE, &no_neighbor_filter_list_cmd);
 9643:   install_element (BGP_IPV6_NODE, &neighbor_filter_list_cmd);
 9644:   install_element (BGP_IPV6_NODE, &no_neighbor_filter_list_cmd);
 9645:   install_element (BGP_IPV6M_NODE, &neighbor_filter_list_cmd);
 9646:   install_element (BGP_IPV6M_NODE, &no_neighbor_filter_list_cmd);
 9647:   install_element (BGP_VPNV4_NODE, &neighbor_filter_list_cmd);
 9648:   install_element (BGP_VPNV4_NODE, &no_neighbor_filter_list_cmd);
 9649: 
 9650:   /* "neighbor route-map" commands. */
 9651:   install_element (BGP_NODE, &neighbor_route_map_cmd);
 9652:   install_element (BGP_NODE, &no_neighbor_route_map_cmd);
 9653:   install_element (BGP_IPV4_NODE, &neighbor_route_map_cmd);
 9654:   install_element (BGP_IPV4_NODE, &no_neighbor_route_map_cmd);
 9655:   install_element (BGP_IPV4M_NODE, &neighbor_route_map_cmd);
 9656:   install_element (BGP_IPV4M_NODE, &no_neighbor_route_map_cmd);
 9657:   install_element (BGP_IPV6_NODE, &neighbor_route_map_cmd);
 9658:   install_element (BGP_IPV6_NODE, &no_neighbor_route_map_cmd);
 9659:   install_element (BGP_IPV6M_NODE, &neighbor_route_map_cmd);
 9660:   install_element (BGP_IPV6M_NODE, &no_neighbor_route_map_cmd);
 9661:   install_element (BGP_VPNV4_NODE, &neighbor_route_map_cmd);
 9662:   install_element (BGP_VPNV4_NODE, &no_neighbor_route_map_cmd);
 9663: 
 9664:   /* "neighbor unsuppress-map" commands. */
 9665:   install_element (BGP_NODE, &neighbor_unsuppress_map_cmd);
 9666:   install_element (BGP_NODE, &no_neighbor_unsuppress_map_cmd);
 9667:   install_element (BGP_IPV4_NODE, &neighbor_unsuppress_map_cmd);
 9668:   install_element (BGP_IPV4_NODE, &no_neighbor_unsuppress_map_cmd);
 9669:   install_element (BGP_IPV4M_NODE, &neighbor_unsuppress_map_cmd);
 9670:   install_element (BGP_IPV4M_NODE, &no_neighbor_unsuppress_map_cmd);
 9671:   install_element (BGP_IPV6_NODE, &neighbor_unsuppress_map_cmd);
 9672:   install_element (BGP_IPV6_NODE, &no_neighbor_unsuppress_map_cmd);
 9673:   install_element (BGP_IPV6M_NODE, &neighbor_unsuppress_map_cmd);
 9674:   install_element (BGP_IPV6M_NODE, &no_neighbor_unsuppress_map_cmd);
 9675:   install_element (BGP_VPNV4_NODE, &neighbor_unsuppress_map_cmd);
 9676:   install_element (BGP_VPNV4_NODE, &no_neighbor_unsuppress_map_cmd);  
 9677: 
 9678:   /* "neighbor maximum-prefix" commands. */
 9679:   install_element (BGP_NODE, &neighbor_maximum_prefix_cmd);
 9680:   install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_cmd);
 9681:   install_element (BGP_NODE, &neighbor_maximum_prefix_warning_cmd);
 9682:   install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
 9683:   install_element (BGP_NODE, &neighbor_maximum_prefix_restart_cmd);
 9684:   install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
 9685:   install_element (BGP_NODE, &no_neighbor_maximum_prefix_cmd);
 9686:   install_element (BGP_NODE, &no_neighbor_maximum_prefix_val_cmd);
 9687:   install_element (BGP_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
 9688:   install_element (BGP_NODE, &no_neighbor_maximum_prefix_warning_cmd);
 9689:   install_element (BGP_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
 9690:   install_element (BGP_NODE, &no_neighbor_maximum_prefix_restart_cmd);
 9691:   install_element (BGP_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
 9692:   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_cmd);
 9693:   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
 9694:   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_warning_cmd);
 9695:   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
 9696:   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_restart_cmd);
 9697:   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
 9698:   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_cmd);
 9699:   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_val_cmd);
 9700:   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
 9701:   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_warning_cmd);
 9702:   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
 9703:   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_restart_cmd);
 9704:   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
 9705:   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_cmd);
 9706:   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_cmd);
 9707:   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_warning_cmd);
 9708:   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
 9709:   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_restart_cmd);
 9710:   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
 9711:   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_cmd);
 9712:   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_val_cmd);
 9713:   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
 9714:   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_warning_cmd);
 9715:   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
 9716:   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_restart_cmd);
 9717:   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
 9718:   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_cmd);
 9719:   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_cmd);
 9720:   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_warning_cmd);
 9721:   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
 9722:   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_restart_cmd);
 9723:   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
 9724:   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_cmd);
 9725:   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_val_cmd);
 9726:   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
 9727:   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_warning_cmd);
 9728:   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
 9729:   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_restart_cmd);
 9730:   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
 9731:   install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_cmd);
 9732:   install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_threshold_cmd);
 9733:   install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_warning_cmd);
 9734:   install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
 9735:   install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_restart_cmd);
 9736:   install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
 9737:   install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_cmd);
 9738:   install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_val_cmd);
 9739:   install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
 9740:   install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_warning_cmd);
 9741:   install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
 9742:   install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_restart_cmd);
 9743:   install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
 9744:   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_cmd);
 9745:   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
 9746:   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_warning_cmd);
 9747:   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
 9748:   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_restart_cmd);
 9749:   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
 9750:   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_cmd);
 9751:   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_val_cmd);
 9752:   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
 9753:   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_warning_cmd);
 9754:   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
 9755:   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_restart_cmd);
 9756:   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
 9757: 
 9758:   /* "neighbor allowas-in" */
 9759:   install_element (BGP_NODE, &neighbor_allowas_in_cmd);
 9760:   install_element (BGP_NODE, &neighbor_allowas_in_arg_cmd);
 9761:   install_element (BGP_NODE, &no_neighbor_allowas_in_cmd);
 9762:   install_element (BGP_IPV4_NODE, &neighbor_allowas_in_cmd);
 9763:   install_element (BGP_IPV4_NODE, &neighbor_allowas_in_arg_cmd);
 9764:   install_element (BGP_IPV4_NODE, &no_neighbor_allowas_in_cmd);
 9765:   install_element (BGP_IPV4M_NODE, &neighbor_allowas_in_cmd);
 9766:   install_element (BGP_IPV4M_NODE, &neighbor_allowas_in_arg_cmd);
 9767:   install_element (BGP_IPV4M_NODE, &no_neighbor_allowas_in_cmd);
 9768:   install_element (BGP_IPV6_NODE, &neighbor_allowas_in_cmd);
 9769:   install_element (BGP_IPV6_NODE, &neighbor_allowas_in_arg_cmd);
 9770:   install_element (BGP_IPV6_NODE, &no_neighbor_allowas_in_cmd);
 9771:   install_element (BGP_IPV6M_NODE, &neighbor_allowas_in_cmd);
 9772:   install_element (BGP_IPV6M_NODE, &neighbor_allowas_in_arg_cmd);
 9773:   install_element (BGP_IPV6M_NODE, &no_neighbor_allowas_in_cmd);
 9774:   install_element (BGP_VPNV4_NODE, &neighbor_allowas_in_cmd);
 9775:   install_element (BGP_VPNV4_NODE, &neighbor_allowas_in_arg_cmd);
 9776:   install_element (BGP_VPNV4_NODE, &no_neighbor_allowas_in_cmd);
 9777: 
 9778:   /* address-family commands. */
 9779:   install_element (BGP_NODE, &address_family_ipv4_cmd);
 9780:   install_element (BGP_NODE, &address_family_ipv4_safi_cmd);
 9781: #ifdef HAVE_IPV6
 9782:   install_element (BGP_NODE, &address_family_ipv6_cmd);
 9783:   install_element (BGP_NODE, &address_family_ipv6_safi_cmd);
 9784: #endif /* HAVE_IPV6 */
 9785:   install_element (BGP_NODE, &address_family_vpnv4_cmd);
 9786:   install_element (BGP_NODE, &address_family_vpnv4_unicast_cmd);
 9787: 
 9788:   /* "exit-address-family" command. */
 9789:   install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
 9790:   install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
 9791:   install_element (BGP_IPV6_NODE, &exit_address_family_cmd);
 9792:   install_element (BGP_IPV6M_NODE, &exit_address_family_cmd);
 9793:   install_element (BGP_VPNV4_NODE, &exit_address_family_cmd);
 9794: 
 9795:   /* "clear ip bgp commands" */
 9796:   install_element (ENABLE_NODE, &clear_ip_bgp_all_cmd);
 9797:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_cmd);
 9798:   install_element (ENABLE_NODE, &clear_ip_bgp_as_cmd);
 9799:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_cmd);
 9800:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_cmd);
 9801:   install_element (ENABLE_NODE, &clear_ip_bgp_external_cmd);
 9802: #ifdef HAVE_IPV6
 9803:   install_element (ENABLE_NODE, &clear_bgp_all_cmd);
 9804:   install_element (ENABLE_NODE, &clear_bgp_instance_all_cmd);
 9805:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_cmd);
 9806:   install_element (ENABLE_NODE, &clear_bgp_peer_cmd);
 9807:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_cmd);
 9808:   install_element (ENABLE_NODE, &clear_bgp_peer_group_cmd);
 9809:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_cmd);
 9810:   install_element (ENABLE_NODE, &clear_bgp_external_cmd);
 9811:   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_cmd);
 9812:   install_element (ENABLE_NODE, &clear_bgp_as_cmd);
 9813:   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_cmd);
 9814: #endif /* HAVE_IPV6 */
 9815: 
 9816:   /* "clear ip bgp neighbor soft in" */
 9817:   install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_in_cmd);
 9818:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_in_cmd);
 9819:   install_element (ENABLE_NODE, &clear_ip_bgp_all_in_cmd);
 9820:   install_element (ENABLE_NODE, &clear_ip_bgp_all_in_prefix_filter_cmd);
 9821:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_in_prefix_filter_cmd);
 9822:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_in_cmd);
 9823:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_in_cmd);
 9824:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_in_prefix_filter_cmd);
 9825:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_in_cmd);
 9826:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_in_cmd);
 9827:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_in_prefix_filter_cmd);
 9828:   install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_in_cmd);
 9829:   install_element (ENABLE_NODE, &clear_ip_bgp_external_in_cmd);
 9830:   install_element (ENABLE_NODE, &clear_ip_bgp_external_in_prefix_filter_cmd);
 9831:   install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_in_cmd);
 9832:   install_element (ENABLE_NODE, &clear_ip_bgp_as_in_cmd);
 9833:   install_element (ENABLE_NODE, &clear_ip_bgp_as_in_prefix_filter_cmd);
 9834:   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_in_cmd);
 9835:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_in_cmd);
 9836:   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_in_cmd);
 9837:   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_in_prefix_filter_cmd);
 9838:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_in_prefix_filter_cmd);
 9839:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_in_cmd);
 9840:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_in_cmd);
 9841:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_in_prefix_filter_cmd);
 9842:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_in_cmd);
 9843:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_in_cmd);
 9844:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_in_prefix_filter_cmd);
 9845:   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_in_cmd);
 9846:   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_in_cmd);
 9847:   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_in_prefix_filter_cmd);
 9848:   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_in_cmd);
 9849:   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_in_cmd);
 9850:   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_in_prefix_filter_cmd);
 9851:   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_in_cmd);
 9852:   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_in_cmd);
 9853:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_in_cmd);
 9854:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_in_cmd);
 9855:   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_in_cmd);
 9856:   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_in_cmd);
 9857: #ifdef HAVE_IPV6
 9858:   install_element (ENABLE_NODE, &clear_bgp_all_soft_in_cmd);
 9859:   install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_in_cmd);
 9860:   install_element (ENABLE_NODE, &clear_bgp_all_in_cmd);
 9861:   install_element (ENABLE_NODE, &clear_bgp_all_in_prefix_filter_cmd);
 9862:   install_element (ENABLE_NODE, &clear_bgp_peer_soft_in_cmd);
 9863:   install_element (ENABLE_NODE, &clear_bgp_peer_in_cmd);
 9864:   install_element (ENABLE_NODE, &clear_bgp_peer_in_prefix_filter_cmd);
 9865:   install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_in_cmd);
 9866:   install_element (ENABLE_NODE, &clear_bgp_peer_group_in_cmd);
 9867:   install_element (ENABLE_NODE, &clear_bgp_peer_group_in_prefix_filter_cmd);
 9868:   install_element (ENABLE_NODE, &clear_bgp_external_soft_in_cmd);
 9869:   install_element (ENABLE_NODE, &clear_bgp_external_in_cmd);
 9870:   install_element (ENABLE_NODE, &clear_bgp_external_in_prefix_filter_cmd);
 9871:   install_element (ENABLE_NODE, &clear_bgp_as_soft_in_cmd);
 9872:   install_element (ENABLE_NODE, &clear_bgp_as_in_cmd);
 9873:   install_element (ENABLE_NODE, &clear_bgp_as_in_prefix_filter_cmd);
 9874:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_in_cmd);
 9875:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_in_cmd);
 9876:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_in_prefix_filter_cmd);
 9877:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_in_cmd);
 9878:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_in_cmd);
 9879:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_in_prefix_filter_cmd);
 9880:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_in_cmd);
 9881:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_in_cmd);
 9882:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_in_prefix_filter_cmd);
 9883:   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_in_cmd);
 9884:   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_in_cmd);
 9885:   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_in_prefix_filter_cmd);
 9886:   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_in_cmd);
 9887:   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_cmd);
 9888:   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_prefix_filter_cmd);
 9889: #endif /* HAVE_IPV6 */
 9890: 
 9891:   /* "clear ip bgp neighbor soft out" */
 9892:   install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_out_cmd);
 9893:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_out_cmd);
 9894:   install_element (ENABLE_NODE, &clear_ip_bgp_all_out_cmd);
 9895:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_out_cmd);
 9896:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_out_cmd);
 9897:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_out_cmd);
 9898:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_out_cmd);
 9899:   install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_out_cmd);
 9900:   install_element (ENABLE_NODE, &clear_ip_bgp_external_out_cmd);
 9901:   install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_out_cmd);
 9902:   install_element (ENABLE_NODE, &clear_ip_bgp_as_out_cmd);
 9903:   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_out_cmd);
 9904:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_out_cmd);
 9905:   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_out_cmd);
 9906:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_out_cmd);
 9907:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_out_cmd);
 9908:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_out_cmd);
 9909:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_out_cmd);
 9910:   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_out_cmd);
 9911:   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_out_cmd);
 9912:   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_out_cmd);
 9913:   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_out_cmd);
 9914:   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_out_cmd);
 9915:   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_out_cmd);
 9916:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_out_cmd);
 9917:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_out_cmd);
 9918:   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_out_cmd);
 9919:   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_out_cmd);
 9920: #ifdef HAVE_IPV6
 9921:   install_element (ENABLE_NODE, &clear_bgp_all_soft_out_cmd);
 9922:   install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_out_cmd);
 9923:   install_element (ENABLE_NODE, &clear_bgp_all_out_cmd);
 9924:   install_element (ENABLE_NODE, &clear_bgp_peer_soft_out_cmd);
 9925:   install_element (ENABLE_NODE, &clear_bgp_peer_out_cmd);
 9926:   install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_out_cmd);
 9927:   install_element (ENABLE_NODE, &clear_bgp_peer_group_out_cmd);
 9928:   install_element (ENABLE_NODE, &clear_bgp_external_soft_out_cmd);
 9929:   install_element (ENABLE_NODE, &clear_bgp_external_out_cmd);
 9930:   install_element (ENABLE_NODE, &clear_bgp_as_soft_out_cmd);
 9931:   install_element (ENABLE_NODE, &clear_bgp_as_out_cmd);
 9932:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_out_cmd);
 9933:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_out_cmd);
 9934:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_out_cmd);
 9935:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_out_cmd);
 9936:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_out_cmd);
 9937:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_out_cmd);
 9938:   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_out_cmd);
 9939:   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_out_cmd);
 9940:   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_out_cmd);
 9941:   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_out_cmd);
 9942: #endif /* HAVE_IPV6 */
 9943: 
 9944:   /* "clear ip bgp neighbor soft" */
 9945:   install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_cmd);
 9946:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_cmd);
 9947:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_cmd);
 9948:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_cmd);
 9949:   install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_cmd);
 9950:   install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_cmd);
 9951:   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_cmd);
 9952:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_cmd);
 9953:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_cmd);
 9954:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_cmd);
 9955:   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_cmd);
 9956:   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_cmd);
 9957:   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_cmd);
 9958:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_cmd);
 9959:   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_cmd);
 9960: #ifdef HAVE_IPV6
 9961:   install_element (ENABLE_NODE, &clear_bgp_all_soft_cmd);
 9962:   install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_cmd);
 9963:   install_element (ENABLE_NODE, &clear_bgp_peer_soft_cmd);
 9964:   install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_cmd);
 9965:   install_element (ENABLE_NODE, &clear_bgp_external_soft_cmd);
 9966:   install_element (ENABLE_NODE, &clear_bgp_as_soft_cmd);
 9967:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_cmd);
 9968:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_cmd);
 9969:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_cmd);
 9970:   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_cmd);
 9971:   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_cmd);
 9972: #endif /* HAVE_IPV6 */
 9973: 
 9974:   /* "clear ip bgp neighbor rsclient" */
 9975:   install_element (ENABLE_NODE, &clear_ip_bgp_all_rsclient_cmd);
 9976:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_rsclient_cmd);
 9977:   install_element (ENABLE_NODE, &clear_ip_bgp_peer_rsclient_cmd);
 9978:   install_element (ENABLE_NODE, &clear_ip_bgp_instance_peer_rsclient_cmd);
 9979: #ifdef HAVE_IPV6
 9980:   install_element (ENABLE_NODE, &clear_bgp_all_rsclient_cmd);
 9981:   install_element (ENABLE_NODE, &clear_bgp_instance_all_rsclient_cmd);
 9982:   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_rsclient_cmd);
 9983:   install_element (ENABLE_NODE, &clear_bgp_ipv6_instance_all_rsclient_cmd);
 9984:   install_element (ENABLE_NODE, &clear_bgp_peer_rsclient_cmd);
 9985:   install_element (ENABLE_NODE, &clear_bgp_instance_peer_rsclient_cmd);
 9986:   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_rsclient_cmd);
 9987:   install_element (ENABLE_NODE, &clear_bgp_ipv6_instance_peer_rsclient_cmd);
 9988: #endif /* HAVE_IPV6 */
 9989: 
 9990:   /* "show ip bgp summary" commands. */
 9991:   install_element (VIEW_NODE, &show_ip_bgp_summary_cmd);
 9992:   install_element (VIEW_NODE, &show_ip_bgp_instance_summary_cmd);
 9993:   install_element (VIEW_NODE, &show_ip_bgp_ipv4_summary_cmd);
 9994:   install_element (VIEW_NODE, &show_bgp_ipv4_safi_summary_cmd);
 9995:   install_element (VIEW_NODE, &show_ip_bgp_instance_ipv4_summary_cmd);
 9996:   install_element (VIEW_NODE, &show_bgp_instance_ipv4_safi_summary_cmd);
 9997:   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_summary_cmd);
 9998:   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd);
 9999: #ifdef HAVE_IPV6
10000:   install_element (VIEW_NODE, &show_bgp_summary_cmd);
10001:   install_element (VIEW_NODE, &show_bgp_instance_summary_cmd);
10002:   install_element (VIEW_NODE, &show_bgp_ipv6_summary_cmd);
10003:   install_element (VIEW_NODE, &show_bgp_ipv6_safi_summary_cmd);
10004:   install_element (VIEW_NODE, &show_bgp_instance_ipv6_summary_cmd);
10005:   install_element (VIEW_NODE, &show_bgp_instance_ipv6_safi_summary_cmd);
10006: #endif /* HAVE_IPV6 */
10007:   install_element (RESTRICTED_NODE, &show_ip_bgp_summary_cmd);
10008:   install_element (RESTRICTED_NODE, &show_ip_bgp_instance_summary_cmd);
10009:   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_summary_cmd);
10010:   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_summary_cmd);
10011:   install_element (RESTRICTED_NODE, &show_ip_bgp_instance_ipv4_summary_cmd);
10012:   install_element (RESTRICTED_NODE, &show_bgp_instance_ipv4_safi_summary_cmd);
10013:   install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_all_summary_cmd);
10014:   install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd);
10015: #ifdef HAVE_IPV6
10016:   install_element (RESTRICTED_NODE, &show_bgp_summary_cmd);
10017:   install_element (RESTRICTED_NODE, &show_bgp_instance_summary_cmd);
10018:   install_element (RESTRICTED_NODE, &show_bgp_ipv6_summary_cmd);
10019:   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_summary_cmd);
10020:   install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_summary_cmd);
10021:   install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_safi_summary_cmd);
10022: #endif /* HAVE_IPV6 */
10023:   install_element (ENABLE_NODE, &show_ip_bgp_summary_cmd);
10024:   install_element (ENABLE_NODE, &show_ip_bgp_instance_summary_cmd);
10025:   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_summary_cmd);
10026:   install_element (ENABLE_NODE, &show_bgp_ipv4_safi_summary_cmd);
10027:   install_element (ENABLE_NODE, &show_ip_bgp_instance_ipv4_summary_cmd);
10028:   install_element (ENABLE_NODE, &show_bgp_instance_ipv4_safi_summary_cmd);
10029:   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_summary_cmd);
10030:   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd);
10031: #ifdef HAVE_IPV6
10032:   install_element (ENABLE_NODE, &show_bgp_summary_cmd);
10033:   install_element (ENABLE_NODE, &show_bgp_instance_summary_cmd);
10034:   install_element (ENABLE_NODE, &show_bgp_ipv6_summary_cmd);
10035:   install_element (ENABLE_NODE, &show_bgp_ipv6_safi_summary_cmd);
10036:   install_element (ENABLE_NODE, &show_bgp_instance_ipv6_summary_cmd);
10037:   install_element (ENABLE_NODE, &show_bgp_instance_ipv6_safi_summary_cmd);
10038: #endif /* HAVE_IPV6 */
10039: 
10040:   /* "show ip bgp neighbors" commands. */
10041:   install_element (VIEW_NODE, &show_ip_bgp_neighbors_cmd);
10042:   install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
10043:   install_element (VIEW_NODE, &show_ip_bgp_neighbors_peer_cmd);
10044:   install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd);
10045:   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbors_cmd);
10046:   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbors_cmd);
10047:   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd);
10048:   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd);
10049:   install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_cmd);
10050:   install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_peer_cmd);
10051:   install_element (RESTRICTED_NODE, &show_ip_bgp_neighbors_peer_cmd);
10052:   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd);
10053:   install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd);
10054:   install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd);
10055:   install_element (RESTRICTED_NODE, &show_ip_bgp_instance_neighbors_peer_cmd);
10056:   install_element (ENABLE_NODE, &show_ip_bgp_neighbors_cmd);
10057:   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
10058:   install_element (ENABLE_NODE, &show_ip_bgp_neighbors_peer_cmd);
10059:   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd);
10060:   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbors_cmd);
10061:   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbors_cmd);
10062:   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd);
10063:   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd);
10064:   install_element (ENABLE_NODE, &show_ip_bgp_instance_neighbors_cmd);
10065:   install_element (ENABLE_NODE, &show_ip_bgp_instance_neighbors_peer_cmd);
10066: 
10067: #ifdef HAVE_IPV6
10068:   install_element (VIEW_NODE, &show_bgp_neighbors_cmd);
10069:   install_element (VIEW_NODE, &show_bgp_ipv6_neighbors_cmd);
10070:   install_element (VIEW_NODE, &show_bgp_neighbors_peer_cmd);
10071:   install_element (VIEW_NODE, &show_bgp_ipv6_neighbors_peer_cmd);
10072:   install_element (VIEW_NODE, &show_bgp_instance_neighbors_cmd);
10073:   install_element (VIEW_NODE, &show_bgp_instance_ipv6_neighbors_cmd);
10074:   install_element (VIEW_NODE, &show_bgp_instance_neighbors_peer_cmd);
10075:   install_element (VIEW_NODE, &show_bgp_instance_ipv6_neighbors_peer_cmd);
10076:   install_element (RESTRICTED_NODE, &show_bgp_neighbors_peer_cmd);
10077:   install_element (RESTRICTED_NODE, &show_bgp_ipv6_neighbors_peer_cmd);
10078:   install_element (RESTRICTED_NODE, &show_bgp_instance_neighbors_peer_cmd);
10079:   install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_neighbors_peer_cmd);
10080:   install_element (ENABLE_NODE, &show_bgp_neighbors_cmd);
10081:   install_element (ENABLE_NODE, &show_bgp_ipv6_neighbors_cmd);
10082:   install_element (ENABLE_NODE, &show_bgp_neighbors_peer_cmd);
10083:   install_element (ENABLE_NODE, &show_bgp_ipv6_neighbors_peer_cmd);
10084:   install_element (ENABLE_NODE, &show_bgp_instance_neighbors_cmd);
10085:   install_element (ENABLE_NODE, &show_bgp_instance_ipv6_neighbors_cmd);
10086:   install_element (ENABLE_NODE, &show_bgp_instance_neighbors_peer_cmd);
10087:   install_element (ENABLE_NODE, &show_bgp_instance_ipv6_neighbors_peer_cmd);
10088: 
10089:   /* Old commands.  */
10090:   install_element (VIEW_NODE, &show_ipv6_bgp_summary_cmd);
10091:   install_element (VIEW_NODE, &show_ipv6_mbgp_summary_cmd);
10092:   install_element (ENABLE_NODE, &show_ipv6_bgp_summary_cmd);
10093:   install_element (ENABLE_NODE, &show_ipv6_mbgp_summary_cmd);
10094: #endif /* HAVE_IPV6 */
10095: 
10096:   /* "show ip bgp rsclient" commands. */
10097:   install_element (VIEW_NODE, &show_ip_bgp_rsclient_summary_cmd);
10098:   install_element (VIEW_NODE, &show_ip_bgp_instance_rsclient_summary_cmd);
10099:   install_element (VIEW_NODE, &show_ip_bgp_ipv4_rsclient_summary_cmd);
10100:   install_element (VIEW_NODE, &show_ip_bgp_instance_ipv4_rsclient_summary_cmd);
10101:   install_element (VIEW_NODE, &show_bgp_instance_ipv4_safi_rsclient_summary_cmd);
10102:   install_element (VIEW_NODE, &show_bgp_ipv4_safi_rsclient_summary_cmd);
10103:   install_element (RESTRICTED_NODE, &show_ip_bgp_rsclient_summary_cmd);
10104:   install_element (RESTRICTED_NODE, &show_ip_bgp_instance_rsclient_summary_cmd);
10105:   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_rsclient_summary_cmd);
10106:   install_element (RESTRICTED_NODE, &show_ip_bgp_instance_ipv4_rsclient_summary_cmd);
10107:   install_element (RESTRICTED_NODE, &show_bgp_instance_ipv4_safi_rsclient_summary_cmd);
10108:   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_rsclient_summary_cmd);
10109:   install_element (ENABLE_NODE, &show_ip_bgp_rsclient_summary_cmd);
10110:   install_element (ENABLE_NODE, &show_ip_bgp_instance_rsclient_summary_cmd);
10111:   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_rsclient_summary_cmd);
10112:   install_element (ENABLE_NODE, &show_ip_bgp_instance_ipv4_rsclient_summary_cmd);
10113:   install_element (ENABLE_NODE, &show_bgp_instance_ipv4_safi_rsclient_summary_cmd);
10114:   install_element (ENABLE_NODE, &show_bgp_ipv4_safi_rsclient_summary_cmd);
10115: 
10116: #ifdef HAVE_IPV6
10117:   install_element (VIEW_NODE, &show_bgp_rsclient_summary_cmd);
10118:   install_element (VIEW_NODE, &show_bgp_ipv6_rsclient_summary_cmd);
10119:   install_element (VIEW_NODE, &show_bgp_instance_rsclient_summary_cmd);
10120:   install_element (VIEW_NODE, &show_bgp_instance_ipv6_rsclient_summary_cmd);
10121:   install_element (VIEW_NODE, &show_bgp_instance_ipv6_safi_rsclient_summary_cmd);
10122:   install_element (VIEW_NODE, &show_bgp_ipv6_safi_rsclient_summary_cmd);
10123:   install_element (RESTRICTED_NODE, &show_bgp_rsclient_summary_cmd);
10124:   install_element (RESTRICTED_NODE, &show_bgp_ipv6_rsclient_summary_cmd);
10125:   install_element (RESTRICTED_NODE, &show_bgp_instance_rsclient_summary_cmd);
10126:   install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_rsclient_summary_cmd);
10127:   install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_safi_rsclient_summary_cmd);
10128:   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_rsclient_summary_cmd);
10129:   install_element (ENABLE_NODE, &show_bgp_rsclient_summary_cmd);
10130:   install_element (ENABLE_NODE, &show_bgp_ipv6_rsclient_summary_cmd);
10131:   install_element (ENABLE_NODE, &show_bgp_instance_rsclient_summary_cmd);
10132:   install_element (ENABLE_NODE, &show_bgp_instance_ipv6_rsclient_summary_cmd);
10133:   install_element (ENABLE_NODE, &show_bgp_instance_ipv6_safi_rsclient_summary_cmd);
10134:   install_element (ENABLE_NODE, &show_bgp_ipv6_safi_rsclient_summary_cmd);
10135: #endif /* HAVE_IPV6 */
10136: 
10137:   /* "show ip bgp paths" commands. */
10138:   install_element (VIEW_NODE, &show_ip_bgp_paths_cmd);
10139:   install_element (VIEW_NODE, &show_ip_bgp_ipv4_paths_cmd);
10140:   install_element (ENABLE_NODE, &show_ip_bgp_paths_cmd);
10141:   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_paths_cmd);
10142: 
10143:   /* "show ip bgp community" commands. */
10144:   install_element (VIEW_NODE, &show_ip_bgp_community_info_cmd);
10145:   install_element (ENABLE_NODE, &show_ip_bgp_community_info_cmd);
10146: 
10147:   /* "show ip bgp attribute-info" commands. */
10148:   install_element (VIEW_NODE, &show_ip_bgp_attr_info_cmd);
10149:   install_element (ENABLE_NODE, &show_ip_bgp_attr_info_cmd);
10150: 
10151:   /* "redistribute" commands.  */
10152:   install_element (BGP_NODE, &bgp_redistribute_ipv4_cmd);
10153:   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_cmd);
10154:   install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_cmd);
10155:   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_rmap_cmd);
10156:   install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_cmd);
10157:   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_metric_cmd);
10158:   install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd);
10159:   install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd);
10160:   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_rmap_metric_cmd);
10161:   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_metric_rmap_cmd);
10162: #ifdef HAVE_IPV6
10163:   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_cmd);
10164:   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_cmd);
10165:   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_cmd);
10166:   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_rmap_cmd);
10167:   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_cmd);
10168:   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_metric_cmd);
10169:   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_metric_cmd);
10170:   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_rmap_cmd);
10171:   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_rmap_metric_cmd);
10172:   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_metric_rmap_cmd);
10173: #endif /* HAVE_IPV6 */
10174: 
10175:   /* ttl_security commands */
10176:   install_element (BGP_NODE, &neighbor_ttl_security_cmd);
10177:   install_element (BGP_NODE, &no_neighbor_ttl_security_cmd);
10178: 
10179:   /* "show bgp memory" commands. */
10180:   install_element (VIEW_NODE, &show_bgp_memory_cmd);
10181:   install_element (RESTRICTED_NODE, &show_bgp_memory_cmd);
10182:   install_element (ENABLE_NODE, &show_bgp_memory_cmd);
10183:   
10184:   /* "show bgp views" commands. */
10185:   install_element (VIEW_NODE, &show_bgp_views_cmd);
10186:   install_element (RESTRICTED_NODE, &show_bgp_views_cmd);
10187:   install_element (ENABLE_NODE, &show_bgp_views_cmd);
10188:   
10189:   /* Community-list. */
10190:   community_list_vty ();
10191: }
10192: 
10193: #include "memory.h"
10194: #include "bgp_regex.h"
10195: #include "bgp_clist.h"
10196: #include "bgp_ecommunity.h"
10197: 
10198: /* VTY functions.  */
10199: 
10200: /* Direction value to string conversion.  */
10201: static const char *
10202: community_direct_str (int direct)
10203: {
10204:   switch (direct)
10205:     {
10206:     case COMMUNITY_DENY:
10207:       return "deny";
10208:     case COMMUNITY_PERMIT:
10209:       return "permit";
10210:     default:
10211:       return "unknown";
10212:     }
10213: }
10214: 
10215: /* Display error string.  */
10216: static void
10217: community_list_perror (struct vty *vty, int ret)
10218: {
10219:   switch (ret)
10220:     {
10221:     case COMMUNITY_LIST_ERR_CANT_FIND_LIST:
10222:       vty_out (vty, "%% Can't find community-list%s", VTY_NEWLINE);
10223:       break;
10224:     case COMMUNITY_LIST_ERR_MALFORMED_VAL:
10225:       vty_out (vty, "%% Malformed community-list value%s", VTY_NEWLINE);
10226:       break;
10227:     case COMMUNITY_LIST_ERR_STANDARD_CONFLICT:
10228:       vty_out (vty, "%% Community name conflict, previously defined as standard community%s", VTY_NEWLINE);
10229:       break;
10230:     case COMMUNITY_LIST_ERR_EXPANDED_CONFLICT:
10231:       vty_out (vty, "%% Community name conflict, previously defined as expanded community%s", VTY_NEWLINE);
10232:       break;
10233:     }
10234: }
10235: 
10236: /* VTY interface for community_set() function.  */
10237: static int
10238: community_list_set_vty (struct vty *vty, int argc, const char **argv, 
10239:                         int style, int reject_all_digit_name)
10240: {
10241:   int ret;
10242:   int direct;
10243:   char *str;
10244: 
10245:   /* Check the list type. */
10246:   if (strncmp (argv[1], "p", 1) == 0)
10247:     direct = COMMUNITY_PERMIT;
10248:   else if (strncmp (argv[1], "d", 1) == 0)
10249:     direct = COMMUNITY_DENY;
10250:   else
10251:     {
10252:       vty_out (vty, "%% Matching condition must be permit or deny%s",
10253: 	       VTY_NEWLINE);
10254:       return CMD_WARNING;
10255:     }
10256: 
10257:   /* All digit name check.  */
10258:   if (reject_all_digit_name && all_digit (argv[0]))
10259:     {
10260:       vty_out (vty, "%% Community name cannot have all digits%s", VTY_NEWLINE);
10261:       return CMD_WARNING;
10262:     }
10263: 
10264:   /* Concat community string argument.  */
10265:   if (argc > 1)
10266:     str = argv_concat (argv, argc, 2);
10267:   else
10268:     str = NULL;
10269: 
10270:   /* When community_list_set() return nevetive value, it means
10271:      malformed community string.  */
10272:   ret = community_list_set (bgp_clist, argv[0], str, direct, style);
10273: 
10274:   /* Free temporary community list string allocated by
10275:      argv_concat().  */
10276:   if (str)
10277:     XFREE (MTYPE_TMP, str);
10278: 
10279:   if (ret < 0)
10280:     {
10281:       /* Display error string.  */
10282:       community_list_perror (vty, ret);
10283:       return CMD_WARNING;
10284:     }
10285: 
10286:   return CMD_SUCCESS;
10287: }
10288: 
10289: /* Communiyt-list entry delete.  */
10290: static int
10291: community_list_unset_vty (struct vty *vty, int argc, const char **argv,
10292: 			  int style)
10293: {
10294:   int ret;
10295:   int direct = 0;
10296:   char *str = NULL;
10297: 
10298:   if (argc > 1)
10299:     {
10300:       /* Check the list direct. */
10301:       if (strncmp (argv[1], "p", 1) == 0)
10302: 	direct = COMMUNITY_PERMIT;
10303:       else if (strncmp (argv[1], "d", 1) == 0)
10304: 	direct = COMMUNITY_DENY;
10305:       else
10306: 	{
10307: 	  vty_out (vty, "%% Matching condition must be permit or deny%s",
10308: 		   VTY_NEWLINE);
10309: 	  return CMD_WARNING;
10310: 	}
10311: 
10312:       /* Concat community string argument.  */
10313:       str = argv_concat (argv, argc, 2);
10314:     }
10315: 
10316:   /* Unset community list.  */
10317:   ret = community_list_unset (bgp_clist, argv[0], str, direct, style);
10318: 
10319:   /* Free temporary community list string allocated by
10320:      argv_concat().  */
10321:   if (str)
10322:     XFREE (MTYPE_TMP, str);
10323: 
10324:   if (ret < 0)
10325:     {
10326:       community_list_perror (vty, ret);
10327:       return CMD_WARNING;
10328:     }
10329: 
10330:   return CMD_SUCCESS;
10331: }
10332: 
10333: /* "community-list" keyword help string.  */
10334: #define COMMUNITY_LIST_STR "Add a community list entry\n"
10335: #define COMMUNITY_VAL_STR  "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n"
10336: 
10337: DEFUN (ip_community_list_standard,
10338:        ip_community_list_standard_cmd,
10339:        "ip community-list <1-99> (deny|permit) .AA:NN",
10340:        IP_STR
10341:        COMMUNITY_LIST_STR
10342:        "Community list number (standard)\n"
10343:        "Specify community to reject\n"
10344:        "Specify community to accept\n"
10345:        COMMUNITY_VAL_STR)
10346: {
10347:   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD, 0);
10348: }
10349: 
10350: ALIAS (ip_community_list_standard,
10351:        ip_community_list_standard2_cmd,
10352:        "ip community-list <1-99> (deny|permit)",
10353:        IP_STR
10354:        COMMUNITY_LIST_STR
10355:        "Community list number (standard)\n"
10356:        "Specify community to reject\n"
10357:        "Specify community to accept\n")
10358: 
10359: DEFUN (ip_community_list_expanded,
10360:        ip_community_list_expanded_cmd,
10361:        "ip community-list <100-500> (deny|permit) .LINE",
10362:        IP_STR
10363:        COMMUNITY_LIST_STR
10364:        "Community list number (expanded)\n"
10365:        "Specify community to reject\n"
10366:        "Specify community to accept\n"
10367:        "An ordered list as a regular-expression\n")
10368: {
10369:   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED, 0);
10370: }
10371: 
10372: DEFUN (ip_community_list_name_standard,
10373:        ip_community_list_name_standard_cmd,
10374:        "ip community-list standard WORD (deny|permit) .AA:NN",
10375:        IP_STR
10376:        COMMUNITY_LIST_STR
10377:        "Add a standard community-list entry\n"
10378:        "Community list name\n"
10379:        "Specify community to reject\n"
10380:        "Specify community to accept\n"
10381:        COMMUNITY_VAL_STR)
10382: {
10383:   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD, 1);
10384: }
10385: 
10386: ALIAS (ip_community_list_name_standard,
10387:        ip_community_list_name_standard2_cmd,
10388:        "ip community-list standard WORD (deny|permit)",
10389:        IP_STR
10390:        COMMUNITY_LIST_STR
10391:        "Add a standard community-list entry\n"
10392:        "Community list name\n"
10393:        "Specify community to reject\n"
10394:        "Specify community to accept\n")
10395: 
10396: DEFUN (ip_community_list_name_expanded,
10397:        ip_community_list_name_expanded_cmd,
10398:        "ip community-list expanded WORD (deny|permit) .LINE",
10399:        IP_STR
10400:        COMMUNITY_LIST_STR
10401:        "Add an expanded community-list entry\n"
10402:        "Community list name\n"
10403:        "Specify community to reject\n"
10404:        "Specify community to accept\n"
10405:        "An ordered list as a regular-expression\n")
10406: {
10407:   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED, 1);
10408: }
10409: 
10410: DEFUN (no_ip_community_list_standard_all,
10411:        no_ip_community_list_standard_all_cmd,
10412:        "no ip community-list <1-99>",
10413:        NO_STR
10414:        IP_STR
10415:        COMMUNITY_LIST_STR
10416:        "Community list number (standard)\n")
10417: {
10418:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
10419: }
10420: 
10421: DEFUN (no_ip_community_list_expanded_all,
10422:        no_ip_community_list_expanded_all_cmd,
10423:        "no ip community-list <100-500>",
10424:        NO_STR
10425:        IP_STR
10426:        COMMUNITY_LIST_STR
10427:        "Community list number (expanded)\n")
10428: {
10429:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
10430: }
10431: 
10432: DEFUN (no_ip_community_list_name_standard_all,
10433:        no_ip_community_list_name_standard_all_cmd,
10434:        "no ip community-list standard WORD",
10435:        NO_STR
10436:        IP_STR
10437:        COMMUNITY_LIST_STR
10438:        "Add a standard community-list entry\n"
10439:        "Community list name\n")
10440: {
10441:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
10442: }
10443: 
10444: DEFUN (no_ip_community_list_name_expanded_all,
10445:        no_ip_community_list_name_expanded_all_cmd,
10446:        "no ip community-list expanded WORD",
10447:        NO_STR
10448:        IP_STR
10449:        COMMUNITY_LIST_STR
10450:        "Add an expanded community-list entry\n"
10451:        "Community list name\n")
10452: {
10453:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
10454: }
10455: 
10456: DEFUN (no_ip_community_list_standard,
10457:        no_ip_community_list_standard_cmd,
10458:        "no ip community-list <1-99> (deny|permit) .AA:NN",
10459:        NO_STR
10460:        IP_STR
10461:        COMMUNITY_LIST_STR
10462:        "Community list number (standard)\n"
10463:        "Specify community to reject\n"
10464:        "Specify community to accept\n"
10465:        COMMUNITY_VAL_STR)
10466: {
10467:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
10468: }
10469: 
10470: DEFUN (no_ip_community_list_expanded,
10471:        no_ip_community_list_expanded_cmd,
10472:        "no ip community-list <100-500> (deny|permit) .LINE",
10473:        NO_STR
10474:        IP_STR
10475:        COMMUNITY_LIST_STR
10476:        "Community list number (expanded)\n"
10477:        "Specify community to reject\n"
10478:        "Specify community to accept\n"
10479:        "An ordered list as a regular-expression\n")
10480: {
10481:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
10482: }
10483: 
10484: DEFUN (no_ip_community_list_name_standard,
10485:        no_ip_community_list_name_standard_cmd,
10486:        "no ip community-list standard WORD (deny|permit) .AA:NN",
10487:        NO_STR
10488:        IP_STR
10489:        COMMUNITY_LIST_STR
10490:        "Specify a standard community-list\n"
10491:        "Community list name\n"
10492:        "Specify community to reject\n"
10493:        "Specify community to accept\n"
10494:        COMMUNITY_VAL_STR)
10495: {
10496:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
10497: }
10498: 
10499: DEFUN (no_ip_community_list_name_expanded,
10500:        no_ip_community_list_name_expanded_cmd,
10501:        "no ip community-list expanded WORD (deny|permit) .LINE",
10502:        NO_STR
10503:        IP_STR
10504:        COMMUNITY_LIST_STR
10505:        "Specify an expanded community-list\n"
10506:        "Community list name\n"
10507:        "Specify community to reject\n"
10508:        "Specify community to accept\n"
10509:        "An ordered list as a regular-expression\n")
10510: {
10511:   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
10512: }
10513: 
10514: static void
10515: community_list_show (struct vty *vty, struct community_list *list)
10516: {
10517:   struct community_entry *entry;
10518: 
10519:   for (entry = list->head; entry; entry = entry->next)
10520:     {
10521:       if (entry == list->head)
10522: 	{
10523: 	  if (all_digit (list->name))
10524: 	    vty_out (vty, "Community %s list %s%s",
10525: 		     entry->style == COMMUNITY_LIST_STANDARD ?
10526: 		     "standard" : "(expanded) access",
10527: 		     list->name, VTY_NEWLINE);
10528: 	  else
10529: 	    vty_out (vty, "Named Community %s list %s%s",
10530: 		     entry->style == COMMUNITY_LIST_STANDARD ?
10531: 		     "standard" : "expanded",
10532: 		     list->name, VTY_NEWLINE);
10533: 	}
10534:       if (entry->any)
10535: 	vty_out (vty, "    %s%s",
10536: 		 community_direct_str (entry->direct), VTY_NEWLINE);
10537:       else
10538: 	vty_out (vty, "    %s %s%s",
10539: 		 community_direct_str (entry->direct),
10540: 		 entry->style == COMMUNITY_LIST_STANDARD
10541: 		 ? community_str (entry->u.com) : entry->config,
10542: 		 VTY_NEWLINE);
10543:     }
10544: }
10545: 
10546: DEFUN (show_ip_community_list,
10547:        show_ip_community_list_cmd,
10548:        "show ip community-list",
10549:        SHOW_STR
10550:        IP_STR
10551:        "List community-list\n")
10552: {
10553:   struct community_list *list;
10554:   struct community_list_master *cm;
10555: 
10556:   cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
10557:   if (! cm)
10558:     return CMD_SUCCESS;
10559: 
10560:   for (list = cm->num.head; list; list = list->next)
10561:     community_list_show (vty, list);
10562: 
10563:   for (list = cm->str.head; list; list = list->next)
10564:     community_list_show (vty, list);
10565: 
10566:   return CMD_SUCCESS;
10567: }
10568: 
10569: DEFUN (show_ip_community_list_arg,
10570:        show_ip_community_list_arg_cmd,
10571:        "show ip community-list (<1-500>|WORD)",
10572:        SHOW_STR
10573:        IP_STR
10574:        "List community-list\n"
10575:        "Community-list number\n"
10576:        "Community-list name\n")
10577: {
10578:   struct community_list *list;
10579: 
10580:   list = community_list_lookup (bgp_clist, argv[0], COMMUNITY_LIST_MASTER);
10581:   if (! list)
10582:     {
10583:       vty_out (vty, "%% Can't find community-list%s", VTY_NEWLINE);
10584:       return CMD_WARNING;
10585:     }
10586: 
10587:   community_list_show (vty, list);
10588: 
10589:   return CMD_SUCCESS;
10590: }
10591: 
10592: static int
10593: extcommunity_list_set_vty (struct vty *vty, int argc, const char **argv, 
10594:                            int style, int reject_all_digit_name)
10595: {
10596:   int ret;
10597:   int direct;
10598:   char *str;
10599: 
10600:   /* Check the list type. */
10601:   if (strncmp (argv[1], "p", 1) == 0)
10602:     direct = COMMUNITY_PERMIT;
10603:   else if (strncmp (argv[1], "d", 1) == 0)
10604:     direct = COMMUNITY_DENY;
10605:   else
10606:     {
10607:       vty_out (vty, "%% Matching condition must be permit or deny%s",
10608: 	       VTY_NEWLINE);
10609:       return CMD_WARNING;
10610:     }
10611: 
10612:   /* All digit name check.  */
10613:   if (reject_all_digit_name && all_digit (argv[0]))
10614:     {
10615:       vty_out (vty, "%% Community name cannot have all digits%s", VTY_NEWLINE);
10616:       return CMD_WARNING;
10617:     }
10618: 
10619:   /* Concat community string argument.  */
10620:   if (argc > 1)
10621:     str = argv_concat (argv, argc, 2);
10622:   else
10623:     str = NULL;
10624: 
10625:   ret = extcommunity_list_set (bgp_clist, argv[0], str, direct, style);
10626: 
10627:   /* Free temporary community list string allocated by
10628:      argv_concat().  */
10629:   if (str)
10630:     XFREE (MTYPE_TMP, str);
10631: 
10632:   if (ret < 0)
10633:     {
10634:       community_list_perror (vty, ret);
10635:       return CMD_WARNING;
10636:     }
10637:   return CMD_SUCCESS;
10638: }
10639: 
10640: static int
10641: extcommunity_list_unset_vty (struct vty *vty, int argc, const char **argv,
10642: 			     int style)
10643: {
10644:   int ret;
10645:   int direct = 0;
10646:   char *str = NULL;
10647: 
10648:   if (argc > 1)
10649:     {
10650:       /* Check the list direct. */
10651:       if (strncmp (argv[1], "p", 1) == 0)
10652: 	direct = COMMUNITY_PERMIT;
10653:       else if (strncmp (argv[1], "d", 1) == 0)
10654: 	direct = COMMUNITY_DENY;
10655:       else
10656: 	{
10657: 	  vty_out (vty, "%% Matching condition must be permit or deny%s",
10658: 		   VTY_NEWLINE);
10659: 	  return CMD_WARNING;
10660: 	}
10661: 
10662:       /* Concat community string argument.  */
10663:       str = argv_concat (argv, argc, 2);
10664:     }
10665: 
10666:   /* Unset community list.  */
10667:   ret = extcommunity_list_unset (bgp_clist, argv[0], str, direct, style);
10668: 
10669:   /* Free temporary community list string allocated by
10670:      argv_concat().  */
10671:   if (str)
10672:     XFREE (MTYPE_TMP, str);
10673: 
10674:   if (ret < 0)
10675:     {
10676:       community_list_perror (vty, ret);
10677:       return CMD_WARNING;
10678:     }
10679: 
10680:   return CMD_SUCCESS;
10681: }
10682: 
10683: /* "extcommunity-list" keyword help string.  */
10684: #define EXTCOMMUNITY_LIST_STR "Add a extended community list entry\n"
10685: #define EXTCOMMUNITY_VAL_STR  "Extended community attribute in 'rt aa:nn_or_IPaddr:nn' OR 'soo aa:nn_or_IPaddr:nn' format\n"
10686: 
10687: DEFUN (ip_extcommunity_list_standard,
10688:        ip_extcommunity_list_standard_cmd,
10689:        "ip extcommunity-list <1-99> (deny|permit) .AA:NN",
10690:        IP_STR
10691:        EXTCOMMUNITY_LIST_STR
10692:        "Extended Community list number (standard)\n"
10693:        "Specify community to reject\n"
10694:        "Specify community to accept\n"
10695:        EXTCOMMUNITY_VAL_STR)
10696: {
10697:   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD, 0);
10698: }
10699: 
10700: ALIAS (ip_extcommunity_list_standard,
10701:        ip_extcommunity_list_standard2_cmd,
10702:        "ip extcommunity-list <1-99> (deny|permit)",
10703:        IP_STR
10704:        EXTCOMMUNITY_LIST_STR
10705:        "Extended Community list number (standard)\n"
10706:        "Specify community to reject\n"
10707:        "Specify community to accept\n")
10708: 
10709: DEFUN (ip_extcommunity_list_expanded,
10710:        ip_extcommunity_list_expanded_cmd,
10711:        "ip extcommunity-list <100-500> (deny|permit) .LINE",
10712:        IP_STR
10713:        EXTCOMMUNITY_LIST_STR
10714:        "Extended Community list number (expanded)\n"
10715:        "Specify community to reject\n"
10716:        "Specify community to accept\n"
10717:        "An ordered list as a regular-expression\n")
10718: {
10719:   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED, 0);
10720: }
10721: 
10722: DEFUN (ip_extcommunity_list_name_standard,
10723:        ip_extcommunity_list_name_standard_cmd,
10724:        "ip extcommunity-list standard WORD (deny|permit) .AA:NN",
10725:        IP_STR
10726:        EXTCOMMUNITY_LIST_STR
10727:        "Specify standard extcommunity-list\n"
10728:        "Extended Community list name\n"
10729:        "Specify community to reject\n"
10730:        "Specify community to accept\n"
10731:        EXTCOMMUNITY_VAL_STR)
10732: {
10733:   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD, 1);
10734: }
10735: 
10736: ALIAS (ip_extcommunity_list_name_standard,
10737:        ip_extcommunity_list_name_standard2_cmd,
10738:        "ip extcommunity-list standard WORD (deny|permit)",
10739:        IP_STR
10740:        EXTCOMMUNITY_LIST_STR
10741:        "Specify standard extcommunity-list\n"
10742:        "Extended Community list name\n"
10743:        "Specify community to reject\n"
10744:        "Specify community to accept\n")
10745: 
10746: DEFUN (ip_extcommunity_list_name_expanded,
10747:        ip_extcommunity_list_name_expanded_cmd,
10748:        "ip extcommunity-list expanded WORD (deny|permit) .LINE",
10749:        IP_STR
10750:        EXTCOMMUNITY_LIST_STR
10751:        "Specify expanded extcommunity-list\n"
10752:        "Extended Community list name\n"
10753:        "Specify community to reject\n"
10754:        "Specify community to accept\n"
10755:        "An ordered list as a regular-expression\n")
10756: {
10757:   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED, 1);
10758: }
10759: 
10760: DEFUN (no_ip_extcommunity_list_standard_all,
10761:        no_ip_extcommunity_list_standard_all_cmd,
10762:        "no ip extcommunity-list <1-99>",
10763:        NO_STR
10764:        IP_STR
10765:        EXTCOMMUNITY_LIST_STR
10766:        "Extended Community list number (standard)\n")
10767: {
10768:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
10769: }
10770: 
10771: DEFUN (no_ip_extcommunity_list_expanded_all,
10772:        no_ip_extcommunity_list_expanded_all_cmd,
10773:        "no ip extcommunity-list <100-500>",
10774:        NO_STR
10775:        IP_STR
10776:        EXTCOMMUNITY_LIST_STR
10777:        "Extended Community list number (expanded)\n")
10778: {
10779:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
10780: }
10781: 
10782: DEFUN (no_ip_extcommunity_list_name_standard_all,
10783:        no_ip_extcommunity_list_name_standard_all_cmd,
10784:        "no ip extcommunity-list standard WORD",
10785:        NO_STR
10786:        IP_STR
10787:        EXTCOMMUNITY_LIST_STR
10788:        "Specify standard extcommunity-list\n"
10789:        "Extended Community list name\n")
10790: {
10791:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
10792: }
10793: 
10794: DEFUN (no_ip_extcommunity_list_name_expanded_all,
10795:        no_ip_extcommunity_list_name_expanded_all_cmd,
10796:        "no ip extcommunity-list expanded WORD",
10797:        NO_STR
10798:        IP_STR
10799:        EXTCOMMUNITY_LIST_STR
10800:        "Specify expanded extcommunity-list\n"
10801:        "Extended Community list name\n")
10802: {
10803:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
10804: }
10805: 
10806: DEFUN (no_ip_extcommunity_list_standard,
10807:        no_ip_extcommunity_list_standard_cmd,
10808:        "no ip extcommunity-list <1-99> (deny|permit) .AA:NN",
10809:        NO_STR
10810:        IP_STR
10811:        EXTCOMMUNITY_LIST_STR
10812:        "Extended Community list number (standard)\n"
10813:        "Specify community to reject\n"
10814:        "Specify community to accept\n"
10815:        EXTCOMMUNITY_VAL_STR)
10816: {
10817:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
10818: }
10819: 
10820: DEFUN (no_ip_extcommunity_list_expanded,
10821:        no_ip_extcommunity_list_expanded_cmd,
10822:        "no ip extcommunity-list <100-500> (deny|permit) .LINE",
10823:        NO_STR
10824:        IP_STR
10825:        EXTCOMMUNITY_LIST_STR
10826:        "Extended Community list number (expanded)\n"
10827:        "Specify community to reject\n"
10828:        "Specify community to accept\n"
10829:        "An ordered list as a regular-expression\n")
10830: {
10831:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
10832: }
10833: 
10834: DEFUN (no_ip_extcommunity_list_name_standard,
10835:        no_ip_extcommunity_list_name_standard_cmd,
10836:        "no ip extcommunity-list standard WORD (deny|permit) .AA:NN",
10837:        NO_STR
10838:        IP_STR
10839:        EXTCOMMUNITY_LIST_STR
10840:        "Specify standard extcommunity-list\n"
10841:        "Extended Community list name\n"
10842:        "Specify community to reject\n"
10843:        "Specify community to accept\n"
10844:        EXTCOMMUNITY_VAL_STR)
10845: {
10846:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
10847: }
10848: 
10849: DEFUN (no_ip_extcommunity_list_name_expanded,
10850:        no_ip_extcommunity_list_name_expanded_cmd,
10851:        "no ip extcommunity-list expanded WORD (deny|permit) .LINE",
10852:        NO_STR
10853:        IP_STR
10854:        EXTCOMMUNITY_LIST_STR
10855:        "Specify expanded extcommunity-list\n"
10856:        "Community list name\n"
10857:        "Specify community to reject\n"
10858:        "Specify community to accept\n"
10859:        "An ordered list as a regular-expression\n")
10860: {
10861:   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
10862: }
10863: 
10864: static void
10865: extcommunity_list_show (struct vty *vty, struct community_list *list)
10866: {
10867:   struct community_entry *entry;
10868: 
10869:   for (entry = list->head; entry; entry = entry->next)
10870:     {
10871:       if (entry == list->head)
10872: 	{
10873: 	  if (all_digit (list->name))
10874: 	    vty_out (vty, "Extended community %s list %s%s",
10875: 		     entry->style == EXTCOMMUNITY_LIST_STANDARD ?
10876: 		     "standard" : "(expanded) access",
10877: 		     list->name, VTY_NEWLINE);
10878: 	  else
10879: 	    vty_out (vty, "Named extended community %s list %s%s",
10880: 		     entry->style == EXTCOMMUNITY_LIST_STANDARD ?
10881: 		     "standard" : "expanded",
10882: 		     list->name, VTY_NEWLINE);
10883: 	}
10884:       if (entry->any)
10885: 	vty_out (vty, "    %s%s",
10886: 		 community_direct_str (entry->direct), VTY_NEWLINE);
10887:       else
10888: 	vty_out (vty, "    %s %s%s",
10889: 		 community_direct_str (entry->direct),
10890: 		 entry->style == EXTCOMMUNITY_LIST_STANDARD ?
10891: 		 entry->u.ecom->str : entry->config,
10892: 		 VTY_NEWLINE);
10893:     }
10894: }
10895: 
10896: DEFUN (show_ip_extcommunity_list,
10897:        show_ip_extcommunity_list_cmd,
10898:        "show ip extcommunity-list",
10899:        SHOW_STR
10900:        IP_STR
10901:        "List extended-community list\n")
10902: {
10903:   struct community_list *list;
10904:   struct community_list_master *cm;
10905: 
10906:   cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
10907:   if (! cm)
10908:     return CMD_SUCCESS;
10909: 
10910:   for (list = cm->num.head; list; list = list->next)
10911:     extcommunity_list_show (vty, list);
10912: 
10913:   for (list = cm->str.head; list; list = list->next)
10914:     extcommunity_list_show (vty, list);
10915: 
10916:   return CMD_SUCCESS;
10917: }
10918: 
10919: DEFUN (show_ip_extcommunity_list_arg,
10920:        show_ip_extcommunity_list_arg_cmd,
10921:        "show ip extcommunity-list (<1-500>|WORD)",
10922:        SHOW_STR
10923:        IP_STR
10924:        "List extended-community list\n"
10925:        "Extcommunity-list number\n"
10926:        "Extcommunity-list name\n")
10927: {
10928:   struct community_list *list;
10929: 
10930:   list = community_list_lookup (bgp_clist, argv[0], EXTCOMMUNITY_LIST_MASTER);
10931:   if (! list)
10932:     {
10933:       vty_out (vty, "%% Can't find extcommunity-list%s", VTY_NEWLINE);
10934:       return CMD_WARNING;
10935:     }
10936: 
10937:   extcommunity_list_show (vty, list);
10938: 
10939:   return CMD_SUCCESS;
10940: }
10941: 
10942: /* Return configuration string of community-list entry.  */
10943: static const char *
10944: community_list_config_str (struct community_entry *entry)
10945: {
10946:   const char *str;
10947: 
10948:   if (entry->any)
10949:     str = "";
10950:   else
10951:     {
10952:       if (entry->style == COMMUNITY_LIST_STANDARD)
10953: 	str = community_str (entry->u.com);
10954:       else
10955: 	str = entry->config;
10956:     }
10957:   return str;
10958: }
10959: 
10960: /* Display community-list and extcommunity-list configuration.  */
10961: static int
10962: community_list_config_write (struct vty *vty)
10963: {
10964:   struct community_list *list;
10965:   struct community_entry *entry;
10966:   struct community_list_master *cm;
10967:   int write = 0;
10968: 
10969:   /* Community-list.  */
10970:   cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
10971: 
10972:   for (list = cm->num.head; list; list = list->next)
10973:     for (entry = list->head; entry; entry = entry->next)
10974:       {
10975: 	vty_out (vty, "ip community-list %s %s %s%s",
10976: 		 list->name, community_direct_str (entry->direct),
10977: 		 community_list_config_str (entry),
10978: 		 VTY_NEWLINE);
10979: 	write++;
10980:       }
10981:   for (list = cm->str.head; list; list = list->next)
10982:     for (entry = list->head; entry; entry = entry->next)
10983:       {
10984: 	vty_out (vty, "ip community-list %s %s %s %s%s",
10985: 		 entry->style == COMMUNITY_LIST_STANDARD
10986: 		 ? "standard" : "expanded",
10987: 		 list->name, community_direct_str (entry->direct),
10988: 		 community_list_config_str (entry),
10989: 		 VTY_NEWLINE);
10990: 	write++;
10991:       }
10992: 
10993:   /* Extcommunity-list.  */
10994:   cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
10995: 
10996:   for (list = cm->num.head; list; list = list->next)
10997:     for (entry = list->head; entry; entry = entry->next)
10998:       {
10999: 	vty_out (vty, "ip extcommunity-list %s %s %s%s",
11000: 		 list->name, community_direct_str (entry->direct),
11001: 		 community_list_config_str (entry), VTY_NEWLINE);
11002: 	write++;
11003:       }
11004:   for (list = cm->str.head; list; list = list->next)
11005:     for (entry = list->head; entry; entry = entry->next)
11006:       {
11007: 	vty_out (vty, "ip extcommunity-list %s %s %s %s%s",
11008: 		 entry->style == EXTCOMMUNITY_LIST_STANDARD
11009: 		 ? "standard" : "expanded",
11010: 		 list->name, community_direct_str (entry->direct),
11011: 		 community_list_config_str (entry), VTY_NEWLINE);
11012: 	write++;
11013:       }
11014:   return write;
11015: }
11016: 
11017: static struct cmd_node community_list_node =
11018: {
11019:   COMMUNITY_LIST_NODE,
11020:   "",
11021:   1				/* Export to vtysh.  */
11022: };
11023: 
11024: static void
11025: community_list_vty (void)
11026: {
11027:   install_node (&community_list_node, community_list_config_write);
11028: 
11029:   /* Community-list.  */
11030:   install_element (CONFIG_NODE, &ip_community_list_standard_cmd);
11031:   install_element (CONFIG_NODE, &ip_community_list_standard2_cmd);
11032:   install_element (CONFIG_NODE, &ip_community_list_expanded_cmd);
11033:   install_element (CONFIG_NODE, &ip_community_list_name_standard_cmd);
11034:   install_element (CONFIG_NODE, &ip_community_list_name_standard2_cmd);
11035:   install_element (CONFIG_NODE, &ip_community_list_name_expanded_cmd);
11036:   install_element (CONFIG_NODE, &no_ip_community_list_standard_all_cmd);
11037:   install_element (CONFIG_NODE, &no_ip_community_list_expanded_all_cmd);
11038:   install_element (CONFIG_NODE, &no_ip_community_list_name_standard_all_cmd);
11039:   install_element (CONFIG_NODE, &no_ip_community_list_name_expanded_all_cmd);
11040:   install_element (CONFIG_NODE, &no_ip_community_list_standard_cmd);
11041:   install_element (CONFIG_NODE, &no_ip_community_list_expanded_cmd);
11042:   install_element (CONFIG_NODE, &no_ip_community_list_name_standard_cmd);
11043:   install_element (CONFIG_NODE, &no_ip_community_list_name_expanded_cmd);
11044:   install_element (VIEW_NODE, &show_ip_community_list_cmd);
11045:   install_element (VIEW_NODE, &show_ip_community_list_arg_cmd);
11046:   install_element (ENABLE_NODE, &show_ip_community_list_cmd);
11047:   install_element (ENABLE_NODE, &show_ip_community_list_arg_cmd);
11048: 
11049:   /* Extcommunity-list.  */
11050:   install_element (CONFIG_NODE, &ip_extcommunity_list_standard_cmd);
11051:   install_element (CONFIG_NODE, &ip_extcommunity_list_standard2_cmd);
11052:   install_element (CONFIG_NODE, &ip_extcommunity_list_expanded_cmd);
11053:   install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard_cmd);
11054:   install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard2_cmd);
11055:   install_element (CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd);
11056:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_all_cmd);
11057:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_all_cmd);
11058:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_all_cmd);
11059:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_expanded_all_cmd);
11060:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_cmd);
11061:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_cmd);
11062:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_cmd);
11063:   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_expanded_cmd);
11064:   install_element (VIEW_NODE, &show_ip_extcommunity_list_cmd);
11065:   install_element (VIEW_NODE, &show_ip_extcommunity_list_arg_cmd);
11066:   install_element (ENABLE_NODE, &show_ip_extcommunity_list_cmd);
11067:   install_element (ENABLE_NODE, &show_ip_extcommunity_list_arg_cmd);
11068: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>