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