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

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

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