bgp_vty.c
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:293k
源码类别:

网络

开发平台:

Unix_Linux

  1.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
  2.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV)
  3.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
  4.     vty_out (vty, "  AF-dependant capabilities:%s", VTY_NEWLINE);
  5.   if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
  6.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
  7.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
  8.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV))
  9.     {
  10.       vty_out (vty, "    Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
  11.        ORF_TYPE_PREFIX, VTY_NEWLINE);
  12.       bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
  13.  PEER_CAP_ORF_PREFIX_SM_ADV,
  14.  PEER_CAP_ORF_PREFIX_RM_ADV,
  15.  PEER_CAP_ORF_PREFIX_SM_RCV,
  16.  PEER_CAP_ORF_PREFIX_RM_RCV);
  17.     }
  18.   if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
  19.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
  20.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
  21.       || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
  22.     {
  23.       vty_out (vty, "    Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
  24.        ORF_TYPE_PREFIX_OLD, VTY_NEWLINE);
  25.       bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
  26.  PEER_CAP_ORF_PREFIX_SM_ADV,
  27.  PEER_CAP_ORF_PREFIX_RM_ADV,
  28.  PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
  29.  PEER_CAP_ORF_PREFIX_RM_OLD_RCV);
  30.     }
  31.   sprintf (orf_pfx_name, "%s.%d.%d", p->host, afi, safi);
  32.   orf_pfx_count =  prefix_bgp_show_prefix_list (NULL, afi, orf_pfx_name);
  33.   if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND)
  34.       || orf_pfx_count)
  35.     {
  36.       vty_out (vty, "  Outbound Route Filter (ORF):");
  37.       if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND))
  38. vty_out (vty, " sent;");
  39.       if (orf_pfx_count)
  40. vty_out (vty, " received (%d entries)", orf_pfx_count);
  41.       vty_out (vty, "%s", VTY_NEWLINE);
  42.     }
  43.   if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_WAIT_REFRESH))
  44.     vty_out (vty, "  First update is deferred until ORF or ROUTE-REFRESH is received%s", VTY_NEWLINE);
  45.   if (filter->plist[FILTER_IN].name
  46.       || filter->dlist[FILTER_IN].name
  47.       || filter->aslist[FILTER_IN].name
  48.       || filter->map[FILTER_IN].name)
  49.     vty_out (vty, "  Inbound path policy configured%s", VTY_NEWLINE);
  50.   if (filter->plist[FILTER_OUT].name
  51.       || filter->dlist[FILTER_OUT].name
  52.       || filter->aslist[FILTER_OUT].name
  53.       || filter->map[FILTER_OUT].name
  54.       || filter->usmap.name)
  55.     vty_out (vty, "  Outbound path policy configured%s", VTY_NEWLINE);
  56.   /* prefix-list */
  57.   if (filter->plist[FILTER_IN].name)
  58.     vty_out (vty, "  Incoming update prefix filter list is %s%s%s",
  59.      filter->plist[FILTER_IN].plist ? "*" : "",
  60.      filter->plist[FILTER_IN].name,
  61.      VTY_NEWLINE);
  62.   if (filter->plist[FILTER_OUT].name)
  63.     vty_out (vty, "  Outgoing update prefix filter list is %s%s%s",
  64.      filter->plist[FILTER_OUT].plist ? "*" : "",
  65.      filter->plist[FILTER_OUT].name,
  66.      VTY_NEWLINE);
  67.   /* distribute-list */
  68.   if (filter->dlist[FILTER_IN].name)
  69.     vty_out (vty, "  Incoming update network filter list is %s%s%s",
  70.      filter->dlist[FILTER_IN].alist ? "*" : "",
  71.      filter->dlist[FILTER_IN].name,
  72.      VTY_NEWLINE);
  73.   if (filter->dlist[FILTER_OUT].name)
  74.     vty_out (vty, "  Outgoing update network filter list is %s%s%s",
  75.      filter->dlist[FILTER_OUT].alist ? "*" : "",
  76.      filter->dlist[FILTER_OUT].name,
  77.      VTY_NEWLINE);
  78.   /* filter-list. */
  79.   if (filter->aslist[FILTER_IN].name)
  80.     vty_out (vty, "  Incoming update AS path filter list is %s%s%s",
  81.      filter->aslist[FILTER_IN].aslist ? "*" : "",
  82.      filter->aslist[FILTER_IN].name,
  83.      VTY_NEWLINE);
  84.   if (filter->aslist[FILTER_OUT].name)
  85.     vty_out (vty, "  Outgoing update AS path filter list is %s%s%s",
  86.      filter->aslist[FILTER_OUT].aslist ? "*" : "",
  87.      filter->aslist[FILTER_OUT].name,
  88.      VTY_NEWLINE);
  89.   /* route-map. */
  90.   if (filter->map[FILTER_IN].name)
  91.     vty_out (vty, "  Route map for incoming advertisements is %s%s%s",
  92.      filter->map[FILTER_IN].map ? "*" : "",
  93.      filter->map[FILTER_IN].name,
  94.      VTY_NEWLINE);
  95.   if (filter->map[FILTER_OUT].name)
  96.     vty_out (vty, "  Route map for outgoing advertisements is %s%s%s",
  97.      filter->map[FILTER_OUT].map ? "*" : "",
  98.      filter->map[FILTER_OUT].name,
  99.      VTY_NEWLINE);
  100.   /* unsuppress-map */
  101.   if (filter->usmap.name)
  102.     vty_out (vty, "  Route map for selective unsuppress is %s%s%s",
  103.      filter->usmap.map ? "*" : "",
  104.      filter->usmap.name, VTY_NEWLINE);
  105.   /* Default weight */
  106.   if (CHECK_FLAG (p->af_config[afi][safi], PEER_AF_CONFIG_WEIGHT))
  107.     vty_out (vty, "  Default weight %d%s", p->weight[afi][safi],
  108.      VTY_NEWLINE);
  109.   /* Receive prefix count */
  110.   vty_out (vty, "  %ld accepted prefixes%s", p->pcount[afi][safi], VTY_NEWLINE);
  111.   /* Maximum prefix */
  112.   if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX))
  113.     {
  114.       vty_out (vty, "  Maximum prefixes allowed %ld%s%s", p->pmax[afi][safi],
  115.        CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX_WARNING)
  116.        ? " (warning-only)" : "", VTY_NEWLINE);
  117.       vty_out (vty, "  Threshold for warning message %d%%", p->pmax_threshold[afi][safi]);
  118.       if (p->pmax_restart[afi][safi])
  119. vty_out (vty, ", restart interval %d min", p->pmax_restart[afi][safi]);
  120.       vty_out (vty, "%s", VTY_NEWLINE);
  121.     }
  122.   vty_out (vty, "%s", VTY_NEWLINE);
  123. }
  124. void
  125. bgp_show_peer (struct vty *vty, struct peer *p)
  126. {
  127.   struct bgp *bgp;
  128.   char buf1[BUFSIZ];
  129.   char timebuf[BGP_UPTIME_LEN];
  130.   afi_t afi;
  131.   safi_t safi;
  132.   bgp = p->bgp;
  133.   /* Configured IP address. */
  134.   vty_out (vty, "BGP neighbor is %s, ", p->host);
  135.   vty_out (vty, "remote AS %d, ", p->as);
  136.   vty_out (vty, "local AS %d%s, ",
  137.    p->change_local_as ? p->change_local_as : p->local_as,
  138.    CHECK_FLAG (p->flags, PEER_FLAG_LOCAL_AS_NO_PREPEND) ?
  139.    " no-prepend" : "");
  140.   vty_out (vty, "%s link%s",
  141.    p->as == p->local_as ? "internal" : "external",
  142.    VTY_NEWLINE);
  143.   /* Description. */
  144.   if (p->desc)
  145.     vty_out (vty, " Description: %s%s", p->desc, VTY_NEWLINE);
  146.   
  147.   /* Peer-group */
  148.   if (p->group)
  149.     vty_out (vty, " Member of peer-group %s for session parameters%s",
  150.      p->group->name, VTY_NEWLINE);
  151.   /* Administrative shutdown. */
  152.   if (CHECK_FLAG (p->flags, PEER_FLAG_SHUTDOWN))
  153.     vty_out (vty, " Administratively shut down%s", VTY_NEWLINE);
  154.   /* BGP Version. */
  155.   vty_out (vty, "  BGP version 4");
  156.   vty_out (vty, ", remote router ID %s%s", 
  157.    inet_ntop (AF_INET, &p->remote_id, buf1, BUFSIZ),
  158.    VTY_NEWLINE);
  159.   /* Confederation */
  160.   if (CHECK_FLAG (bgp->config, BGP_CONFIG_CONFEDERATION)
  161.       && bgp_confederation_peers_check (bgp, p->as))
  162.     vty_out (vty, "  Neighbor under common administration%s", VTY_NEWLINE);
  163.   
  164.   /* Status. */
  165.   vty_out (vty, "  BGP state = %s",  
  166.    LOOKUP (bgp_status_msg, p->status));
  167.   if (p->status == Established) 
  168.     vty_out (vty, ", up for %8s", 
  169.      peer_uptime (p->uptime, timebuf, BGP_UPTIME_LEN));
  170.   vty_out (vty, "%s", VTY_NEWLINE);
  171.   
  172.   /* read timer */
  173.   vty_out (vty, "  Last read %s", peer_uptime (p->readtime, timebuf, BGP_UPTIME_LEN));
  174.   /* Configured timer values. */
  175.   vty_out (vty, ", hold time is %d, keepalive interval is %d seconds%s",
  176.    p->v_holdtime, p->v_keepalive, VTY_NEWLINE);
  177.   if (CHECK_FLAG (p->config, PEER_CONFIG_TIMER))
  178.     {
  179.       vty_out (vty, "  Configured hold time is %d", p->holdtime);
  180.       vty_out (vty, ", keepalive interval is %d seconds%s",
  181.        p->keepalive, VTY_NEWLINE);
  182.     }
  183.   /* Capability. */
  184.   if (p->status == Established) 
  185.     {
  186.       if (p->cap
  187.   || p->afc_adv[AFI_IP][SAFI_UNICAST]
  188.   || p->afc_recv[AFI_IP][SAFI_UNICAST]
  189.   || p->afc_adv[AFI_IP][SAFI_MULTICAST]
  190.   || p->afc_recv[AFI_IP][SAFI_MULTICAST]
  191. #ifdef HAVE_IPV6
  192.   || p->afc_adv[AFI_IP6][SAFI_UNICAST]
  193.   || p->afc_recv[AFI_IP6][SAFI_UNICAST]
  194.   || p->afc_adv[AFI_IP6][SAFI_MULTICAST]
  195.   || p->afc_recv[AFI_IP6][SAFI_MULTICAST]
  196. #endif /* HAVE_IPV6 */
  197.   || p->afc_adv[AFI_IP][SAFI_MPLS_VPN]
  198.   || p->afc_recv[AFI_IP][SAFI_MPLS_VPN])
  199. {
  200.   vty_out (vty, "  Neighbor capabilities:%s", VTY_NEWLINE);
  201.   /* Dynamic */
  202.   if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV)
  203.       || CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
  204.     {
  205.       vty_out (vty, "    Dynamic:");
  206.       if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
  207. vty_out (vty, " advertised");
  208.       if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV))
  209. vty_out (vty, " %sreceived",
  210.  CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV) ? "and " : "");
  211.       vty_out (vty, "%s", VTY_NEWLINE);
  212.     }
  213.   /* Route Refresh */
  214.   if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV)
  215.       || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)
  216.       || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
  217.     {
  218.       vty_out (vty, "    Route refresh:");
  219.         if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV))
  220. vty_out (vty, " advertised");
  221.       if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)
  222.   || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
  223. vty_out (vty, " %sreceived(%s)",
  224.  CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV) ? "and " : "",
  225.  (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV)
  226.   && CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)) ?
  227.  "old & new" : CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV) ? "old" : "new");
  228.       vty_out (vty, "%s", VTY_NEWLINE);
  229.     }
  230.   /* Multiprotocol Extensions */
  231.   for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
  232.     for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
  233.       if (p->afc_adv[afi][safi] || p->afc_recv[afi][safi])
  234. {
  235.   vty_out (vty, "    Address family %s:", afi_safi_print (afi, safi));
  236.   if (p->afc_adv[afi][safi]) 
  237.     vty_out (vty, " advertised");
  238.   if (p->afc_recv[afi][safi])
  239.     vty_out (vty, " %sreceived", p->afc_adv[afi][safi] ? "and " : "");
  240.   vty_out (vty, "%s", VTY_NEWLINE);
  241.   /* Gracefull Restart */
  242.   if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV)
  243.       || CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
  244.     {
  245.       vty_out (vty, "    Graceful Restart Capabilty:");
  246.       if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
  247. vty_out (vty, " advertised");
  248.       if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
  249. vty_out (vty, " %sreceived",
  250.  CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV) ? "and " : "");
  251.       vty_out (vty, "%s", VTY_NEWLINE);
  252.       if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
  253. {
  254.   int restart_af_count = 0;
  255.   vty_out (vty, "      Remote Restart timer is %d seconds%s",
  256.    p->v_gr_restart, VTY_NEWLINE);
  257.   vty_out (vty, "      Address families preserved by peer:%s", VTY_NEWLINE);
  258.   vty_out (vty, "        ");
  259.   for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
  260.     for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
  261.       if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_RESTART_AF_RCV))
  262. {
  263.   vty_out (vty, "%s%s", restart_af_count ? ", " : "",
  264.    afi_safi_print (afi, safi));
  265.   restart_af_count++;
  266. }
  267.   if (! restart_af_count)
  268.     vty_out (vty, "none");
  269.   vty_out (vty, "%s", VTY_NEWLINE);
  270. }
  271.     }
  272. }
  273.     }
  274.   /* graceful restart information */
  275.   if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV)
  276.       || p->t_gr_restart
  277.       || p->t_gr_stale)
  278.     {
  279.       int eor_send_af_count = 0;
  280.       int eor_receive_af_count = 0;
  281.       vty_out (vty, "  Graceful restart informations:%s", VTY_NEWLINE);
  282.       if (p->status == Established) 
  283. {
  284.   vty_out (vty, "    End-of-RIB send: ");
  285.   for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
  286.     for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
  287.       if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_SEND))
  288. {
  289.   vty_out (vty, "%s%s", eor_send_af_count ? ", " : "",
  290.    afi_safi_print (afi, safi));
  291.   eor_send_af_count++;
  292. }
  293.   vty_out (vty, "%s", VTY_NEWLINE);
  294.   vty_out (vty, "    End-of-RIB received: ");
  295.   for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
  296.     for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
  297.       if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_RECEIVED))
  298. {
  299.   vty_out (vty, "%s%s", eor_receive_af_count ? ", " : "",
  300.    afi_safi_print (afi, safi));
  301.   eor_receive_af_count++;
  302. }
  303.   vty_out (vty, "%s", VTY_NEWLINE);
  304. }
  305.       if (p->t_gr_restart)
  306.         {
  307.   vty_out (vty, "    The remaining time of restart timer is %s%s",
  308.    thread_timer_remain_second (p->t_gr_restart), VTY_NEWLINE);
  309. }
  310.       if (p->t_gr_stale)
  311. {
  312.   vty_out (vty, "    The remaining time of stalepath timer is %s%s",
  313.    thread_timer_remain_second (p->t_gr_stale), VTY_NEWLINE);
  314. }
  315.     }
  316.   /* Packet counts. */
  317.   vty_out (vty, "  Message statistics:%s", VTY_NEWLINE);
  318.   vty_out (vty, "    Inq depth is 0%s", VTY_NEWLINE);
  319.   vty_out (vty, "    Outq depth is %ld%s", p->obuf->count, VTY_NEWLINE);
  320.   vty_out (vty, "                         Sent       Rcvd%s", VTY_NEWLINE);
  321.   vty_out (vty, "    Opens:         %10d %10d%s", p->open_out, p->open_in, VTY_NEWLINE);
  322.   vty_out (vty, "    Notifications: %10d %10d%s", p->notify_out, p->notify_in, VTY_NEWLINE);
  323.   vty_out (vty, "    Updates:       %10d %10d%s", p->update_out, p->update_in, VTY_NEWLINE);
  324.   vty_out (vty, "    Keepalives:    %10d %10d%s", p->keepalive_out, p->keepalive_in, VTY_NEWLINE);
  325.   vty_out (vty, "    Route Refresh: %10d %10d%s", p->refresh_out, p->refresh_in, VTY_NEWLINE);
  326.   vty_out (vty, "    Capability:    %10d %10d%s", p->dynamic_cap_out, p->dynamic_cap_in, VTY_NEWLINE);
  327.   vty_out (vty, "    Total:         %10d %10d%s", p->open_out + p->notify_out +
  328.    p->update_out + p->keepalive_out + p->refresh_out + p->dynamic_cap_out,
  329.    p->open_in + p->notify_in + p->update_in + p->keepalive_in + p->refresh_in +
  330.    p->dynamic_cap_in, VTY_NEWLINE);
  331.   /* advertisement-interval */
  332.   vty_out (vty, "  Minimum time between advertisement runs is %d seconds%s",
  333.    p->v_routeadv, VTY_NEWLINE);
  334.   /* Update-source. */
  335.   if (p->update_if || p->update_source)
  336.     {
  337.       vty_out (vty, "  Update source is ");
  338.       if (p->update_if)
  339. vty_out (vty, "%s", p->update_if);
  340.       else if (p->update_source)
  341. vty_out (vty, "%s",
  342.  sockunion2str (p->update_source, buf1, SU_ADDRSTRLEN));
  343.       vty_out (vty, "%s", VTY_NEWLINE);
  344.     }
  345.   vty_out (vty, "%s", VTY_NEWLINE);
  346.   /* Address Family Information */
  347.   for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
  348.     for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
  349.       if (p->afc[afi][safi])
  350. bgp_show_peer_afi (vty, p, afi, safi);
  351.   vty_out (vty, "  Connections established %d; dropped %d%s",
  352.    p->established, p->dropped,
  353.    VTY_NEWLINE);
  354.   if (! p->dropped)
  355.     vty_out (vty, "  Last reset never%s", VTY_NEWLINE);
  356.   else
  357.     vty_out (vty, "  Last reset %s, due to %s%s",
  358.      peer_uptime (p->resettime, timebuf, BGP_UPTIME_LEN),
  359.      peer_down_str[(int) p->last_reset], VTY_NEWLINE);
  360.   if (CHECK_FLAG (p->sflags, PEER_STATUS_PREFIX_OVERFLOW))
  361.     {
  362.       vty_out (vty, "  Peer had exceeded the max. no. of prefixes configured.%s", VTY_NEWLINE);
  363.       if (p->t_pmax_restart)
  364. vty_out (vty, "  Reduce the no. of prefix from %s, will restart in %s%s",
  365.  p->host, thread_timer_remain_second (p->t_pmax_restart), VTY_NEWLINE);
  366.       else
  367. vty_out (vty, "  Reduce the no. of prefix and clear ip bgp %s to restore peering%s",
  368.  p->host, VTY_NEWLINE);
  369.     }
  370.   /* EBGP Multihop */
  371.   if (peer_sort (p) != BGP_PEER_IBGP && p->ttl > 1)
  372.     vty_out (vty, "  External BGP neighbor may be up to %d hops away.%s",
  373.      p->ttl, VTY_NEWLINE);
  374.   /* connection-mode */
  375.   if (CHECK_FLAG (p->flags, PEER_FLAG_CONNECT_MODE_PASSIVE))
  376.     vty_out (vty, "  TCP session must be opened passively%s", VTY_NEWLINE);
  377.   if (CHECK_FLAG (p->flags, PEER_FLAG_CONNECT_MODE_ACTIVE))
  378.     vty_out (vty, "  TCP session must be opened actively%s", VTY_NEWLINE);
  379.   /* Local address. */
  380.   if (p->su_local)
  381.     {
  382.       vty_out (vty, "Local host: %s, Local port: %d%s",
  383.        sockunion2str (p->su_local, buf1, SU_ADDRSTRLEN),
  384.        ntohs (p->su_local->sin.sin_port),
  385.        VTY_NEWLINE);
  386.     }
  387.       
  388.   /* Remote address. */
  389.   if (p->su_remote)
  390.     {
  391.       vty_out (vty, "Foreign host: %s, Foreign port: %d%s",
  392.        sockunion2str (p->su_remote, buf1, SU_ADDRSTRLEN),
  393.        ntohs (p->su_remote->sin.sin_port),
  394.        VTY_NEWLINE);
  395.     }
  396.   /* Nexthop display. */
  397.   if (p->su_local)
  398.     {
  399.       vty_out (vty, "Nexthop: %s%s", 
  400.        inet_ntop (AF_INET, &p->nexthop.v4, buf1, BUFSIZ),
  401.        VTY_NEWLINE);
  402. #ifdef HAVE_IPV6
  403.       vty_out (vty, "Nexthop global: %s%s", 
  404.        inet_ntop (AF_INET6, &p->nexthop.v6_global, buf1, BUFSIZ),
  405.        VTY_NEWLINE);
  406.       vty_out (vty, "Nexthop local: %s%s",
  407.        inet_ntop (AF_INET6, &p->nexthop.v6_local, buf1, BUFSIZ),
  408.        VTY_NEWLINE);
  409.       vty_out (vty, "BGP connection: %s%s",
  410.        p->shared_network ? "shared network" : "non shared network",
  411.        VTY_NEWLINE);
  412. #endif /* HAVE_IPV6 */
  413.     }
  414.   /* Timer information. */
  415.   if (p->t_start)
  416.     vty_out (vty, "Next start timer due in %s%s",
  417.      thread_timer_remain_second (p->t_start), VTY_NEWLINE);
  418.   if (p->t_connect)
  419.     vty_out (vty, "Next connect timer due in %s%s",
  420.      thread_timer_remain_second (p->t_connect), VTY_NEWLINE);
  421.   
  422.   vty_out (vty, "Read thread: %s  Write thread: %s%s", 
  423.    p->t_read ? "on" : "off",
  424.    p->t_write ? "on" : "off",
  425.    VTY_NEWLINE);
  426.   if (p->notify.code == BGP_NOTIFY_OPEN_ERR
  427.       && p->notify.subcode == BGP_NOTIFY_OPEN_UNSUP_CAPBL)
  428.     bgp_capability_vty_out (vty, p);
  429.  
  430.   vty_out (vty, "%s", VTY_NEWLINE);
  431. }
  432. int
  433. bgp_show_neighbor (struct vty *vty, struct bgp *bgp,
  434.    enum show_type type, union sockunion *su)
  435. {
  436.   struct listnode *nn;
  437.   struct peer *peer;
  438.   int find = 0;
  439.   LIST_LOOP (bgp->peer, peer, nn)
  440.     {
  441.       switch (type)
  442. {
  443. case show_all:
  444.   bgp_show_peer (vty, peer);
  445.   break;
  446. case show_peer:
  447.   if (sockunion_same (&peer->su, su))
  448.     {
  449.       find = 1;
  450.       bgp_show_peer (vty, peer);
  451.     }
  452.   break;
  453. }
  454.     }
  455.   if (type == show_peer && ! find)
  456.     vty_out (vty, "%% No such neighbor%s", VTY_NEWLINE);
  457.   
  458.   return CMD_SUCCESS;
  459. }
  460. int 
  461. bgp_show_neighbor_vty (struct vty *vty, char *name, enum show_type type,
  462.        char *ip_str)
  463. {
  464.   int ret;
  465.   struct bgp *bgp;
  466.   union sockunion su;
  467.   if (ip_str)
  468.     {
  469.       ret = str2sockunion (ip_str, &su);
  470.       if (ret < 0)
  471.         {
  472.           vty_out (vty, "%% Malformed address: %s%s", ip_str, VTY_NEWLINE);
  473.           return CMD_WARNING;
  474.         }
  475.     }
  476.   if (name)
  477.     {
  478.       bgp = bgp_lookup_by_name (name);
  479.       
  480.       if (! bgp)
  481.         {
  482.           vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE); 
  483.           return CMD_WARNING;
  484.         }
  485.       bgp_show_neighbor (vty, bgp, type, &su);
  486.       return CMD_SUCCESS;
  487.     }
  488.   bgp = bgp_get_default ();
  489.   if (bgp)
  490.     bgp_show_neighbor (vty, bgp, type, &su);
  491.   return CMD_SUCCESS;
  492. }
  493. /* "show ip bgp neighbors" commands.  */
  494. DEFUN (show_ip_bgp_neighbors,
  495.        show_ip_bgp_neighbors_cmd,
  496.        "show ip bgp neighbors",
  497.        SHOW_STR
  498.        IP_STR
  499.        BGP_STR
  500.        "Detailed information on TCP and BGP neighbor connectionsn")
  501. {
  502.   return bgp_show_neighbor_vty (vty, NULL, show_all, NULL);
  503. }
  504. ALIAS (show_ip_bgp_neighbors,
  505.        show_ip_bgp_ipv4_neighbors_cmd,
  506.        "show ip bgp ipv4 (unicast|multicast) neighbors",
  507.        SHOW_STR
  508.        IP_STR
  509.        BGP_STR
  510.        "Address familyn"
  511.        "Address Family modifiern"
  512.        "Address Family modifiern"
  513.        "Detailed information on TCP and BGP neighbor connectionsn");
  514. ALIAS (show_ip_bgp_neighbors,
  515.        show_ip_bgp_vpnv4_all_neighbors_cmd,
  516.        "show ip bgp vpnv4 all neighbors",
  517.        SHOW_STR
  518.        IP_STR
  519.        BGP_STR
  520.        "Display VPNv4 NLRI specific informationn"
  521.        "Display information about all VPNv4 NLRIsn"
  522.        "Detailed information on TCP and BGP neighbor connectionsn");
  523. ALIAS (show_ip_bgp_neighbors,
  524.        show_ip_bgp_vpnv4_rd_neighbors_cmd,
  525.        "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors",
  526.        SHOW_STR
  527.        IP_STR
  528.        BGP_STR
  529.        "Display VPNv4 NLRI specific informationn"
  530.        "Display information for a route distinguishern"
  531.        "VPN Route Distinguishern"
  532.        "Detailed information on TCP and BGP neighbor connectionsn");
  533. ALIAS (show_ip_bgp_neighbors,
  534.        show_bgp_neighbors_cmd,
  535.        "show bgp neighbors",
  536.        SHOW_STR
  537.        BGP_STR
  538.        "Detailed information on TCP and BGP neighbor connectionsn");
  539. ALIAS (show_ip_bgp_neighbors,
  540.        show_bgp_ipv6_neighbors_cmd,
  541.        "show bgp ipv6 neighbors",
  542.        SHOW_STR
  543.        BGP_STR
  544.        "Address familyn"
  545.        "Detailed information on TCP and BGP neighbor connectionsn");
  546. DEFUN (show_ip_bgp_neighbors_peer,
  547.        show_ip_bgp_neighbors_peer_cmd,
  548.        "show ip bgp neighbors (A.B.C.D|X:X::X:X)",
  549.        SHOW_STR
  550.        IP_STR
  551.        BGP_STR
  552.        "Detailed information on TCP and BGP neighbor connectionsn"
  553.        "Neighbor to display information aboutn"
  554.        "Neighbor to display information aboutn")
  555. {
  556.   return bgp_show_neighbor_vty (vty, NULL, show_peer, argv[argc - 1]);
  557. }
  558. ALIAS (show_ip_bgp_neighbors_peer,
  559.        show_ip_bgp_ipv4_neighbors_peer_cmd,
  560.        "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X)",
  561.        SHOW_STR
  562.        IP_STR
  563.        BGP_STR
  564.        "Address familyn"
  565.        "Address Family modifiern"
  566.        "Address Family modifiern"
  567.        "Detailed information on TCP and BGP neighbor connectionsn"
  568.        "Neighbor to display information aboutn"
  569.        "Neighbor to display information aboutn");
  570. ALIAS (show_ip_bgp_neighbors_peer,
  571.        show_ip_bgp_vpnv4_all_neighbors_peer_cmd,
  572.        "show ip bgp vpnv4 all neighbors A.B.C.D",
  573.        SHOW_STR
  574.        IP_STR
  575.        BGP_STR
  576.        "Display VPNv4 NLRI specific informationn"
  577.        "Display information about all VPNv4 NLRIsn"
  578.        "Detailed information on TCP and BGP neighbor connectionsn"
  579.        "Neighbor to display information aboutn");
  580. ALIAS (show_ip_bgp_neighbors_peer,
  581.        show_ip_bgp_vpnv4_rd_neighbors_peer_cmd,
  582.        "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D",
  583.        SHOW_STR
  584.        IP_STR
  585.        BGP_STR
  586.        "Display VPNv4 NLRI specific informationn"
  587.        "Display information about all VPNv4 NLRIsn"
  588.        "Detailed information on TCP and BGP neighbor connectionsn"
  589.        "Neighbor to display information aboutn");
  590. ALIAS (show_ip_bgp_neighbors_peer,
  591.        show_bgp_neighbors_peer_cmd,
  592.        "show bgp neighbors (A.B.C.D|X:X::X:X)",
  593.        SHOW_STR
  594.        BGP_STR
  595.        "Detailed information on TCP and BGP neighbor connectionsn"
  596.        "Neighbor to display information aboutn"
  597.        "Neighbor to display information aboutn");
  598. ALIAS (show_ip_bgp_neighbors_peer,
  599.        show_bgp_ipv6_neighbors_peer_cmd,
  600.        "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X)",
  601.        SHOW_STR
  602.        BGP_STR
  603.        "Address familyn"
  604.        "Detailed information on TCP and BGP neighbor connectionsn"
  605.        "Neighbor to display information aboutn"
  606.        "Neighbor to display information aboutn");
  607. DEFUN (show_ip_bgp_instance_neighbors,
  608.        show_ip_bgp_instance_neighbors_cmd,
  609.        "show ip bgp view WORD neighbors",
  610.        SHOW_STR
  611.        IP_STR
  612.        BGP_STR
  613.        "BGP viewn"
  614.        "View namen"
  615.        "Detailed information on TCP and BGP neighbor connectionsn")
  616. {
  617.   return bgp_show_neighbor_vty (vty, argv[0], show_all, NULL);
  618. }
  619. DEFUN (show_ip_bgp_instance_neighbors_peer,
  620.        show_ip_bgp_instance_neighbors_peer_cmd,
  621.        "show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X)",
  622.        SHOW_STR
  623.        IP_STR
  624.        BGP_STR
  625.        "BGP viewn"
  626.        "View namen"
  627.        "Detailed information on TCP and BGP neighbor connectionsn"
  628.        "Neighbor to display information aboutn"
  629.        "Neighbor to display information aboutn")
  630. {
  631.   return bgp_show_neighbor_vty (vty, argv[0], show_peer, argv[1]);
  632. }
  633. /* Show BGP's AS paths internal data.  There are both `show ip bgp
  634.    paths' and `show ip mbgp paths'.  Those functions results are the
  635.    same.*/
  636. DEFUN (show_ip_bgp_paths, 
  637.        show_ip_bgp_paths_cmd,
  638.        "show ip bgp paths",
  639.        SHOW_STR
  640.        IP_STR
  641.        BGP_STR
  642.        "Path informationn")
  643. {
  644.   vty_out (vty, "Address Refcnt Path%s", VTY_NEWLINE);
  645.   aspath_print_all_vty (vty);
  646.   return CMD_SUCCESS;
  647. }
  648. DEFUN (show_ip_bgp_ipv4_paths, 
  649.        show_ip_bgp_ipv4_paths_cmd,
  650.        "show ip bgp ipv4 (unicast|multicast) paths",
  651.        SHOW_STR
  652.        IP_STR
  653.        BGP_STR
  654.        "Address familyn"
  655.        "Address Family modifiern"
  656.        "Address Family modifiern"
  657.        "Path informationn")
  658. {
  659.   vty_out (vty, "Address Refcnt Pathrn");
  660.   aspath_print_all_vty (vty);
  661.   return CMD_SUCCESS;
  662. }
  663. #include "hash.h"
  664. void
  665. community_show_all_iterator (struct hash_backet *backet, struct vty *vty)
  666. {
  667.   struct community *com;
  668.   com = (struct community *) backet->data;
  669.   vty_out (vty, "[%p] (%ld) %s%s", backet, com->refcnt,
  670.    community_str (com), VTY_NEWLINE);
  671. }
  672. /* Show BGP's community internal data. */
  673. DEFUN (show_ip_bgp_community_info, 
  674.        show_ip_bgp_community_info_cmd,
  675.        "show ip bgp community-info",
  676.        SHOW_STR
  677.        IP_STR
  678.        BGP_STR
  679.        "List all bgp community informationn")
  680. {
  681.   vty_out (vty, "Address Refcnt Community%s", VTY_NEWLINE);
  682.   hash_iterate (community_hash (), 
  683. (void (*) (struct hash_backet *, void *))
  684. community_show_all_iterator,
  685. vty);
  686.   return CMD_SUCCESS;
  687. }
  688. DEFUN (show_ip_bgp_attr_info, 
  689.        show_ip_bgp_attr_info_cmd,
  690.        "show ip bgp attribute-info",
  691.        SHOW_STR
  692.        IP_STR
  693.        BGP_STR
  694.        "List all bgp attribute informationn")
  695. {
  696.   attr_show_all (vty);
  697.   return CMD_SUCCESS;
  698. }
  699. /* Redistribute VTY commands.  */
  700. /* Utility function to convert user input route type string to route
  701.    type.  */
  702. static int
  703. bgp_str2route_type (int afi, char *str)
  704. {
  705.   if (! str)
  706.     return 0;
  707.   if (afi == AFI_IP)
  708.     {
  709.       if (strncmp (str, "k", 1) == 0)
  710. return ZEBRA_ROUTE_KERNEL;
  711.       else if (strncmp (str, "c", 1) == 0)
  712. return ZEBRA_ROUTE_CONNECT;
  713.       else if (strncmp (str, "s", 1) == 0)
  714. return ZEBRA_ROUTE_STATIC;
  715.       else if (strncmp (str, "r", 1) == 0)
  716. return ZEBRA_ROUTE_RIP;
  717.       else if (strncmp (str, "o", 1) == 0)
  718. return ZEBRA_ROUTE_OSPF;
  719.     }
  720.   if (afi == AFI_IP6)
  721.     {
  722.       if (strncmp (str, "k", 1) == 0)
  723. return ZEBRA_ROUTE_KERNEL;
  724.       else if (strncmp (str, "c", 1) == 0)
  725. return ZEBRA_ROUTE_CONNECT;
  726.       else if (strncmp (str, "s", 1) == 0)
  727. return ZEBRA_ROUTE_STATIC;
  728.       else if (strncmp (str, "r", 1) == 0)
  729. return ZEBRA_ROUTE_RIPNG;
  730.       else if (strncmp (str, "o", 1) == 0)
  731. return ZEBRA_ROUTE_OSPF6;
  732.     }
  733.   return 0;
  734. }
  735. DEFUN (bgp_redistribute_ipv4,
  736.        bgp_redistribute_ipv4_cmd,
  737.        "redistribute (connected|kernel|ospf|rip|static)",
  738.        "Redistribute information from another routing protocoln"
  739.        "Connectedn"
  740.        "Kernel routesn"
  741.        "Open Shurtest Path First (OSPF)n"
  742.        "Routing Information Protocol (RIP)n"
  743.        "Static routesn")
  744. {
  745.   int type;
  746.   type = bgp_str2route_type (AFI_IP, argv[0]);
  747.   if (! type)
  748.     {
  749.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  750.       return CMD_WARNING;
  751.     }
  752.   return bgp_redistribute_set (vty->index, AFI_IP, type);
  753. }
  754. DEFUN (bgp_redistribute_ipv4_rmap,
  755.        bgp_redistribute_ipv4_rmap_cmd,
  756.        "redistribute (connected|kernel|ospf|rip|static) route-map WORD",
  757.        "Redistribute information from another routing protocoln"
  758.        "Connectedn"
  759.        "Kernel routesn"
  760.        "Open Shurtest Path First (OSPF)n"
  761.        "Routing Information Protocol (RIP)n"
  762.        "Static routesn"
  763.        "Route map referencen"
  764.        "Pointer to route-map entriesn")
  765. {
  766.   int type;
  767.   type = bgp_str2route_type (AFI_IP, argv[0]);
  768.   if (! type)
  769.     {
  770.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  771.       return CMD_WARNING;
  772.     }
  773.   bgp_redistribute_rmap_set (vty->index, AFI_IP, type, argv[1]);
  774.   return bgp_redistribute_set (vty->index, AFI_IP, type);
  775. }
  776. DEFUN (bgp_redistribute_ipv4_metric,
  777.        bgp_redistribute_ipv4_metric_cmd,
  778.        "redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295>",
  779.        "Redistribute information from another routing protocoln"
  780.        "Connectedn"
  781.        "Kernel routesn"
  782.        "Open Shurtest Path First (OSPF)n"
  783.        "Routing Information Protocol (RIP)n"
  784.        "Static routesn"
  785.        "Metric for redistributed routesn"
  786.        "Default metricn")
  787. {
  788.   int type;
  789.   u_int32_t metric;
  790.   type = bgp_str2route_type (AFI_IP, argv[0]);
  791.   if (! type)
  792.     {
  793.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  794.       return CMD_WARNING;
  795.     }
  796.   VTY_GET_INTEGER ("metric", metric, argv[1]);
  797.   bgp_redistribute_metric_set (vty->index, AFI_IP, type, metric);
  798.   return bgp_redistribute_set (vty->index, AFI_IP, type);
  799. }
  800. DEFUN (bgp_redistribute_ipv4_rmap_metric,
  801.        bgp_redistribute_ipv4_rmap_metric_cmd,
  802.        "redistribute (connected|kernel|ospf|rip|static) route-map WORD metric <0-4294967295>",
  803.        "Redistribute information from another routing protocoln"
  804.        "Connectedn"
  805.        "Kernel routesn"
  806.        "Open Shurtest Path First (OSPF)n"
  807.        "Routing Information Protocol (RIP)n"
  808.        "Static routesn"
  809.        "Route map referencen"
  810.        "Pointer to route-map entriesn"
  811.        "Metric for redistributed routesn"
  812.        "Default metricn")
  813. {
  814.   int type;
  815.   u_int32_t metric;
  816.   type = bgp_str2route_type (AFI_IP, argv[0]);
  817.   if (! type)
  818.     {
  819.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  820.       return CMD_WARNING;
  821.     }
  822.   VTY_GET_INTEGER ("metric", metric, argv[2]);
  823.   bgp_redistribute_rmap_set (vty->index, AFI_IP, type, argv[1]);
  824.   bgp_redistribute_metric_set (vty->index, AFI_IP, type, metric);
  825.   return bgp_redistribute_set (vty->index, AFI_IP, type);
  826. }
  827. DEFUN (bgp_redistribute_ipv4_metric_rmap,
  828.        bgp_redistribute_ipv4_metric_rmap_cmd,
  829.        "redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295> route-map WORD",
  830.        "Redistribute information from another routing protocoln"
  831.        "Connectedn"
  832.        "Kernel routesn"
  833.        "Open Shurtest Path First (OSPF)n"
  834.        "Routing Information Protocol (RIP)n"
  835.        "Static routesn"
  836.        "Metric for redistributed routesn"
  837.        "Default metricn"
  838.        "Route map referencen"
  839.        "Pointer to route-map entriesn")
  840. {
  841.   int type;
  842.   u_int32_t metric;
  843.   type = bgp_str2route_type (AFI_IP, argv[0]);
  844.   if (! type)
  845.     {
  846.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  847.       return CMD_WARNING;
  848.     }
  849.   VTY_GET_INTEGER ("metric", metric, argv[1]);
  850.   bgp_redistribute_metric_set (vty->index, AFI_IP, type, metric);
  851.   bgp_redistribute_rmap_set (vty->index, AFI_IP, type, argv[2]);
  852.   return bgp_redistribute_set (vty->index, AFI_IP, type);
  853. }
  854. DEFUN (no_bgp_redistribute_ipv4,
  855.        no_bgp_redistribute_ipv4_cmd,
  856.        "no redistribute (connected|kernel|ospf|rip|static)",
  857.        NO_STR
  858.        "Redistribute information from another routing protocoln"
  859.        "Connectedn"
  860.        "Kernel routesn"
  861.        "Open Shurtest Path First (OSPF)n"
  862.        "Routing Information Protocol (RIP)n"
  863.        "Static routesn")
  864. {
  865.   int type;
  866.   type = bgp_str2route_type (AFI_IP, argv[0]);
  867.   if (! type)
  868.     {
  869.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  870.       return CMD_WARNING;
  871.     }
  872.   return bgp_redistribute_unset (vty->index, AFI_IP, type);
  873. }
  874. DEFUN (no_bgp_redistribute_ipv4_rmap,
  875.        no_bgp_redistribute_ipv4_rmap_cmd,
  876.        "no redistribute (connected|kernel|ospf|rip|static) route-map WORD",
  877.        NO_STR
  878.        "Redistribute information from another routing protocoln"
  879.        "Connectedn"
  880.        "Kernel routesn"
  881.        "Open Shurtest Path First (OSPF)n"
  882.        "Routing Information Protocol (RIP)n"
  883.        "Static routesn"
  884.        "Route map referencen"
  885.        "Pointer to route-map entriesn")
  886. {
  887.   int type;
  888.   type = bgp_str2route_type (AFI_IP, argv[0]);
  889.   if (! type)
  890.     {
  891.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  892.       return CMD_WARNING;
  893.     }
  894.   bgp_redistribute_routemap_unset (vty->index, AFI_IP, type);
  895.   return CMD_SUCCESS;
  896. }
  897. DEFUN (no_bgp_redistribute_ipv4_metric,
  898.        no_bgp_redistribute_ipv4_metric_cmd,
  899.        "no redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295>",
  900.        NO_STR
  901.        "Redistribute information from another routing protocoln"
  902.        "Connectedn"
  903.        "Kernel routesn"
  904.        "Open Shurtest Path First (OSPF)n"
  905.        "Routing Information Protocol (RIP)n"
  906.        "Static routesn"
  907.        "Metric for redistributed routesn"
  908.        "Default metricn")
  909. {
  910.   int type;
  911.   type = bgp_str2route_type (AFI_IP, argv[0]);
  912.   if (! type)
  913.     {
  914.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  915.       return CMD_WARNING;
  916.     }
  917.   bgp_redistribute_metric_unset (vty->index, AFI_IP, type);
  918.   return CMD_SUCCESS;
  919. }
  920. DEFUN (no_bgp_redistribute_ipv4_rmap_metric,
  921.        no_bgp_redistribute_ipv4_rmap_metric_cmd,
  922.        "no redistribute (connected|kernel|ospf|rip|static) route-map WORD metric <0-4294967295>",
  923.        NO_STR
  924.        "Redistribute information from another routing protocoln"
  925.        "Connectedn"
  926.        "Kernel routesn"
  927.        "Open Shurtest Path First (OSPF)n"
  928.        "Routing Information Protocol (RIP)n"
  929.        "Static routesn"
  930.        "Route map referencen"
  931.        "Pointer to route-map entriesn"
  932.        "Metric for redistributed routesn"
  933.        "Default metricn")
  934. {
  935.   int type;
  936.   type = bgp_str2route_type (AFI_IP, argv[0]);
  937.   if (! type)
  938.     {
  939.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  940.       return CMD_WARNING;
  941.     }
  942.   bgp_redistribute_metric_unset (vty->index, AFI_IP, type);
  943.   bgp_redistribute_routemap_unset (vty->index, AFI_IP, type);
  944.   return CMD_SUCCESS;
  945. }
  946. ALIAS (no_bgp_redistribute_ipv4_rmap_metric,
  947.        no_bgp_redistribute_ipv4_metric_rmap_cmd,
  948.        "no redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295> route-map WORD",
  949.        NO_STR
  950.        "Redistribute information from another routing protocoln"
  951.        "Connectedn"
  952.        "Kernel routesn"
  953.        "Open Shurtest Path First (OSPF)n"
  954.        "Routing Information Protocol (RIP)n"
  955.        "Static routesn"
  956.        "Metric for redistributed routesn"
  957.        "Default metricn"
  958.        "Route map referencen"
  959.        "Pointer to route-map entriesn");
  960. #ifdef HAVE_IPV6
  961. DEFUN (bgp_redistribute_ipv6,
  962.        bgp_redistribute_ipv6_cmd,
  963.        "redistribute (connected|kernel|ospf6|ripng|static)",
  964.        "Redistribute information from another routing protocoln"
  965.        "Connectedn"
  966.        "Kernel routesn"
  967.        "Open Shurtest Path First (OSPFv3)n"
  968.        "Routing Information Protocol (RIPng)n"
  969.        "Static routesn")
  970. {
  971.   int type;
  972.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  973.   if (! type)
  974.     {
  975.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  976.       return CMD_WARNING;
  977.     }
  978.   return bgp_redistribute_set (vty->index, AFI_IP6, type);
  979. }
  980. DEFUN (bgp_redistribute_ipv6_rmap,
  981.        bgp_redistribute_ipv6_rmap_cmd,
  982.        "redistribute (connected|kernel|ospf6|ripng|static) route-map WORD",
  983.        "Redistribute information from another routing protocoln"
  984.        "Connectedn"
  985.        "Kernel routesn"
  986.        "Open Shurtest Path First (OSPFv3)n"
  987.        "Routing Information Protocol (RIPng)n"
  988.        "Static routesn"
  989.        "Route map referencen"
  990.        "Pointer to route-map entriesn")
  991. {
  992.   int type;
  993.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  994.   if (! type)
  995.     {
  996.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  997.       return CMD_WARNING;
  998.     }
  999.   bgp_redistribute_rmap_set (vty->index, AFI_IP6, type, argv[1]);
  1000.   return bgp_redistribute_set (vty->index, AFI_IP6, type);
  1001. }
  1002. DEFUN (bgp_redistribute_ipv6_metric,
  1003.        bgp_redistribute_ipv6_metric_cmd,
  1004.        "redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295>",
  1005.        "Redistribute information from another routing protocoln"
  1006.        "Connectedn"
  1007.        "Kernel routesn"
  1008.        "Open Shurtest Path First (OSPFv3)n"
  1009.        "Routing Information Protocol (RIPng)n"
  1010.        "Static routesn"
  1011.        "Metric for redistributed routesn"
  1012.        "Default metricn")
  1013. {
  1014.   int type;
  1015.   u_int32_t metric;
  1016.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  1017.   if (! type)
  1018.     {
  1019.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  1020.       return CMD_WARNING;
  1021.     }
  1022.   VTY_GET_INTEGER ("metric", metric, argv[1]);
  1023.   bgp_redistribute_metric_set (vty->index, AFI_IP6, type, metric);
  1024.   return bgp_redistribute_set (vty->index, AFI_IP6, type);
  1025. }
  1026. DEFUN (bgp_redistribute_ipv6_rmap_metric,
  1027.        bgp_redistribute_ipv6_rmap_metric_cmd,
  1028.        "redistribute (connected|kernel|ospf6|ripng|static) route-map WORD metric <0-4294967295>",
  1029.        "Redistribute information from another routing protocoln"
  1030.        "Connectedn"
  1031.        "Kernel routesn"
  1032.        "Open Shurtest Path First (OSPFv3)n"
  1033.        "Routing Information Protocol (RIPng)n"
  1034.        "Static routesn"
  1035.        "Route map referencen"
  1036.        "Pointer to route-map entriesn"
  1037.        "Metric for redistributed routesn"
  1038.        "Default metricn")
  1039. {
  1040.   int type;
  1041.   u_int32_t metric;
  1042.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  1043.   if (! type)
  1044.     {
  1045.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  1046.       return CMD_WARNING;
  1047.     }
  1048.   VTY_GET_INTEGER ("metric", metric, argv[2]);
  1049.   bgp_redistribute_rmap_set (vty->index, AFI_IP6, type, argv[1]);
  1050.   bgp_redistribute_metric_set (vty->index, AFI_IP6, type, metric);
  1051.   return bgp_redistribute_set (vty->index, AFI_IP6, type);
  1052. }
  1053. DEFUN (bgp_redistribute_ipv6_metric_rmap,
  1054.        bgp_redistribute_ipv6_metric_rmap_cmd,
  1055.        "redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295> route-map WORD",
  1056.        "Redistribute information from another routing protocoln"
  1057.        "Connectedn"
  1058.        "Kernel routesn"
  1059.        "Open Shurtest Path First (OSPFv3)n"
  1060.        "Routing Information Protocol (RIPng)n"
  1061.        "Static routesn"
  1062.        "Metric for redistributed routesn"
  1063.        "Default metricn"
  1064.        "Route map referencen"
  1065.        "Pointer to route-map entriesn")
  1066. {
  1067.   int type;
  1068.   u_int32_t metric;
  1069.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  1070.   if (! type)
  1071.     {
  1072.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  1073.       return CMD_WARNING;
  1074.     }
  1075.   VTY_GET_INTEGER ("metric", metric, argv[1]);
  1076.   bgp_redistribute_metric_set (vty->index, AFI_IP6, type, metric);
  1077.   bgp_redistribute_rmap_set (vty->index, AFI_IP6, type, argv[2]);
  1078.   return bgp_redistribute_set (vty->index, AFI_IP6, type);
  1079. }
  1080. DEFUN (no_bgp_redistribute_ipv6,
  1081.        no_bgp_redistribute_ipv6_cmd,
  1082.        "no redistribute (connected|kernel|ospf6|ripng|static)",
  1083.        NO_STR
  1084.        "Redistribute information from another routing protocoln"
  1085.        "Connectedn"
  1086.        "Kernel routesn"
  1087.        "Open Shurtest Path First (OSPFv3)n"
  1088.        "Routing Information Protocol (RIPng)n"
  1089.        "Static routesn")
  1090. {
  1091.   int type;
  1092.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  1093.   if (! type)
  1094.     {
  1095.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  1096.       return CMD_WARNING;
  1097.     }
  1098.   return bgp_redistribute_unset (vty->index, AFI_IP6, type);
  1099. }
  1100. DEFUN (no_bgp_redistribute_ipv6_rmap,
  1101.        no_bgp_redistribute_ipv6_rmap_cmd,
  1102.        "no redistribute (connected|kernel|ospf6|ripng|static) route-map WORD",
  1103.        NO_STR
  1104.        "Redistribute information from another routing protocoln"
  1105.        "Connectedn"
  1106.        "Kernel routesn"
  1107.        "Open Shurtest Path First (OSPFv3)n"
  1108.        "Routing Information Protocol (RIPng)n"
  1109.        "Static routesn"
  1110.        "Route map referencen"
  1111.        "Pointer to route-map entriesn")
  1112. {
  1113.   int type;
  1114.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  1115.   if (! type)
  1116.     {
  1117.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  1118.       return CMD_WARNING;
  1119.     }
  1120.   bgp_redistribute_routemap_unset (vty->index, AFI_IP6, type);
  1121.   return CMD_SUCCESS;
  1122. }
  1123. DEFUN (no_bgp_redistribute_ipv6_metric,
  1124.        no_bgp_redistribute_ipv6_metric_cmd,
  1125.        "no redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295>",
  1126.        NO_STR
  1127.        "Redistribute information from another routing protocoln"
  1128.        "Connectedn"
  1129.        "Kernel routesn"
  1130.        "Open Shurtest Path First (OSPFv3)n"
  1131.        "Routing Information Protocol (RIPng)n"
  1132.        "Static routesn"
  1133.        "Metric for redistributed routesn"
  1134.        "Default metricn")
  1135. {
  1136.   int type;
  1137.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  1138.   if (! type)
  1139.     {
  1140.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  1141.       return CMD_WARNING;
  1142.     }
  1143.   bgp_redistribute_metric_unset (vty->index, AFI_IP6, type);
  1144.   return CMD_SUCCESS;
  1145. }
  1146. DEFUN (no_bgp_redistribute_ipv6_rmap_metric,
  1147.        no_bgp_redistribute_ipv6_rmap_metric_cmd,
  1148.        "no redistribute (connected|kernel|ospf6|ripng|static) route-map WORD metric <0-4294967295>",
  1149.        NO_STR
  1150.        "Redistribute information from another routing protocoln"
  1151.        "Connectedn"
  1152.        "Kernel routesn"
  1153.        "Open Shurtest Path First (OSPFv3)n"
  1154.        "Routing Information Protocol (RIPng)n"
  1155.        "Static routesn"
  1156.        "Route map referencen"
  1157.        "Pointer to route-map entriesn"
  1158.        "Metric for redistributed routesn"
  1159.        "Default metricn")
  1160. {
  1161.   int type;
  1162.   type = bgp_str2route_type (AFI_IP6, argv[0]);
  1163.   if (! type)
  1164.     {
  1165.       vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
  1166.       return CMD_WARNING;
  1167.     }
  1168.   bgp_redistribute_metric_unset (vty->index, AFI_IP6, type);
  1169.   bgp_redistribute_routemap_unset (vty->index, AFI_IP6, type);
  1170.   return CMD_SUCCESS;
  1171. }
  1172. ALIAS (no_bgp_redistribute_ipv6_rmap_metric,
  1173.        no_bgp_redistribute_ipv6_metric_rmap_cmd,
  1174.        "no redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295> route-map WORD",
  1175.        NO_STR
  1176.        "Redistribute information from another routing protocoln"
  1177.        "Connectedn"
  1178.        "Kernel routesn"
  1179.        "Open Shurtest Path First (OSPFv3)n"
  1180.        "Routing Information Protocol (RIPng)n"
  1181.        "Static routesn"
  1182.        "Metric for redistributed routesn"
  1183.        "Default metricn"
  1184.        "Route map referencen"
  1185.        "Pointer to route-map entriesn");
  1186. #endif /* HAVE_IPV6 */
  1187. /* Show version. */
  1188. DEFUN (show_version_bgpd,
  1189.        show_version_bgpd_cmd,
  1190.        "show version bgpd",
  1191.        SHOW_STR
  1192.        "Displays zebra versionn"
  1193.        "Displays bgpd versionn")
  1194. {
  1195.   vty_out (vty, "Zebra BGPd version %s%s", ZEBRA_BGPD_VERSION, VTY_NEWLINE);
  1196.   vty_out (vty, "Copyright 1996-2004, Kunihiro Ishiguro.%s", VTY_NEWLINE);
  1197.   vty_out (vty, "%s", VTY_NEWLINE);
  1198.   return CMD_SUCCESS;
  1199. }
  1200. int
  1201. bgp_config_write_redistribute (struct vty *vty, struct bgp *bgp, afi_t afi,
  1202.        safi_t safi, int *write)
  1203. {
  1204.   int i;
  1205.   char *str[] = { "system", "kernel", "connected", "static", "rip",
  1206.   "ripng", "ospf", "ospf6", "bgp"};
  1207.   /* Unicast redistribution only.  */
  1208.   if (safi != SAFI_UNICAST)
  1209.     return 0;
  1210.   for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
  1211.     {
  1212.       /* Redistribute BGP does not make sense.  */
  1213.       if (bgp->redist[afi][i] && i != ZEBRA_ROUTE_BGP)
  1214. {
  1215.   /* Display "address-family" when it is not yet diplayed.  */
  1216.   bgp_config_write_family_header (vty, afi, safi, write);
  1217.   /* "redistribute" configuration.  */
  1218.   vty_out (vty, " redistribute %s", str[i]);
  1219.   if (bgp->redist_metric_flag[afi][i])
  1220.     vty_out (vty, " metric %d", bgp->redist_metric[afi][i]);
  1221.   if (bgp->rmap[afi][i].name)
  1222.     vty_out (vty, " route-map %s", bgp->rmap[afi][i].name);
  1223.   vty_out (vty, "%s", VTY_NEWLINE);
  1224. }
  1225.     }
  1226.   return *write;
  1227. }
  1228. /* BGP node structure. */
  1229. struct cmd_node bgp_node =
  1230.   {
  1231.     BGP_NODE,
  1232.     "%s(config-router)# ",
  1233.     1,
  1234.   };
  1235. struct cmd_node bgp_ipv4_unicast_node =
  1236.   {
  1237.     BGP_IPV4_NODE,
  1238.     "%s(config-router-af)# ",
  1239.     1,
  1240.   };
  1241. struct cmd_node bgp_ipv4_multicast_node =
  1242.   {
  1243.     BGP_IPV4M_NODE,
  1244.     "%s(config-router-af)# ",
  1245.     1,
  1246.   };
  1247. struct cmd_node bgp_ipv6_unicast_node = 
  1248.   {
  1249.     BGP_IPV6_NODE,
  1250.     "%s(config-router-af)# ",
  1251.     1,
  1252.   };
  1253. struct cmd_node bgp_vpnv4_node =
  1254.   {
  1255.     BGP_VPNV4_NODE,
  1256.     "%s(config-router-af)# ",
  1257.     1
  1258.   };
  1259. void
  1260. bgp_vty_init ()
  1261. {
  1262.   int bgp_config_write (struct vty *);
  1263.   void community_list_vty ();
  1264.   /* Install bgp top node. */
  1265.   install_node (&bgp_node, bgp_config_write);
  1266.   install_node (&bgp_ipv4_unicast_node, NULL);
  1267.   install_node (&bgp_ipv4_multicast_node, NULL);
  1268.   install_node (&bgp_ipv6_unicast_node, NULL);
  1269.   install_node (&bgp_vpnv4_node, NULL);
  1270.   /* Install default VTY commands to new nodes.  */
  1271.   install_default (BGP_NODE);
  1272.   install_default (BGP_IPV4_NODE);
  1273.   install_default (BGP_IPV4M_NODE);
  1274.   install_default (BGP_IPV6_NODE);
  1275.   install_default (BGP_VPNV4_NODE);
  1276.   
  1277.   /* "bgp multiple-instance" commands. */
  1278.   install_element (CONFIG_NODE, &bgp_multiple_instance_cmd);
  1279.   install_element (CONFIG_NODE, &no_bgp_multiple_instance_cmd);
  1280.   /* "bgp config-type" commands. */
  1281.   install_element (CONFIG_NODE, &bgp_config_type_cmd);
  1282.   install_element (CONFIG_NODE, &no_bgp_config_type_cmd);
  1283.   /* Dummy commands (Currently not supported) */
  1284.   install_element (BGP_NODE, &no_synchronization_cmd);
  1285.   install_element (BGP_IPV4_NODE, &no_synchronization_cmd);
  1286.   install_element (BGP_IPV6_NODE, &no_synchronization_cmd);
  1287.   install_element (BGP_NODE, &no_auto_summary_cmd);
  1288.   install_element (BGP_IPV4_NODE, &no_auto_summary_cmd);
  1289.   install_element (BGP_IPV4M_NODE, &no_auto_summary_cmd);
  1290.   /* "router bgp" commands. */
  1291.   install_element (CONFIG_NODE, &router_bgp_cmd);
  1292.   install_element (CONFIG_NODE, &router_bgp_view_cmd);
  1293.   /* "no router bgp" commands. */
  1294.   install_element (CONFIG_NODE, &no_router_bgp_cmd);
  1295.   install_element (CONFIG_NODE, &no_router_bgp_view_cmd);
  1296.   /* "bgp router-id" commands. */
  1297.   install_element (BGP_NODE, &bgp_router_id_cmd);
  1298.   install_element (BGP_NODE, &no_bgp_router_id_cmd);
  1299.   install_element (BGP_NODE, &no_bgp_router_id_val_cmd);
  1300.   /* "bgp cluster-id" commands. */
  1301.   install_element (BGP_NODE, &bgp_cluster_id_cmd);
  1302.   install_element (BGP_NODE, &bgp_cluster_id32_cmd);
  1303.   install_element (BGP_NODE, &no_bgp_cluster_id_cmd);
  1304.   install_element (BGP_NODE, &no_bgp_cluster_id_arg_cmd);
  1305.   /* "bgp confederation" commands. */
  1306.   install_element (BGP_NODE, &bgp_confederation_identifier_cmd);
  1307.   install_element (BGP_NODE, &no_bgp_confederation_identifier_cmd);
  1308.   install_element (BGP_NODE, &no_bgp_confederation_identifier_arg_cmd);
  1309.   /* "bgp confederation peers" commands. */
  1310.   install_element (BGP_NODE, &bgp_confederation_peers_cmd);
  1311.   install_element (BGP_NODE, &no_bgp_confederation_peers_cmd);
  1312.   /* "timers bgp" commands. */
  1313.   install_element (BGP_NODE, &bgp_timers_cmd);
  1314.   install_element (BGP_NODE, &no_bgp_timers_cmd);
  1315.   install_element (BGP_NODE, &no_bgp_timers_arg_cmd);
  1316.   /* "bgp client-to-client reflection" commands */
  1317.   install_element (BGP_NODE, &no_bgp_client_to_client_reflection_cmd);
  1318.   install_element (BGP_NODE, &bgp_client_to_client_reflection_cmd);
  1319.   /* "bgp always-compare-med" commands */
  1320.   install_element (BGP_NODE, &bgp_always_compare_med_cmd);
  1321.   install_element (BGP_NODE, &no_bgp_always_compare_med_cmd);
  1322.   
  1323.   /* "bgp deterministic-med" commands */
  1324.   install_element (BGP_NODE, &bgp_deterministic_med_cmd);
  1325.   install_element (BGP_NODE, &no_bgp_deterministic_med_cmd);
  1326.  
  1327.   /* "bgp graceful-restart" commands */
  1328.   install_element (BGP_NODE, &bgp_graceful_restart_cmd);
  1329.   install_element (BGP_NODE, &no_bgp_graceful_restart_cmd);
  1330.   install_element (BGP_NODE, &bgp_graceful_restart_stalepath_time_cmd);
  1331.   install_element (BGP_NODE, &no_bgp_graceful_restart_stalepath_time_cmd);
  1332.   install_element (BGP_NODE, &no_bgp_graceful_restart_stalepath_time_val_cmd);
  1333.   /* "bgp fast-external-failover" commands */
  1334.   install_element (BGP_NODE, &bgp_fast_external_failover_cmd);
  1335.   install_element (BGP_NODE, &no_bgp_fast_external_failover_cmd);
  1336.   /* "bgp enforce-first-as" commands */
  1337.   install_element (BGP_NODE, &bgp_enforce_first_as_cmd);
  1338.   install_element (BGP_NODE, &no_bgp_enforce_first_as_cmd);
  1339.   /* "bgp bestpath compare-routerid" commands */
  1340.   install_element (BGP_NODE, &bgp_bestpath_compare_router_id_cmd);
  1341.   install_element (BGP_NODE, &no_bgp_bestpath_compare_router_id_cmd);
  1342.   /* "bgp bestpath cost-community ignore" commands */
  1343.   install_element (BGP_NODE, &bgp_bestpath_cost_community_ignore_cmd);
  1344.   install_element (BGP_NODE, &no_bgp_bestpath_cost_community_ignore_cmd);
  1345.   /* "bgp bestpath as-path ignore" commands */
  1346.   install_element (BGP_NODE, &bgp_bestpath_aspath_ignore_cmd);
  1347.   install_element (BGP_NODE, &no_bgp_bestpath_aspath_ignore_cmd);
  1348.   /* "bgp log-neighbor-changes" commands */
  1349.   install_element (BGP_NODE, &bgp_log_neighbor_changes_cmd);
  1350.   install_element (BGP_NODE, &no_bgp_log_neighbor_changes_cmd);
  1351.   /* "bgp bestpath med" commands */
  1352.   install_element (BGP_NODE, &bgp_bestpath_med_cmd);
  1353.   install_element (BGP_NODE, &bgp_bestpath_med2_cmd);
  1354.   install_element (BGP_NODE, &bgp_bestpath_med3_cmd);
  1355.   install_element (BGP_NODE, &no_bgp_bestpath_med_cmd);
  1356.   install_element (BGP_NODE, &no_bgp_bestpath_med2_cmd);
  1357.   install_element (BGP_NODE, &no_bgp_bestpath_med3_cmd);
  1358.   /* "no bgp default ipv4-unicast" commands. */
  1359.   install_element (BGP_NODE, &no_bgp_default_ipv4_unicast_cmd);
  1360.   install_element (BGP_NODE, &bgp_default_ipv4_unicast_cmd);
  1361.   
  1362.   /* "bgp network import-check" commands. */
  1363.   install_element (BGP_NODE, &bgp_network_import_check_cmd);
  1364.   install_element (BGP_NODE, &no_bgp_network_import_check_cmd);
  1365.   /* "bgp default local-preference" commands. */
  1366.   install_element (BGP_NODE, &bgp_default_local_preference_cmd);
  1367.   install_element (BGP_NODE, &no_bgp_default_local_preference_cmd);
  1368.   install_element (BGP_NODE, &no_bgp_default_local_preference_val_cmd);
  1369.   /* "neighbor remote-as" commands. */
  1370.   install_element (BGP_NODE, &neighbor_remote_as_cmd);
  1371.   install_element (BGP_NODE, &no_neighbor_cmd);
  1372.   install_element (BGP_NODE, &no_neighbor_remote_as_cmd);
  1373.   /* "neighbor peer-group" commands. */
  1374.   install_element (BGP_NODE, &neighbor_peer_group_cmd);
  1375.   install_element (BGP_NODE, &no_neighbor_peer_group_cmd);
  1376.   install_element (BGP_NODE, &no_neighbor_peer_group_remote_as_cmd);
  1377.   /* "neighbor local-as" commands. */
  1378.   install_element (BGP_NODE, &neighbor_local_as_cmd);
  1379.   install_element (BGP_NODE, &neighbor_local_as_no_prepend_cmd);
  1380.   install_element (BGP_NODE, &no_neighbor_local_as_cmd);
  1381.   install_element (BGP_NODE, &no_neighbor_local_as_val_cmd);
  1382.   install_element (BGP_NODE, &no_neighbor_local_as_val2_cmd);
  1383. #ifdef HAVE_TCP_SIGNATURE
  1384.   /* "neighbor password" commands. */
  1385.   install_element (BGP_NODE, &neighbor_password_cmd);
  1386.   install_element (BGP_NODE, &no_neighbor_password_cmd);
  1387. #endif /* HAVE_TCP_SIGNATURE */
  1388.   /* "neighbor activate" commands. */
  1389.   install_element (BGP_NODE, &neighbor_activate_cmd);
  1390.   install_element (BGP_IPV4_NODE, &neighbor_activate_cmd);
  1391.   install_element (BGP_IPV4M_NODE, &neighbor_activate_cmd);
  1392.   install_element (BGP_IPV6_NODE, &neighbor_activate_cmd);
  1393.   install_element (BGP_VPNV4_NODE, &neighbor_activate_cmd);
  1394.   /* "no neighbor activate" commands. */
  1395.   install_element (BGP_NODE, &no_neighbor_activate_cmd);
  1396.   install_element (BGP_IPV4_NODE, &no_neighbor_activate_cmd);
  1397.   install_element (BGP_IPV4M_NODE, &no_neighbor_activate_cmd);
  1398.   install_element (BGP_IPV6_NODE, &no_neighbor_activate_cmd);
  1399.   install_element (BGP_VPNV4_NODE, &no_neighbor_activate_cmd);
  1400.   /* "neighbor peer-group set" commands. */
  1401.   install_element (BGP_NODE, &neighbor_set_peer_group_cmd);
  1402.   install_element (BGP_IPV4_NODE, &neighbor_set_peer_group_cmd);
  1403.   install_element (BGP_IPV4M_NODE, &neighbor_set_peer_group_cmd);
  1404.   install_element (BGP_IPV6_NODE, &neighbor_set_peer_group_cmd);
  1405.   /* "no neighbor peer-group unset" commands. */
  1406.   install_element (BGP_NODE, &no_neighbor_set_peer_group_cmd);
  1407.   install_element (BGP_IPV4_NODE, &no_neighbor_set_peer_group_cmd);
  1408.   install_element (BGP_IPV4M_NODE, &no_neighbor_set_peer_group_cmd);
  1409.   install_element (BGP_IPV6_NODE, &no_neighbor_set_peer_group_cmd);
  1410.   /* "neighbor softreconfiguration inbound" commands.*/
  1411.   install_element (BGP_NODE, &neighbor_soft_reconfiguration_cmd);
  1412.   install_element (BGP_NODE, &no_neighbor_soft_reconfiguration_cmd);
  1413.   install_element (BGP_IPV4_NODE, &neighbor_soft_reconfiguration_cmd);
  1414.   install_element (BGP_IPV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
  1415.   install_element (BGP_IPV4M_NODE, &neighbor_soft_reconfiguration_cmd);
  1416.   install_element (BGP_IPV4M_NODE, &no_neighbor_soft_reconfiguration_cmd);
  1417.   install_element (BGP_IPV6_NODE, &neighbor_soft_reconfiguration_cmd);
  1418.   install_element (BGP_IPV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
  1419.   /* "neighbor attribute-unchanged" commands.  */
  1420.   install_element (BGP_NODE, &neighbor_attr_unchanged_cmd);
  1421.   install_element (BGP_NODE, &neighbor_attr_unchanged1_cmd);
  1422.   install_element (BGP_NODE, &neighbor_attr_unchanged2_cmd);
  1423.   install_element (BGP_NODE, &neighbor_attr_unchanged3_cmd);
  1424.   install_element (BGP_NODE, &neighbor_attr_unchanged4_cmd);
  1425.   install_element (BGP_NODE, &neighbor_attr_unchanged5_cmd);
  1426.   install_element (BGP_NODE, &neighbor_attr_unchanged6_cmd);
  1427.   install_element (BGP_NODE, &neighbor_attr_unchanged7_cmd);
  1428.   install_element (BGP_NODE, &neighbor_attr_unchanged8_cmd);
  1429.   install_element (BGP_NODE, &neighbor_attr_unchanged9_cmd);
  1430.   install_element (BGP_NODE, &neighbor_attr_unchanged10_cmd);
  1431.   install_element (BGP_NODE, &no_neighbor_attr_unchanged_cmd);
  1432.   install_element (BGP_NODE, &no_neighbor_attr_unchanged1_cmd);
  1433.   install_element (BGP_NODE, &no_neighbor_attr_unchanged2_cmd);
  1434.   install_element (BGP_NODE, &no_neighbor_attr_unchanged3_cmd);
  1435.   install_element (BGP_NODE, &no_neighbor_attr_unchanged4_cmd);
  1436.   install_element (BGP_NODE, &no_neighbor_attr_unchanged5_cmd);
  1437.   install_element (BGP_NODE, &no_neighbor_attr_unchanged6_cmd);
  1438.   install_element (BGP_NODE, &no_neighbor_attr_unchanged7_cmd);
  1439.   install_element (BGP_NODE, &no_neighbor_attr_unchanged8_cmd);
  1440.   install_element (BGP_NODE, &no_neighbor_attr_unchanged9_cmd);
  1441.   install_element (BGP_NODE, &no_neighbor_attr_unchanged10_cmd);
  1442.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged_cmd);
  1443.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged1_cmd);
  1444.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged2_cmd);
  1445.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged3_cmd);
  1446.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged4_cmd);
  1447.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged5_cmd);
  1448.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged6_cmd);
  1449.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged7_cmd);
  1450.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged8_cmd);
  1451.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged9_cmd);
  1452.   install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged10_cmd);
  1453.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged_cmd);
  1454.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged1_cmd);
  1455.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged2_cmd);
  1456.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged3_cmd);
  1457.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged4_cmd);
  1458.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged5_cmd);
  1459.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged6_cmd);
  1460.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged7_cmd);
  1461.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged8_cmd);
  1462.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged9_cmd);
  1463.   install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged10_cmd);
  1464.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged_cmd);
  1465.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged1_cmd);
  1466.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged2_cmd);
  1467.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged3_cmd);
  1468.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged4_cmd);
  1469.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged5_cmd);
  1470.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged6_cmd);
  1471.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged7_cmd);
  1472.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged8_cmd);
  1473.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged9_cmd);
  1474.   install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged10_cmd);
  1475.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged_cmd);
  1476.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged1_cmd);
  1477.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged2_cmd);
  1478.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged3_cmd);
  1479.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged4_cmd);
  1480.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged5_cmd);
  1481.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged6_cmd);
  1482.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged7_cmd);
  1483.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged8_cmd);
  1484.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged9_cmd);
  1485.   install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged10_cmd);
  1486.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged_cmd);
  1487.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged1_cmd);
  1488.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged2_cmd);
  1489.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged3_cmd);
  1490.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged4_cmd);
  1491.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged5_cmd);
  1492.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged6_cmd);
  1493.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged7_cmd);
  1494.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged8_cmd);
  1495.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged9_cmd);
  1496.   install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged10_cmd);
  1497.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged_cmd);
  1498.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged1_cmd);
  1499.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged2_cmd);
  1500.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged3_cmd);
  1501.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged4_cmd);
  1502.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged5_cmd);
  1503.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged6_cmd);
  1504.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged7_cmd);
  1505.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged8_cmd);
  1506.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged9_cmd);
  1507.   install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged10_cmd);
  1508.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged_cmd);
  1509.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged1_cmd);
  1510.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged2_cmd);
  1511.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged3_cmd);
  1512.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged4_cmd);
  1513.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged5_cmd);
  1514.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged6_cmd);
  1515.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged7_cmd);
  1516.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged8_cmd);
  1517.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged9_cmd);
  1518.   install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged10_cmd);
  1519.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged_cmd);
  1520.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged1_cmd);
  1521.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged2_cmd);
  1522.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged3_cmd);
  1523.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged4_cmd);
  1524.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged5_cmd);
  1525.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged6_cmd);
  1526.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged7_cmd);
  1527.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged8_cmd);
  1528.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged9_cmd);
  1529.   install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged10_cmd);
  1530.   /* "neighbor next-hop-self" commands. */
  1531.   install_element (BGP_NODE, &neighbor_nexthop_self_cmd);
  1532.   install_element (BGP_NODE, &no_neighbor_nexthop_self_cmd);
  1533.   install_element (BGP_IPV4_NODE, &neighbor_nexthop_self_cmd);
  1534.   install_element (BGP_IPV4_NODE, &no_neighbor_nexthop_self_cmd);
  1535.   install_element (BGP_IPV4M_NODE, &neighbor_nexthop_self_cmd);
  1536.   install_element (BGP_IPV4M_NODE, &no_neighbor_nexthop_self_cmd);
  1537.   install_element (BGP_IPV6_NODE, &neighbor_nexthop_self_cmd);
  1538.   install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_self_cmd);
  1539.   install_element (BGP_VPNV4_NODE, &neighbor_nexthop_self_cmd);
  1540.   install_element (BGP_VPNV4_NODE, &no_neighbor_nexthop_self_cmd);
  1541.   /* "neighbor remove-private-AS" commands. */
  1542.   install_element (BGP_NODE, &neighbor_remove_private_as_cmd);
  1543.   install_element (BGP_NODE, &no_neighbor_remove_private_as_cmd);
  1544.   install_element (BGP_IPV4_NODE, &neighbor_remove_private_as_cmd);
  1545.   install_element (BGP_IPV4_NODE, &no_neighbor_remove_private_as_cmd);
  1546.   install_element (BGP_IPV4M_NODE, &neighbor_remove_private_as_cmd);
  1547.   install_element (BGP_IPV4M_NODE, &no_neighbor_remove_private_as_cmd);
  1548.   install_element (BGP_IPV6_NODE, &neighbor_remove_private_as_cmd);
  1549.   install_element (BGP_IPV6_NODE, &no_neighbor_remove_private_as_cmd);
  1550.   install_element (BGP_VPNV4_NODE, &neighbor_remove_private_as_cmd);
  1551.   install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_cmd);
  1552.   /* "neighbor send-community" commands.*/
  1553.   install_element (BGP_NODE, &neighbor_send_community_cmd);
  1554.   install_element (BGP_NODE, &neighbor_send_community_type_cmd);
  1555.   install_element (BGP_NODE, &no_neighbor_send_community_cmd);
  1556.   install_element (BGP_NODE, &no_neighbor_send_community_type_cmd);
  1557.   install_element (BGP_IPV4_NODE, &neighbor_send_community_cmd);
  1558.   install_element (BGP_IPV4_NODE, &neighbor_send_community_type_cmd);
  1559.   install_element (BGP_IPV4_NODE, &no_neighbor_send_community_cmd);
  1560.   install_element (BGP_IPV4_NODE, &no_neighbor_send_community_type_cmd);
  1561.   install_element (BGP_IPV4M_NODE, &neighbor_send_community_cmd);
  1562.   install_element (BGP_IPV4M_NODE, &neighbor_send_community_type_cmd);
  1563.   install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_cmd);
  1564.   install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_type_cmd);
  1565.   install_element (BGP_IPV6_NODE, &neighbor_send_community_cmd);
  1566.   install_element (BGP_IPV6_NODE, &neighbor_send_community_type_cmd);
  1567.   install_element (BGP_IPV6_NODE, &no_neighbor_send_community_cmd);
  1568.   install_element (BGP_IPV6_NODE, &no_neighbor_send_community_type_cmd);
  1569.   install_element (BGP_VPNV4_NODE, &neighbor_send_community_cmd);
  1570.   install_element (BGP_VPNV4_NODE, &neighbor_send_community_type_cmd);
  1571.   install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_cmd);
  1572.   install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_type_cmd);
  1573.   /* "neighbor route-reflector" commands.*/
  1574.   install_element (BGP_NODE, &neighbor_route_reflector_client_cmd);
  1575.   install_element (BGP_NODE, &no_neighbor_route_reflector_client_cmd);
  1576.   install_element (BGP_IPV4_NODE, &neighbor_route_reflector_client_cmd);
  1577.   install_element (BGP_IPV4_NODE, &no_neighbor_route_reflector_client_cmd);
  1578.   install_element (BGP_IPV4M_NODE, &neighbor_route_reflector_client_cmd);
  1579.   install_element (BGP_IPV4M_NODE, &no_neighbor_route_reflector_client_cmd);
  1580.   install_element (BGP_IPV6_NODE, &neighbor_route_reflector_client_cmd);
  1581.   install_element (BGP_IPV6_NODE, &no_neighbor_route_reflector_client_cmd);
  1582.   install_element (BGP_VPNV4_NODE, &neighbor_route_reflector_client_cmd);
  1583.   install_element (BGP_VPNV4_NODE, &no_neighbor_route_reflector_client_cmd);
  1584.   /* "neighbor route-server" commands.*/
  1585.   install_element (BGP_NODE, &neighbor_route_server_client_cmd);
  1586.   install_element (BGP_NODE, &no_neighbor_route_server_client_cmd);
  1587.   install_element (BGP_IPV4_NODE, &neighbor_route_server_client_cmd);
  1588.   install_element (BGP_IPV4_NODE, &no_neighbor_route_server_client_cmd);
  1589.   install_element (BGP_IPV4M_NODE, &neighbor_route_server_client_cmd);
  1590.   install_element (BGP_IPV4M_NODE, &no_neighbor_route_server_client_cmd);
  1591.   install_element (BGP_IPV6_NODE, &neighbor_route_server_client_cmd);
  1592.   install_element (BGP_IPV6_NODE, &no_neighbor_route_server_client_cmd);
  1593.   install_element (BGP_VPNV4_NODE, &neighbor_route_server_client_cmd);
  1594.   install_element (BGP_VPNV4_NODE, &no_neighbor_route_server_client_cmd);
  1595.   /* "neighbor transport connection-mode" commands. */
  1596.   install_element (BGP_NODE, &neighbor_transport_connection_mode_cmd);
  1597.   install_element (BGP_NODE, &no_neighbor_transport_connection_mode_cmd);
  1598.   install_element (BGP_NODE, &no_neighbor_transport_connection_mode_val_cmd);
  1599.   install_element (BGP_NODE, &neighbor_passive_cmd);
  1600.   /* "neighbor shutdown" commands. */
  1601.   install_element (BGP_NODE, &neighbor_shutdown_cmd);
  1602.   install_element (BGP_NODE, &no_neighbor_shutdown_cmd);
  1603.   /* "neighbor capability orf prefix-list" commands.*/
  1604.   install_element (BGP_NODE, &neighbor_capability_orf_prefix_cmd);
  1605.   install_element (BGP_NODE, &no_neighbor_capability_orf_prefix_cmd);
  1606.   install_element (BGP_IPV4_NODE, &neighbor_capability_orf_prefix_cmd);
  1607.   install_element (BGP_IPV4_NODE, &no_neighbor_capability_orf_prefix_cmd);
  1608.   install_element (BGP_IPV4M_NODE, &neighbor_capability_orf_prefix_cmd);
  1609.   install_element (BGP_IPV4M_NODE, &no_neighbor_capability_orf_prefix_cmd);
  1610.   install_element (BGP_IPV6_NODE, &neighbor_capability_orf_prefix_cmd);
  1611.   install_element (BGP_IPV6_NODE, &no_neighbor_capability_orf_prefix_cmd);
  1612.   /* "neighbor capability dynamic" commands.*/
  1613.   install_element (BGP_NODE, &neighbor_capability_dynamic_cmd);
  1614.   install_element (BGP_NODE, &no_neighbor_capability_dynamic_cmd);
  1615.   /* "neighbor dont-capability-negotiate" commands. */
  1616.   install_element (BGP_NODE, &neighbor_dont_capability_negotiate_cmd);
  1617.   install_element (BGP_NODE, &no_neighbor_dont_capability_negotiate_cmd);
  1618.   /* "neighbor ebgp-multihop" commands. */
  1619.   install_element (BGP_NODE, &neighbor_ebgp_multihop_cmd);
  1620.   install_element (BGP_NODE, &neighbor_ebgp_multihop_ttl_cmd);
  1621.   install_element (BGP_NODE, &no_neighbor_ebgp_multihop_cmd);
  1622.   install_element (BGP_NODE, &no_neighbor_ebgp_multihop_ttl_cmd);
  1623.   /* "neighbor disable-connected-check" commands.  */
  1624.   install_element (BGP_NODE, &neighbor_disable_connected_check_cmd);
  1625.   install_element (BGP_NODE, &no_neighbor_disable_connected_check_cmd);
  1626.   install_element (BGP_NODE, &neighbor_enforce_multihop_cmd);
  1627.   /* "neighbor description" commands. */
  1628.   install_element (BGP_NODE, &neighbor_description_cmd);
  1629.   install_element (BGP_NODE, &no_neighbor_description_cmd);
  1630.   install_element (BGP_NODE, &no_neighbor_description_val_cmd);
  1631.   /* "neighbor update-source" commands. "*/
  1632.   install_element (BGP_NODE, &neighbor_update_source_cmd);
  1633.   install_element (BGP_NODE, &no_neighbor_update_source_cmd);
  1634.   /* "neighbor default-originate" commands. */
  1635.   install_element (BGP_NODE, &neighbor_default_originate_cmd);
  1636.   install_element (BGP_NODE, &neighbor_default_originate_rmap_cmd);
  1637.   install_element (BGP_NODE, &no_neighbor_default_originate_cmd);
  1638.   install_element (BGP_NODE, &no_neighbor_default_originate_rmap_cmd);
  1639.   install_element (BGP_IPV4_NODE, &neighbor_default_originate_cmd);
  1640.   install_element (BGP_IPV4_NODE, &neighbor_default_originate_rmap_cmd);
  1641.   install_element (BGP_IPV4_NODE, &no_neighbor_default_originate_cmd);
  1642.   install_element (BGP_IPV4_NODE, &no_neighbor_default_originate_rmap_cmd);
  1643.   install_element (BGP_IPV4M_NODE, &neighbor_default_originate_cmd);
  1644.   install_element (BGP_IPV4M_NODE, &neighbor_default_originate_rmap_cmd);
  1645.   install_element (BGP_IPV4M_NODE, &no_neighbor_default_originate_cmd);
  1646.   install_element (BGP_IPV4M_NODE, &no_neighbor_default_originate_rmap_cmd);
  1647.   install_element (BGP_IPV6_NODE, &neighbor_default_originate_cmd);
  1648.   install_element (BGP_IPV6_NODE, &neighbor_default_originate_rmap_cmd);
  1649.   install_element (BGP_IPV6_NODE, &no_neighbor_default_originate_cmd);
  1650.   install_element (BGP_IPV6_NODE, &no_neighbor_default_originate_rmap_cmd);
  1651.   /* "neighbor port" commands. */
  1652.   install_element (BGP_NODE, &neighbor_port_cmd);
  1653.   install_element (BGP_NODE, &no_neighbor_port_cmd);
  1654.   install_element (BGP_NODE, &no_neighbor_port_val_cmd);
  1655.   /* "neighbor weight" commands. */
  1656.   install_element (BGP_NODE, &neighbor_weight_cmd);
  1657.   install_element (BGP_IPV4_NODE, &neighbor_weight_cmd);
  1658.   install_element (BGP_IPV4M_NODE, &neighbor_weight_cmd);
  1659.   install_element (BGP_IPV6_NODE, &neighbor_weight_cmd);
  1660.   install_element (BGP_NODE, &no_neighbor_weight_cmd);
  1661.   install_element (BGP_IPV4_NODE, &no_neighbor_weight_cmd);
  1662.   install_element (BGP_IPV4M_NODE, &no_neighbor_weight_cmd);
  1663.   install_element (BGP_IPV6_NODE, &no_neighbor_weight_cmd);
  1664.   install_element (BGP_NODE, &no_neighbor_weight_val_cmd);
  1665.   install_element (BGP_IPV4_NODE, &no_neighbor_weight_val_cmd);
  1666.   install_element (BGP_IPV4M_NODE, &no_neighbor_weight_val_cmd);
  1667.   install_element (BGP_IPV6_NODE, &no_neighbor_weight_val_cmd);
  1668.   /* "neighbor override-capability" commands. */
  1669.   install_element (BGP_NODE, &neighbor_override_capability_cmd);
  1670.   install_element (BGP_NODE, &no_neighbor_override_capability_cmd);
  1671.   /* "neighbor strict-capability-match" commands. */
  1672.   install_element (BGP_NODE, &neighbor_strict_capability_cmd);
  1673.   install_element (BGP_NODE, &no_neighbor_strict_capability_cmd);
  1674.   /* "neighbor timers" commands. */
  1675.   install_element (BGP_NODE, &neighbor_timers_cmd);
  1676.   install_element (BGP_NODE, &no_neighbor_timers_cmd);
  1677.   /* "neighbor advertisement-interval" commands. */
  1678.   install_element (BGP_NODE, &neighbor_advertise_interval_cmd);
  1679.   install_element (BGP_NODE, &no_neighbor_advertise_interval_cmd);
  1680.   install_element (BGP_NODE, &no_neighbor_advertise_interval_val_cmd);
  1681.   /* "neighbor version" commands. */
  1682.   install_element (BGP_NODE, &neighbor_version_cmd);
  1683.   /* "neighbor interface" commands. */
  1684.   install_element (BGP_NODE, &neighbor_interface_cmd);
  1685.   install_element (BGP_NODE, &no_neighbor_interface_cmd);
  1686.   /* "neighbor distribute" commands. */
  1687.   install_element (BGP_NODE, &neighbor_distribute_list_cmd);
  1688.   install_element (BGP_NODE, &no_neighbor_distribute_list_cmd);
  1689.   install_element (BGP_IPV4_NODE, &neighbor_distribute_list_cmd);
  1690.   install_element (BGP_IPV4_NODE, &no_neighbor_distribute_list_cmd);
  1691.   install_element (BGP_IPV4M_NODE, &neighbor_distribute_list_cmd);
  1692.   install_element (BGP_IPV4M_NODE, &no_neighbor_distribute_list_cmd);
  1693.   install_element (BGP_IPV6_NODE, &neighbor_distribute_list_cmd);
  1694.   install_element (BGP_IPV6_NODE, &no_neighbor_distribute_list_cmd);
  1695.   install_element (BGP_VPNV4_NODE, &neighbor_distribute_list_cmd);
  1696.   install_element (BGP_VPNV4_NODE, &no_neighbor_distribute_list_cmd);
  1697.   /* "neighbor prefix-list" commands. */
  1698.   install_element (BGP_NODE, &neighbor_prefix_list_cmd);
  1699.   install_element (BGP_NODE, &no_neighbor_prefix_list_cmd);
  1700.   install_element (BGP_IPV4_NODE, &neighbor_prefix_list_cmd);
  1701.   install_element (BGP_IPV4_NODE, &no_neighbor_prefix_list_cmd);
  1702.   install_element (BGP_IPV4M_NODE, &neighbor_prefix_list_cmd);
  1703.   install_element (BGP_IPV4M_NODE, &no_neighbor_prefix_list_cmd);
  1704.   install_element (BGP_IPV6_NODE, &neighbor_prefix_list_cmd);
  1705.   install_element (BGP_IPV6_NODE, &no_neighbor_prefix_list_cmd);
  1706.   install_element (BGP_VPNV4_NODE, &neighbor_prefix_list_cmd);
  1707.   install_element (BGP_VPNV4_NODE, &no_neighbor_prefix_list_cmd);
  1708.   /* "neighbor filter-list" commands. */
  1709.   install_element (BGP_NODE, &neighbor_filter_list_cmd);
  1710.   install_element (BGP_NODE, &no_neighbor_filter_list_cmd);
  1711.   install_element (BGP_IPV4_NODE, &neighbor_filter_list_cmd);
  1712.   install_element (BGP_IPV4_NODE, &no_neighbor_filter_list_cmd);
  1713.   install_element (BGP_IPV4M_NODE, &neighbor_filter_list_cmd);
  1714.   install_element (BGP_IPV4M_NODE, &no_neighbor_filter_list_cmd);
  1715.   install_element (BGP_IPV6_NODE, &neighbor_filter_list_cmd);
  1716.   install_element (BGP_IPV6_NODE, &no_neighbor_filter_list_cmd);
  1717.   install_element (BGP_VPNV4_NODE, &neighbor_filter_list_cmd);
  1718.   install_element (BGP_VPNV4_NODE, &no_neighbor_filter_list_cmd);
  1719.   /* "neighbor route-map" commands. */
  1720.   install_element (BGP_NODE, &neighbor_route_map_cmd);
  1721.   install_element (BGP_NODE, &no_neighbor_route_map_cmd);
  1722.   install_element (BGP_IPV4_NODE, &neighbor_route_map_cmd);
  1723.   install_element (BGP_IPV4_NODE, &no_neighbor_route_map_cmd);
  1724.   install_element (BGP_IPV4M_NODE, &neighbor_route_map_cmd);
  1725.   install_element (BGP_IPV4M_NODE, &no_neighbor_route_map_cmd);
  1726.   install_element (BGP_IPV6_NODE, &neighbor_route_map_cmd);
  1727.   install_element (BGP_IPV6_NODE, &no_neighbor_route_map_cmd);
  1728.   install_element (BGP_VPNV4_NODE, &neighbor_route_map_cmd);
  1729.   install_element (BGP_VPNV4_NODE, &no_neighbor_route_map_cmd);
  1730.   /* "neighbor unsuppress-map" commands. */
  1731.   install_element (BGP_NODE, &neighbor_unsuppress_map_cmd);
  1732.   install_element (BGP_NODE, &no_neighbor_unsuppress_map_cmd);
  1733.   install_element (BGP_IPV4_NODE, &neighbor_unsuppress_map_cmd);
  1734.   install_element (BGP_IPV4_NODE, &no_neighbor_unsuppress_map_cmd);
  1735.   install_element (BGP_IPV4M_NODE, &neighbor_unsuppress_map_cmd);
  1736.   install_element (BGP_IPV4M_NODE, &no_neighbor_unsuppress_map_cmd);
  1737.   install_element (BGP_IPV6_NODE, &neighbor_unsuppress_map_cmd);
  1738.   install_element (BGP_IPV6_NODE, &no_neighbor_unsuppress_map_cmd);
  1739.   /* "neighbor maximum-prefix" commands. */
  1740.   install_element (BGP_NODE, &neighbor_maximum_prefix_cmd);
  1741.   install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_cmd);
  1742.   install_element (BGP_NODE, &neighbor_maximum_prefix_warning_cmd);
  1743.   install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
  1744.   install_element (BGP_NODE, &neighbor_maximum_prefix_restart_cmd);
  1745.   install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
  1746.   install_element (BGP_NODE, &no_neighbor_maximum_prefix_cmd);
  1747.   install_element (BGP_NODE, &no_neighbor_maximum_prefix_val_cmd);
  1748.   install_element (BGP_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
  1749.   install_element (BGP_NODE, &no_neighbor_maximum_prefix_warning_cmd);
  1750.   install_element (BGP_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
  1751.   install_element (BGP_NODE, &no_neighbor_maximum_prefix_restart_cmd);
  1752.   install_element (BGP_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
  1753.   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_cmd);
  1754.   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
  1755.   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_warning_cmd);
  1756.   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
  1757.   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_restart_cmd);
  1758.   install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
  1759.   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_cmd);
  1760.   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_val_cmd);
  1761.   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
  1762.   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_warning_cmd);
  1763.   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
  1764.   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_restart_cmd);
  1765.   install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
  1766.   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_cmd);
  1767.   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_cmd);
  1768.   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_warning_cmd);
  1769.   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
  1770.   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_restart_cmd);
  1771.   install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
  1772.   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_cmd);
  1773.   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_val_cmd);
  1774.   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
  1775.   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_warning_cmd);
  1776.   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
  1777.   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_restart_cmd);
  1778.   install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
  1779.   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_cmd);
  1780.   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_cmd);
  1781.   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_warning_cmd);
  1782.   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
  1783.   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_restart_cmd);
  1784.   install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
  1785.   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_cmd);
  1786.   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_val_cmd);
  1787.   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
  1788.   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_warning_cmd);
  1789.   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
  1790.   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_restart_cmd);
  1791.   install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
  1792.   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_cmd);
  1793.   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
  1794.   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_warning_cmd);
  1795.   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
  1796.   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_restart_cmd);
  1797.   install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
  1798.   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_cmd);
  1799.   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_val_cmd);
  1800.   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
  1801.   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_warning_cmd);
  1802.   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
  1803.   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_restart_cmd);
  1804.   install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
  1805.   /* "neighbor allowas-in" */
  1806.   install_element (BGP_NODE, &neighbor_allowas_in_cmd);
  1807.   install_element (BGP_NODE, &neighbor_allowas_in_arg_cmd);
  1808.   install_element (BGP_NODE, &no_neighbor_allowas_in_cmd);
  1809.   install_element (BGP_IPV4_NODE, &neighbor_allowas_in_cmd);
  1810.   install_element (BGP_IPV4_NODE, &neighbor_allowas_in_arg_cmd);
  1811.   install_element (BGP_IPV4_NODE, &no_neighbor_allowas_in_cmd);
  1812.   install_element (BGP_IPV4M_NODE, &neighbor_allowas_in_cmd);
  1813.   install_element (BGP_IPV4M_NODE, &neighbor_allowas_in_arg_cmd);
  1814.   install_element (BGP_IPV4M_NODE, &no_neighbor_allowas_in_cmd);
  1815.   install_element (BGP_IPV6_NODE, &neighbor_allowas_in_cmd);
  1816.   install_element (BGP_IPV6_NODE, &neighbor_allowas_in_arg_cmd);
  1817.   install_element (BGP_IPV6_NODE, &no_neighbor_allowas_in_cmd);
  1818.   install_element (BGP_VPNV4_NODE, &neighbor_allowas_in_cmd);
  1819.   install_element (BGP_VPNV4_NODE, &neighbor_allowas_in_arg_cmd);
  1820.   install_element (BGP_VPNV4_NODE, &no_neighbor_allowas_in_cmd);
  1821.   /* address-family commands. */
  1822.   install_element (BGP_NODE, &address_family_ipv4_cmd);
  1823.   install_element (BGP_NODE, &address_family_ipv4_safi_cmd);
  1824. #ifdef HAVE_IPV6
  1825.   install_element (BGP_NODE, &address_family_ipv6_cmd);
  1826.   install_element (BGP_NODE, &address_family_ipv6_unicast_cmd);
  1827. #endif /* HAVE_IPV6 */
  1828.   install_element (BGP_NODE, &address_family_vpnv4_cmd);
  1829.   install_element (BGP_NODE, &address_family_vpnv4_unicast_cmd);
  1830.   /* "exit-address-family" command. */
  1831.   install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
  1832.   install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
  1833.   install_element (BGP_IPV6_NODE, &exit_address_family_cmd);
  1834.   install_element (BGP_VPNV4_NODE, &exit_address_family_cmd);
  1835.   /* "clear ip bgp commands" */
  1836.   install_element (ENABLE_NODE, &clear_ip_bgp_all_cmd);
  1837.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_cmd);
  1838.   install_element (ENABLE_NODE, &clear_ip_bgp_as_cmd);
  1839.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_cmd);
  1840.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_cmd);
  1841.   install_element (ENABLE_NODE, &clear_ip_bgp_external_cmd);
  1842. #ifdef HAVE_IPV6
  1843.   install_element (ENABLE_NODE, &clear_bgp_all_cmd);
  1844.   install_element (ENABLE_NODE, &clear_bgp_instance_all_cmd);
  1845.   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_cmd);
  1846.   install_element (ENABLE_NODE, &clear_bgp_peer_cmd);
  1847.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_cmd);
  1848.   install_element (ENABLE_NODE, &clear_bgp_peer_group_cmd);
  1849.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_cmd);
  1850.   install_element (ENABLE_NODE, &clear_bgp_external_cmd);
  1851.   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_cmd);
  1852.   install_element (ENABLE_NODE, &clear_bgp_as_cmd);
  1853.   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_cmd);
  1854. #endif /* HAVE_IPV6 */
  1855.   /* "clear ip bgp neighbor soft in" */
  1856.   install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_in_cmd);
  1857.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_in_cmd);
  1858.   install_element (ENABLE_NODE, &clear_ip_bgp_all_in_cmd);
  1859.   install_element (ENABLE_NODE, &clear_ip_bgp_all_in_prefix_filter_cmd);
  1860.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_in_prefix_filter_cmd);
  1861.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_in_cmd);
  1862.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_in_cmd);
  1863.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_in_prefix_filter_cmd);
  1864.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_in_cmd);
  1865.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_in_cmd);
  1866.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_in_prefix_filter_cmd);
  1867.   install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_in_cmd);
  1868.   install_element (ENABLE_NODE, &clear_ip_bgp_external_in_cmd);
  1869.   install_element (ENABLE_NODE, &clear_ip_bgp_external_in_prefix_filter_cmd);
  1870.   install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_in_cmd);
  1871.   install_element (ENABLE_NODE, &clear_ip_bgp_as_in_cmd);
  1872.   install_element (ENABLE_NODE, &clear_ip_bgp_as_in_prefix_filter_cmd);
  1873.   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_in_cmd);
  1874.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_in_cmd);
  1875.   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_in_cmd);
  1876.   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_in_prefix_filter_cmd);
  1877.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_in_prefix_filter_cmd);
  1878.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_in_cmd);
  1879.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_in_cmd);
  1880.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_in_prefix_filter_cmd);
  1881.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_in_cmd);
  1882.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_in_cmd);
  1883.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_in_prefix_filter_cmd);
  1884.   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_in_cmd);
  1885.   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_in_cmd);
  1886.   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_in_prefix_filter_cmd);
  1887.   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_in_cmd);
  1888.   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_in_cmd);
  1889.   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_in_prefix_filter_cmd);
  1890.   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_in_cmd);
  1891.   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_in_cmd);
  1892.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_in_cmd);
  1893.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_in_cmd);
  1894.   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_in_cmd);
  1895.   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_in_cmd);
  1896. #ifdef HAVE_IPV6
  1897.   install_element (ENABLE_NODE, &clear_bgp_all_soft_in_cmd);
  1898.   install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_in_cmd);
  1899.   install_element (ENABLE_NODE, &clear_bgp_all_in_cmd);
  1900.   install_element (ENABLE_NODE, &clear_bgp_all_in_prefix_filter_cmd);
  1901.   install_element (ENABLE_NODE, &clear_bgp_peer_soft_in_cmd);
  1902.   install_element (ENABLE_NODE, &clear_bgp_peer_in_cmd);
  1903.   install_element (ENABLE_NODE, &clear_bgp_peer_in_prefix_filter_cmd);
  1904.   install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_in_cmd);
  1905.   install_element (ENABLE_NODE, &clear_bgp_peer_group_in_cmd);
  1906.   install_element (ENABLE_NODE, &clear_bgp_peer_group_in_prefix_filter_cmd);
  1907.   install_element (ENABLE_NODE, &clear_bgp_external_soft_in_cmd);
  1908.   install_element (ENABLE_NODE, &clear_bgp_external_in_cmd);
  1909.   install_element (ENABLE_NODE, &clear_bgp_external_in_prefix_filter_cmd);
  1910.   install_element (ENABLE_NODE, &clear_bgp_as_soft_in_cmd);
  1911.   install_element (ENABLE_NODE, &clear_bgp_as_in_cmd);
  1912.   install_element (ENABLE_NODE, &clear_bgp_as_in_prefix_filter_cmd);
  1913.   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_in_cmd);
  1914.   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_in_cmd);
  1915.   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_in_prefix_filter_cmd);
  1916.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_in_cmd);
  1917.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_in_cmd);
  1918.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_in_prefix_filter_cmd);
  1919.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_in_cmd);
  1920.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_in_cmd);
  1921.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_in_prefix_filter_cmd);
  1922.   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_in_cmd);
  1923.   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_in_cmd);
  1924.   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_in_prefix_filter_cmd);
  1925.   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_in_cmd);
  1926.   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_cmd);
  1927.   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_prefix_filter_cmd);
  1928. #endif /* HAVE_IPV6 */
  1929.   /* "clear ip bgp neighbor soft out" */
  1930.   install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_out_cmd);
  1931.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_out_cmd);
  1932.   install_element (ENABLE_NODE, &clear_ip_bgp_all_out_cmd);
  1933.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_out_cmd);
  1934.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_out_cmd);
  1935.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_out_cmd);
  1936.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_out_cmd);
  1937.   install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_out_cmd);
  1938.   install_element (ENABLE_NODE, &clear_ip_bgp_external_out_cmd);
  1939.   install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_out_cmd);
  1940.   install_element (ENABLE_NODE, &clear_ip_bgp_as_out_cmd);
  1941.   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_out_cmd);
  1942.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_out_cmd);
  1943.   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_out_cmd);
  1944.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_out_cmd);
  1945.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_out_cmd);
  1946.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_out_cmd);
  1947.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_out_cmd);
  1948.   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_out_cmd);
  1949.   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_out_cmd);
  1950.   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_out_cmd);
  1951.   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_out_cmd);
  1952.   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_out_cmd);
  1953.   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_out_cmd);
  1954.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_out_cmd);
  1955.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_out_cmd);
  1956.   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_out_cmd);
  1957.   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_out_cmd);
  1958. #ifdef HAVE_IPV6
  1959.   install_element (ENABLE_NODE, &clear_bgp_all_soft_out_cmd);
  1960.   install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_out_cmd);
  1961.   install_element (ENABLE_NODE, &clear_bgp_all_out_cmd);
  1962.   install_element (ENABLE_NODE, &clear_bgp_peer_soft_out_cmd);
  1963.   install_element (ENABLE_NODE, &clear_bgp_peer_out_cmd);
  1964.   install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_out_cmd);
  1965.   install_element (ENABLE_NODE, &clear_bgp_peer_group_out_cmd);
  1966.   install_element (ENABLE_NODE, &clear_bgp_external_soft_out_cmd);
  1967.   install_element (ENABLE_NODE, &clear_bgp_external_out_cmd);
  1968.   install_element (ENABLE_NODE, &clear_bgp_as_soft_out_cmd);
  1969.   install_element (ENABLE_NODE, &clear_bgp_as_out_cmd);
  1970.   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_out_cmd);
  1971.   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_out_cmd);
  1972.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_out_cmd);
  1973.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_out_cmd);
  1974.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_out_cmd);
  1975.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_out_cmd);
  1976.   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_out_cmd);
  1977.   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_out_cmd);
  1978.   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_out_cmd);
  1979.   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_out_cmd);
  1980. #endif /* HAVE_IPV6 */
  1981.   /* "clear ip bgp neighbor soft" */
  1982.   install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_cmd);
  1983.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_cmd);
  1984.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_cmd);
  1985.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_cmd);
  1986.   install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_cmd);
  1987.   install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_cmd);
  1988.   install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_cmd);
  1989.   install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_cmd);
  1990.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_cmd);
  1991.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_cmd);
  1992.   install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_cmd);
  1993.   install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_cmd);
  1994.   install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_cmd);
  1995.   install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_cmd);
  1996.   install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_cmd);
  1997. #ifdef HAVE_IPV6
  1998.   install_element (ENABLE_NODE, &clear_bgp_all_soft_cmd);
  1999.   install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_cmd);
  2000.   install_element (ENABLE_NODE, &clear_bgp_peer_soft_cmd);
  2001.   install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_cmd);
  2002.   install_element (ENABLE_NODE, &clear_bgp_external_soft_cmd);
  2003.   install_element (ENABLE_NODE, &clear_bgp_as_soft_cmd);
  2004.   install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_cmd);
  2005.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_cmd);
  2006.   install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_cmd);
  2007.   install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_cmd);
  2008.   install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_cmd);
  2009. #endif /* HAVE_IPV6 */
  2010.   /* "show ip bgp summary" commands. */
  2011.   install_element (VIEW_NODE, &show_ip_bgp_summary_cmd);
  2012.   install_element (VIEW_NODE, &show_ip_bgp_instance_summary_cmd);
  2013.   install_element (VIEW_NODE, &show_ip_bgp_ipv4_summary_cmd);
  2014.   install_element (VIEW_NODE, &show_ip_bgp_instance_ipv4_summary_cmd);
  2015.   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_summary_cmd);
  2016.   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd);
  2017. #ifdef HAVE_IPV6
  2018.   install_element (VIEW_NODE, &show_bgp_summary_cmd);
  2019.   install_element (VIEW_NODE, &show_bgp_instance_summary_cmd);
  2020.   install_element (VIEW_NODE, &show_bgp_ipv6_summary_cmd);
  2021.   install_element (VIEW_NODE, &show_bgp_instance_ipv6_summary_cmd);
  2022. #endif /* HAVE_IPV6 */
  2023.   install_element (ENABLE_NODE, &show_ip_bgp_summary_cmd);
  2024.   install_element (ENABLE_NODE, &show_ip_bgp_instance_summary_cmd);
  2025.   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_summary_cmd);
  2026.   install_element (ENABLE_NODE, &show_ip_bgp_instance_ipv4_summary_cmd);
  2027.   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_summary_cmd);
  2028.   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd);
  2029. #ifdef HAVE_IPV6
  2030.   install_element (ENABLE_NODE, &show_bgp_summary_cmd);
  2031.   install_element (ENABLE_NODE, &show_bgp_instance_summary_cmd);
  2032.   install_element (ENABLE_NODE, &show_bgp_ipv6_summary_cmd);
  2033.   install_element (ENABLE_NODE, &show_bgp_instance_ipv6_summary_cmd);
  2034. #endif /* HAVE_IPV6 */
  2035.   /* "show ip bgp neighbors" commands. */
  2036.   install_element (VIEW_NODE, &show_ip_bgp_neighbors_cmd);
  2037.   install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
  2038.   install_element (VIEW_NODE, &show_ip_bgp_neighbors_peer_cmd);
  2039.   install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd);
  2040.   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbors_cmd);
  2041.   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbors_cmd);
  2042.   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd);
  2043.   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd);
  2044.   install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_cmd);
  2045.   install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_peer_cmd);
  2046.   install_element (ENABLE_NODE, &show_ip_bgp_neighbors_cmd);
  2047.   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
  2048.   install_element (ENABLE_NODE, &show_ip_bgp_neighbors_peer_cmd);
  2049.   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd);
  2050.   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbors_cmd);
  2051.   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbors_cmd);
  2052.   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd);
  2053.   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd);
  2054.   install_element (ENABLE_NODE, &show_ip_bgp_instance_neighbors_cmd);
  2055.   install_element (ENABLE_NODE, &show_ip_bgp_instance_neighbors_peer_cmd);
  2056. #ifdef HAVE_IPV6
  2057.   install_element (VIEW_NODE, &show_bgp_neighbors_cmd);
  2058.   install_element (VIEW_NODE, &show_bgp_ipv6_neighbors_cmd);
  2059.   install_element (VIEW_NODE, &show_bgp_neighbors_peer_cmd);
  2060.   install_element (VIEW_NODE, &show_bgp_ipv6_neighbors_peer_cmd);
  2061.   install_element (ENABLE_NODE, &show_bgp_neighbors_cmd);
  2062.   install_element (ENABLE_NODE, &show_bgp_ipv6_neighbors_cmd);
  2063.   install_element (ENABLE_NODE, &show_bgp_neighbors_peer_cmd);
  2064.   install_element (ENABLE_NODE, &show_bgp_ipv6_neighbors_peer_cmd);
  2065. #endif /* HAVE_IPV6 */
  2066.   /* "show ip bgp paths" commands. */
  2067.   install_element (VIEW_NODE, &show_ip_bgp_paths_cmd);
  2068.   install_element (VIEW_NODE, &show_ip_bgp_ipv4_paths_cmd);
  2069.   install_element (ENABLE_NODE, &show_ip_bgp_paths_cmd);
  2070.   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_paths_cmd);
  2071.   /* "show ip bgp community" commands. */
  2072.   install_element (VIEW_NODE, &show_ip_bgp_community_info_cmd);
  2073.   install_element (ENABLE_NODE, &show_ip_bgp_community_info_cmd);
  2074.   /* "show ip bgp attribute-info" commands. */
  2075.   install_element (VIEW_NODE, &show_ip_bgp_attr_info_cmd);
  2076.   install_element (ENABLE_NODE, &show_ip_bgp_attr_info_cmd);
  2077.   /* "redistribute" commands.  */
  2078.   install_element (BGP_NODE, &bgp_redistribute_ipv4_cmd);
  2079.   install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_cmd);
  2080.   install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_cmd);
  2081.   install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd);
  2082.   install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd);
  2083.   install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_cmd);
  2084.   install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_rmap_cmd);
  2085.   install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_metric_cmd);
  2086.   install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd);
  2087.   install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd);
  2088.   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_cmd);
  2089.   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_rmap_cmd);
  2090.   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_metric_cmd);
  2091.   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_rmap_metric_cmd);
  2092.   install_element (BGP_NODE, &no_bgp_redistribute_ipv4_metric_rmap_cmd);
  2093.   install_element (BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_cmd);
  2094.   install_element (BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_rmap_cmd);
  2095.   install_element (BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_metric_cmd);
  2096.   install_element (BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_rmap_metric_cmd);
  2097.   install_element (BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_metric_rmap_cmd);
  2098. #ifdef HAVE_IPV6
  2099.   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_cmd);
  2100.   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_cmd);
  2101.   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_cmd);
  2102.   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_rmap_cmd);
  2103.   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_cmd);
  2104.   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_metric_cmd);
  2105.   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_metric_cmd);
  2106.   install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_rmap_cmd);
  2107.   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_rmap_metric_cmd);
  2108.   install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_metric_rmap_cmd);
  2109. #endif /* HAVE_IPV6 */
  2110.   /* Community-list. */
  2111.   community_list_vty ();
  2112. }
  2113. #include "memory.h"
  2114. #include "bgp_regex.h"
  2115. #include "bgp_clist.h"
  2116. #include "bgp_ecommunity.h"
  2117. /* VTY functions.  */
  2118. /* Direction value to string conversion.  */
  2119. char *
  2120. community_direct_str (int direct)
  2121. {
  2122.   switch (direct)
  2123.     {
  2124.     case COMMUNITY_DENY:
  2125.       return "deny";
  2126.       break;
  2127.     case COMMUNITY_PERMIT:
  2128.       return "permit";
  2129.       break;
  2130.     default:
  2131.       return "unknown";
  2132.       break;
  2133.     }
  2134. }
  2135. /* Display error string.  */
  2136. void
  2137. community_list_perror (struct vty *vty, int ret)
  2138. {
  2139.   switch (ret)
  2140.     {
  2141.     case COMMUNITY_LIST_ERR_CANT_FIND_LIST:
  2142.       vty_out (vty, "%% Can't find communit-list%s", VTY_NEWLINE);
  2143.       break;
  2144.     case COMMUNITY_LIST_ERR_MALFORMED_VAL:
  2145.       vty_out (vty, "%% Malformed community-list value%s", VTY_NEWLINE);
  2146.       break;
  2147.     case COMMUNITY_LIST_ERR_STANDARD_CONFLICT:
  2148.       vty_out (vty, "%% Community name conflict, previously defined as standard community%s", VTY_NEWLINE);
  2149.       break;
  2150.     case COMMUNITY_LIST_ERR_EXPANDED_CONFLICT:
  2151.       vty_out (vty, "%% Community name conflict, previously defined as expanded community%s", VTY_NEWLINE);
  2152.       break;
  2153.     }
  2154. }
  2155. /* VTY interface for community_set() function.  */
  2156. int
  2157. community_list_set_vty (struct vty *vty, int argc, char **argv, int style,
  2158. int reject_all_digit_name)
  2159. {
  2160.   int ret;
  2161.   int direct;
  2162.   char *str;
  2163.   /* Check the list type. */
  2164.   if (strncmp (argv[1], "p", 1) == 0)
  2165.     direct = COMMUNITY_PERMIT;
  2166.   else if (strncmp (argv[1], "d", 1) == 0)
  2167.     direct = COMMUNITY_DENY;
  2168.   else
  2169.     {
  2170.       vty_out (vty, "%% Matching condition must be permit or deny%s",
  2171.        VTY_NEWLINE);
  2172.       return CMD_WARNING;
  2173.     }
  2174.   /* All digit name check.  */
  2175.   if (reject_all_digit_name && all_digit (argv[0]))
  2176.     {
  2177.       vty_out (vty, "%% Community name cannot have all digits%s", VTY_NEWLINE);
  2178.       return CMD_WARNING;
  2179.     }
  2180.   /* Concat community string argument.  */
  2181.   if (argc > 1)
  2182.     str = argv_concat (argv, argc, 2);
  2183.   else
  2184.     str = NULL;
  2185.   /* When community_list_set() return nevetive value, it means
  2186.      malformed community string.  */
  2187.   ret = community_list_set (bgp_clist, argv[0], str, direct, style);
  2188.   /* Free temporary community list string allocated by
  2189.      argv_concat().  */
  2190.   if (str)
  2191.     XFREE (MTYPE_TMP, str);
  2192.   if (ret < 0)
  2193.     {
  2194.       /* Display error string.  */
  2195.       community_list_perror (vty, ret);
  2196.       return CMD_WARNING;
  2197.     }
  2198.   return CMD_SUCCESS;
  2199. }
  2200. /* Communiyt-list entry delete.  */
  2201. int
  2202. community_list_unset_vty (struct vty *vty, int argc, char **argv, int style)
  2203. {
  2204.   int ret;
  2205.   int direct = 0;
  2206.   char *str = NULL;
  2207.   if (argc > 1)
  2208.     {
  2209.       /* Check the list direct. */
  2210.       if (strncmp (argv[1], "p", 1) == 0)
  2211. direct = COMMUNITY_PERMIT;
  2212.       else if (strncmp (argv[1], "d", 1) == 0)
  2213. direct = COMMUNITY_DENY;
  2214.       else
  2215. {
  2216.   vty_out (vty, "%% Matching condition must be permit or deny%s",
  2217.    VTY_NEWLINE);
  2218.   return CMD_WARNING;
  2219. }
  2220.       /* Concat community string argument.  */
  2221.       str = argv_concat (argv, argc, 2);
  2222.     }
  2223.   /* Unset community list.  */
  2224.   ret = community_list_unset (bgp_clist, argv[0], str, direct, style);
  2225.   /* Free temporary community list string allocated by
  2226.      argv_concat().  */
  2227.   if (str)
  2228.     XFREE (MTYPE_TMP, str);
  2229.   if (ret < 0)
  2230.     {
  2231.       community_list_perror (vty, ret);
  2232.       return CMD_WARNING;
  2233.     }
  2234.   return CMD_SUCCESS;
  2235. }
  2236. /* "community-list" keyword help string.  */
  2237. #define COMMUNITY_LIST_STR "Add a community list entryn"
  2238. #define COMMUNITY_VAL_STR  "Community number in aa:nn format or internet|local-AS|no-advertise|no-exportn"
  2239. DEFUN (ip_community_list_standard,
  2240.        ip_community_list_standard_cmd,
  2241.        "ip community-list <1-99> (deny|permit) .AA:NN",
  2242.        IP_STR
  2243.        COMMUNITY_LIST_STR
  2244.        "Community list number (standard)n"
  2245.        "Specify community to rejectn"
  2246.        "Specify community to acceptn"
  2247.        COMMUNITY_VAL_STR)
  2248. {
  2249.   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD, 0);
  2250. }
  2251. ALIAS (ip_community_list_standard,
  2252.        ip_community_list_standard2_cmd,
  2253.        "ip community-list <1-99> (deny|permit)",
  2254.        IP_STR
  2255.        COMMUNITY_LIST_STR
  2256.        "Community list number (standard)n"
  2257.        "Specify community to rejectn"
  2258.        "Specify community to acceptn");
  2259. DEFUN (ip_community_list_expanded,
  2260.        ip_community_list_expanded_cmd,
  2261.        "ip community-list <100-500> (deny|permit) .LINE",
  2262.        IP_STR
  2263.        COMMUNITY_LIST_STR
  2264.        "Community list number (expanded)n"
  2265.        "Specify community to rejectn"
  2266.        "Specify community to acceptn"
  2267.        "An ordered list as a regular-expressionn")
  2268. {
  2269.   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED, 0);
  2270. }
  2271. DEFUN (ip_community_list_name_standard,
  2272.        ip_community_list_name_standard_cmd,
  2273.        "ip community-list standard WORD (deny|permit) .AA:NN",
  2274.        IP_STR
  2275.        COMMUNITY_LIST_STR
  2276.        "Add a standard community-list entryn"
  2277.        "Community list namen"
  2278.        "Specify community to rejectn"
  2279.        "Specify community to acceptn"
  2280.        COMMUNITY_VAL_STR)
  2281. {
  2282.   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD, 1);
  2283. }
  2284. ALIAS (ip_community_list_name_standard,
  2285.        ip_community_list_name_standard2_cmd,
  2286.        "ip community-list standard WORD (deny|permit)",
  2287.        IP_STR
  2288.        COMMUNITY_LIST_STR
  2289.        "Add a standard community-list entryn"
  2290.        "Community list namen"
  2291.        "Specify community to rejectn"
  2292.        "Specify community to acceptn");
  2293. DEFUN (ip_community_list_name_expanded,
  2294.        ip_community_list_name_expanded_cmd,
  2295.        "ip community-list expanded WORD (deny|permit) .LINE",
  2296.        IP_STR
  2297.        COMMUNITY_LIST_STR
  2298.        "Add an expanded community-list entryn"
  2299.        "Community list namen"
  2300.        "Specify community to rejectn"
  2301.        "Specify community to acceptn"
  2302.        "An ordered list as a regular-expressionn")
  2303. {
  2304.   return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED, 1);
  2305. }
  2306. DEFUN (no_ip_community_list_standard_all,
  2307.        no_ip_community_list_standard_all_cmd,
  2308.        "no ip community-list <1-99>",
  2309.        NO_STR
  2310.        IP_STR
  2311.        COMMUNITY_LIST_STR
  2312.        "Community list number (standard)n")
  2313. {
  2314.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
  2315. }
  2316. DEFUN (no_ip_community_list_expanded_all,
  2317.        no_ip_community_list_expanded_all_cmd,
  2318.        "no ip community-list <100-500>",
  2319.        NO_STR
  2320.        IP_STR
  2321.        COMMUNITY_LIST_STR
  2322.        "Community list number (expanded)n")
  2323. {
  2324.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
  2325. }
  2326. DEFUN (no_ip_community_list_name_standard_all,
  2327.        no_ip_community_list_name_standard_all_cmd,
  2328.        "no ip community-list standard WORD",
  2329.        NO_STR
  2330.        IP_STR
  2331.        COMMUNITY_LIST_STR
  2332.        "Add a standard community-list entryn"
  2333.        "Community list namen")
  2334. {
  2335.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
  2336. }
  2337. DEFUN (no_ip_community_list_name_expanded_all,
  2338.        no_ip_community_list_name_expanded_all_cmd,
  2339.        "no ip community-list expanded WORD",
  2340.        NO_STR
  2341.        IP_STR
  2342.        COMMUNITY_LIST_STR
  2343.        "Add an expanded community-list entryn"
  2344.        "Community list namen")
  2345. {
  2346.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
  2347. }
  2348. DEFUN (no_ip_community_list_standard,
  2349.        no_ip_community_list_standard_cmd,
  2350.        "no ip community-list <1-99> (deny|permit) .AA:NN",
  2351.        NO_STR
  2352.        IP_STR
  2353.        COMMUNITY_LIST_STR
  2354.        "Community list number (standard)n"
  2355.        "Specify community to rejectn"
  2356.        "Specify community to acceptn"
  2357.        COMMUNITY_VAL_STR)
  2358. {
  2359.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
  2360. }
  2361. DEFUN (no_ip_community_list_expanded,
  2362.        no_ip_community_list_expanded_cmd,
  2363.        "no ip community-list <100-500> (deny|permit) .LINE",
  2364.        NO_STR
  2365.        IP_STR
  2366.        COMMUNITY_LIST_STR
  2367.        "Community list number (expanded)n"
  2368.        "Specify community to rejectn"
  2369.        "Specify community to acceptn"
  2370.        "An ordered list as a regular-expressionn")
  2371. {
  2372.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
  2373. }
  2374. DEFUN (no_ip_community_list_name_standard,
  2375.        no_ip_community_list_name_standard_cmd,
  2376.        "no ip community-list standard WORD (deny|permit) .AA:NN",
  2377.        NO_STR
  2378.        IP_STR
  2379.        COMMUNITY_LIST_STR
  2380.        "Specify a standard community-listn"
  2381.        "Community list namen"
  2382.        "Specify community to rejectn"
  2383.        "Specify community to acceptn"
  2384.        COMMUNITY_VAL_STR)
  2385. {
  2386.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
  2387. }
  2388. DEFUN (no_ip_community_list_name_expanded,
  2389.        no_ip_community_list_name_expanded_cmd,
  2390.        "no ip community-list expanded WORD (deny|permit) .LINE",
  2391.        NO_STR
  2392.        IP_STR
  2393.        COMMUNITY_LIST_STR
  2394.        "Specify an expanded community-listn"
  2395.        "Community list namen"
  2396.        "Specify community to rejectn"
  2397.        "Specify community to acceptn"
  2398.        "An ordered list as a regular-expressionn")
  2399. {
  2400.   return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
  2401. }
  2402. void
  2403. community_list_show (struct vty *vty, struct community_list *list)
  2404. {
  2405.   struct community_entry *entry;
  2406.   for (entry = list->head; entry; entry = entry->next)
  2407.     {
  2408.       if (entry == list->head)
  2409. {
  2410.   if (all_digit (list->name))
  2411.     vty_out (vty, "Community %s list %s%s",
  2412.      entry->style == COMMUNITY_LIST_STANDARD ?
  2413.      "standard" : "(expanded) access",
  2414.      list->name, VTY_NEWLINE);
  2415.   else
  2416.     vty_out (vty, "Named Community %s list %s%s",
  2417.      entry->style == COMMUNITY_LIST_STANDARD ?
  2418.      "standard" : "expanded",
  2419.      list->name, VTY_NEWLINE);
  2420. }
  2421.       if (entry->any)
  2422. vty_out (vty, "    %s%s",
  2423.  community_direct_str (entry->direct), VTY_NEWLINE);
  2424.       else
  2425. vty_out (vty, "    %s %s%s",
  2426.  community_direct_str (entry->direct),
  2427.  entry->style == COMMUNITY_LIST_STANDARD
  2428.  ? community_str (entry->u.com) : entry->config,
  2429.  VTY_NEWLINE);
  2430.     }
  2431. }
  2432. DEFUN (show_ip_community_list,
  2433.        show_ip_community_list_cmd,
  2434.        "show ip community-list",
  2435.        SHOW_STR
  2436.        IP_STR
  2437.        "List community-listn")
  2438. {
  2439.   struct community_list *list;
  2440.   struct community_list_master *cm;
  2441.   cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
  2442.   if (! cm)
  2443.     return CMD_SUCCESS;
  2444.   for (list = cm->num.head; list; list = list->next)
  2445.     community_list_show (vty, list);
  2446.   for (list = cm->str.head; list; list = list->next)
  2447.     community_list_show (vty, list);
  2448.   return CMD_SUCCESS;
  2449. }
  2450. DEFUN (show_ip_community_list_arg,
  2451.        show_ip_community_list_arg_cmd,
  2452.        "show ip community-list (<1-500>|WORD)",
  2453.        SHOW_STR
  2454.        IP_STR
  2455.        "List community-listn"
  2456.        "Community-list numbern"
  2457.        "Community-list namen")
  2458. {
  2459.   struct community_list *list;
  2460.   list = community_list_lookup (bgp_clist, argv[0], COMMUNITY_LIST_MASTER);
  2461.   if (! list)
  2462.     {
  2463.       vty_out (vty, "%% Can't find communit-list%s", VTY_NEWLINE);
  2464.       return CMD_WARNING;
  2465.     }
  2466.   community_list_show (vty, list);
  2467.   return CMD_SUCCESS;
  2468. }
  2469. int
  2470. extcommunity_list_set_vty (struct vty *vty, int argc, char **argv, int style,
  2471.    int reject_all_digit_name)
  2472. {
  2473.   int ret;
  2474.   int direct;
  2475.   char *str;
  2476.   /* Check the list type. */
  2477.   if (strncmp (argv[1], "p", 1) == 0)
  2478.     direct = COMMUNITY_PERMIT;
  2479.   else if (strncmp (argv[1], "d", 1) == 0)
  2480.     direct = COMMUNITY_DENY;
  2481.   else
  2482.     {
  2483.       vty_out (vty, "%% Matching condition must be permit or deny%s",
  2484.        VTY_NEWLINE);
  2485.       return CMD_WARNING;
  2486.     }
  2487.   /* All digit name check.  */
  2488.   if (reject_all_digit_name && all_digit (argv[0]))
  2489.     {
  2490.       vty_out (vty, "%% Community name cannot have all digits%s", VTY_NEWLINE);
  2491.       return CMD_WARNING;
  2492.     }
  2493.   /* Concat community string argument.  */
  2494.   if (argc > 1)
  2495.     str = argv_concat (argv, argc, 2);
  2496.   else
  2497.     str = NULL;
  2498.   ret = extcommunity_list_set (bgp_clist, argv[0], str, direct, style);
  2499.   /* Free temporary community list string allocated by
  2500.      argv_concat().  */
  2501.   if (str)
  2502.     XFREE (MTYPE_TMP, str);
  2503.   if (ret < 0)
  2504.     {
  2505.       community_list_perror (vty, ret);
  2506.       return CMD_WARNING;
  2507.     }
  2508.   return CMD_SUCCESS;
  2509. }
  2510. int
  2511. extcommunity_list_unset_vty (struct vty *vty, int argc, char **argv, int style)
  2512. {
  2513.   int ret;
  2514.   int direct = 0;
  2515.   char *str = NULL;
  2516.   if (argc > 1)
  2517.     {
  2518.       /* Check the list direct. */
  2519.       if (strncmp (argv[1], "p", 1) == 0)
  2520. direct = COMMUNITY_PERMIT;
  2521.       else if (strncmp (argv[1], "d", 1) == 0)
  2522. direct = COMMUNITY_DENY;
  2523.       else
  2524. {
  2525.   vty_out (vty, "%% Matching condition must be permit or deny%s",
  2526.    VTY_NEWLINE);
  2527.   return CMD_WARNING;
  2528. }
  2529.       /* Concat community string argument.  */
  2530.       str = argv_concat (argv, argc, 2);
  2531.     }
  2532.   /* Unset community list.  */
  2533.   ret = extcommunity_list_unset (bgp_clist, argv[0], str, direct, style);
  2534.   /* Free temporary community list string allocated by
  2535.      argv_concat().  */
  2536.   if (str)
  2537.     XFREE (MTYPE_TMP, str);
  2538.   if (ret < 0)
  2539.     {
  2540.       community_list_perror (vty, ret);
  2541.       return CMD_WARNING;
  2542.     }
  2543.   return CMD_SUCCESS;
  2544. }
  2545. /* "extcommunity-list" keyword help string.  */
  2546. #define EXTCOMMUNITY_LIST_STR "Add a extended community list entryn"
  2547. #define EXTCOMMUNITY_VAL_STR  "Extended community attribute in 'rt aa:nn_or_IPaddr:nn' OR 'soo aa:nn_or_IPaddr:nn' formatn"
  2548. DEFUN (ip_extcommunity_list_standard,
  2549.        ip_extcommunity_list_standard_cmd,
  2550.        "ip extcommunity-list <1-99> (deny|permit) .AA:NN",
  2551.        IP_STR
  2552.        EXTCOMMUNITY_LIST_STR
  2553.        "Extended Community list number (standard)n"
  2554.        "Specify community to rejectn"
  2555.        "Specify community to acceptn"
  2556.        EXTCOMMUNITY_VAL_STR)
  2557. {
  2558.   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD, 0);
  2559. }
  2560. ALIAS (ip_extcommunity_list_standard,
  2561.        ip_extcommunity_list_standard2_cmd,
  2562.        "ip extcommunity-list <1-99> (deny|permit)",
  2563.        IP_STR
  2564.        EXTCOMMUNITY_LIST_STR
  2565.        "Extended Community list number (standard)n"
  2566.        "Specify community to rejectn"
  2567.        "Specify community to acceptn");
  2568. DEFUN (ip_extcommunity_list_expanded,
  2569.        ip_extcommunity_list_expanded_cmd,
  2570.        "ip extcommunity-list <100-500> (deny|permit) .LINE",
  2571.        IP_STR
  2572.        EXTCOMMUNITY_LIST_STR
  2573.        "Extended Community list number (expanded)n"
  2574.        "Specify community to rejectn"
  2575.        "Specify community to acceptn"
  2576.        "An ordered list as a regular-expressionn")
  2577. {
  2578.   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED, 0);
  2579. }
  2580. DEFUN (ip_extcommunity_list_name_standard,
  2581.        ip_extcommunity_list_name_standard_cmd,
  2582.        "ip extcommunity-list standard WORD (deny|permit) .AA:NN",
  2583.        IP_STR
  2584.        EXTCOMMUNITY_LIST_STR
  2585.        "Specify standard extcommunity-listn"
  2586.        "Extended Community list namen"
  2587.        "Specify community to rejectn"
  2588.        "Specify community to acceptn"
  2589.        EXTCOMMUNITY_VAL_STR)
  2590. {
  2591.   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD, 1);
  2592. }
  2593. ALIAS (ip_extcommunity_list_name_standard,
  2594.        ip_extcommunity_list_name_standard2_cmd,
  2595.        "ip extcommunity-list standard WORD (deny|permit)",
  2596.        IP_STR
  2597.        EXTCOMMUNITY_LIST_STR
  2598.        "Specify standard extcommunity-listn"
  2599.        "Extended Community list namen"
  2600.        "Specify community to rejectn"
  2601.        "Specify community to acceptn");
  2602. DEFUN (ip_extcommunity_list_name_expanded,
  2603.        ip_extcommunity_list_name_expanded_cmd,
  2604.        "ip extcommunity-list expanded WORD (deny|permit) .LINE",
  2605.        IP_STR
  2606.        EXTCOMMUNITY_LIST_STR
  2607.        "Specify expanded extcommunity-listn"
  2608.        "Extended Community list namen"
  2609.        "Specify community to rejectn"
  2610.        "Specify community to acceptn"
  2611.        "An ordered list as a regular-expressionn")
  2612. {
  2613.   return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED, 1);
  2614. }
  2615. DEFUN (no_ip_extcommunity_list_standard_all,
  2616.        no_ip_extcommunity_list_standard_all_cmd,
  2617.        "no ip extcommunity-list <1-99>",
  2618.        NO_STR
  2619.        IP_STR
  2620.        EXTCOMMUNITY_LIST_STR
  2621.        "Extended Community list number (standard)n")
  2622. {
  2623.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
  2624. }
  2625. DEFUN (no_ip_extcommunity_list_expanded_all,
  2626.        no_ip_extcommunity_list_expanded_all_cmd,
  2627.        "no ip extcommunity-list <100-500>",
  2628.        NO_STR
  2629.        IP_STR
  2630.        EXTCOMMUNITY_LIST_STR
  2631.        "Extended Community list number (expanded)n")
  2632. {
  2633.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
  2634. }
  2635. DEFUN (no_ip_extcommunity_list_name_standard_all,
  2636.        no_ip_extcommunity_list_name_standard_all_cmd,
  2637.        "no ip extcommunity-list standard WORD",
  2638.        NO_STR
  2639.        IP_STR
  2640.        EXTCOMMUNITY_LIST_STR
  2641.        "Specify standard extcommunity-listn"
  2642.        "Extended Community list namen")
  2643. {
  2644.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
  2645. }
  2646. DEFUN (no_ip_extcommunity_list_name_expanded_all,
  2647.        no_ip_extcommunity_list_name_expanded_all_cmd,
  2648.        "no ip extcommunity-list expanded WORD",
  2649.        NO_STR
  2650.        IP_STR
  2651.        EXTCOMMUNITY_LIST_STR
  2652.        "Specify expanded extcommunity-listn"
  2653.        "Extended Community list namen")
  2654. {
  2655.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
  2656. }
  2657. DEFUN (no_ip_extcommunity_list_standard,
  2658.        no_ip_extcommunity_list_standard_cmd,
  2659.        "no ip extcommunity-list <1-99> (deny|permit) .AA:NN",
  2660.        NO_STR
  2661.        IP_STR
  2662.        EXTCOMMUNITY_LIST_STR
  2663.        "Extended Community list number (standard)n"
  2664.        "Specify community to rejectn"
  2665.        "Specify community to acceptn"
  2666.        EXTCOMMUNITY_VAL_STR)
  2667. {
  2668.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
  2669. }
  2670. DEFUN (no_ip_extcommunity_list_expanded,
  2671.        no_ip_extcommunity_list_expanded_cmd,
  2672.        "no ip extcommunity-list <100-500> (deny|permit) .LINE",
  2673.        NO_STR
  2674.        IP_STR
  2675.        EXTCOMMUNITY_LIST_STR
  2676.        "Extended Community list number (expanded)n"
  2677.        "Specify community to rejectn"
  2678.        "Specify community to acceptn"
  2679.        "An ordered list as a regular-expressionn")
  2680. {
  2681.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
  2682. }
  2683. DEFUN (no_ip_extcommunity_list_name_standard,
  2684.        no_ip_extcommunity_list_name_standard_cmd,
  2685.        "no ip extcommunity-list standard WORD (deny|permit) .AA:NN",
  2686.        NO_STR
  2687.        IP_STR
  2688.        EXTCOMMUNITY_LIST_STR
  2689.        "Specify standard extcommunity-listn"
  2690.        "Extended Community list namen"
  2691.        "Specify community to rejectn"
  2692.        "Specify community to acceptn"
  2693.        EXTCOMMUNITY_VAL_STR)
  2694. {
  2695.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
  2696. }
  2697. DEFUN (no_ip_extcommunity_list_name_expanded,
  2698.        no_ip_extcommunity_list_name_expanded_cmd,
  2699.        "no ip extcommunity-list expanded WORD (deny|permit) .LINE",
  2700.        NO_STR
  2701.        IP_STR
  2702.        EXTCOMMUNITY_LIST_STR
  2703.        "Specify expanded extcommunity-listn"
  2704.        "Community list namen"
  2705.        "Specify community to rejectn"
  2706.        "Specify community to acceptn"
  2707.        "An ordered list as a regular-expressionn")
  2708. {
  2709.   return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
  2710. }
  2711. void
  2712. extcommunity_list_show (struct vty *vty, struct community_list *list)
  2713. {
  2714.   struct community_entry *entry;
  2715.   for (entry = list->head; entry; entry = entry->next)
  2716.     {
  2717.       if (entry == list->head)
  2718. {
  2719.   if (all_digit (list->name))
  2720.     vty_out (vty, "Extended community %s list %s%s",
  2721.      entry->style == EXTCOMMUNITY_LIST_STANDARD ?
  2722.      "standard" : "(expanded) access",
  2723.      list->name, VTY_NEWLINE);
  2724.   else
  2725.     vty_out (vty, "Named extended community %s list %s%s",
  2726.      entry->style == EXTCOMMUNITY_LIST_STANDARD ?
  2727.      "standard" : "expanded",
  2728.      list->name, VTY_NEWLINE);
  2729. }
  2730.       if (entry->any)
  2731. vty_out (vty, "    %s%s",
  2732.  community_direct_str (entry->direct), VTY_NEWLINE);
  2733.       else
  2734. vty_out (vty, "    %s %s%s",
  2735.  community_direct_str (entry->direct),
  2736.  entry->style == EXTCOMMUNITY_LIST_STANDARD ?
  2737.  entry->u.ecom->str : entry->config,
  2738.  VTY_NEWLINE);
  2739.     }
  2740. }
  2741. DEFUN (show_ip_extcommunity_list,
  2742.        show_ip_extcommunity_list_cmd,
  2743.        "show ip extcommunity-list",
  2744.        SHOW_STR
  2745.        IP_STR
  2746.        "List extended-community listn")
  2747. {
  2748.   struct community_list *list;
  2749.   struct community_list_master *cm;
  2750.   cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
  2751.   if (! cm)
  2752.     return CMD_SUCCESS;
  2753.   for (list = cm->num.head; list; list = list->next)
  2754.     extcommunity_list_show (vty, list);
  2755.   for (list = cm->str.head; list; list = list->next)
  2756.     extcommunity_list_show (vty, list);
  2757.   return CMD_SUCCESS;
  2758. }
  2759. DEFUN (show_ip_extcommunity_list_arg,
  2760.        show_ip_extcommunity_list_arg_cmd,
  2761.        "show ip extcommunity-list (<1-500>|WORD)",
  2762.        SHOW_STR
  2763.        IP_STR
  2764.        "List extended-community listn"
  2765.        "Extcommunity-list numbern"
  2766.        "Extcommunity-list namen")
  2767. {
  2768.   struct community_list *list;
  2769.   list = community_list_lookup (bgp_clist, argv[0], EXTCOMMUNITY_LIST_MASTER);
  2770.   if (! list)
  2771.     {
  2772.       vty_out (vty, "%% Can't find extcommunit-list%s", VTY_NEWLINE);
  2773.       return CMD_WARNING;
  2774.     }
  2775.   extcommunity_list_show (vty, list);
  2776.   return CMD_SUCCESS;
  2777. }
  2778. /* Return configuration string of community-list entry.  */
  2779. static char *
  2780. community_list_config_str (struct community_entry *entry)
  2781. {
  2782.   char *str;
  2783.   if (entry->any)
  2784.     str = "";
  2785.   else
  2786.     {
  2787.       if (entry->style == COMMUNITY_LIST_STANDARD)
  2788. str = community_str (entry->u.com);
  2789.       else
  2790. str = entry->config;
  2791.     }
  2792.   return str;
  2793. }
  2794. /* Display community-list and extcommunity-list configuration.  */
  2795. int
  2796. community_list_config_write (struct vty *vty)
  2797. {
  2798.   struct community_list *list;
  2799.   struct community_entry *entry;
  2800.   struct community_list_master *cm;
  2801.   int write = 0;
  2802.   /* Community-list.  */
  2803.   cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
  2804.   for (list = cm->num.head; list; list = list->next)
  2805.     for (entry = list->head; entry; entry = entry->next)
  2806.       {
  2807. vty_out (vty, "ip community-list %s %s %s%s",
  2808.  list->name, community_direct_str (entry->direct),
  2809.  community_list_config_str (entry),
  2810.  VTY_NEWLINE);
  2811. write++;
  2812.       }
  2813.   for (list = cm->str.head; list; list = list->next)
  2814.     for (entry = list->head; entry; entry = entry->next)
  2815.       {
  2816. vty_out (vty, "ip community-list %s %s %s %s%s",
  2817.  entry->style == COMMUNITY_LIST_STANDARD
  2818.  ? "standard" : "expanded",
  2819.  list->name, community_direct_str (entry->direct),
  2820.  community_list_config_str (entry),
  2821.  VTY_NEWLINE);
  2822. write++;
  2823.       }
  2824.   /* Extcommunity-list.  */
  2825.   cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
  2826.   for (list = cm->num.head; list; list = list->next)
  2827.     for (entry = list->head; entry; entry = entry->next)
  2828.       {
  2829. vty_out (vty, "ip extcommunity-list %s %s %s%s",
  2830.  list->name, community_direct_str (entry->direct),
  2831.  community_list_config_str (entry), VTY_NEWLINE);
  2832. write++;
  2833.       }
  2834.   for (list = cm->str.head; list; list = list->next)
  2835.     for (entry = list->head; entry; entry = entry->next)
  2836.       {
  2837. vty_out (vty, "ip extcommunity-list %s %s %s %s%s",
  2838.  entry->style == EXTCOMMUNITY_LIST_STANDARD
  2839.  ? "standard" : "expanded",
  2840.  list->name, community_direct_str (entry->direct),
  2841.  community_list_config_str (entry), VTY_NEWLINE);
  2842. write++;
  2843.       }
  2844.   return write;
  2845. }
  2846. struct cmd_node community_list_node =
  2847.   {
  2848.     COMMUNITY_LIST_NODE,
  2849.     "",
  2850.     1 /* Export to vtysh.  */
  2851.   };
  2852. void
  2853. community_list_vty ()
  2854. {
  2855.   install_node (&community_list_node, community_list_config_write);
  2856.   /* Community-list.  */
  2857.   install_element (CONFIG_NODE, &ip_community_list_standard_cmd);
  2858.   install_element (CONFIG_NODE, &ip_community_list_standard2_cmd);
  2859.   install_element (CONFIG_NODE, &ip_community_list_expanded_cmd);
  2860.   install_element (CONFIG_NODE, &ip_community_list_name_standard_cmd);
  2861.   install_element (CONFIG_NODE, &ip_community_list_name_standard2_cmd);
  2862.   install_element (CONFIG_NODE, &ip_community_list_name_expanded_cmd);
  2863.   install_element (CONFIG_NODE, &no_ip_community_list_standard_all_cmd);
  2864.   install_element (CONFIG_NODE, &no_ip_community_list_expanded_all_cmd);
  2865.   install_element (CONFIG_NODE, &no_ip_community_list_name_standard_all_cmd);
  2866.   install_element (CONFIG_NODE, &no_ip_community_list_name_expanded_all_cmd);
  2867.   install_element (CONFIG_NODE, &no_ip_community_list_standard_cmd);
  2868.   install_element (CONFIG_NODE, &no_ip_community_list_expanded_cmd);
  2869.   install_element (CONFIG_NODE, &no_ip_community_list_name_standard_cmd);
  2870.   install_element (CONFIG_NODE, &no_ip_community_list_name_expanded_cmd);
  2871.   install_element (VIEW_NODE, &show_ip_community_list_cmd);
  2872.   install_element (VIEW_NODE, &show_ip_community_list_arg_cmd);
  2873.   install_element (ENABLE_NODE, &show_ip_community_list_cmd);
  2874.   install_element (ENABLE_NODE, &show_ip_community_list_arg_cmd);
  2875.   /* Extcommunity-list.  */
  2876.   install_element (CONFIG_NODE, &ip_extcommunity_list_standard_cmd);
  2877.   install_element (CONFIG_NODE, &ip_extcommunity_list_standard2_cmd);
  2878.   install_element (CONFIG_NODE, &ip_extcommunity_list_expanded_cmd);
  2879.   install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard_cmd);
  2880.   install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard2_cmd);
  2881.   install_element (CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd);
  2882.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_all_cmd);
  2883.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_all_cmd);
  2884.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_all_cmd);
  2885.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_expanded_all_cmd);
  2886.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_cmd);
  2887.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_cmd);
  2888.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_cmd);
  2889.   install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_expanded_cmd);
  2890.   install_element (VIEW_NODE, &show_ip_extcommunity_list_cmd);
  2891.   install_element (VIEW_NODE, &show_ip_extcommunity_list_arg_cmd);
  2892.   install_element (ENABLE_NODE, &show_ip_extcommunity_list_cmd);
  2893.   install_element (ENABLE_NODE, &show_ip_extcommunity_list_arg_cmd);
  2894.   /* bgpd version */
  2895.   install_element (VIEW_NODE, &show_version_bgpd_cmd);
  2896.   install_element (ENABLE_NODE, &show_version_bgpd_cmd);
  2897. }