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