Annotation of embedaddon/quagga/bgpd/bgp_vty.c, revision 1.1

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

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