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