2 @c This is part of the Quagga Manual.
3 @c @value{COPYRIGHT_STR}
5 @c Copyright @copyright{} 2015 Hewlett Packard Enterprise Development LP
6 @c See file quagga.texi for copying conditions.
10 @acronym{BGP} stands for a Border Gateway Protocol. The lastest BGP version
11 is 4. It is referred as BGP-4. BGP-4 is one of the Exterior Gateway
12 Protocols and de-fact standard of Inter Domain routing protocol.
13 BGP-4 is described in @cite{RFC1771, A Border Gateway Protocol
16 Many extensions have been added to @cite{RFC1771}. @cite{RFC2858,
17 Multiprotocol Extensions for BGP-4} provides multiprotocol support to
27 * BGP Address Family::
29 * BGP Communities Attribute::
30 * BGP Extended Communities Attribute::
31 * Displaying BGP routes::
32 * Capability Negotiation::
35 * How to set up a 6-Bone connection::
36 * Dump BGP packets and table::
37 * BGP Configuration Examples::
43 Default configuration file of @command{bgpd} is @file{bgpd.conf}.
44 @command{bgpd} searches the current directory first then
45 @value{INSTALL_PREFIX_ETC}/bgpd.conf. All of bgpd's command must be
46 configured in @file{bgpd.conf}.
48 @command{bgpd} specific invocation options are described below. Common
49 options may also be specified (@pxref{Common Invocation Options}).
53 @itemx --bgp_port=@var{PORT}
54 Set the bgp protocol's port number.
58 When program terminates, retain BGP routes added by zebra.
62 Specify a specific IP address for bgpd to listen on, rather than its
63 default of INADDR_ANY / IN6ADDR_ANY. This can be useful to constrain bgpd
64 to an internal address, or to run multiple bgpd processes on one host.
71 First of all you must configure BGP router with @command{router bgp}
72 command. To configure BGP router, you need AS number. AS number is an
73 identification of autonomous system. BGP protocol uses the AS number
74 for detecting whether the BGP connection is internal one or external one.
76 @deffn Command {router bgp @var{asn}} {}
77 Enable a BGP protocol process with the specified @var{asn}. After
78 this statement you can input any @code{BGP Commands}. You can not
79 create different BGP process under different @var{asn} without
80 specifying @code{multiple-instance} (@pxref{Multiple instance}).
83 @deffn Command {no router bgp @var{asn}} {}
84 Destroy a BGP protocol process with the specified @var{asn}.
87 @deffn {BGP} {bgp router-id @var{A.B.C.D}} {}
88 This command specifies the router-ID. If @command{bgpd} connects to @command{zebra} it gets
89 interface and address information. In that case default router ID value
90 is selected as the largest IP Address of the interfaces. When
91 @code{router zebra} is not enabled @command{bgpd} can't get interface information
92 so @code{router-id} is set to 0.0.0.0. So please set router-id by hand.
97 * BGP decision process::
98 * BGP route flap dampening::
102 @subsection BGP distance
104 @deffn {BGP} {distance bgp <1-255> <1-255> <1-255>} {}
105 This command change distance value of BGP. Each argument is distance
106 value for external routes, internal routes and local routes.
108 To have this command applied to existing routes requires a hard clear.
111 @deffn {BGP} {distance <1-255> @var{A.B.C.D/M}} {}
112 @deffnx {BGP} {distance <1-255> @var{A.B.C.D/M} @var{word}} {}
113 This command set distance value to
116 @node BGP decision process
117 @subsection BGP decision process
119 The decision process Quagga BGP uses to select routes is as follows:
122 @item 1. Weight check
123 prefer higher local weight routes to lower routes.
125 @item 2. Local preference check
126 prefer higher local preference routes to lower.
128 @item 3. Local route check
129 Prefer local routes (statics, aggregates, redistributed) to received routes.
131 @item 4. AS path length check
132 Prefer shortest hop-count AS_PATHs.
134 @item 5. Origin check
135 Prefer the lowest origin type route. That is, prefer IGP origin routes to
136 EGP, to Incomplete routes.
139 Where routes with a MED were received from the same AS,
140 prefer the route with the lowest MED. @xref{BGP MED}.
142 @item 7. External check
143 Prefer the route received from an external, eBGP peer
144 over routes received from other types of peers.
146 @item 8. IGP cost check
147 Prefer the route with the lower IGP cost.
149 @item 9. Multi-path check
150 If multi-pathing is enabled, then check whether
151 the routes not yet distinguished in preference may be considered equal. If
152 @ref{bgp bestpath as-path multipath-relax} is set, all such routes are
153 considered equal, otherwise routes received via iBGP with identical AS_PATHs
154 or routes received from eBGP neighbours in the same AS are considered equal.
156 @item 10 Already-selected external check
158 Where both routes were received from eBGP peers, then prefer the route which
159 is already selected. Note that this check is not applied if @ref{bgp
160 bestpath compare-routerid} is configured. This check can prevent some cases
163 @item 11. Router-ID check
164 Prefer the route with the lowest @w{router-ID}. If the
165 route has an @w{ORIGINATOR_ID} attribute, through iBGP reflection, then that
166 router ID is used, otherwise the @w{router-ID} of the peer the route was
167 received from is used.
169 @item 12. Cluster-List length check
170 The route with the shortest cluster-list
171 length is used. The cluster-list reflects the iBGP reflection path the
174 @item 13. Peer address
175 Prefer the route received from the peer with the higher
176 transport layer address, as a last-resort tie-breaker.
180 @deffn {BGP} {bgp bestpath as-path confed} {}
181 This command specifies that the length of confederation path sets and
182 sequences should should be taken into account during the BGP best path
186 @deffn {BGP} {bgp bestpath as-path multipath-relax} {}
187 @anchor{bgp bestpath as-path multipath-relax}
188 This command specifies that BGP decision process should consider paths
189 of equal AS_PATH length candidates for multipath computation. Without
190 the knob, the entire AS_PATH must match for multipath computation.
193 @deffn {BGP} {bgp bestpath compare-routerid} {}
194 @anchor{bgp bestpath compare-routerid}
196 Ensure that when comparing routes where both are equal on most metrics,
197 including local-pref, AS_PATH length, IGP cost, MED, that the tie is broken
200 If this option is enabled, then the already-selected check, where
201 already selected eBGP routes are preferred, is skipped.
203 If a route has an @w{ORIGINATOR_ID} attribute because it has been reflected,
204 that @w{ORIGINATOR_ID} will be used. Otherwise, the router-ID of the peer the
205 route was received from will be used.
207 The advantage of this is that the route-selection (at this point) will be
208 more deterministic. The disadvantage is that a few or even one lowest-ID
209 router may attract all trafic to otherwise-equal paths because of this
210 check. It may increase the possibility of MED or IGP oscillation, unless
211 other measures were taken to avoid these. The exact behaviour will be
212 sensitive to the iBGP and reflection topology.
217 @node BGP route flap dampening
218 @subsection BGP route flap dampening
220 @deffn {BGP} {bgp dampening @var{<1-45>} @var{<1-20000>} @var{<1-20000>} @var{<1-255>}} {}
221 This command enables BGP route-flap dampening and specifies dampening parameters.
224 @item @asis{half-life}
225 Half-life time for the penalty
226 @item @asis{reuse-threshold}
227 Value to start reusing a route
228 @item @asis{suppress-threshold}
229 Value to start suppressing a route
230 @item @asis{max-suppress}
231 Maximum duration to suppress a stable route
234 The route-flap damping algorithm is compatible with @cite{RFC2439}. The use of this command
235 is not recommended nowadays, see @uref{http://www.ripe.net/ripe/docs/ripe-378,,RIPE-378}.
241 The BGP MED (Multi_Exit_Discriminator) attribute has properties which can
242 cause subtle convergence problems in BGP. These properties and problems
243 have proven to be hard to understand, at least historically, and may still
244 not be widely understood. The following attempts to collect together and
245 present what is known about MED, to help operators and Quagga users in
246 designing and configuring their networks.
248 The BGP @acronym{MED, Multi_Exit_Discriminator} attribute is intended to
249 allow one AS to indicate its preferences for its ingress points to another
250 AS. The MED attribute will not be propagated on to another AS by the
251 receiving AS - it is `non-transitive' in the BGP sense.
253 E.g., if AS X and AS Y have 2 different BGP peering points, then AS X
254 might set a MED of 100 on routes advertised at one and a MED of 200 at the
255 other. When AS Y selects between otherwise equal routes to or via
256 AS X, AS Y should prefer to take the path via the lower MED peering of 100 with
257 AS X. Setting the MED allows an AS to influence the routing taken to it
258 within another, neighbouring AS.
260 In this use of MED it is not really meaningful to compare the MED value on
261 routes where the next AS on the paths differs. E.g., if AS Y also had a
262 route for some destination via AS Z in addition to the routes from AS X, and
263 AS Z had also set a MED, it wouldn't make sense for AS Y to compare AS Z's
264 MED values to those of AS X. The MED values have been set by different
265 administrators, with different frames of reference.
267 The default behaviour of BGP therefore is to not compare MED values across
268 routes received from different neighbouring ASes. In Quagga this is done by
269 comparing the neighbouring, left-most AS in the received AS_PATHs of the
270 routes and only comparing MED if those are the same.
272 @c TeXInfo uses the old, non-UTF-8 capable, pdftex, and so
273 @c doesn't render TeX the unicode precedes character correctly in PDF, etc.
274 @c Using a TeX code on the other hand doesn't work for non-TeX outputs
275 @c (plaintext, e.g.). So, use an output-conditional macro.
289 Unfortunately, this behaviour of MED, of sometimes being compared across
290 routes and sometimes not, depending on the properties of those other routes,
291 means MED can cause the order of preference over all the routes to be
292 undefined. That is, given routes A, B, and C, if A is preferred to B, and B
293 is preferred to C, then a well-defined order should mean the preference is
294 transitive (in the sense of orders @footnote{For some set of objects to have
295 an order, there @emph{must} be some binary ordering relation that is defined
296 for @emph{every} combination of those objects, and that relation @emph{must}
297 be transitive. I.e.@:, if the relation operator is @mprec{}, and if
298 a @mprec{} b and b @mprec{} c then that relation must carry over
299 and it @emph{must} be that a @mprec{} c for the objects to have an
300 order. The ordering relation may allow for equality, i.e.
301 a @mprec{} b and b @mprec{} a may both be true amd imply that
302 a and b are equal in the order and not distinguished by it, in
303 which case the set has a partial order. Otherwise, if there is an order,
304 all the objects have a distinct place in the order and the set has a total
305 order.}) and that A would be preferred to C.
307 However, when MED is involved this need not be the case. With MED it is
308 possible that C is actually preferred over A. So A is preferred to B, B is
309 preferred to C, but C is preferred to A. This can be true even where BGP
310 defines a deterministic ``most preferred'' route out of the full set of
311 A,B,C. With MED, for any given set of routes there may be a
312 deterministically preferred route, but there need not be any way to arrange
313 them into any order of preference. With unmodified MED, the order of
314 preference of routes literally becomes undefined.
316 That MED can induce non-transitive preferences over routes can cause issues.
317 Firstly, it may be perceived to cause routing table churn locally at
318 speakers; secondly, and more seriously, it may cause routing instability in
319 iBGP topologies, where sets of speakers continually oscillate between
322 The first issue arises from how speakers often implement routing decisions.
323 Though BGP defines a selection process that will deterministically select
324 the same route as best at any given speaker, even with MED, that process
325 requires evaluating all routes together. For performance and ease of
326 implementation reasons, many implementations evaluate route preferences in a
327 pair-wise fashion instead. Given there is no well-defined order when MED is
328 involved, the best route that will be chosen becomes subject to
329 implementation details, such as the order the routes are stored in. That
330 may be (locally) non-deterministic, e.g.@: it may be the order the routes
333 This indeterminism may be considered undesirable, though it need not cause
334 problems. It may mean additional routing churn is perceived, as sometimes
335 more updates may be produced than at other times in reaction to some event .
337 This first issue can be fixed with a more deterministic route selection that
338 ensures routes are ordered by the neighbouring AS during selection.
339 @xref{bgp deterministic-med}. This may reduce the number of updates as
340 routes are received, and may in some cases reduce routing churn. Though, it
341 could equally deterministically produce the largest possible set of updates
342 in response to the most common sequence of received updates.
344 A deterministic order of evaluation tends to imply an additional overhead of
345 sorting over any set of n routes to a destination. The implementation of
346 deterministic MED in Quagga scales significantly worse than most sorting
347 algorithms at present, with the number of paths to a given destination.
348 That number is often low enough to not cause any issues, but where there are
349 many paths, the deterministic comparison may quickly become increasingly
350 expensive in terms of CPU.
352 Deterministic local evaluation can @emph{not} fix the second, more major,
353 issue of MED however. Which is that the non-transitive preference of routes
354 MED can cause may lead to routing instability or oscillation across multiple
355 speakers in iBGP topologies. This can occur with full-mesh iBGP, but is
356 particularly problematic in non-full-mesh iBGP topologies that further
357 reduce the routing information known to each speaker. This has primarily
358 been documented with iBGP route-reflection topologies. However, any
359 route-hiding technologies potentially could also exacerbate oscillation with
362 This second issue occurs where speakers each have only a subset of routes,
363 and there are cycles in the preferences between different combinations of
364 routes - as the undefined order of preference of MED allows - and the routes
365 are distributed in a way that causes the BGP speakers to 'chase' those
366 cycles. This can occur even if all speakers use a deterministic order of
367 evaluation in route selection.
369 E.g., speaker 4 in AS A might receive a route from speaker 2 in AS X, and
370 from speaker 3 in AS Y; while speaker 5 in AS A might receive that route
371 from speaker 1 in AS Y. AS Y might set a MED of 200 at speaker 1, and 100
372 at speaker 3. I.e, using ASN:ID:MED to label the speakers:
377 X:2------|--A:4-------A:5--|-Y:1:200
383 Assuming all other metrics are equal (AS_PATH, ORIGIN, 0 IGP costs), then
384 based on the RFC4271 decision process speaker 4 will choose X:2 over
385 Y:3:100, based on the lower ID of 2. Speaker 4 advertises X:2 to speaker 5.
386 Speaker 5 will continue to prefer Y:1:200 based on the ID, and advertise
387 this to speaker 4. Speaker 4 will now have the full set of routes, and the
388 Y:1:200 it receives from 5 will beat X:2, but when speaker 4 compares
389 Y:1:200 to Y:3:100 the MED check now becomes active as the ASes match, and
390 now Y:3:100 is preferred. Speaker 4 therefore now advertises Y:3:100 to 5,
391 which will also agrees that Y:3:100 is preferred to Y:1:200, and so
392 withdraws the latter route from 4. Speaker 4 now has only X:2 and Y:3:100,
393 and X:2 beats Y:3:100, and so speaker 4 implicitly updates its route to
394 speaker 5 to X:2. Speaker 5 sees that Y:1:200 beats X:2 based on the ID,
395 and advertises Y:1:200 to speaker 4, and the cycle continues.
397 The root cause is the lack of a clear order of preference caused by how MED
398 sometimes is and sometimes is not compared, leading to this cycle in the
399 preferences between the routes:
403 /---> X:2 ---beats---> Y:3:100 --\
406 \---beats--- Y:1:200 <---beats---/
410 This particular type of oscillation in full-mesh iBGP topologies can be
411 avoided by speakers preferring already selected, external routes rather than
412 choosing to update to new a route based on a post-MED metric (e.g.
413 router-ID), at the cost of a non-deterministic selection process. Quagga
414 implements this, as do many other implementations, so long as it is not
415 overridden by setting @ref{bgp bestpath compare-routerid}, and see also
416 @ref{BGP decision process}, .
418 However, more complex and insidious cycles of oscillation are possible with
419 iBGP route-reflection, which are not so easily avoided. These have been
420 documented in various places. See, e.g., @cite{McPherson, D. and Gill, V.
421 and Walton, D., "Border Gateway Protocol (BGP) Persistent Route Oscillation
422 Condition", IETF RFC3345}, and @cite{Flavel, A. and M. Roughan, "Stable
423 and flexible iBGP", ACM SIGCOMM 2009}, and @cite{Griffin, T. and G. Wilfong,
424 "On the correctness of IBGP configuration", ACM SIGCOMM 2002} for concrete
425 examples and further references.
427 There is as of this writing @emph{no} known way to use MED for its original
428 purpose; @emph{and} reduce routing information in iBGP topologies;
429 @emph{and} be sure to avoid the instability problems of MED due the
430 non-transitive routing preferences it can induce; in general on arbitrary
433 There may be iBGP topology specific ways to reduce the instability risks,
434 even while using MED, e.g.@: by constraining the reflection topology and by
435 tuning IGP costs between route-reflector clusters, see RFC3345 for details.
436 In the near future, the Add-Path extension to BGP may also solve MED
437 oscillation while still allowing MED to be used as intended, by distributing
438 "best-paths per neighbour AS". This would be at the cost of distributing at
439 least as many routes to all speakers as a full-mesh iBGP would, if not more,
440 while also imposing similar CPU overheads as the "Deterministic MED" feature
441 at each Add-Path reflector.
443 More generally, the instability problems that MED can introduce on more
444 complex, non-full-mesh, iBGP topologies may be avoided either by:
449 Setting @ref{bgp always-compare-med}, however this allows MED to be compared
450 across values set by different neighbour ASes, which may not produce
451 coherent desirable results, of itself.
454 Effectively ignoring MED by setting MED to the same value (e.g.@: 0) using
455 @ref{routemap set metric} on all received routes, in combination with
456 setting @ref{bgp always-compare-med} on all speakers. This is the simplest
457 and most performant way to avoid MED oscillation issues, where an AS is happy
458 not to allow neighbours to inject this problematic metric.
462 As MED is evaluated after the AS_PATH length check, another possible use for
463 MED is for intra-AS steering of routes with equal AS_PATH length, as an
464 extension of the last case above. As MED is evaluated before IGP metric,
465 this can allow cold-potato routing to be implemented to send traffic to
466 preferred hand-offs with neighbours, rather than the closest hand-off
467 according to the IGP metric.
469 Note that even if action is taken to address the MED non-transitivity
470 issues, other oscillations may still be possible. E.g., on IGP cost if
471 iBGP and IGP topologies are at cross-purposes with each other - see the
472 Flavel and Roughan paper above for an example. Hence the guideline that the
473 iBGP topology should follow the IGP topology.
475 @deffn {BGP} {bgp deterministic-med} {}
476 @anchor{bgp deterministic-med}
478 Carry out route-selection in way that produces deterministic answers
479 locally, even in the face of MED and the lack of a well-defined order of
480 preference it can induce on routes. Without this option the preferred route
481 with MED may be determined largely by the order that routes were received
484 Setting this option will have a performance cost that may be noticeable when
485 there are many routes for each destination. Currently in Quagga it is
486 implemented in a way that scales poorly as the number of routes per
487 destination increases.
489 The default is that this option is not set.
492 Note that there are other sources of indeterminism in the route selection
493 process, specifically, the preference for older and already selected routes
494 from eBGP peers, @xref{BGP decision process}.
496 @deffn {BGP} {bgp always-compare-med} {}
497 @anchor{bgp always-compare-med}
499 Always compare the MED on routes, even when they were received from
500 different neighbouring ASes. Setting this option makes the order of
501 preference of routes more defined, and should eliminate MED induced
504 If using this option, it may also be desirable to use @ref{routemap set
505 metric} to set MED to 0 on routes received from external neighbours.
507 This option can be used, together with @ref{routemap set metric} to use MED
508 as an intra-AS metric to steer equal-length AS_PATH routes to, e.g., desired
519 * Route Aggregation::
520 * Redistribute to BGP::
524 @subsection BGP route
526 @deffn {BGP} {network @var{A.B.C.D/M}} {}
527 This command adds the announcement network.
534 This configuration example says that network 10.0.0.0/8 will be
535 announced to all neighbors. Some vendors' routers don't advertise
536 routes if they aren't present in their IGP routing tables; @code{bgpd}
537 doesn't care about IGP routes when announcing its routes.
540 @deffn {BGP} {no network @var{A.B.C.D/M}} {}
543 @node Route Aggregation
544 @subsection Route Aggregation
546 @deffn {BGP} {aggregate-address @var{A.B.C.D/M}} {}
547 This command specifies an aggregate address.
550 @deffn {BGP} {aggregate-address @var{A.B.C.D/M} as-set} {}
551 This command specifies an aggregate address. Resulting routes include
555 @deffn {BGP} {aggregate-address @var{A.B.C.D/M} summary-only} {}
556 This command specifies an aggregate address. Aggreated routes will
560 @deffn {BGP} {no aggregate-address @var{A.B.C.D/M}} {}
563 @node Redistribute to BGP
564 @subsection Redistribute to BGP
566 @deffn {BGP} {redistribute kernel} {}
567 Redistribute kernel route to BGP process.
570 @deffn {BGP} {redistribute static} {}
571 Redistribute static route to BGP process.
574 @deffn {BGP} {redistribute connected} {}
575 Redistribute connected route to BGP process.
578 @deffn {BGP} {redistribute rip} {}
579 Redistribute RIP route to BGP process.
582 @deffn {BGP} {redistribute ospf} {}
583 Redistribute OSPF route to BGP process.
591 * BGP Peer commands::
596 @subsection Defining Peer
598 @deffn {BGP} {neighbor @var{peer} remote-as @var{asn}} {}
599 Creates a new neighbor whose remote-as is @var{asn}. @var{peer}
600 can be an IPv4 address or an IPv6 address.
604 neighbor 10.0.0.1 remote-as 2
607 In this case my router, in AS-1, is trying to peer with AS-2 at
610 This command must be the first command used when configuring a neighbor.
611 If the remote-as is not specified, @command{bgpd} will complain like this:
613 can't find neighbor 10.0.0.1
617 @node BGP Peer commands
618 @subsection BGP Peer commands
620 In a @code{router bgp} clause there are neighbor specific configurations
623 @deffn {BGP} {neighbor @var{peer} shutdown} {}
624 @deffnx {BGP} {no neighbor @var{peer} shutdown} {}
625 Shutdown the peer. We can delete the neighbor's configuration by
626 @code{no neighbor @var{peer} remote-as @var{as-number}} but all
627 configuration of the neighbor will be deleted. When you want to
628 preserve the configuration, but want to drop the BGP peer, use this
632 @deffn {BGP} {neighbor @var{peer} ebgp-multihop} {}
633 @deffnx {BGP} {no neighbor @var{peer} ebgp-multihop} {}
636 @deffn {BGP} {neighbor @var{peer} description ...} {}
637 @deffnx {BGP} {no neighbor @var{peer} description ...} {}
638 Set description of the peer.
641 @deffn {BGP} {neighbor @var{peer} version @var{version}} {}
642 Set up the neighbor's BGP version. @var{version} can be @var{4},
643 @var{4+} or @var{4-}. BGP version @var{4} is the default value used for
644 BGP peering. BGP version @var{4+} means that the neighbor supports
645 Multiprotocol Extensions for BGP-4. BGP version @var{4-} is similar but
646 the neighbor speaks the old Internet-Draft revision 00's Multiprotocol
647 Extensions for BGP-4. Some routing software is still using this
651 @deffn {BGP} {neighbor @var{peer} interface @var{ifname}} {}
652 @deffnx {BGP} {no neighbor @var{peer} interface @var{ifname}} {}
653 When you connect to a BGP peer over an IPv6 link-local address, you
654 have to specify the @var{ifname} of the interface used for the
655 connection. To specify IPv4 session addresses, see the
656 @code{neighbor @var{peer} update-source} command below.
658 This command is deprecated and may be removed in a future release. Its
659 use should be avoided.
662 @deffn {BGP} {neighbor @var{peer} next-hop-self [all]} {}
663 @deffnx {BGP} {no neighbor @var{peer} next-hop-self [all]} {}
664 This command specifies an announced route's nexthop as being equivalent
665 to the address of the bgp router if it is learned via eBGP.
666 If the optional keyword @code{all} is specified the modifiation is done
667 also for routes learned via iBGP.
670 @deffn {BGP} {neighbor @var{peer} update-source @var{<ifname|address>}} {}
671 @deffnx {BGP} {no neighbor @var{peer} update-source} {}
672 Specify the IPv4 source address to use for the @acronym{BGP} session to this
673 neighbour, may be specified as either an IPv4 address directly or
674 as an interface name (in which case the @command{zebra} daemon MUST be running
675 in order for @command{bgpd} to be able to retrieve interface state).
679 neighbor foo update-source 192.168.0.1
680 neighbor bar update-source lo0
685 @deffn {BGP} {neighbor @var{peer} default-originate} {}
686 @deffnx {BGP} {no neighbor @var{peer} default-originate} {}
687 @command{bgpd}'s default is to not announce the default route (0.0.0.0/0) even it
688 is in routing table. When you want to announce default routes to the
689 peer, use this command.
692 @deffn {BGP} {neighbor @var{peer} port @var{port}} {}
693 @deffnx {BGP} {neighbor @var{peer} port @var{port}} {}
696 @deffn {BGP} {neighbor @var{peer} send-community} {}
697 @deffnx {BGP} {neighbor @var{peer} send-community} {}
700 @deffn {BGP} {neighbor @var{peer} weight @var{weight}} {}
701 @deffnx {BGP} {no neighbor @var{peer} weight @var{weight}} {}
702 This command specifies a default @var{weight} value for the neighbor's
706 @deffn {BGP} {neighbor @var{peer} maximum-prefix @var{number}} {}
707 @deffnx {BGP} {no neighbor @var{peer} maximum-prefix @var{number}} {}
710 @deffn {BGP} {neighbor @var{peer} local-as @var{as-number}} {}
711 @deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend} {}
712 @deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend replace-as} {}
713 @deffnx {BGP} {no neighbor @var{peer} local-as} {}
714 Specify an alternate AS for this BGP process when interacting with the
715 specified peer. With no modifiers, the specified local-as is prepended to
716 the received AS_PATH when receiving routing updates from the peer, and
717 prepended to the outgoing AS_PATH (after the process local AS) when
718 transmitting local routes to the peer.
720 If the no-prepend attribute is specified, then the supplied local-as is not
721 prepended to the received AS_PATH.
723 If the replace-as attribute is specified, then only the supplied local-as is
724 prepended to the AS_PATH when transmitting local-route updates to this peer.
726 Note that replace-as can only be specified if no-prepend is.
728 This command is only allowed for eBGP peers.
731 @deffn {BGP} {neighbor @var{peer} ttl-security hops @var{number}} {}
732 @deffnx {BGP} {no neighbor @var{peer} ttl-security hops @var{number}} {}
733 This command enforces Generalized TTL Security Mechanism (GTSM), as
734 specified in RFC 5082. With this command, only neighbors that are the
735 specified number of hops away will be allowed to become neighbors. This
736 command is mututally exclusive with @command{ebgp-multihop}.
740 @subsection Peer filtering
742 @deffn {BGP} {neighbor @var{peer} distribute-list @var{name} [in|out]} {}
743 This command specifies a distribute-list for the peer. @var{direct} is
744 @samp{in} or @samp{out}.
747 @deffn {BGP command} {neighbor @var{peer} prefix-list @var{name} [in|out]} {}
750 @deffn {BGP command} {neighbor @var{peer} filter-list @var{name} [in|out]} {}
753 @deffn {BGP} {neighbor @var{peer} route-map @var{name} [in|out]} {}
754 Apply a route-map on the neighbor. @var{direct} must be @code{in} or
758 @deffn {BGP} {bgp route-reflector allow-outbound-policy} {}
759 By default, attribute modification via route-map policy out is not reflected
760 on reflected routes. This option allows the modifications to be reflected as
761 well. Once enabled, it affects all reflected routes.
764 @c -----------------------------------------------------------------------
766 @section BGP Peer Group
768 @deffn {BGP} {neighbor @var{word} peer-group} {}
769 This command defines a new peer group.
772 @deffn {BGP} {neighbor @var{peer} peer-group @var{word}} {}
773 This command bind specific peer to peer group @var{word}.
776 @node BGP Address Family
777 @section BGP Address Family
779 Multiprotocol BGP enables BGP to carry routing information for multiple
780 Network Layer protocols. BGP supports multiple Address Family
781 Identifier (AFI), namely IPv4 and IPv6. Support is also provided for
782 multiple sets of per-AFI information via Subsequent Address Family
783 Identifiers (SAFI). In addition to unicast information, VPN information
784 @cite{RFC4364} and @cite{RFC4659}, and Encapsulation information
785 @cite{RFC5512} is supported.
787 @deffn {Command} {show ip bgp vpnv4 all} {}
788 @deffnx {Command} {show ipv6 bgp vpn all} {}
789 Print active IPV4 or IPV6 routes advertised via the VPN SAFI.
792 @deffn {Command} {show ip bgp encap all} {}
793 @deffnx {Command} {show ipv6 bgp encap all} {}
794 Print active IPV4 or IPV6 routes advertised via the Encapsulation SAFI.
797 @deffn {Command} {show bgp ipv4 encap summary} {}
798 @deffnx {Command} {show bgp ipv4 vpn summary} {}
799 @deffnx {Command} {show bgp ipv6 encap summary} {}
800 @deffnx {Command} {show bgp ipv6 vpn summary} {}
801 Print a summary of neighbor connections for the specified AFI/SAFI combination.
804 @c -----------------------------------------------------------------------
805 @node Autonomous System
806 @section Autonomous System
808 The @acronym{AS,Autonomous System} number is one of the essential
809 element of BGP. BGP is a distance vector routing protocol, and the
810 AS-Path framework provides distance vector metric and loop detection to
811 BGP. @cite{RFC1930, Guidelines for creation, selection, and
812 registration of an Autonomous System (AS)} provides some background on
813 the concepts of an AS.
815 The AS number is a two octet value, ranging in value from 1 to 65535.
816 The AS numbers 64512 through 65535 are defined as private AS numbers.
817 Private AS numbers must not to be advertised in the global Internet.
820 * AS Path Regular Expression::
821 * Display BGP Routes by AS Path::
822 * AS Path Access List::
823 * Using AS Path in Route Map::
824 * Private AS Numbers::
827 @node AS Path Regular Expression
828 @subsection AS Path Regular Expression
830 AS path regular expression can be used for displaying BGP routes and
831 AS path access list. AS path regular expression is based on
832 @code{POSIX 1003.2} regular expressions. Following description is
833 just a subset of @code{POSIX} regular expression. User can use full
834 @code{POSIX} regular expression. Adding to that special character '_'
835 is added for AS path regular expression.
839 Matches any single character.
841 Matches 0 or more occurrences of pattern.
843 Matches 1 or more occurrences of pattern.
845 Match 0 or 1 occurrences of pattern.
847 Matches the beginning of the line.
849 Matches the end of the line.
851 Character @code{_} has special meanings in AS path regular expression.
852 It matches to space and comma , and AS set delimiter @{ and @} and AS
853 confederation delimiter @code{(} and @code{)}. And it also matches to
854 the beginning of the line and the end of the line. So @code{_} can be
855 used for AS value boundaries match. @code{show ip bgp regexp _7675_}
856 matches to all of BGP routes which as AS number include @var{7675}.
859 @node Display BGP Routes by AS Path
860 @subsection Display BGP Routes by AS Path
862 To show BGP routes which has specific AS path information @code{show
863 ip bgp} command can be used.
865 @deffn Command {show ip bgp regexp @var{line}} {}
866 This commands display BGP routes that matches AS path regular
867 expression @var{line}.
870 @node AS Path Access List
871 @subsection AS Path Access List
873 AS path access list is user defined AS path.
875 @deffn {Command} {ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
876 This command defines a new AS path access list.
879 @deffn {Command} {no ip as-path access-list @var{word}} {}
880 @deffnx {Command} {no ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
883 @node Using AS Path in Route Map
884 @subsection Using AS Path in Route Map
886 @deffn {Route Map} {match as-path @var{word}} {}
889 @deffn {Route Map} {set as-path prepend @var{as-path}} {}
890 Prepend the given string of AS numbers to the AS_PATH.
893 @deffn {Route Map} {set as-path prepend last-as @var{num}} {}
894 Prepend the existing last AS number (the leftmost ASN) to the AS_PATH.
897 @node Private AS Numbers
898 @subsection Private AS Numbers
900 @c -----------------------------------------------------------------------
901 @node BGP Communities Attribute
902 @section BGP Communities Attribute
904 BGP communities attribute is widely used for implementing policy
905 routing. Network operators can manipulate BGP communities attribute
906 based on their network policy. BGP communities attribute is defined
907 in @cite{RFC1997, BGP Communities Attribute} and
908 @cite{RFC1998, An Application of the BGP Community Attribute
909 in Multi-home Routing}. It is an optional transitive attribute,
910 therefore local policy can travel through different autonomous system.
912 Communities attribute is a set of communities values. Each
913 communities value is 4 octet long. The following format is used to
914 define communities value.
918 This format represents 4 octet communities value. @code{AS} is high
919 order 2 octet in digit format. @code{VAL} is low order 2 octet in
920 digit format. This format is useful to define AS oriented policy
921 value. For example, @code{7675:80} can be used when AS 7675 wants to
922 pass local policy value 80 to neighboring peer.
924 @code{internet} represents well-known communities value 0.
926 @code{no-export} represents well-known communities value @code{NO_EXPORT}@*
927 @r{(0xFFFFFF01)}. All routes carry this value must not be advertised
928 to outside a BGP confederation boundary. If neighboring BGP peer is
929 part of BGP confederation, the peer is considered as inside a BGP
930 confederation boundary, so the route will be announced to the peer.
932 @code{no-advertise} represents well-known communities value
933 @code{NO_ADVERTISE}@*@r{(0xFFFFFF02)}. All routes carry this value
934 must not be advertise to other BGP peers.
936 @code{local-AS} represents well-known communities value
937 @code{NO_EXPORT_SUBCONFED} @r{(0xFFFFFF03)}. All routes carry this
938 value must not be advertised to external BGP peers. Even if the
939 neighboring router is part of confederation, it is considered as
940 external BGP peer, so the route will not be announced to the peer.
943 When BGP communities attribute is received, duplicated communities
944 value in the communities attribute is ignored and each communities
945 values are sorted in numerical order.
948 * BGP Community Lists::
949 * Numbered BGP Community Lists::
950 * BGP Community in Route Map::
951 * Display BGP Routes by Community::
952 * Using BGP Communities Attribute::
955 @node BGP Community Lists
956 @subsection BGP Community Lists
958 BGP community list is a user defined BGP communites attribute list.
959 BGP community list can be used for matching or manipulating BGP
960 communities attribute in updates.
962 There are two types of community list. One is standard community
963 list and another is expanded community list. Standard community list
964 defines communities attribute. Expanded community list defines
965 communities attribute string with regular expression. Standard
966 community list is compiled into binary format when user define it.
967 Standard community list will be directly compared to BGP communities
968 attribute in BGP updates. Therefore the comparison is faster than
969 expanded community list.
971 @deffn Command {ip community-list standard @var{name} @{permit|deny@} @var{community}} {}
972 This command defines a new standard community list. @var{community}
973 is communities value. The @var{community} is compiled into community
974 structure. We can define multiple community list under same name. In
975 that case match will happen user defined order. Once the
976 community list matches to communities attribute in BGP updates it
977 return permit or deny by the community list definition. When there is
978 no matched entry, deny will be returned. When @var{community} is
979 empty it matches to any routes.
982 @deffn Command {ip community-list expanded @var{name} @{permit|deny@} @var{line}} {}
983 This command defines a new expanded community list. @var{line} is a
984 string expression of communities attribute. @var{line} can include
985 regular expression to match communities attribute in BGP updates.
988 @deffn Command {no ip community-list @var{name}} {}
989 @deffnx Command {no ip community-list standard @var{name}} {}
990 @deffnx Command {no ip community-list expanded @var{name}} {}
991 These commands delete community lists specified by @var{name}. All of
992 community lists shares a single name space. So community lists can be
993 removed simpley specifying community lists name.
996 @deffn {Command} {show ip community-list} {}
997 @deffnx {Command} {show ip community-list @var{name}} {}
998 This command display current community list information. When
999 @var{name} is specified the specified community list's information is
1003 # show ip community-list
1004 Named Community standard list CLIST
1005 permit 7675:80 7675:100 no-export
1007 Named Community expanded list EXPAND
1010 # show ip community-list CLIST
1011 Named Community standard list CLIST
1012 permit 7675:80 7675:100 no-export
1017 @node Numbered BGP Community Lists
1018 @subsection Numbered BGP Community Lists
1020 When number is used for BGP community list name, the number has
1021 special meanings. Community list number in the range from 1 and 99 is
1022 standard community list. Community list number in the range from 100
1023 to 199 is expanded community list. These community lists are called
1024 as numbered community lists. On the other hand normal community lists
1025 is called as named community lists.
1027 @deffn Command {ip community-list <1-99> @{permit|deny@} @var{community}} {}
1028 This command defines a new community list. <1-99> is standard
1029 community list number. Community list name within this range defines
1030 standard community list. When @var{community} is empty it matches to
1034 @deffn Command {ip community-list <100-199> @{permit|deny@} @var{community}} {}
1035 This command defines a new community list. <100-199> is expanded
1036 community list number. Community list name within this range defines
1037 expanded community list.
1040 @deffn Command {ip community-list @var{name} @{permit|deny@} @var{community}} {}
1041 When community list type is not specifed, the community list type is
1042 automatically detected. If @var{community} can be compiled into
1043 communities attribute, the community list is defined as a standard
1044 community list. Otherwise it is defined as an expanded community
1045 list. This feature is left for backward compability. Use of this
1046 feature is not recommended.
1049 @node BGP Community in Route Map
1050 @subsection BGP Community in Route Map
1052 In Route Map (@pxref{Route Map}), we can match or set BGP
1053 communities attribute. Using this feature network operator can
1054 implement their network policy based on BGP communities attribute.
1056 Following commands can be used in Route Map.
1058 @deffn {Route Map} {match community @var{word}} {}
1059 @deffnx {Route Map} {match community @var{word} exact-match} {}
1060 This command perform match to BGP updates using community list
1061 @var{word}. When the one of BGP communities value match to the one of
1062 communities value in community list, it is match. When
1063 @code{exact-match} keyword is spcified, match happen only when BGP
1064 updates have completely same communities value specified in the
1068 @deffn {Route Map} {set community none} {}
1069 @deffnx {Route Map} {set community @var{community}} {}
1070 @deffnx {Route Map} {set community @var{community} additive} {}
1071 This command manipulate communities value in BGP updates. When
1072 @code{none} is specified as communities value, it removes entire
1073 communities attribute from BGP updates. When @var{community} is not
1074 @code{none}, specified communities value is set to BGP updates. If
1075 BGP updates already has BGP communities value, the existing BGP
1076 communities value is replaced with specified @var{community} value.
1077 When @code{additive} keyword is specified, @var{community} is appended
1078 to the existing communities value.
1081 @deffn {Route Map} {set comm-list @var{word} delete} {}
1082 This command remove communities value from BGP communities attribute.
1083 The @var{word} is community list name. When BGP route's communities
1084 value matches to the community list @var{word}, the communities value
1085 is removed. When all of communities value is removed eventually, the
1086 BGP update's communities attribute is completely removed.
1089 @node Display BGP Routes by Community
1090 @subsection Display BGP Routes by Community
1092 To show BGP routes which has specific BGP communities attribute,
1093 @code{show ip bgp} command can be used. The @var{community} value and
1094 community list can be used for @code{show ip bgp} command.
1096 @deffn Command {show ip bgp community} {}
1097 @deffnx Command {show ip bgp community @var{community}} {}
1098 @deffnx Command {show ip bgp community @var{community} exact-match} {}
1099 @code{show ip bgp community} displays BGP routes which has communities
1100 attribute. When @var{community} is specified, BGP routes that matches
1101 @var{community} value is displayed. For this command, @code{internet}
1102 keyword can't be used for @var{community} value. When
1103 @code{exact-match} is specified, it display only routes that have an
1107 @deffn Command {show ip bgp community-list @var{word}} {}
1108 @deffnx Command {show ip bgp community-list @var{word} exact-match} {}
1109 This commands display BGP routes that matches community list
1110 @var{word}. When @code{exact-match} is specified, display only routes
1111 that have an exact match.
1114 @node Using BGP Communities Attribute
1115 @subsection Using BGP Communities Attribute
1117 Following configuration is the most typical usage of BGP communities
1118 attribute. AS 7675 provides upstream Internet connection to AS 100.
1119 When following configuration exists in AS 7675, AS 100 networks
1120 operator can set local preference in AS 7675 network by setting BGP
1121 communities attribute to the updates.
1125 neighbor 192.168.0.1 remote-as 100
1126 neighbor 192.168.0.1 route-map RMAP in
1128 ip community-list 70 permit 7675:70
1129 ip community-list 70 deny
1130 ip community-list 80 permit 7675:80
1131 ip community-list 80 deny
1132 ip community-list 90 permit 7675:90
1133 ip community-list 90 deny
1135 route-map RMAP permit 10
1137 set local-preference 70
1139 route-map RMAP permit 20
1141 set local-preference 80
1143 route-map RMAP permit 30
1145 set local-preference 90
1148 Following configuration announce 10.0.0.0/8 from AS 100 to AS 7675.
1149 The route has communities value 7675:80 so when above configuration
1150 exists in AS 7675, announced route's local preference will be set to
1156 neighbor 192.168.0.2 remote-as 7675
1157 neighbor 192.168.0.2 route-map RMAP out
1159 ip prefix-list PLIST permit 10.0.0.0/8
1161 route-map RMAP permit 10
1162 match ip address prefix-list PLIST
1163 set community 7675:80
1166 Following configuration is an example of BGP route filtering using
1167 communities attribute. This configuration only permit BGP routes
1168 which has BGP communities value 0:80 and 0:90. Network operator can
1169 put special internal communities value at BGP border router, then
1170 limit the BGP routes announcement into the internal network.
1174 neighbor 192.168.0.1 remote-as 100
1175 neighbor 192.168.0.1 route-map RMAP in
1177 ip community-list 1 permit 0:80 0:90
1179 route-map RMAP permit in
1183 Following exmaple filter BGP routes which has communities value 1:1.
1184 When there is no match community-list returns deny. To avoid
1185 filtering all of routes, we need to define permit any at last.
1189 neighbor 192.168.0.1 remote-as 100
1190 neighbor 192.168.0.1 route-map RMAP in
1192 ip community-list standard FILTER deny 1:1
1193 ip community-list standard FILTER permit
1195 route-map RMAP permit 10
1196 match community FILTER
1199 Communities value keyword @code{internet} has special meanings in
1200 standard community lists. In below example @code{internet} act as
1201 match any. It matches all of BGP routes even if the route does not
1202 have communities attribute at all. So community list @code{INTERNET}
1203 is same as above example's @code{FILTER}.
1206 ip community-list standard INTERNET deny 1:1
1207 ip community-list standard INTERNET permit internet
1210 Following configuration is an example of communities value deletion.
1211 With this configuration communities value 100:1 and 100:2 is removed
1212 from BGP updates. For communities value deletion, only @code{permit}
1213 community-list is used. @code{deny} community-list is ignored.
1217 neighbor 192.168.0.1 remote-as 100
1218 neighbor 192.168.0.1 route-map RMAP in
1220 ip community-list standard DEL permit 100:1 100:2
1222 route-map RMAP permit 10
1223 set comm-list DEL delete
1226 @c -----------------------------------------------------------------------
1227 @node BGP Extended Communities Attribute
1228 @section BGP Extended Communities Attribute
1230 BGP extended communities attribute is introduced with MPLS VPN/BGP
1231 technology. MPLS VPN/BGP expands capability of network infrastructure
1232 to provide VPN functionality. At the same time it requires a new
1233 framework for policy routing. With BGP Extended Communities Attribute
1234 we can use Route Target or Site of Origin for implementing network
1235 policy for MPLS VPN/BGP.
1237 BGP Extended Communities Attribute is similar to BGP Communities
1238 Attribute. It is an optional transitive attribute. BGP Extended
1239 Communities Attribute can carry multiple Extended Community value.
1240 Each Extended Community value is eight octet length.
1242 BGP Extended Communities Attribute provides an extended range
1243 compared with BGP Communities Attribute. Adding to that there is a
1244 type field in each value to provides community space structure.
1246 There are two format to define Extended Community value. One is AS
1247 based format the other is IP address based format.
1251 This is a format to define AS based Extended Community value.
1252 @code{AS} part is 2 octets Global Administrator subfield in Extended
1253 Community value. @code{VAL} part is 4 octets Local Administrator
1254 subfield. @code{7675:100} represents AS 7675 policy value 100.
1255 @item IP-Address:VAL
1256 This is a format to define IP address based Extended Community value.
1257 @code{IP-Address} part is 4 octets Global Administrator subfield.
1258 @code{VAL} part is 2 octets Local Administrator subfield.
1259 @code{10.0.0.1:100} represents
1263 * BGP Extended Community Lists::
1264 * BGP Extended Communities in Route Map::
1267 @node BGP Extended Community Lists
1268 @subsection BGP Extended Community Lists
1270 Expanded Community Lists is a user defined BGP Expanded Community
1273 @deffn Command {ip extcommunity-list standard @var{name} @{permit|deny@} @var{extcommunity}} {}
1274 This command defines a new standard extcommunity-list.
1275 @var{extcommunity} is extended communities value. The
1276 @var{extcommunity} is compiled into extended community structure. We
1277 can define multiple extcommunity-list under same name. In that case
1278 match will happen user defined order. Once the extcommunity-list
1279 matches to extended communities attribute in BGP updates it return
1280 permit or deny based upon the extcommunity-list definition. When
1281 there is no matched entry, deny will be returned. When
1282 @var{extcommunity} is empty it matches to any routes.
1285 @deffn Command {ip extcommunity-list expanded @var{name} @{permit|deny@} @var{line}} {}
1286 This command defines a new expanded extcommunity-list. @var{line} is
1287 a string expression of extended communities attribute. @var{line} can
1288 include regular expression to match extended communities attribute in
1292 @deffn Command {no ip extcommunity-list @var{name}} {}
1293 @deffnx Command {no ip extcommunity-list standard @var{name}} {}
1294 @deffnx Command {no ip extcommunity-list expanded @var{name}} {}
1295 These commands delete extended community lists specified by
1296 @var{name}. All of extended community lists shares a single name
1297 space. So extended community lists can be removed simpley specifying
1301 @deffn {Command} {show ip extcommunity-list} {}
1302 @deffnx {Command} {show ip extcommunity-list @var{name}} {}
1303 This command display current extcommunity-list information. When
1304 @var{name} is specified the community list's information is shown.
1307 # show ip extcommunity-list
1311 @node BGP Extended Communities in Route Map
1312 @subsection BGP Extended Communities in Route Map
1314 @deffn {Route Map} {match extcommunity @var{word}} {}
1317 @deffn {Route Map} {set extcommunity rt @var{extcommunity}} {}
1318 This command set Route Target value.
1321 @deffn {Route Map} {set extcommunity soo @var{extcommunity}} {}
1322 This command set Site of Origin value.
1325 @c -----------------------------------------------------------------------
1326 @node Displaying BGP routes
1327 @section Displaying BGP Routes
1331 * More Show IP BGP::
1335 @subsection Show IP BGP
1337 @deffn {Command} {show ip bgp} {}
1338 @deffnx {Command} {show ip bgp @var{A.B.C.D}} {}
1339 @deffnx {Command} {show ip bgp @var{X:X::X:X}} {}
1340 This command displays BGP routes. When no route is specified it
1341 display all of IPv4 BGP routes.
1345 BGP table version is 0, local router ID is 10.1.1.1
1346 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
1347 Origin codes: i - IGP, e - EGP, ? - incomplete
1349 Network Next Hop Metric LocPrf Weight Path
1350 *> 1.1.1.1/32 0.0.0.0 0 32768 i
1352 Total number of prefixes 1
1355 @node More Show IP BGP
1356 @subsection More Show IP BGP
1358 @deffn {Command} {show ip bgp regexp @var{line}} {}
1359 This command display BGP routes using AS path regular expression (@pxref{Display BGP Routes by AS Path}).
1362 @deffn Command {show ip bgp community @var{community}} {}
1363 @deffnx Command {show ip bgp community @var{community} exact-match} {}
1364 This command display BGP routes using @var{community} (@pxref{Display
1365 BGP Routes by Community}).
1368 @deffn Command {show ip bgp community-list @var{word}} {}
1369 @deffnx Command {show ip bgp community-list @var{word} exact-match} {}
1370 This command display BGP routes using community list (@pxref{Display
1371 BGP Routes by Community}).
1374 @deffn {Command} {show ip bgp summary} {}
1377 @deffn {Command} {show ip bgp neighbor [@var{peer}]} {}
1380 @deffn {Command} {clear ip bgp @var{peer}} {}
1381 Clear peers which have addresses of X.X.X.X
1384 @deffn {Command} {clear ip bgp @var{peer} soft in} {}
1385 Clear peer using soft reconfiguration.
1388 @deffn {Command} {show ip bgp dampened-paths} {}
1389 Display paths suppressed due to dampening
1392 @deffn {Command} {show ip bgp flap-statistics} {}
1393 Display flap statistics of routes
1396 @deffn {Command} {show debug} {}
1399 @deffn {Command} {debug event} {}
1402 @deffn {Command} {debug update} {}
1405 @deffn {Command} {debug keepalive} {}
1408 @deffn {Command} {no debug event} {}
1411 @deffn {Command} {no debug update} {}
1414 @deffn {Command} {no debug keepalive} {}
1417 @node Capability Negotiation
1418 @section Capability Negotiation
1420 When adding IPv6 routing information exchange feature to BGP. There
1421 were some proposals. @acronym{IETF,Internet Engineering Task Force}
1422 @acronym{IDR, Inter Domain Routing} @acronym{WG, Working group} adopted
1423 a proposal called Multiprotocol Extension for BGP. The specification
1424 is described in @cite{RFC2283}. The protocol does not define new protocols.
1425 It defines new attributes to existing BGP. When it is used exchanging
1426 IPv6 routing information it is called BGP-4+. When it is used for
1427 exchanging multicast routing information it is called MBGP.
1429 @command{bgpd} supports Multiprotocol Extension for BGP. So if remote
1430 peer supports the protocol, @command{bgpd} can exchange IPv6 and/or
1431 multicast routing information.
1433 Traditional BGP did not have the feature to detect remote peer's
1434 capabilities, e.g. whether it can handle prefix types other than IPv4
1435 unicast routes. This was a big problem using Multiprotocol Extension
1436 for BGP to operational network. @cite{RFC2842, Capabilities
1437 Advertisement with BGP-4} adopted a feature called Capability
1438 Negotiation. @command{bgpd} use this Capability Negotiation to detect
1439 the remote peer's capabilities. If the peer is only configured as IPv4
1440 unicast neighbor, @command{bgpd} does not send these Capability
1441 Negotiation packets (at least not unless other optional BGP features
1442 require capability negotation).
1444 By default, Quagga will bring up peering with minimal common capability
1445 for the both sides. For example, local router has unicast and
1446 multicast capabilitie and remote router has unicast capability. In
1447 this case, the local router will establish the connection with unicast
1448 only capability. When there are no common capabilities, Quagga sends
1449 Unsupported Capability error and then resets the connection.
1451 If you want to completely match capabilities with remote peer. Please
1452 use @command{strict-capability-match} command.
1454 @deffn {BGP} {neighbor @var{peer} strict-capability-match} {}
1455 @deffnx {BGP} {no neighbor @var{peer} strict-capability-match} {}
1456 Strictly compares remote capabilities and local capabilities. If capabilities
1457 are different, send Unsupported Capability error then reset connection.
1460 You may want to disable sending Capability Negotiation OPEN message
1461 optional parameter to the peer when remote peer does not implement
1462 Capability Negotiation. Please use @command{dont-capability-negotiate}
1463 command to disable the feature.
1465 @deffn {BGP} {neighbor @var{peer} dont-capability-negotiate} {}
1466 @deffnx {BGP} {no neighbor @var{peer} dont-capability-negotiate} {}
1467 Suppress sending Capability Negotiation as OPEN message optional
1468 parameter to the peer. This command only affects the peer is configured
1469 other than IPv4 unicast configuration.
1472 When remote peer does not have capability negotiation feature, remote
1473 peer will not send any capabilities at all. In that case, bgp
1474 configures the peer with configured capabilities.
1476 You may prefer locally configured capabilities more than the negotiated
1477 capabilities even though remote peer sends capabilities. If the peer
1478 is configured by @command{override-capability}, @command{bgpd} ignores
1479 received capabilities then override negotiated capabilities with
1482 @deffn {BGP} {neighbor @var{peer} override-capability} {}
1483 @deffnx {BGP} {no neighbor @var{peer} override-capability} {}
1484 Override the result of Capability Negotiation with local configuration.
1485 Ignore remote peer's capability value.
1488 @node Route Reflector
1489 @section Route Reflector
1491 @deffn {BGP} {bgp cluster-id @var{a.b.c.d}} {}
1494 @deffn {BGP} {neighbor @var{peer} route-reflector-client} {}
1495 @deffnx {BGP} {no neighbor @var{peer} route-reflector-client} {}
1499 @section Route Server
1501 At an Internet Exchange point, many ISPs are connected to each other by
1502 external BGP peering. Normally these external BGP connection are done by
1503 @samp{full mesh} method. As with internal BGP full mesh formation,
1504 this method has a scaling problem.
1506 This scaling problem is well known. Route Server is a method to resolve
1507 the problem. Each ISP's BGP router only peers to Route Server. Route
1508 Server serves as BGP information exchange to other BGP routers. By
1509 applying this method, numbers of BGP connections is reduced from
1510 O(n*(n-1)/2) to O(n).
1512 Unlike normal BGP router, Route Server must have several routing tables
1513 for managing different routing policies for each BGP speaker. We call the
1514 routing tables as different @code{view}s. @command{bgpd} can work as
1515 normal BGP router or Route Server or both at the same time.
1518 * Multiple instance::
1519 * BGP instance and view::
1521 * Viewing the view::
1524 @node Multiple instance
1525 @subsection Multiple instance
1527 To enable multiple view function of @code{bgpd}, you must turn on
1528 multiple instance feature beforehand.
1530 @deffn {Command} {bgp multiple-instance} {}
1531 Enable BGP multiple instance feature. After this feature is enabled,
1532 you can make multiple BGP instances or multiple BGP views.
1535 @deffn {Command} {no bgp multiple-instance} {}
1536 Disable BGP multiple instance feature. You can not disable this feature
1537 when BGP multiple instances or views exist.
1540 When you want to make configuration more Cisco like one,
1542 @deffn {Command} {bgp config-type cisco} {}
1543 Cisco compatible BGP configuration output.
1546 When bgp config-type cisco is specified,
1548 ``no synchronization'' is displayed.
1549 ``no auto-summary'' is displayed.
1551 ``network'' and ``aggregate-address'' argument is displayed as
1554 Quagga: network 10.0.0.0/8
1555 Cisco: network 10.0.0.0
1557 Quagga: aggregate-address 192.168.0.0/24
1558 Cisco: aggregate-address 192.168.0.0 255.255.255.0
1560 Community attribute handling is also different. If there is no
1561 configuration is specified community attribute and extended community
1562 attribute are sent to neighbor. When user manually disable the
1563 feature community attribute is not sent to the neighbor. In case of
1564 @command{bgp config-type cisco} is specified, community attribute is not
1565 sent to the neighbor by default. To send community attribute user has
1566 to specify @command{neighbor A.B.C.D send-community} command.
1571 neighbor 10.0.0.1 remote-as 1
1572 no neighbor 10.0.0.1 send-community
1575 neighbor 10.0.0.1 remote-as 1
1576 neighbor 10.0.0.1 send-community
1580 @deffn {Command} {bgp config-type zebra} {}
1581 Quagga style BGP configuration. This is default.
1584 @node BGP instance and view
1585 @subsection BGP instance and view
1587 BGP instance is a normal BGP process. The result of route selection
1588 goes to the kernel routing table. You can setup different AS at the
1589 same time when BGP multiple instance feature is enabled.
1591 @deffn {Command} {router bgp @var{as-number}} {}
1592 Make a new BGP instance. You can use arbitrary word for the @var{name}.
1597 bgp multiple-instance
1600 neighbor 10.0.0.1 remote-as 2
1601 neighbor 10.0.0.2 remote-as 3
1604 neighbor 10.0.0.3 remote-as 4
1605 neighbor 10.0.0.4 remote-as 5
1609 BGP view is almost same as normal BGP process. The result of
1610 route selection does not go to the kernel routing table. BGP view is
1611 only for exchanging BGP routing information.
1613 @deffn {Command} {router bgp @var{as-number} view @var{name}} {}
1614 Make a new BGP view. You can use arbitrary word for the @var{name}. This
1615 view's route selection result does not go to the kernel routing table.
1618 With this command, you can setup Route Server like below.
1622 bgp multiple-instance
1625 neighbor 10.0.0.1 remote-as 2
1626 neighbor 10.0.0.2 remote-as 3
1629 neighbor 10.0.0.3 remote-as 4
1630 neighbor 10.0.0.4 remote-as 5
1634 @node Routing policy
1635 @subsection Routing policy
1637 You can set different routing policy for a peer. For example, you can
1638 set different filter for a peer.
1642 bgp multiple-instance
1645 neighbor 10.0.0.1 remote-as 2
1646 neighbor 10.0.0.1 distribute-list 1 in
1649 neighbor 10.0.0.1 remote-as 2
1650 neighbor 10.0.0.1 distribute-list 2 in
1654 This means BGP update from a peer 10.0.0.1 goes to both BGP view 1 and view
1655 2. When the update is inserted into view 1, distribute-list 1 is
1656 applied. On the other hand, when the update is inserted into view 2,
1657 distribute-list 2 is applied.
1659 @node Viewing the view
1660 @subsection Viewing the view
1662 To display routing table of BGP view, you must specify view name.
1664 @deffn {Command} {show ip bgp view @var{name}} {}
1665 Display routing table of BGP view @var{name}.
1668 @node How to set up a 6-Bone connection
1669 @section How to set up a 6-Bone connection
1677 ! Actually there is no need to configure zebra
1683 ! This means that routes go through zebra and into the kernel.
1687 ! MP-BGP configuration
1690 bgp router-id 10.0.0.1
1691 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 remote-as @var{as-number}
1694 network 3ffe:506::/32
1695 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 activate
1696 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 route-map set-nexthop out
1697 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 remote-as @var{as-number}
1698 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 route-map set-nexthop out
1701 ipv6 access-list all permit any
1703 ! Set output nexthop address.
1705 route-map set-nexthop permit 10
1706 match ipv6 address all
1707 set ipv6 nexthop global 3ffe:1cfa:0:2:2c0:4fff:fe68:a225
1708 set ipv6 nexthop local fe80::2c0:4fff:fe68:a225
1710 ! logfile FILENAME is obsolete. Please use log file FILENAME
1717 @node Dump BGP packets and table
1718 @section Dump BGP packets and table
1720 @deffn Command {dump bgp all @var{path} [@var{interval}]} {}
1721 @deffnx Command {dump bgp all-et @var{path} [@var{interval}]} {}
1722 @deffnx Command {no dump bgp all [@var{path}] [@var{interval}]} {}
1723 Dump all BGP packet and events to @var{path} file.
1724 If @var{interval} is set, a new file will be created for echo @var{interval} of seconds.
1725 The path @var{path} can be set with date and time formatting (strftime).
1726 The type ‘all-et’ enables support for Extended Timestamp Header (@pxref{Packet Binary Dump Format}).
1727 (@pxref{Packet Binary Dump Format})
1730 @deffn Command {dump bgp updates @var{path} [@var{interval}]} {}
1731 @deffnx Command {dump bgp updates-et @var{path} [@var{interval}]} {}
1732 @deffnx Command {no dump bgp updates [@var{path}] [@var{interval}]} {}
1733 Dump only BGP updates messages to @var{path} file.
1734 If @var{interval} is set, a new file will be created for echo @var{interval} of seconds.
1735 The path @var{path} can be set with date and time formatting (strftime).
1736 The type ‘updates-et’ enables support for Extended Timestamp Header (@pxref{Packet Binary Dump Format}).
1739 @deffn Command {dump bgp routes-mrt @var{path}} {}
1740 @deffnx Command {dump bgp routes-mrt @var{path} @var{interval}} {}
1741 @deffnx Command {no dump bgp route-mrt [@var{path}] [@var{interval}]} {}
1742 Dump whole BGP routing table to @var{path}. This is heavy process.
1743 The path @var{path} can be set with date and time formatting (strftime).
1744 If @var{interval} is set, a new file will be created for echo @var{interval} of seconds.
1747 Note: the interval variable can also be set using hours and minutes: 04h20m00.
1750 @node BGP Configuration Examples
1751 @section BGP Configuration Examples
1753 Example of a session to an upstream, advertising only one prefix to it.
1757 bgp router-id 10.236.87.1
1758 network 10.236.87.0/24
1759 neighbor upstream peer-group
1760 neighbor upstream remote-as 64515
1761 neighbor upstream capability dynamic
1762 neighbor upstream prefix-list pl-allowed-adv out
1763 neighbor 10.1.1.1 peer-group upstream
1764 neighbor 10.1.1.1 description ACME ISP
1766 ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
1767 ip prefix-list pl-allowed-adv seq 10 deny any
1771 A more complex example. With upstream, peer and customer sessions.
1772 Advertising global prefixes and NO_EXPORT prefixes and providing
1773 actions for customer routes based on community values. Extensive use of
1774 route-maps and the 'call' feature to support selective advertising of
1775 prefixes. This example is intended as guidance only, it has NOT been
1776 tested and almost certainly containts silly mistakes, if not serious
1781 bgp router-id 10.236.87.1
1782 network 10.123.456.0/24
1783 network 10.123.456.128/25 route-map rm-no-export
1784 neighbor upstream capability dynamic
1785 neighbor upstream route-map rm-upstream-out out
1786 neighbor cust capability dynamic
1787 neighbor cust route-map rm-cust-in in
1788 neighbor cust route-map rm-cust-out out
1789 neighbor cust send-community both
1790 neighbor peer capability dynamic
1791 neighbor peer route-map rm-peer-in in
1792 neighbor peer route-map rm-peer-out out
1793 neighbor peer send-community both
1794 neighbor 10.1.1.1 remote-as 64515
1795 neighbor 10.1.1.1 peer-group upstream
1796 neighbor 10.2.1.1 remote-as 64516
1797 neighbor 10.2.1.1 peer-group upstream
1798 neighbor 10.3.1.1 remote-as 64517
1799 neighbor 10.3.1.1 peer-group cust-default
1800 neighbor 10.3.1.1 description customer1
1801 neighbor 10.3.1.1 prefix-list pl-cust1-network in
1802 neighbor 10.4.1.1 remote-as 64518
1803 neighbor 10.4.1.1 peer-group cust
1804 neighbor 10.4.1.1 prefix-list pl-cust2-network in
1805 neighbor 10.4.1.1 description customer2
1806 neighbor 10.5.1.1 remote-as 64519
1807 neighbor 10.5.1.1 peer-group peer
1808 neighbor 10.5.1.1 prefix-list pl-peer1-network in
1809 neighbor 10.5.1.1 description peer AS 1
1810 neighbor 10.6.1.1 remote-as 64520
1811 neighbor 10.6.1.1 peer-group peer
1812 neighbor 10.6.1.1 prefix-list pl-peer2-network in
1813 neighbor 10.6.1.1 description peer AS 2
1815 ip prefix-list pl-default permit 0.0.0.0/0
1817 ip prefix-list pl-upstream-peers permit 10.1.1.1/32
1818 ip prefix-list pl-upstream-peers permit 10.2.1.1/32
1820 ip prefix-list pl-cust1-network permit 10.3.1.0/24
1821 ip prefix-list pl-cust1-network permit 10.3.2.0/24
1823 ip prefix-list pl-cust2-network permit 10.4.1.0/24
1825 ip prefix-list pl-peer1-network permit 10.5.1.0/24
1826 ip prefix-list pl-peer1-network permit 10.5.2.0/24
1827 ip prefix-list pl-peer1-network permit 192.168.0.0/24
1829 ip prefix-list pl-peer2-network permit 10.6.1.0/24
1830 ip prefix-list pl-peer2-network permit 10.6.2.0/24
1831 ip prefix-list pl-peer2-network permit 192.168.1.0/24
1832 ip prefix-list pl-peer2-network permit 192.168.2.0/24
1833 ip prefix-list pl-peer2-network permit 172.16.1/24
1835 ip as-path access-list asp-own-as permit ^$
1836 ip as-path access-list asp-own-as permit _64512_
1838 ! #################################################################
1839 ! Match communities we provide actions for, on routes receives from
1840 ! customers. Communities values of <our-ASN>:X, with X, have actions:
1842 ! 100 - blackhole the prefix
1843 ! 200 - set no_export
1844 ! 300 - advertise only to other customers
1845 ! 400 - advertise only to upstreams
1846 ! 500 - set no_export when advertising to upstreams
1847 ! 2X00 - set local_preference to X00
1849 ! blackhole the prefix of the route
1850 ip community-list standard cm-blackhole permit 64512:100
1852 ! set no-export community before advertising
1853 ip community-list standard cm-set-no-export permit 64512:200
1855 ! advertise only to other customers
1856 ip community-list standard cm-cust-only permit 64512:300
1858 ! advertise only to upstreams
1859 ip community-list standard cm-upstream-only permit 64512:400
1861 ! advertise to upstreams with no-export
1862 ip community-list standard cm-upstream-noexport permit 64512:500
1864 ! set local-pref to least significant 3 digits of the community
1865 ip community-list standard cm-prefmod-100 permit 64512:2100
1866 ip community-list standard cm-prefmod-200 permit 64512:2200
1867 ip community-list standard cm-prefmod-300 permit 64512:2300
1868 ip community-list standard cm-prefmod-400 permit 64512:2400
1869 ip community-list expanded cme-prefmod-range permit 64512:2...
1871 ! Informational communities
1873 ! 3000 - learned from upstream
1874 ! 3100 - learned from customer
1875 ! 3200 - learned from peer
1877 ip community-list standard cm-learnt-upstream permit 64512:3000
1878 ip community-list standard cm-learnt-cust permit 64512:3100
1879 ip community-list standard cm-learnt-peer permit 64512:3200
1881 ! ###################################################################
1882 ! Utility route-maps
1884 ! These utility route-maps generally should not used to permit/deny
1885 ! routes, i.e. they do not have meaning as filters, and hence probably
1886 ! should be used with 'on-match next'. These all finish with an empty
1887 ! permit entry so as not interfere with processing in the caller.
1889 route-map rm-no-export permit 10
1890 set community additive no-export
1891 route-map rm-no-export permit 20
1893 route-map rm-blackhole permit 10
1894 description blackhole, up-pref and ensure it cant escape this AS
1895 set ip next-hop 127.0.0.1
1896 set local-preference 10
1897 set community additive no-export
1898 route-map rm-blackhole permit 20
1900 ! Set local-pref as requested
1901 route-map rm-prefmod permit 10
1902 match community cm-prefmod-100
1903 set local-preference 100
1904 route-map rm-prefmod permit 20
1905 match community cm-prefmod-200
1906 set local-preference 200
1907 route-map rm-prefmod permit 30
1908 match community cm-prefmod-300
1909 set local-preference 300
1910 route-map rm-prefmod permit 40
1911 match community cm-prefmod-400
1912 set local-preference 400
1913 route-map rm-prefmod permit 50
1915 ! Community actions to take on receipt of route.
1916 route-map rm-community-in permit 10
1917 description check for blackholing, no point continuing if it matches.
1918 match community cm-blackhole
1920 route-map rm-community-in permit 20
1921 match community cm-set-no-export
1924 route-map rm-community-in permit 30
1925 match community cme-prefmod-range
1927 route-map rm-community-in permit 40
1929 ! #####################################################################
1930 ! Community actions to take when advertising a route.
1931 ! These are filtering route-maps,
1933 ! Deny customer routes to upstream with cust-only set.
1934 route-map rm-community-filt-to-upstream deny 10
1935 match community cm-learnt-cust
1936 match community cm-cust-only
1937 route-map rm-community-filt-to-upstream permit 20
1939 ! Deny customer routes to other customers with upstream-only set.
1940 route-map rm-community-filt-to-cust deny 10
1941 match community cm-learnt-cust
1942 match community cm-upstream-only
1943 route-map rm-community-filt-to-cust permit 20
1945 ! ###################################################################
1946 ! The top-level route-maps applied to sessions. Further entries could
1947 ! be added obviously..
1950 route-map rm-cust-in permit 10
1951 call rm-community-in
1953 route-map rm-cust-in permit 20
1954 set community additive 64512:3100
1955 route-map rm-cust-in permit 30
1957 route-map rm-cust-out permit 10
1958 call rm-community-filt-to-cust
1960 route-map rm-cust-out permit 20
1962 ! Upstream transit ASes
1963 route-map rm-upstream-out permit 10
1964 description filter customer prefixes which are marked cust-only
1965 call rm-community-filt-to-upstream
1967 route-map rm-upstream-out permit 20
1968 description only customer routes are provided to upstreams/peers
1969 match community cm-learnt-cust
1972 ! outbound policy is same as for upstream
1973 route-map rm-peer-out permit 10
1974 call rm-upstream-out
1976 route-map rm-peer-in permit 10
1977 set community additive 64512:3200