blob: 5735111d0c6962c76929bcb09408a713b5e51686 [file] [log] [blame]
paul718e3742002-12-13 20:15:29 +00001@c -*-texinfo-*-
paul7190f4e2003-08-12 12:40:20 +00002@c This is part of the Quagga Manual.
paul76b89b42004-11-06 17:13:09 +00003@c @value{COPYRIGHT_STR}
Paul Jakmad5062d22015-12-02 16:47:43 +00004@c Portions:
5@c Copyright @copyright{} 2015 Hewlett Packard Enterprise Development LP
paul76b89b42004-11-06 17:13:09 +00006@c See file quagga.texi for copying conditions.
paul718e3742002-12-13 20:15:29 +00007@node BGP
paul718e3742002-12-13 20:15:29 +00008@chapter BGP
9
paulaa5943f2005-11-04 21:53:59 +000010@acronym{BGP} stands for a Border Gateway Protocol. The lastest BGP version
paul718e3742002-12-13 20:15:29 +000011is 4. It is referred as BGP-4. BGP-4 is one of the Exterior Gateway
12Protocols and de-fact standard of Inter Domain routing protocol.
paulaa5943f2005-11-04 21:53:59 +000013BGP-4 is described in @cite{RFC1771, A Border Gateway Protocol
paul718e3742002-12-13 20:15:29 +0000144 (BGP-4)}.
15
paulaa5943f2005-11-04 21:53:59 +000016Many extensions have been added to @cite{RFC1771}. @cite{RFC2858,
17Multiprotocol Extensions for BGP-4} provides multiprotocol support to
18BGP-4.
paul718e3742002-12-13 20:15:29 +000019
20@menu
21* Starting BGP::
22* BGP router::
Paul Jakmad5062d22015-12-02 16:47:43 +000023* BGP MED::
paul718e3742002-12-13 20:15:29 +000024* BGP network::
25* BGP Peer::
26* BGP Peer Group::
27* BGP Address Family::
28* Autonomous System::
29* BGP Communities Attribute::
30* BGP Extended Communities Attribute::
31* Displaying BGP routes::
32* Capability Negotiation::
33* Route Reflector::
34* Route Server::
35* How to set up a 6-Bone connection::
36* Dump BGP packets and table::
paulaa5943f2005-11-04 21:53:59 +000037* BGP Configuration Examples::
paul718e3742002-12-13 20:15:29 +000038@end menu
39
paul76b89b42004-11-06 17:13:09 +000040@node Starting BGP
paul718e3742002-12-13 20:15:29 +000041@section Starting BGP
42
43Default 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
46configured in @file{bgpd.conf}.
47
48@command{bgpd} specific invocation options are described below. Common
49options may also be specified (@pxref{Common Invocation Options}).
50
51@table @samp
52@item -p @var{PORT}
53@itemx --bgp_port=@var{PORT}
54Set the bgp protocol's port number.
55
56@item -r
57@itemx --retain
58When program terminates, retain BGP routes added by zebra.
Paul Jakmad5062d22015-12-02 16:47:43 +000059
60@item -l
61@itemx --listenon
62Specify a specific IP address for bgpd to listen on, rather than its
63default of INADDR_ANY / IN6ADDR_ANY. This can be useful to constrain bgpd
64to an internal address, or to run multiple bgpd processes on one host.
65
paul718e3742002-12-13 20:15:29 +000066@end table
67
paul76b89b42004-11-06 17:13:09 +000068@node BGP router
paul718e3742002-12-13 20:15:29 +000069@section BGP router
70
71 First of all you must configure BGP router with @command{router bgp}
72command. To configure BGP router, you need AS number. AS number is an
73identification of autonomous system. BGP protocol uses the AS number
74for detecting whether the BGP connection is internal one or external one.
75
76@deffn Command {router bgp @var{asn}} {}
77Enable a BGP protocol process with the specified @var{asn}. After
78this statement you can input any @code{BGP Commands}. You can not
79create different BGP process under different @var{asn} without
80specifying @code{multiple-instance} (@pxref{Multiple instance}).
81@end deffn
82
83@deffn Command {no router bgp @var{asn}} {}
84Destroy a BGP protocol process with the specified @var{asn}.
85@end deffn
86
87@deffn {BGP} {bgp router-id @var{A.B.C.D}} {}
88This command specifies the router-ID. If @command{bgpd} connects to @command{zebra} it gets
89interface and address information. In that case default router ID value
90is selected as the largest IP Address of the interfaces. When
91@code{router zebra} is not enabled @command{bgpd} can't get interface information
92so @code{router-id} is set to 0.0.0.0. So please set router-id by hand.
93@end deffn
94
95@menu
96* BGP distance::
97* BGP decision process::
Alexandre Chappuisc31e5722011-09-11 16:54:11 +040098* BGP route flap dampening::
paul718e3742002-12-13 20:15:29 +000099@end menu
100
paul76b89b42004-11-06 17:13:09 +0000101@node BGP distance
paul718e3742002-12-13 20:15:29 +0000102@subsection BGP distance
103
104@deffn {BGP} {distance bgp <1-255> <1-255> <1-255>} {}
105This command change distance value of BGP. Each argument is distance
106value for external routes, internal routes and local routes.
107@end deffn
108
109@deffn {BGP} {distance <1-255> @var{A.B.C.D/M}} {}
110@deffnx {BGP} {distance <1-255> @var{A.B.C.D/M} @var{word}} {}
111This command set distance value to
112@end deffn
113
paul76b89b42004-11-06 17:13:09 +0000114@node BGP decision process
paul718e3742002-12-13 20:15:29 +0000115@subsection BGP decision process
116
Paul Jakmad5062d22015-12-02 16:47:43 +0000117The decision process Quagga BGP uses to select routes is as follows:
118
paul718e3742002-12-13 20:15:29 +0000119@table @asis
120@item 1. Weight check
Paul Jakmad5062d22015-12-02 16:47:43 +0000121prefer higher local weight routes to lower routes.
paul718e3742002-12-13 20:15:29 +0000122
Paul Jakmad5062d22015-12-02 16:47:43 +0000123@item 2. Local preference check
124prefer higher local preference routes to lower.
paul718e3742002-12-13 20:15:29 +0000125
Paul Jakmad5062d22015-12-02 16:47:43 +0000126@item 3. Local route check
127Prefer local routes (statics, aggregates, redistributed) to received routes.
paul718e3742002-12-13 20:15:29 +0000128
Paul Jakmad5062d22015-12-02 16:47:43 +0000129@item 4. AS path length check
130Prefer shortest hop-count AS_PATHs.
paul718e3742002-12-13 20:15:29 +0000131
Paul Jakmad5062d22015-12-02 16:47:43 +0000132@item 5. Origin check
133Prefer the lowest origin type route. That is, prefer IGP origin routes to
134EGP, to Incomplete routes.
paul718e3742002-12-13 20:15:29 +0000135
Paul Jakmad5062d22015-12-02 16:47:43 +0000136@item 6. MED check
137Where routes with a MED were received from the same AS,
138prefer the route with the lowest MED. @xref{BGP MED}.
139
140@item 7. External check
141Prefer the route received from an external, eBGP peer
142over routes received from other types of peers.
143
144@item 8. IGP cost check
145Prefer the route with the lower IGP cost.
146
147@item 9. Multi-path check
148If multi-pathing is enabled, then check whether
149the routes not yet distinguished in preference may be considered equal. If
150@ref{bgp bestpath as-path multipath-relax} is set, all such routes are
151considered equal, otherwise routes received via iBGP with identical AS_PATHs
152or routes received from eBGP neighbours in the same AS are considered equal.
153
154@item 10 Already-selected external check
155
156Where both routes were received from eBGP peers, then prefer the route which
157is already selected. Note that this check is not applied if @ref{bgp
158bestpath compare-routerid} is configured. This check can prevent some cases
159of oscillation.
160
161@item 11. Router-ID check
162Prefer the route with the lowest @w{router-ID}. If the
163route has an @w{ORIGINATOR_ID} attribute, through iBGP reflection, then that
164router ID is used, otherwise the @w{router-ID} of the peer the route was
165received from is used.
166
167@item 12. Cluster-List length check
168The route with the shortest cluster-list
169length is used. The cluster-list reflects the iBGP reflection path the
170route has taken.
171
172@item 13. Peer address
173Prefer the route received from the peer with the higher
174transport layer address, as a last-resort tie-breaker.
175
paul718e3742002-12-13 20:15:29 +0000176@end table
177
hasso68118452005-04-08 15:40:36 +0000178@deffn {BGP} {bgp bestpath as-path confed} {}
179This command specifies that the length of confederation path sets and
180sequences should should be taken into account during the BGP best path
181decision process.
182@end deffn
183
Pradosh Mohapatra2fdd4552013-09-07 07:02:36 +0000184@deffn {BGP} {bgp bestpath as-path multipath-relax} {}
Paul Jakmad5062d22015-12-02 16:47:43 +0000185@anchor{bgp bestpath as-path multipath-relax}
Pradosh Mohapatra2fdd4552013-09-07 07:02:36 +0000186This command specifies that BGP decision process should consider paths
187of equal AS_PATH length candidates for multipath computation. Without
188the knob, the entire AS_PATH must match for multipath computation.
189@end deffn
190
Paul Jakmad5062d22015-12-02 16:47:43 +0000191@deffn {BGP} {bgp bestpath compare-routerid} {}
192@anchor{bgp bestpath compare-routerid}
193
194Ensure that when comparing routes where both are equal on most metrics,
195including local-pref, AS_PATH length, IGP cost, MED, that the tie is broken
196based on router-ID.
197
198If this option is enabled, then the already-selected check, where
199already selected eBGP routes are preferred, is skipped.
200
201If a route has an @w{ORIGINATOR_ID} attribute because it has been reflected,
202that @w{ORIGINATOR_ID} will be used. Otherwise, the router-ID of the peer the
203route was received from will be used.
204
205The advantage of this is that the route-selection (at this point) will be
206more deterministic. The disadvantage is that a few or even one lowest-ID
207router may attract all trafic to otherwise-equal paths because of this
208check. It may increase the possibility of MED or IGP oscillation, unless
209other measures were taken to avoid these. The exact behaviour will be
210sensitive to the iBGP and reflection topology.
211
212@end deffn
213
214
Alexandre Chappuisc31e5722011-09-11 16:54:11 +0400215@node BGP route flap dampening
216@subsection BGP route flap dampening
217
218@deffn {BGP} {bgp dampening @var{<1-45>} @var{<1-20000>} @var{<1-20000>} @var{<1-255>}} {}
219This command enables BGP route-flap dampening and specifies dampening parameters.
220
221@table @asis
222@item @asis{half-life}
223Half-life time for the penalty
224@item @asis{reuse-threshold}
225Value to start reusing a route
226@item @asis{suppress-threshold}
227Value to start suppressing a route
228@item @asis{max-suppress}
229Maximum duration to suppress a stable route
230@end table
231
232The route-flap damping algorithm is compatible with @cite{RFC2439}. The use of this command
233is not recommended nowadays, see @uref{http://www.ripe.net/ripe/docs/ripe-378,,RIPE-378}.
234@end deffn
235
Paul Jakmad5062d22015-12-02 16:47:43 +0000236@node BGP MED
237@section BGP MED
238
239The BGP MED (Multi_Exit_Discriminator) attribute has properties which can
240cause subtle convergence problems in BGP. These properties and problems
241have proven to be hard to understand, at least historically, and may still
242not be widely understood. The following attempts to collect together and
243present what is known about MED, to help operators and Quagga users in
244designing and configuring their networks.
245
246The BGP @acronym{MED, Multi_Exit_Discriminator} attribute is intended to
247allow one AS to indicate its preferences for its ingress points to another
248AS. The MED attribute will not be propagated on to another AS by the
249receiving AS - it is `non-transitive' in the BGP sense.
250
251E.g., if AS X and AS Y have 2 different BGP peering points, then AS X
252might set a MED of 100 on routes advertised at one and a MED of 200 at the
253other. When AS Y selects between otherwise equal routes to or via
254AS X, AS Y should prefer to take the path via the lower MED peering of 100 with
255AS X. Setting the MED allows an AS to influence the routing taken to it
256within another, neighbouring AS.
257
258In this use of MED it is not really meaningful to compare the MED value on
259routes where the next AS on the paths differs. E.g., if AS Y also had a
260route for some destination via AS Z in addition to the routes from AS X, and
261AS Z had also set a MED, it wouldn't make sense for AS Y to compare AS Z's
262MED values to those of AS X. The MED values have been set by different
263administrators, with different frames of reference.
264
265The default behaviour of BGP therefore is to not compare MED values across
266routes received from different neighbouring ASes. In Quagga this is done by
267comparing the neighbouring, left-most AS in the received AS_PATHs of the
268routes and only comparing MED if those are the same.
269
270@c TeXInfo uses the old, non-UTF-8 capable, pdftex, and so
271@c doesn't render TeX the unicode precedes character correctly in PDF, etc.
272@c Using a TeX code on the other hand doesn't work for non-TeX outputs
273@c (plaintext, e.g.). So, use an output-conditional macro.
274
275@iftex
276@macro mprec{}
277@math{\\prec}
278@end macro
279@end iftex
280
281@ifnottex
282@macro mprec{}
283@math{≺}
284@end macro
285@end ifnottex
286
287Unfortunately, this behaviour of MED, of sometimes being compared across
288routes and sometimes not, depending on the properties of those other routes,
289means MED can cause the order of preference over all the routes to be
290undefined. That is, given routes A, B, and C, if A is preferred to B, and B
291is preferred to C, then a well-defined order should mean the preference is
292transitive (in the sense of orders @footnote{For some set of objects to have
293an order, there @emph{must} be some binary ordering relation that is defined
294for @emph{every} combination of those objects, and that relation @emph{must}
295be transitive. I.e.@:, if the relation operator is @mprec{}, and if
296a @mprec{} b and b @mprec{} c then that relation must carry over
297and it @emph{must} be that a @mprec{} c for the objects to have an
298order. The ordering relation may allow for equality, i.e.
299a @mprec{} b and b @mprec{} a may both be true amd imply that
300a and b are equal in the order and not distinguished by it, in
301which case the set has a partial order. Otherwise, if there is an order,
302all the objects have a distinct place in the order and the set has a total
303order.}) and that A would be preferred to C.
304
Paul Jakmad5062d22015-12-02 16:47:43 +0000305However, when MED is involved this need not be the case. With MED it is
306possible that C is actually preferred over A. So A is preferred to B, B is
307preferred to C, but C is preferred to A. This can be true even where BGP
308defines a deterministic ``most preferred'' route out of the full set of
309A,B,C. With MED, for any given set of routes there may be a
310deterministically preferred route, but there need not be any way to arrange
311them into any order of preference. With unmodified MED, the order of
312preference of routes literally becomes undefined.
313
314That MED can induce non-transitive preferences over routes can cause issues.
315Firstly, it may be perceived to cause routing table churn locally at
316speakers; secondly, and more seriously, it may cause routing instability in
317iBGP topologies, where sets of speakers continually oscillate between
318different paths.
319
320The first issue arises from how speakers often implement routing decisions.
321Though BGP defines a selection process that will deterministically select
322the same route as best at any given speaker, even with MED, that process
323requires evaluating all routes together. For performance and ease of
324implementation reasons, many implementations evaluate route preferences in a
325pair-wise fashion instead. Given there is no well-defined order when MED is
326involved, the best route that will be chosen becomes subject to
327implementation details, such as the order the routes are stored in. That
328may be (locally) non-deterministic, e.g.@: it may be the order the routes
329were received in.
330
331This indeterminism may be considered undesirable, though it need not cause
332problems. It may mean additional routing churn is perceived, as sometimes
333more updates may be produced than at other times in reaction to some event .
334
335This first issue can be fixed with a more deterministic route selection that
336ensures routes are ordered by the neighbouring AS during selection.
337@xref{bgp deterministic-med}. This may reduce the number of updates as
338routes are received, and may in some cases reduce routing churn. Though, it
339could equally deterministically produce the largest possible set of updates
340in response to the most common sequence of received updates.
341
342A deterministic order of evaluation tends to imply an additional overhead of
343sorting over any set of n routes to a destination. The implementation of
344deterministic MED in Quagga scales significantly worse than most sorting
345algorithms at present, with the number of paths to a given destination.
346That number is often low enough to not cause any issues, but where there are
347many paths, the deterministic comparison may quickly become increasingly
348expensive in terms of CPU.
349
350Deterministic local evaluation can @emph{not} fix the second, more major,
351issue of MED however. Which is that the non-transitive preference of routes
352MED can cause may lead to routing instability or oscillation across multiple
353speakers in iBGP topologies. This can occur with full-mesh iBGP, but is
354particularly problematic in non-full-mesh iBGP topologies that further
355reduce the routing information known to each speaker. This has primarily
356been documented with iBGP route-reflection topologies. However, any
357route-hiding technologies potentially could also exacerbate oscillation with
358MED.
359
360This second issue occurs where speakers each have only a subset of routes,
361and there are cycles in the preferences between different combinations of
362routes - as the undefined order of preference of MED allows - and the routes
363are distributed in a way that causes the BGP speakers to 'chase' those
364cycles. This can occur even if all speakers use a deterministic order of
365evaluation in route selection.
366
367E.g., speaker 4 in AS A might receive a route from speaker 2 in AS X, and
368from speaker 3 in AS Y; while speaker 5 in AS A might receive that route
369from speaker 1 in AS Y. AS Y might set a MED of 200 at speaker 1, and 100
370at speaker 3. I.e, using ASN:ID:MED to label the speakers:
371
372@example
373
374 /---------------\
375 X:2------|--A:4-------A:5--|-Y:1:200
376 Y:3:100--|-/ |
377 \---------------/
378
379@end example
380
381Assuming all other metrics are equal (AS_PATH, ORIGIN, 0 IGP costs), then
382based on the RFC4271 decision process speaker 4 will choose X:2 over
383Y:3:100, based on the lower ID of 2. Speaker 4 advertises X:2 to speaker 5.
384Speaker 5 will continue to prefer Y:1:200 based on the ID, and advertise
385this to speaker 4. Speaker 4 will now have the full set of routes, and the
386Y:1:200 it receives from 5 will beat X:2, but when speaker 4 compares
387Y:1:200 to Y:3:100 the MED check now becomes active as the ASes match, and
388now Y:3:100 is preferred. Speaker 4 therefore now advertises Y:3:100 to 5,
389which will also agrees that Y:3:100 is preferred to Y:1:200, and so
390withdraws the latter route from 4. Speaker 4 now has only X:2 and Y:3:100,
391and X:2 beats Y:3:100, and so speaker 4 implicitly updates its route to
392speaker 5 to X:2. Speaker 5 sees that Y:1:200 beats X:2 based on the ID,
393and advertises Y:1:200 to speaker 4, and the cycle continues.
394
395The root cause is the lack of a clear order of preference caused by how MED
396sometimes is and sometimes is not compared, leading to this cycle in the
397preferences between the routes:
398
399@example
400
401 /---> X:2 ---beats---> Y:3:100 --\
402 | |
403 | |
404 \---beats--- Y:1:200 <---beats---/
405
406@end example
407
408This particular type of oscillation in full-mesh iBGP topologies can be
409avoided by speakers preferring already selected, external routes rather than
410choosing to update to new a route based on a post-MED metric (e.g.
411router-ID), at the cost of a non-deterministic selection process. Quagga
412implements this, as do many other implementations, so long as it is not
413overridden by setting @ref{bgp bestpath compare-routerid}, and see also
414@ref{BGP decision process}, .
415
416However, more complex and insidious cycles of oscillation are possible with
417iBGP route-reflection, which are not so easily avoided. These have been
418documented in various places. See, e.g., @cite{McPherson, D. and Gill, V.
419and Walton, D., "Border Gateway Protocol (BGP) Persistent Route Oscillation
420Condition", IETF RFC3345}, and @cite{Flavel, A. and M. Roughan, "Stable
421and flexible iBGP", ACM SIGCOMM 2009}, and @cite{Griffin, T. and G. Wilfong,
422"On the correctness of IBGP configuration", ACM SIGCOMM 2002} for concrete
423examples and further references.
424
425There is as of this writing @emph{no} known way to use MED for its original
426purpose; @emph{and} reduce routing information in iBGP topologies;
427@emph{and} be sure to avoid the instability problems of MED due the
428non-transitive routing preferences it can induce; in general on arbitrary
429networks.
430
431There may be iBGP topology specific ways to reduce the instability risks,
432even while using MED, e.g.@: by constraining the reflection topology and by
433tuning IGP costs between route-reflector clusters, see RFC3345 for details.
434In the near future, the Add-Path extension to BGP may also solve MED
435oscillation while still allowing MED to be used as intended, by distributing
436"best-paths per neighbour AS". This would be at the cost of distributing at
437least as many routes to all speakers as a full-mesh iBGP would, if not more,
438while also imposing similar CPU overheads as the "Deterministic MED" feature
439at each Add-Path reflector.
440
441More generally, the instability problems that MED can introduce on more
442complex, non-full-mesh, iBGP topologies may be avoided either by:
443
444@itemize
445
446@item
447Setting @ref{bgp always-compare-med}, however this allows MED to be compared
448across values set by different neighbour ASes, which may not produce
449coherent desirable results, of itself.
450
451@item
452Effectively ignoring MED by setting MED to the same value (e.g.@: 0) using
453@ref{routemap set metric} on all received routes, in combination with
454setting @ref{bgp always-compare-med} on all speakers. This is the simplest
455and most performant way to avoid MED oscillation issues, where an AS is happy
456not to allow neighbours to inject this problematic metric.
457
458@end itemize
459
460As MED is evaluated after the AS_PATH length check, another possible use for
461MED is for intra-AS steering of routes with equal AS_PATH length, as an
462extension of the last case above. As MED is evaluated before IGP metric,
463this can allow cold-potato routing to be implemented to send traffic to
464preferred hand-offs with neighbours, rather than the closest hand-off
465according to the IGP metric.
466
467Note that even if action is taken to address the MED non-transitivity
468issues, other oscillations may still be possible. E.g., on IGP cost if
469iBGP and IGP topologies are at cross-purposes with each other - see the
470Flavel and Roughan paper above for an example. Hence the guideline that the
471iBGP topology should follow the IGP topology.
472
473@deffn {BGP} {bgp deterministic-med} {}
474@anchor{bgp deterministic-med}
475
476Carry out route-selection in way that produces deterministic answers
477locally, even in the face of MED and the lack of a well-defined order of
478preference it can induce on routes. Without this option the preferred route
479with MED may be determined largely by the order that routes were received
480in.
481
482Setting this option will have a performance cost that may be noticeable when
483there are many routes for each destination. Currently in Quagga it is
484implemented in a way that scales poorly as the number of routes per
485destination increases.
486
487The default is that this option is not set.
488@end deffn
489
490Note that there are other sources of indeterminism in the route selection
491process, specifically, the preference for older and already selected routes
492from eBGP peers, @xref{BGP decision process}.
493
494@deffn {BGP} {bgp always-compare-med} {}
495@anchor{bgp always-compare-med}
496
497Always compare the MED on routes, even when they were received from
498different neighbouring ASes. Setting this option makes the order of
499preference of routes more defined, and should eliminate MED induced
500oscillations.
501
502If using this option, it may also be desirable to use @ref{routemap set
503metric} to set MED to 0 on routes received from external neighbours.
504
505This option can be used, together with @ref{routemap set metric} to use MED
506as an intra-AS metric to steer equal-length AS_PATH routes to, e.g., desired
507exit points.
508@end deffn
509
510
511
paul76b89b42004-11-06 17:13:09 +0000512@node BGP network
paul718e3742002-12-13 20:15:29 +0000513@section BGP network
514
515@menu
516* BGP route::
517* Route Aggregation::
518* Redistribute to BGP::
519@end menu
520
paul76b89b42004-11-06 17:13:09 +0000521@node BGP route
paul718e3742002-12-13 20:15:29 +0000522@subsection BGP route
523
524@deffn {BGP} {network @var{A.B.C.D/M}} {}
525This command adds the announcement network.
526@example
527@group
528router bgp 1
529 network 10.0.0.0/8
530@end group
531@end example
532This configuration example says that network 10.0.0.0/8 will be
533announced to all neighbors. Some vendors' routers don't advertise
Paul Jakma41367172007-08-06 15:24:51 +0000534routes if they aren't present in their IGP routing tables; @code{bgpd}
paul718e3742002-12-13 20:15:29 +0000535doesn't care about IGP routes when announcing its routes.
536@end deffn
537
538@deffn {BGP} {no network @var{A.B.C.D/M}} {}
539@end deffn
540
paul76b89b42004-11-06 17:13:09 +0000541@node Route Aggregation
paul718e3742002-12-13 20:15:29 +0000542@subsection Route Aggregation
543
544@deffn {BGP} {aggregate-address @var{A.B.C.D/M}} {}
545This command specifies an aggregate address.
546@end deffn
547
548@deffn {BGP} {aggregate-address @var{A.B.C.D/M} as-set} {}
Paul Jakmad5062d22015-12-02 16:47:43 +0000549This command specifies an aggregate address. Resulting routes include
paul718e3742002-12-13 20:15:29 +0000550AS set.
551@end deffn
552
553@deffn {BGP} {aggregate-address @var{A.B.C.D/M} summary-only} {}
554This command specifies an aggregate address. Aggreated routes will
555not be announce.
556@end deffn
557
558@deffn {BGP} {no aggregate-address @var{A.B.C.D/M}} {}
559@end deffn
560
paul76b89b42004-11-06 17:13:09 +0000561@node Redistribute to BGP
paul718e3742002-12-13 20:15:29 +0000562@subsection Redistribute to BGP
563
564@deffn {BGP} {redistribute kernel} {}
565Redistribute kernel route to BGP process.
566@end deffn
567
568@deffn {BGP} {redistribute static} {}
569Redistribute static route to BGP process.
570@end deffn
571
572@deffn {BGP} {redistribute connected} {}
573Redistribute connected route to BGP process.
574@end deffn
575
576@deffn {BGP} {redistribute rip} {}
577Redistribute RIP route to BGP process.
578@end deffn
579
580@deffn {BGP} {redistribute ospf} {}
581Redistribute OSPF route to BGP process.
582@end deffn
583
paul76b89b42004-11-06 17:13:09 +0000584@node BGP Peer
paul718e3742002-12-13 20:15:29 +0000585@section BGP Peer
586
587@menu
588* Defining Peer::
589* BGP Peer commands::
590* Peer filtering::
591@end menu
592
paul76b89b42004-11-06 17:13:09 +0000593@node Defining Peer
paul718e3742002-12-13 20:15:29 +0000594@subsection Defining Peer
595
596@deffn {BGP} {neighbor @var{peer} remote-as @var{asn}} {}
597Creates a new neighbor whose remote-as is @var{asn}. @var{peer}
598can be an IPv4 address or an IPv6 address.
599@example
600@group
601router bgp 1
602 neighbor 10.0.0.1 remote-as 2
603@end group
604@end example
605In this case my router, in AS-1, is trying to peer with AS-2 at
60610.0.0.1.
607
608This command must be the first command used when configuring a neighbor.
609If the remote-as is not specified, @command{bgpd} will complain like this:
610@example
611can't find neighbor 10.0.0.1
612@end example
613@end deffn
614
paul76b89b42004-11-06 17:13:09 +0000615@node BGP Peer commands
paul718e3742002-12-13 20:15:29 +0000616@subsection BGP Peer commands
617
618In a @code{router bgp} clause there are neighbor specific configurations
619required.
620
621@deffn {BGP} {neighbor @var{peer} shutdown} {}
622@deffnx {BGP} {no neighbor @var{peer} shutdown} {}
623Shutdown the peer. We can delete the neighbor's configuration by
624@code{no neighbor @var{peer} remote-as @var{as-number}} but all
625configuration of the neighbor will be deleted. When you want to
626preserve the configuration, but want to drop the BGP peer, use this
627syntax.
628@end deffn
629
630@deffn {BGP} {neighbor @var{peer} ebgp-multihop} {}
631@deffnx {BGP} {no neighbor @var{peer} ebgp-multihop} {}
632@end deffn
633
634@deffn {BGP} {neighbor @var{peer} description ...} {}
635@deffnx {BGP} {no neighbor @var{peer} description ...} {}
636Set description of the peer.
637@end deffn
638
639@deffn {BGP} {neighbor @var{peer} version @var{version}} {}
640Set up the neighbor's BGP version. @var{version} can be @var{4},
641@var{4+} or @var{4-}. BGP version @var{4} is the default value used for
642BGP peering. BGP version @var{4+} means that the neighbor supports
643Multiprotocol Extensions for BGP-4. BGP version @var{4-} is similar but
644the neighbor speaks the old Internet-Draft revision 00's Multiprotocol
645Extensions for BGP-4. Some routing software is still using this
646version.
647@end deffn
648
649@deffn {BGP} {neighbor @var{peer} interface @var{ifname}} {}
650@deffnx {BGP} {no neighbor @var{peer} interface @var{ifname}} {}
Paul Jakma825cd492006-05-23 22:20:34 +0000651When you connect to a BGP peer over an IPv6 link-local address, you
652have to specify the @var{ifname} of the interface used for the
653connection. To specify IPv4 session addresses, see the
654@code{neighbor @var{peer} update-source} command below.
655
656This command is deprecated and may be removed in a future release. Its
657use should be avoided.
paul718e3742002-12-13 20:15:29 +0000658@end deffn
659
Timo Teräs9e7a53c2014-04-24 10:22:37 +0300660@deffn {BGP} {neighbor @var{peer} next-hop-self [all]} {}
661@deffnx {BGP} {no neighbor @var{peer} next-hop-self [all]} {}
paul718e3742002-12-13 20:15:29 +0000662This command specifies an announced route's nexthop as being equivalent
Timo Teräs9e7a53c2014-04-24 10:22:37 +0300663to the address of the bgp router if it is learned via eBGP.
664If the optional keyword @code{all} is specified the modifiation is done
665also for routes learned via iBGP.
paul718e3742002-12-13 20:15:29 +0000666@end deffn
667
Paul Jakma466c9652006-06-26 12:55:58 +0000668@deffn {BGP} {neighbor @var{peer} update-source @var{<ifname|address>}} {}
paul718e3742002-12-13 20:15:29 +0000669@deffnx {BGP} {no neighbor @var{peer} update-source} {}
Paul Jakma825cd492006-05-23 22:20:34 +0000670Specify the IPv4 source address to use for the @acronym{BGP} session to this
671neighbour, may be specified as either an IPv4 address directly or
672as an interface name (in which case the @command{zebra} daemon MUST be running
673in order for @command{bgpd} to be able to retrieve interface state).
674@example
675@group
676router bgp 64555
677 neighbor foo update-source 192.168.0.1
678 neighbor bar update-source lo0
679@end group
680@end example
paul718e3742002-12-13 20:15:29 +0000681@end deffn
682
683@deffn {BGP} {neighbor @var{peer} default-originate} {}
684@deffnx {BGP} {no neighbor @var{peer} default-originate} {}
685@command{bgpd}'s default is to not announce the default route (0.0.0.0/0) even it
686is in routing table. When you want to announce default routes to the
687peer, use this command.
688@end deffn
689
690@deffn {BGP} {neighbor @var{peer} port @var{port}} {}
691@deffnx {BGP} {neighbor @var{peer} port @var{port}} {}
692@end deffn
693
694@deffn {BGP} {neighbor @var{peer} send-community} {}
695@deffnx {BGP} {neighbor @var{peer} send-community} {}
696@end deffn
697
698@deffn {BGP} {neighbor @var{peer} weight @var{weight}} {}
699@deffnx {BGP} {no neighbor @var{peer} weight @var{weight}} {}
700This command specifies a default @var{weight} value for the neighbor's
701routes.
702@end deffn
703
704@deffn {BGP} {neighbor @var{peer} maximum-prefix @var{number}} {}
705@deffnx {BGP} {no neighbor @var{peer} maximum-prefix @var{number}} {}
706@end deffn
707
Andrew Certain5aebb9c2012-11-07 23:50:09 +0000708@deffn {BGP} {neighbor @var{peer} local-as @var{as-number}} {}
709@deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend} {}
710@deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend replace-as} {}
711@deffnx {BGP} {no neighbor @var{peer} local-as} {}
712Specify an alternate AS for this BGP process when interacting with the
713specified peer. With no modifiers, the specified local-as is prepended to
714the received AS_PATH when receiving routing updates from the peer, and
715prepended to the outgoing AS_PATH (after the process local AS) when
716transmitting local routes to the peer.
717
718If the no-prepend attribute is specified, then the supplied local-as is not
719prepended to the received AS_PATH.
720
721If the replace-as attribute is specified, then only the supplied local-as is
722prepended to the AS_PATH when transmitting local-route updates to this peer.
723
724Note that replace-as can only be specified if no-prepend is.
725
726This command is only allowed for eBGP peers.
727@end deffn
728
Pradosh Mohapatra5d804b42013-09-12 03:37:07 +0000729@deffn {BGP} {neighbor @var{peer} ttl-security hops @var{number}} {}
730@deffnx {BGP} {no neighbor @var{peer} ttl-security hops @var{number}} {}
731This command enforces Generalized TTL Security Mechanism (GTSM), as
732specified in RFC 5082. With this command, only neighbors that are the
733specified number of hops away will be allowed to become neighbors. This
734command is mututally exclusive with @command{ebgp-multihop}.
735@end deffn
736
paul76b89b42004-11-06 17:13:09 +0000737@node Peer filtering
paul718e3742002-12-13 20:15:29 +0000738@subsection Peer filtering
739
740@deffn {BGP} {neighbor @var{peer} distribute-list @var{name} [in|out]} {}
741This command specifies a distribute-list for the peer. @var{direct} is
742@samp{in} or @samp{out}.
743@end deffn
744
745@deffn {BGP command} {neighbor @var{peer} prefix-list @var{name} [in|out]} {}
746@end deffn
747
748@deffn {BGP command} {neighbor @var{peer} filter-list @var{name} [in|out]} {}
749@end deffn
750
751@deffn {BGP} {neighbor @var{peer} route-map @var{name} [in|out]} {}
752Apply a route-map on the neighbor. @var{direct} must be @code{in} or
753@code{out}.
754@end deffn
755
756@c -----------------------------------------------------------------------
paul76b89b42004-11-06 17:13:09 +0000757@node BGP Peer Group
paul718e3742002-12-13 20:15:29 +0000758@section BGP Peer Group
759
760@deffn {BGP} {neighbor @var{word} peer-group} {}
761This command defines a new peer group.
762@end deffn
763
764@deffn {BGP} {neighbor @var{peer} peer-group @var{word}} {}
765This command bind specific peer to peer group @var{word}.
766@end deffn
767
paul76b89b42004-11-06 17:13:09 +0000768@node BGP Address Family
paul718e3742002-12-13 20:15:29 +0000769@section BGP Address Family
770
Lou Berger544ec702016-01-12 13:42:10 -0500771Multiprotocol BGP enables BGP to carry routing information for multiple
772Network Layer protocols. BGP supports multiple Address Family
773Identifier (AFI), namely IPv4 and IPv6. Support is also provided for
774multiple sets of per-AFI information via Subsequent Address Family
775Identifiers (SAFI). In addition to unicast information, VPN information
776@cite{RFC4364} and @cite{RFC4659}, and Encapsulation information
777@cite{RFC5512} is supported.
778
779@deffn {Command} {show ip bgp vpnv4 all} {}
780@deffnx {Command} {show ipv6 bgp vpn all} {}
781Print active IPV4 or IPV6 routes advertised via the VPN SAFI.
782@end deffn
783
784@deffn {Command} {show ip bgp encap all} {}
785@deffnx {Command} {show ipv6 bgp encap all} {}
786Print active IPV4 or IPV6 routes advertised via the Encapsulation SAFI.
787@end deffn
788
789@deffn {Command} {show bgp ipv4 encap summary} {}
790@deffnx {Command} {show bgp ipv4 vpn summary} {}
791@deffnx {Command} {show bgp ipv6 encap summary} {}
792@deffnx {Command} {show bgp ipv6 vpn summary} {}
793Print a summary of neighbor connections for the specified AFI/SAFI combination.
794@end deffn
795
paul718e3742002-12-13 20:15:29 +0000796@c -----------------------------------------------------------------------
paul76b89b42004-11-06 17:13:09 +0000797@node Autonomous System
paul718e3742002-12-13 20:15:29 +0000798@section Autonomous System
799
paulaa5943f2005-11-04 21:53:59 +0000800The @acronym{AS,Autonomous System} number is one of the essential
801element of BGP. BGP is a distance vector routing protocol, and the
802AS-Path framework provides distance vector metric and loop detection to
803BGP. @cite{RFC1930, Guidelines for creation, selection, and
804registration of an Autonomous System (AS)} provides some background on
805the concepts of an AS.
paul718e3742002-12-13 20:15:29 +0000806
paulaa5943f2005-11-04 21:53:59 +0000807The AS number is a two octet value, ranging in value from 1 to 65535.
808The AS numbers 64512 through 65535 are defined as private AS numbers.
809Private AS numbers must not to be advertised in the global Internet.
paul718e3742002-12-13 20:15:29 +0000810
811@menu
812* AS Path Regular Expression::
813* Display BGP Routes by AS Path::
814* AS Path Access List::
815* Using AS Path in Route Map::
816* Private AS Numbers::
817@end menu
818
paul76b89b42004-11-06 17:13:09 +0000819@node AS Path Regular Expression
paul718e3742002-12-13 20:15:29 +0000820@subsection AS Path Regular Expression
821
paulaa5943f2005-11-04 21:53:59 +0000822AS path regular expression can be used for displaying BGP routes and
paul718e3742002-12-13 20:15:29 +0000823AS path access list. AS path regular expression is based on
824@code{POSIX 1003.2} regular expressions. Following description is
825just a subset of @code{POSIX} regular expression. User can use full
826@code{POSIX} regular expression. Adding to that special character '_'
827is added for AS path regular expression.
828
829@table @code
830@item .
831Matches any single character.
832@item *
833Matches 0 or more occurrences of pattern.
834@item +
835Matches 1 or more occurrences of pattern.
836@item ?
837Match 0 or 1 occurrences of pattern.
838@item ^
839Matches the beginning of the line.
840@item $
841Matches the end of the line.
842@item _
843Character @code{_} has special meanings in AS path regular expression.
844It matches to space and comma , and AS set delimiter @{ and @} and AS
845confederation delimiter @code{(} and @code{)}. And it also matches to
846the beginning of the line and the end of the line. So @code{_} can be
847used for AS value boundaries match. @code{show ip bgp regexp _7675_}
848matches to all of BGP routes which as AS number include @var{7675}.
849@end table
850
paul76b89b42004-11-06 17:13:09 +0000851@node Display BGP Routes by AS Path
paul718e3742002-12-13 20:15:29 +0000852@subsection Display BGP Routes by AS Path
853
paulaa5943f2005-11-04 21:53:59 +0000854To show BGP routes which has specific AS path information @code{show
paul718e3742002-12-13 20:15:29 +0000855ip bgp} command can be used.
856
857@deffn Command {show ip bgp regexp @var{line}} {}
858This commands display BGP routes that matches AS path regular
859expression @var{line}.
860@end deffn
861
paul76b89b42004-11-06 17:13:09 +0000862@node AS Path Access List
paul718e3742002-12-13 20:15:29 +0000863@subsection AS Path Access List
864
paulaa5943f2005-11-04 21:53:59 +0000865AS path access list is user defined AS path.
paul718e3742002-12-13 20:15:29 +0000866
867@deffn {Command} {ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
868This command defines a new AS path access list.
869@end deffn
870
871@deffn {Command} {no ip as-path access-list @var{word}} {}
872@deffnx {Command} {no ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
873@end deffn
874
paul76b89b42004-11-06 17:13:09 +0000875@node Using AS Path in Route Map
paul718e3742002-12-13 20:15:29 +0000876@subsection Using AS Path in Route Map
877
878@deffn {Route Map} {match as-path @var{word}} {}
879@end deffn
880
881@deffn {Route Map} {set as-path prepend @var{as-path}} {}
Paul Jakma5e4ba812014-10-20 17:49:44 +0100882Prepend the given string of AS numbers to the AS_PATH.
883@end deffn
884
885@deffn {Route Map} {set as-path prepend last-as @var{num}} {}
886Prepend the existing last AS number (the leftmost ASN) to the AS_PATH.
paul718e3742002-12-13 20:15:29 +0000887@end deffn
888
paul76b89b42004-11-06 17:13:09 +0000889@node Private AS Numbers
paul718e3742002-12-13 20:15:29 +0000890@subsection Private AS Numbers
891
paul718e3742002-12-13 20:15:29 +0000892@c -----------------------------------------------------------------------
paul76b89b42004-11-06 17:13:09 +0000893@node BGP Communities Attribute
paul718e3742002-12-13 20:15:29 +0000894@section BGP Communities Attribute
895
paulaa5943f2005-11-04 21:53:59 +0000896BGP communities attribute is widely used for implementing policy
paul718e3742002-12-13 20:15:29 +0000897routing. Network operators can manipulate BGP communities attribute
898based on their network policy. BGP communities attribute is defined
paulaa5943f2005-11-04 21:53:59 +0000899in @cite{RFC1997, BGP Communities Attribute} and
900@cite{RFC1998, An Application of the BGP Community Attribute
paul718e3742002-12-13 20:15:29 +0000901in Multi-home Routing}. It is an optional transitive attribute,
902therefore local policy can travel through different autonomous system.
903
paulaa5943f2005-11-04 21:53:59 +0000904Communities attribute is a set of communities values. Each
paul718e3742002-12-13 20:15:29 +0000905communities value is 4 octet long. The following format is used to
906define communities value.
907
908@table @code
909@item AS:VAL
910This format represents 4 octet communities value. @code{AS} is high
911order 2 octet in digit format. @code{VAL} is low order 2 octet in
912digit format. This format is useful to define AS oriented policy
913value. For example, @code{7675:80} can be used when AS 7675 wants to
914pass local policy value 80 to neighboring peer.
915@item internet
916@code{internet} represents well-known communities value 0.
917@item no-export
918@code{no-export} represents well-known communities value @code{NO_EXPORT}@*
919@r{(0xFFFFFF01)}. All routes carry this value must not be advertised
920to outside a BGP confederation boundary. If neighboring BGP peer is
921part of BGP confederation, the peer is considered as inside a BGP
922confederation boundary, so the route will be announced to the peer.
923@item no-advertise
924@code{no-advertise} represents well-known communities value
925@code{NO_ADVERTISE}@*@r{(0xFFFFFF02)}. All routes carry this value
926must not be advertise to other BGP peers.
927@item local-AS
928@code{local-AS} represents well-known communities value
929@code{NO_EXPORT_SUBCONFED} @r{(0xFFFFFF03)}. All routes carry this
930value must not be advertised to external BGP peers. Even if the
931neighboring router is part of confederation, it is considered as
932external BGP peer, so the route will not be announced to the peer.
933@end table
934
935 When BGP communities attribute is received, duplicated communities
936value in the communities attribute is ignored and each communities
937values are sorted in numerical order.
938
939@menu
940* BGP Community Lists::
941* Numbered BGP Community Lists::
942* BGP Community in Route Map::
943* Display BGP Routes by Community::
944* Using BGP Communities Attribute::
945@end menu
946
paul76b89b42004-11-06 17:13:09 +0000947@node BGP Community Lists
paul718e3742002-12-13 20:15:29 +0000948@subsection BGP Community Lists
949
950 BGP community list is a user defined BGP communites attribute list.
951BGP community list can be used for matching or manipulating BGP
952communities attribute in updates.
953
paulaa5943f2005-11-04 21:53:59 +0000954There are two types of community list. One is standard community
paul718e3742002-12-13 20:15:29 +0000955list and another is expanded community list. Standard community list
956defines communities attribute. Expanded community list defines
957communities attribute string with regular expression. Standard
958community list is compiled into binary format when user define it.
959Standard community list will be directly compared to BGP communities
960attribute in BGP updates. Therefore the comparison is faster than
961expanded community list.
962
963@deffn Command {ip community-list standard @var{name} @{permit|deny@} @var{community}} {}
964This command defines a new standard community list. @var{community}
965is communities value. The @var{community} is compiled into community
966structure. We can define multiple community list under same name. In
967that case match will happen user defined order. Once the
968community list matches to communities attribute in BGP updates it
969return permit or deny by the community list definition. When there is
970no matched entry, deny will be returned. When @var{community} is
971empty it matches to any routes.
972@end deffn
973
974@deffn Command {ip community-list expanded @var{name} @{permit|deny@} @var{line}} {}
975This command defines a new expanded community list. @var{line} is a
976string expression of communities attribute. @var{line} can include
977regular expression to match communities attribute in BGP updates.
978@end deffn
979
980@deffn Command {no ip community-list @var{name}} {}
981@deffnx Command {no ip community-list standard @var{name}} {}
982@deffnx Command {no ip community-list expanded @var{name}} {}
983These commands delete community lists specified by @var{name}. All of
984community lists shares a single name space. So community lists can be
985removed simpley specifying community lists name.
986@end deffn
987
988@deffn {Command} {show ip community-list} {}
989@deffnx {Command} {show ip community-list @var{name}} {}
990This command display current community list information. When
991@var{name} is specified the specified community list's information is
992shown.
993
994@example
995# show ip community-list
996Named Community standard list CLIST
997 permit 7675:80 7675:100 no-export
998 deny internet
999Named Community expanded list EXPAND
1000 permit :
1001
1002# show ip community-list CLIST
1003Named Community standard list CLIST
1004 permit 7675:80 7675:100 no-export
1005 deny internet
1006@end example
1007@end deffn
1008
paul76b89b42004-11-06 17:13:09 +00001009@node Numbered BGP Community Lists
paul718e3742002-12-13 20:15:29 +00001010@subsection Numbered BGP Community Lists
1011
paulaa5943f2005-11-04 21:53:59 +00001012When number is used for BGP community list name, the number has
paul718e3742002-12-13 20:15:29 +00001013special meanings. Community list number in the range from 1 and 99 is
1014standard community list. Community list number in the range from 100
1015to 199 is expanded community list. These community lists are called
1016as numbered community lists. On the other hand normal community lists
1017is called as named community lists.
1018
1019@deffn Command {ip community-list <1-99> @{permit|deny@} @var{community}} {}
1020This command defines a new community list. <1-99> is standard
1021community list number. Community list name within this range defines
1022standard community list. When @var{community} is empty it matches to
1023any routes.
1024@end deffn
1025
1026@deffn Command {ip community-list <100-199> @{permit|deny@} @var{community}} {}
1027This command defines a new community list. <100-199> is expanded
1028community list number. Community list name within this range defines
1029expanded community list.
1030@end deffn
1031
1032@deffn Command {ip community-list @var{name} @{permit|deny@} @var{community}} {}
1033When community list type is not specifed, the community list type is
1034automatically detected. If @var{community} can be compiled into
1035communities attribute, the community list is defined as a standard
1036community list. Otherwise it is defined as an expanded community
1037list. This feature is left for backward compability. Use of this
1038feature is not recommended.
1039@end deffn
1040
paul76b89b42004-11-06 17:13:09 +00001041@node BGP Community in Route Map
paul718e3742002-12-13 20:15:29 +00001042@subsection BGP Community in Route Map
1043
paulaa5943f2005-11-04 21:53:59 +00001044In Route Map (@pxref{Route Map}), we can match or set BGP
paul718e3742002-12-13 20:15:29 +00001045communities attribute. Using this feature network operator can
1046implement their network policy based on BGP communities attribute.
1047
paulaa5943f2005-11-04 21:53:59 +00001048Following commands can be used in Route Map.
paul718e3742002-12-13 20:15:29 +00001049
1050@deffn {Route Map} {match community @var{word}} {}
1051@deffnx {Route Map} {match community @var{word} exact-match} {}
1052This command perform match to BGP updates using community list
1053@var{word}. When the one of BGP communities value match to the one of
1054communities value in community list, it is match. When
1055@code{exact-match} keyword is spcified, match happen only when BGP
1056updates have completely same communities value specified in the
1057community list.
1058@end deffn
1059
1060@deffn {Route Map} {set community none} {}
1061@deffnx {Route Map} {set community @var{community}} {}
1062@deffnx {Route Map} {set community @var{community} additive} {}
1063This command manipulate communities value in BGP updates. When
1064@code{none} is specified as communities value, it removes entire
1065communities attribute from BGP updates. When @var{community} is not
1066@code{none}, specified communities value is set to BGP updates. If
1067BGP updates already has BGP communities value, the existing BGP
1068communities value is replaced with specified @var{community} value.
1069When @code{additive} keyword is specified, @var{community} is appended
1070to the existing communities value.
1071@end deffn
1072
1073@deffn {Route Map} {set comm-list @var{word} delete} {}
1074This command remove communities value from BGP communities attribute.
1075The @var{word} is community list name. When BGP route's communities
1076value matches to the community list @var{word}, the communities value
1077is removed. When all of communities value is removed eventually, the
1078BGP update's communities attribute is completely removed.
1079@end deffn
1080
paul76b89b42004-11-06 17:13:09 +00001081@node Display BGP Routes by Community
paul718e3742002-12-13 20:15:29 +00001082@subsection Display BGP Routes by Community
1083
paulaa5943f2005-11-04 21:53:59 +00001084To show BGP routes which has specific BGP communities attribute,
paul718e3742002-12-13 20:15:29 +00001085@code{show ip bgp} command can be used. The @var{community} value and
1086community list can be used for @code{show ip bgp} command.
1087
1088@deffn Command {show ip bgp community} {}
1089@deffnx Command {show ip bgp community @var{community}} {}
1090@deffnx Command {show ip bgp community @var{community} exact-match} {}
1091@code{show ip bgp community} displays BGP routes which has communities
1092attribute. When @var{community} is specified, BGP routes that matches
1093@var{community} value is displayed. For this command, @code{internet}
1094keyword can't be used for @var{community} value. When
1095@code{exact-match} is specified, it display only routes that have an
1096exact match.
1097@end deffn
1098
1099@deffn Command {show ip bgp community-list @var{word}} {}
1100@deffnx Command {show ip bgp community-list @var{word} exact-match} {}
1101This commands display BGP routes that matches community list
1102@var{word}. When @code{exact-match} is specified, display only routes
1103that have an exact match.
1104@end deffn
1105
paul76b89b42004-11-06 17:13:09 +00001106@node Using BGP Communities Attribute
paul718e3742002-12-13 20:15:29 +00001107@subsection Using BGP Communities Attribute
1108
paulaa5943f2005-11-04 21:53:59 +00001109Following configuration is the most typical usage of BGP communities
paul718e3742002-12-13 20:15:29 +00001110attribute. AS 7675 provides upstream Internet connection to AS 100.
1111When following configuration exists in AS 7675, AS 100 networks
1112operator can set local preference in AS 7675 network by setting BGP
1113communities attribute to the updates.
1114
1115@example
1116router bgp 7675
1117 neighbor 192.168.0.1 remote-as 100
1118 neighbor 192.168.0.1 route-map RMAP in
1119!
1120ip community-list 70 permit 7675:70
1121ip community-list 70 deny
1122ip community-list 80 permit 7675:80
1123ip community-list 80 deny
1124ip community-list 90 permit 7675:90
1125ip community-list 90 deny
1126!
1127route-map RMAP permit 10
1128 match community 70
1129 set local-preference 70
1130!
1131route-map RMAP permit 20
1132 match community 80
1133 set local-preference 80
1134!
1135route-map RMAP permit 30
1136 match community 90
1137 set local-preference 90
1138@end example
1139
paulaa5943f2005-11-04 21:53:59 +00001140Following configuration announce 10.0.0.0/8 from AS 100 to AS 7675.
paul718e3742002-12-13 20:15:29 +00001141The route has communities value 7675:80 so when above configuration
1142exists in AS 7675, announced route's local preference will be set to
1143value 80.
1144
1145@example
1146router bgp 100
1147 network 10.0.0.0/8
1148 neighbor 192.168.0.2 remote-as 7675
1149 neighbor 192.168.0.2 route-map RMAP out
1150!
1151ip prefix-list PLIST permit 10.0.0.0/8
1152!
1153route-map RMAP permit 10
1154 match ip address prefix-list PLIST
1155 set community 7675:80
1156@end example
1157
paulaa5943f2005-11-04 21:53:59 +00001158Following configuration is an example of BGP route filtering using
paul718e3742002-12-13 20:15:29 +00001159communities attribute. This configuration only permit BGP routes
1160which has BGP communities value 0:80 or 0:90. Network operator can
1161put special internal communities value at BGP border router, then
1162limit the BGP routes announcement into the internal network.
1163
1164@example
1165router bgp 7675
1166 neighbor 192.168.0.1 remote-as 100
1167 neighbor 192.168.0.1 route-map RMAP in
1168!
1169ip community-list 1 permit 0:80 0:90
1170!
1171route-map RMAP permit in
1172 match community 1
1173@end example
1174
paulaa5943f2005-11-04 21:53:59 +00001175Following exmaple filter BGP routes which has communities value 1:1.
paul718e3742002-12-13 20:15:29 +00001176When there is no match community-list returns deny. To avoid
1177filtering all of routes, we need to define permit any at last.
1178
1179@example
1180router bgp 7675
1181 neighbor 192.168.0.1 remote-as 100
1182 neighbor 192.168.0.1 route-map RMAP in
1183!
1184ip community-list standard FILTER deny 1:1
1185ip community-list standard FILTER permit
1186!
1187route-map RMAP permit 10
1188 match community FILTER
1189@end example
1190
paulaa5943f2005-11-04 21:53:59 +00001191Communities value keyword @code{internet} has special meanings in
paul718e3742002-12-13 20:15:29 +00001192standard community lists. In below example @code{internet} act as
1193match any. It matches all of BGP routes even if the route does not
1194have communities attribute at all. So community list @code{INTERNET}
1195is same as above example's @code{FILTER}.
1196
1197@example
1198ip community-list standard INTERNET deny 1:1
1199ip community-list standard INTERNET permit internet
1200@end example
1201
paulaa5943f2005-11-04 21:53:59 +00001202Following configuration is an example of communities value deletion.
paul718e3742002-12-13 20:15:29 +00001203With this configuration communities value 100:1 and 100:2 is removed
1204from BGP updates. For communities value deletion, only @code{permit}
1205community-list is used. @code{deny} community-list is ignored.
1206
1207@example
1208router bgp 7675
1209 neighbor 192.168.0.1 remote-as 100
1210 neighbor 192.168.0.1 route-map RMAP in
1211!
1212ip community-list standard DEL permit 100:1 100:2
1213!
1214route-map RMAP permit 10
1215 set comm-list DEL delete
1216@end example
1217
1218@c -----------------------------------------------------------------------
paul76b89b42004-11-06 17:13:09 +00001219@node BGP Extended Communities Attribute
paul718e3742002-12-13 20:15:29 +00001220@section BGP Extended Communities Attribute
1221
paulaa5943f2005-11-04 21:53:59 +00001222BGP extended communities attribute is introduced with MPLS VPN/BGP
paul718e3742002-12-13 20:15:29 +00001223technology. MPLS VPN/BGP expands capability of network infrastructure
1224to provide VPN functionality. At the same time it requires a new
1225framework for policy routing. With BGP Extended Communities Attribute
1226we can use Route Target or Site of Origin for implementing network
1227policy for MPLS VPN/BGP.
1228
paulaa5943f2005-11-04 21:53:59 +00001229BGP Extended Communities Attribute is similar to BGP Communities
paul718e3742002-12-13 20:15:29 +00001230Attribute. It is an optional transitive attribute. BGP Extended
1231Communities Attribute can carry multiple Extended Community value.
1232Each Extended Community value is eight octet length.
1233
paulaa5943f2005-11-04 21:53:59 +00001234BGP Extended Communities Attribute provides an extended range
paul718e3742002-12-13 20:15:29 +00001235compared with BGP Communities Attribute. Adding to that there is a
1236type field in each value to provides community space structure.
1237
paulaa5943f2005-11-04 21:53:59 +00001238There are two format to define Extended Community value. One is AS
paul718e3742002-12-13 20:15:29 +00001239based format the other is IP address based format.
1240
1241@table @code
1242@item AS:VAL
1243This is a format to define AS based Extended Community value.
1244@code{AS} part is 2 octets Global Administrator subfield in Extended
1245Community value. @code{VAL} part is 4 octets Local Administrator
1246subfield. @code{7675:100} represents AS 7675 policy value 100.
1247@item IP-Address:VAL
1248This is a format to define IP address based Extended Community value.
1249@code{IP-Address} part is 4 octets Global Administrator subfield.
1250@code{VAL} part is 2 octets Local Administrator subfield.
1251@code{10.0.0.1:100} represents
1252@end table
1253
1254@menu
1255* BGP Extended Community Lists::
1256* BGP Extended Communities in Route Map::
1257@end menu
1258
paul76b89b42004-11-06 17:13:09 +00001259@node BGP Extended Community Lists
paul718e3742002-12-13 20:15:29 +00001260@subsection BGP Extended Community Lists
1261
paulaa5943f2005-11-04 21:53:59 +00001262Expanded Community Lists is a user defined BGP Expanded Community
paul718e3742002-12-13 20:15:29 +00001263Lists.
1264
1265@deffn Command {ip extcommunity-list standard @var{name} @{permit|deny@} @var{extcommunity}} {}
1266This command defines a new standard extcommunity-list.
1267@var{extcommunity} is extended communities value. The
1268@var{extcommunity} is compiled into extended community structure. We
1269can define multiple extcommunity-list under same name. In that case
1270match will happen user defined order. Once the extcommunity-list
1271matches to extended communities attribute in BGP updates it return
1272permit or deny based upon the extcommunity-list definition. When
1273there is no matched entry, deny will be returned. When
1274@var{extcommunity} is empty it matches to any routes.
1275@end deffn
1276
1277@deffn Command {ip extcommunity-list expanded @var{name} @{permit|deny@} @var{line}} {}
1278This command defines a new expanded extcommunity-list. @var{line} is
1279a string expression of extended communities attribute. @var{line} can
1280include regular expression to match extended communities attribute in
1281BGP updates.
1282@end deffn
1283
1284@deffn Command {no ip extcommunity-list @var{name}} {}
1285@deffnx Command {no ip extcommunity-list standard @var{name}} {}
1286@deffnx Command {no ip extcommunity-list expanded @var{name}} {}
1287These commands delete extended community lists specified by
1288@var{name}. All of extended community lists shares a single name
1289space. So extended community lists can be removed simpley specifying
1290the name.
1291@end deffn
1292
1293@deffn {Command} {show ip extcommunity-list} {}
1294@deffnx {Command} {show ip extcommunity-list @var{name}} {}
1295This command display current extcommunity-list information. When
1296@var{name} is specified the community list's information is shown.
1297
1298@example
1299# show ip extcommunity-list
1300@end example
1301@end deffn
1302
paul76b89b42004-11-06 17:13:09 +00001303@node BGP Extended Communities in Route Map
paul718e3742002-12-13 20:15:29 +00001304@subsection BGP Extended Communities in Route Map
1305
1306@deffn {Route Map} {match extcommunity @var{word}} {}
1307@end deffn
1308
1309@deffn {Route Map} {set extcommunity rt @var{extcommunity}} {}
1310This command set Route Target value.
1311@end deffn
1312
1313@deffn {Route Map} {set extcommunity soo @var{extcommunity}} {}
1314This command set Site of Origin value.
1315@end deffn
1316
1317@c -----------------------------------------------------------------------
paul76b89b42004-11-06 17:13:09 +00001318@node Displaying BGP routes
paul718e3742002-12-13 20:15:29 +00001319@section Displaying BGP Routes
1320
1321@menu
1322* Show IP BGP::
1323* More Show IP BGP::
1324@end menu
1325
paul76b89b42004-11-06 17:13:09 +00001326@node Show IP BGP
paul718e3742002-12-13 20:15:29 +00001327@subsection Show IP BGP
1328
1329@deffn {Command} {show ip bgp} {}
1330@deffnx {Command} {show ip bgp @var{A.B.C.D}} {}
1331@deffnx {Command} {show ip bgp @var{X:X::X:X}} {}
1332This command displays BGP routes. When no route is specified it
1333display all of IPv4 BGP routes.
1334@end deffn
1335
1336@example
1337BGP table version is 0, local router ID is 10.1.1.1
1338Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
1339Origin codes: i - IGP, e - EGP, ? - incomplete
1340
1341 Network Next Hop Metric LocPrf Weight Path
1342*> 1.1.1.1/32 0.0.0.0 0 32768 i
1343
1344Total number of prefixes 1
1345@end example
1346
paul76b89b42004-11-06 17:13:09 +00001347@node More Show IP BGP
paul718e3742002-12-13 20:15:29 +00001348@subsection More Show IP BGP
1349
1350@deffn {Command} {show ip bgp regexp @var{line}} {}
1351This command display BGP routes using AS path regular expression (@pxref{Display BGP Routes by AS Path}).
1352@end deffn
1353
1354@deffn Command {show ip bgp community @var{community}} {}
1355@deffnx Command {show ip bgp community @var{community} exact-match} {}
1356This command display BGP routes using @var{community} (@pxref{Display
1357BGP Routes by Community}).
1358@end deffn
1359
1360@deffn Command {show ip bgp community-list @var{word}} {}
1361@deffnx Command {show ip bgp community-list @var{word} exact-match} {}
1362This command display BGP routes using community list (@pxref{Display
1363BGP Routes by Community}).
1364@end deffn
1365
1366@deffn {Command} {show ip bgp summary} {}
1367@end deffn
1368
1369@deffn {Command} {show ip bgp neighbor [@var{peer}]} {}
1370@end deffn
1371
1372@deffn {Command} {clear ip bgp @var{peer}} {}
1373Clear peers which have addresses of X.X.X.X
1374@end deffn
1375
1376@deffn {Command} {clear ip bgp @var{peer} soft in} {}
1377Clear peer using soft reconfiguration.
1378@end deffn
1379
Alexandre Chappuisc31e5722011-09-11 16:54:11 +04001380@deffn {Command} {show ip bgp dampened-paths} {}
1381Display paths suppressed due to dampening
1382@end deffn
1383
1384@deffn {Command} {show ip bgp flap-statistics} {}
1385Display flap statistics of routes
1386@end deffn
1387
paul718e3742002-12-13 20:15:29 +00001388@deffn {Command} {show debug} {}
1389@end deffn
1390
1391@deffn {Command} {debug event} {}
1392@end deffn
1393
1394@deffn {Command} {debug update} {}
1395@end deffn
1396
1397@deffn {Command} {debug keepalive} {}
1398@end deffn
1399
1400@deffn {Command} {no debug event} {}
1401@end deffn
1402
1403@deffn {Command} {no debug update} {}
1404@end deffn
1405
1406@deffn {Command} {no debug keepalive} {}
1407@end deffn
1408
paul76b89b42004-11-06 17:13:09 +00001409@node Capability Negotiation
paul718e3742002-12-13 20:15:29 +00001410@section Capability Negotiation
1411
paulaa5943f2005-11-04 21:53:59 +00001412When adding IPv6 routing information exchange feature to BGP. There
1413were some proposals. @acronym{IETF,Internet Engineering Task Force}
1414@acronym{IDR, Inter Domain Routing} @acronym{WG, Working group} adopted
1415a proposal called Multiprotocol Extension for BGP. The specification
1416is described in @cite{RFC2283}. The protocol does not define new protocols.
1417It defines new attributes to existing BGP. When it is used exchanging
1418IPv6 routing information it is called BGP-4+. When it is used for
1419exchanging multicast routing information it is called MBGP.
paul718e3742002-12-13 20:15:29 +00001420
paulaa5943f2005-11-04 21:53:59 +00001421@command{bgpd} supports Multiprotocol Extension for BGP. So if remote
1422peer supports the protocol, @command{bgpd} can exchange IPv6 and/or
1423multicast routing information.
paul718e3742002-12-13 20:15:29 +00001424
paulaa5943f2005-11-04 21:53:59 +00001425Traditional BGP did not have the feature to detect remote peer's
1426capabilities, e.g. whether it can handle prefix types other than IPv4
1427unicast routes. This was a big problem using Multiprotocol Extension
1428for BGP to operational network. @cite{RFC2842, Capabilities
1429Advertisement with BGP-4} adopted a feature called Capability
1430Negotiation. @command{bgpd} use this Capability Negotiation to detect
1431the remote peer's capabilities. If the peer is only configured as IPv4
1432unicast neighbor, @command{bgpd} does not send these Capability
1433Negotiation packets (at least not unless other optional BGP features
1434require capability negotation).
paul718e3742002-12-13 20:15:29 +00001435
paulaa5943f2005-11-04 21:53:59 +00001436By default, Quagga will bring up peering with minimal common capability
1437for the both sides. For example, local router has unicast and
1438multicast capabilitie and remote router has unicast capability. In
1439this case, the local router will establish the connection with unicast
1440only capability. When there are no common capabilities, Quagga sends
1441Unsupported Capability error and then resets the connection.
paul718e3742002-12-13 20:15:29 +00001442
paulaa5943f2005-11-04 21:53:59 +00001443If you want to completely match capabilities with remote peer. Please
paul718e3742002-12-13 20:15:29 +00001444use @command{strict-capability-match} command.
1445
1446@deffn {BGP} {neighbor @var{peer} strict-capability-match} {}
1447@deffnx {BGP} {no neighbor @var{peer} strict-capability-match} {}
1448Strictly compares remote capabilities and local capabilities. If capabilities
1449are different, send Unsupported Capability error then reset connection.
1450@end deffn
1451
paulaa5943f2005-11-04 21:53:59 +00001452You may want to disable sending Capability Negotiation OPEN message
paul718e3742002-12-13 20:15:29 +00001453optional parameter to the peer when remote peer does not implement
1454Capability Negotiation. Please use @command{dont-capability-negotiate}
1455command to disable the feature.
1456
1457@deffn {BGP} {neighbor @var{peer} dont-capability-negotiate} {}
1458@deffnx {BGP} {no neighbor @var{peer} dont-capability-negotiate} {}
1459Suppress sending Capability Negotiation as OPEN message optional
1460parameter to the peer. This command only affects the peer is configured
1461other than IPv4 unicast configuration.
1462@end deffn
1463
paulaa5943f2005-11-04 21:53:59 +00001464When remote peer does not have capability negotiation feature, remote
1465peer will not send any capabilities at all. In that case, bgp
1466configures the peer with configured capabilities.
paul718e3742002-12-13 20:15:29 +00001467
paulaa5943f2005-11-04 21:53:59 +00001468You may prefer locally configured capabilities more than the negotiated
1469capabilities even though remote peer sends capabilities. If the peer
1470is configured by @command{override-capability}, @command{bgpd} ignores
1471received capabilities then override negotiated capabilities with
1472configured values.
paul718e3742002-12-13 20:15:29 +00001473
1474@deffn {BGP} {neighbor @var{peer} override-capability} {}
1475@deffnx {BGP} {no neighbor @var{peer} override-capability} {}
1476Override the result of Capability Negotiation with local configuration.
1477Ignore remote peer's capability value.
1478@end deffn
1479
paul76b89b42004-11-06 17:13:09 +00001480@node Route Reflector
paul718e3742002-12-13 20:15:29 +00001481@section Route Reflector
1482
1483@deffn {BGP} {bgp cluster-id @var{a.b.c.d}} {}
1484@end deffn
1485
1486@deffn {BGP} {neighbor @var{peer} route-reflector-client} {}
1487@deffnx {BGP} {no neighbor @var{peer} route-reflector-client} {}
1488@end deffn
1489
paul76b89b42004-11-06 17:13:09 +00001490@node Route Server
paul718e3742002-12-13 20:15:29 +00001491@section Route Server
1492
1493At an Internet Exchange point, many ISPs are connected to each other by
1494external BGP peering. Normally these external BGP connection are done by
paulaa5943f2005-11-04 21:53:59 +00001495@samp{full mesh} method. As with internal BGP full mesh formation,
paul718e3742002-12-13 20:15:29 +00001496this method has a scaling problem.
1497
1498This scaling problem is well known. Route Server is a method to resolve
1499the problem. Each ISP's BGP router only peers to Route Server. Route
1500Server serves as BGP information exchange to other BGP routers. By
1501applying this method, numbers of BGP connections is reduced from
1502O(n*(n-1)/2) to O(n).
1503
1504Unlike normal BGP router, Route Server must have several routing tables
1505for managing different routing policies for each BGP speaker. We call the
1506routing tables as different @code{view}s. @command{bgpd} can work as
1507normal BGP router or Route Server or both at the same time.
1508
1509@menu
1510* Multiple instance::
1511* BGP instance and view::
1512* Routing policy::
1513* Viewing the view::
1514@end menu
1515
paul76b89b42004-11-06 17:13:09 +00001516@node Multiple instance
paul718e3742002-12-13 20:15:29 +00001517@subsection Multiple instance
1518
1519To enable multiple view function of @code{bgpd}, you must turn on
1520multiple instance feature beforehand.
1521
1522@deffn {Command} {bgp multiple-instance} {}
1523Enable BGP multiple instance feature. After this feature is enabled,
1524you can make multiple BGP instances or multiple BGP views.
1525@end deffn
1526
1527@deffn {Command} {no bgp multiple-instance} {}
1528Disable BGP multiple instance feature. You can not disable this feature
1529when BGP multiple instances or views exist.
1530@end deffn
1531
1532When you want to make configuration more Cisco like one,
1533
1534@deffn {Command} {bgp config-type cisco} {}
1535Cisco compatible BGP configuration output.
1536@end deffn
1537
1538When bgp config-type cisco is specified,
1539
1540``no synchronization'' is displayed.
Ivan Moskalyov2b09e212010-03-11 17:14:35 +03001541``no auto-summary'' is displayed.
paul718e3742002-12-13 20:15:29 +00001542
1543``network'' and ``aggregate-address'' argument is displayed as
1544``A.B.C.D M.M.M.M''
1545
paul7190f4e2003-08-12 12:40:20 +00001546Quagga: network 10.0.0.0/8
paul718e3742002-12-13 20:15:29 +00001547Cisco: network 10.0.0.0
1548
paul7190f4e2003-08-12 12:40:20 +00001549Quagga: aggregate-address 192.168.0.0/24
paul718e3742002-12-13 20:15:29 +00001550Cisco: aggregate-address 192.168.0.0 255.255.255.0
1551
1552Community attribute handling is also different. If there is no
1553configuration is specified community attribute and extended community
1554attribute are sent to neighbor. When user manually disable the
1555feature community attribute is not sent to the neighbor. In case of
paulaa5943f2005-11-04 21:53:59 +00001556@command{bgp config-type cisco} is specified, community attribute is not
paul718e3742002-12-13 20:15:29 +00001557sent to the neighbor by default. To send community attribute user has
paulaa5943f2005-11-04 21:53:59 +00001558to specify @command{neighbor A.B.C.D send-community} command.
paul718e3742002-12-13 20:15:29 +00001559
paulaa5943f2005-11-04 21:53:59 +00001560@example
paul718e3742002-12-13 20:15:29 +00001561!
1562router bgp 1
1563 neighbor 10.0.0.1 remote-as 1
1564 no neighbor 10.0.0.1 send-community
1565!
paul718e3742002-12-13 20:15:29 +00001566router bgp 1
1567 neighbor 10.0.0.1 remote-as 1
1568 neighbor 10.0.0.1 send-community
1569!
paulaa5943f2005-11-04 21:53:59 +00001570@end example
paul718e3742002-12-13 20:15:29 +00001571
1572@deffn {Command} {bgp config-type zebra} {}
paul7190f4e2003-08-12 12:40:20 +00001573Quagga style BGP configuration. This is default.
paul718e3742002-12-13 20:15:29 +00001574@end deffn
1575
paul76b89b42004-11-06 17:13:09 +00001576@node BGP instance and view
paul718e3742002-12-13 20:15:29 +00001577@subsection BGP instance and view
1578
1579BGP instance is a normal BGP process. The result of route selection
1580goes to the kernel routing table. You can setup different AS at the
1581same time when BGP multiple instance feature is enabled.
1582
1583@deffn {Command} {router bgp @var{as-number}} {}
1584Make a new BGP instance. You can use arbitrary word for the @var{name}.
1585@end deffn
1586
1587@example
1588@group
1589bgp multiple-instance
1590!
1591router bgp 1
1592 neighbor 10.0.0.1 remote-as 2
1593 neighbor 10.0.0.2 remote-as 3
1594!
1595router bgp 2
1596 neighbor 10.0.0.3 remote-as 4
1597 neighbor 10.0.0.4 remote-as 5
1598@end group
1599@end example
1600
1601BGP view is almost same as normal BGP process. The result of
1602route selection does not go to the kernel routing table. BGP view is
1603only for exchanging BGP routing information.
1604
1605@deffn {Command} {router bgp @var{as-number} view @var{name}} {}
1606Make a new BGP view. You can use arbitrary word for the @var{name}. This
1607view's route selection result does not go to the kernel routing table.
1608@end deffn
1609
1610With this command, you can setup Route Server like below.
1611
1612@example
1613@group
1614bgp multiple-instance
1615!
1616router bgp 1 view 1
1617 neighbor 10.0.0.1 remote-as 2
1618 neighbor 10.0.0.2 remote-as 3
1619!
1620router bgp 2 view 2
1621 neighbor 10.0.0.3 remote-as 4
1622 neighbor 10.0.0.4 remote-as 5
1623@end group
1624@end example
1625
paul76b89b42004-11-06 17:13:09 +00001626@node Routing policy
paul718e3742002-12-13 20:15:29 +00001627@subsection Routing policy
1628
1629You can set different routing policy for a peer. For example, you can
1630set different filter for a peer.
1631
1632@example
1633@group
1634bgp multiple-instance
1635!
1636router bgp 1 view 1
1637 neighbor 10.0.0.1 remote-as 2
1638 neighbor 10.0.0.1 distribute-list 1 in
1639!
1640router bgp 1 view 2
1641 neighbor 10.0.0.1 remote-as 2
1642 neighbor 10.0.0.1 distribute-list 2 in
1643@end group
1644@end example
1645
1646This means BGP update from a peer 10.0.0.1 goes to both BGP view 1 and view
16472. When the update is inserted into view 1, distribute-list 1 is
1648applied. On the other hand, when the update is inserted into view 2,
1649distribute-list 2 is applied.
1650
paul76b89b42004-11-06 17:13:09 +00001651@node Viewing the view
paul718e3742002-12-13 20:15:29 +00001652@subsection Viewing the view
1653
1654To display routing table of BGP view, you must specify view name.
1655
1656@deffn {Command} {show ip bgp view @var{name}} {}
1657Display routing table of BGP view @var{name}.
1658@end deffn
1659
paul76b89b42004-11-06 17:13:09 +00001660@node How to set up a 6-Bone connection
paul718e3742002-12-13 20:15:29 +00001661@section How to set up a 6-Bone connection
1662
paul6a22b1f2004-11-07 19:39:13 +00001663
paul718e3742002-12-13 20:15:29 +00001664@example
1665@group
1666zebra configuration
1667===================
1668!
1669! Actually there is no need to configure zebra
1670!
1671
1672bgpd configuration
1673==================
1674!
1675! This means that routes go through zebra and into the kernel.
1676!
1677router zebra
1678!
1679! MP-BGP configuration
1680!
1681router bgp 7675
1682 bgp router-id 10.0.0.1
1683 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 remote-as @var{as-number}
1684!
1685 address-family ipv6
1686 network 3ffe:506::/32
1687 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 activate
1688 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 route-map set-nexthop out
1689 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 remote-as @var{as-number}
1690 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 route-map set-nexthop out
1691 exit-address-family
1692!
1693ipv6 access-list all permit any
1694!
1695! Set output nexthop address.
1696!
1697route-map set-nexthop permit 10
1698 match ipv6 address all
1699 set ipv6 nexthop global 3ffe:1cfa:0:2:2c0:4fff:fe68:a225
1700 set ipv6 nexthop local fe80::2c0:4fff:fe68:a225
1701!
1702! logfile FILENAME is obsolete. Please use log file FILENAME
paul7190f4e2003-08-12 12:40:20 +00001703
paul718e3742002-12-13 20:15:29 +00001704log file bgpd.log
1705!
1706@end group
1707@end example
1708
paul76b89b42004-11-06 17:13:09 +00001709@node Dump BGP packets and table
paul718e3742002-12-13 20:15:29 +00001710@section Dump BGP packets and table
1711
Alexis Fasqueldbe99e02015-11-16 13:55:16 -05001712@deffn Command {dump bgp all @var{path} [@var{interval}]} {}
1713@deffnx Command {dump bgp all-et @var{path} [@var{interval}]} {}
1714@deffnx Command {no dump bgp all [@var{path}] [@var{interval}]} {}
paul718e3742002-12-13 20:15:29 +00001715Dump all BGP packet and events to @var{path} file.
Alexis Fasqueldbe99e02015-11-16 13:55:16 -05001716If @var{interval} is set, a new file will be created for echo @var{interval} of seconds.
1717The path @var{path} can be set with date and time formatting (strftime).
1718The type ‘all-et’ enables support for Extended Timestamp Header (@pxref{Packet Binary Dump Format}).
1719(@pxref{Packet Binary Dump Format})
paul718e3742002-12-13 20:15:29 +00001720@end deffn
1721
Alexis Fasqueldbe99e02015-11-16 13:55:16 -05001722@deffn Command {dump bgp updates @var{path} [@var{interval}]} {}
1723@deffnx Command {dump bgp updates-et @var{path} [@var{interval}]} {}
1724@deffnx Command {no dump bgp updates [@var{path}] [@var{interval}]} {}
1725Dump only BGP updates messages to @var{path} file.
1726If @var{interval} is set, a new file will be created for echo @var{interval} of seconds.
1727The path @var{path} can be set with date and time formatting (strftime).
1728The type ‘updates-et’ enables support for Extended Timestamp Header (@pxref{Packet Binary Dump Format}).
paul718e3742002-12-13 20:15:29 +00001729@end deffn
1730
Alexis Fasqueldbe99e02015-11-16 13:55:16 -05001731@deffn Command {dump bgp routes-mrt @var{path}} {}
1732@deffnx Command {dump bgp routes-mrt @var{path} @var{interval}} {}
1733@deffnx Command {no dump bgp route-mrt [@var{path}] [@var{interval}]} {}
paul718e3742002-12-13 20:15:29 +00001734Dump whole BGP routing table to @var{path}. This is heavy process.
Alexis Fasqueldbe99e02015-11-16 13:55:16 -05001735The path @var{path} can be set with date and time formatting (strftime).
1736If @var{interval} is set, a new file will be created for echo @var{interval} of seconds.
paul718e3742002-12-13 20:15:29 +00001737@end deffn
paulaa5943f2005-11-04 21:53:59 +00001738
Alexis Fasqueldbe99e02015-11-16 13:55:16 -05001739Note: the interval variable can also be set using hours and minutes: 04h20m00.
1740
1741
paulaa5943f2005-11-04 21:53:59 +00001742@node BGP Configuration Examples
1743@section BGP Configuration Examples
1744
1745Example of a session to an upstream, advertising only one prefix to it.
1746
1747@example
1748router bgp 64512
1749 bgp router-id 10.236.87.1
1750 network 10.236.87.0/24
1751 neighbor upstream peer-group
1752 neighbor upstream remote-as 64515
1753 neighbor upstream capability dynamic
1754 neighbor upstream prefix-list pl-allowed-adv out
1755 neighbor 10.1.1.1 peer-group upstream
1756 neighbor 10.1.1.1 description ACME ISP
1757!
1758ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
1759ip prefix-list pl-allowed-adv seq 10 deny any
1760
1761@end example
1762
1763A more complex example. With upstream, peer and customer sessions.
1764Advertising global prefixes and NO_EXPORT prefixes and providing
1765actions for customer routes based on community values. Extensive use of
1766route-maps and the 'call' feature to support selective advertising of
1767prefixes. This example is intended as guidance only, it has NOT been
1768tested and almost certainly containts silly mistakes, if not serious
1769flaws.
1770
1771@example
1772router bgp 64512
1773 bgp router-id 10.236.87.1
1774 network 10.123.456.0/24
1775 network 10.123.456.128/25 route-map rm-no-export
1776 neighbor upstream capability dynamic
1777 neighbor upstream route-map rm-upstream-out out
1778 neighbor cust capability dynamic
1779 neighbor cust route-map rm-cust-in in
1780 neighbor cust route-map rm-cust-out out
1781 neighbor cust send-community both
1782 neighbor peer capability dynamic
1783 neighbor peer route-map rm-peer-in in
1784 neighbor peer route-map rm-peer-out out
1785 neighbor peer send-community both
1786 neighbor 10.1.1.1 remote-as 64515
1787 neighbor 10.1.1.1 peer-group upstream
1788 neighbor 10.2.1.1 remote-as 64516
1789 neighbor 10.2.1.1 peer-group upstream
1790 neighbor 10.3.1.1 remote-as 64517
1791 neighbor 10.3.1.1 peer-group cust-default
1792 neighbor 10.3.1.1 description customer1
1793 neighbor 10.3.1.1 prefix-list pl-cust1-network in
1794 neighbor 10.4.1.1 remote-as 64518
1795 neighbor 10.4.1.1 peer-group cust
1796 neighbor 10.4.1.1 prefix-list pl-cust2-network in
1797 neighbor 10.4.1.1 description customer2
1798 neighbor 10.5.1.1 remote-as 64519
1799 neighbor 10.5.1.1 peer-group peer
1800 neighbor 10.5.1.1 prefix-list pl-peer1-network in
1801 neighbor 10.5.1.1 description peer AS 1
1802 neighbor 10.6.1.1 remote-as 64520
1803 neighbor 10.6.1.1 peer-group peer
1804 neighbor 10.6.1.1 prefix-list pl-peer2-network in
1805 neighbor 10.6.1.1 description peer AS 2
1806!
1807ip prefix-list pl-default permit 0.0.0.0/0
1808!
1809ip prefix-list pl-upstream-peers permit 10.1.1.1/32
1810ip prefix-list pl-upstream-peers permit 10.2.1.1/32
1811!
1812ip prefix-list pl-cust1-network permit 10.3.1.0/24
1813ip prefix-list pl-cust1-network permit 10.3.2.0/24
1814!
1815ip prefix-list pl-cust2-network permit 10.4.1.0/24
1816!
1817ip prefix-list pl-peer1-network permit 10.5.1.0/24
1818ip prefix-list pl-peer1-network permit 10.5.2.0/24
1819ip prefix-list pl-peer1-network permit 192.168.0.0/24
1820!
1821ip prefix-list pl-peer2-network permit 10.6.1.0/24
1822ip prefix-list pl-peer2-network permit 10.6.2.0/24
1823ip prefix-list pl-peer2-network permit 192.168.1.0/24
1824ip prefix-list pl-peer2-network permit 192.168.2.0/24
1825ip prefix-list pl-peer2-network permit 172.16.1/24
1826!
1827ip as-path access-list asp-own-as permit ^$
1828ip as-path access-list asp-own-as permit _64512_
1829!
1830! #################################################################
1831! Match communities we provide actions for, on routes receives from
1832! customers. Communities values of <our-ASN>:X, with X, have actions:
1833!
1834! 100 - blackhole the prefix
1835! 200 - set no_export
1836! 300 - advertise only to other customers
1837! 400 - advertise only to upstreams
1838! 500 - set no_export when advertising to upstreams
1839! 2X00 - set local_preference to X00
1840!
1841! blackhole the prefix of the route
1842ip community-list standard cm-blackhole permit 64512:100
1843!
1844! set no-export community before advertising
1845ip community-list standard cm-set-no-export permit 64512:200
1846!
1847! advertise only to other customers
1848ip community-list standard cm-cust-only permit 64512:300
1849!
1850! advertise only to upstreams
1851ip community-list standard cm-upstream-only permit 64512:400
1852!
1853! advertise to upstreams with no-export
1854ip community-list standard cm-upstream-noexport permit 64512:500
1855!
1856! set local-pref to least significant 3 digits of the community
1857ip community-list standard cm-prefmod-100 permit 64512:2100
1858ip community-list standard cm-prefmod-200 permit 64512:2200
1859ip community-list standard cm-prefmod-300 permit 64512:2300
1860ip community-list standard cm-prefmod-400 permit 64512:2400
1861ip community-list expanded cme-prefmod-range permit 64512:2...
1862!
1863! Informational communities
1864!
1865! 3000 - learned from upstream
1866! 3100 - learned from customer
1867! 3200 - learned from peer
1868!
1869ip community-list standard cm-learnt-upstream permit 64512:3000
1870ip community-list standard cm-learnt-cust permit 64512:3100
1871ip community-list standard cm-learnt-peer permit 64512:3200
1872!
1873! ###################################################################
1874! Utility route-maps
1875!
1876! These utility route-maps generally should not used to permit/deny
1877! routes, i.e. they do not have meaning as filters, and hence probably
1878! should be used with 'on-match next'. These all finish with an empty
1879! permit entry so as not interfere with processing in the caller.
1880!
1881route-map rm-no-export permit 10
1882 set community additive no-export
1883route-map rm-no-export permit 20
1884!
1885route-map rm-blackhole permit 10
1886 description blackhole, up-pref and ensure it cant escape this AS
1887 set ip next-hop 127.0.0.1
1888 set local-preference 10
1889 set community additive no-export
1890route-map rm-blackhole permit 20
1891!
1892! Set local-pref as requested
1893route-map rm-prefmod permit 10
1894 match community cm-prefmod-100
1895 set local-preference 100
1896route-map rm-prefmod permit 20
1897 match community cm-prefmod-200
1898 set local-preference 200
1899route-map rm-prefmod permit 30
1900 match community cm-prefmod-300
1901 set local-preference 300
1902route-map rm-prefmod permit 40
1903 match community cm-prefmod-400
1904 set local-preference 400
1905route-map rm-prefmod permit 50
1906!
1907! Community actions to take on receipt of route.
1908route-map rm-community-in permit 10
1909 description check for blackholing, no point continuing if it matches.
1910 match community cm-blackhole
1911 call rm-blackhole
1912route-map rm-community-in permit 20
1913 match community cm-set-no-export
1914 call rm-no-export
1915 on-match next
1916route-map rm-community-in permit 30
1917 match community cme-prefmod-range
1918 call rm-prefmod
1919route-map rm-community-in permit 40
1920!
1921! #####################################################################
1922! Community actions to take when advertising a route.
1923! These are filtering route-maps,
1924!
1925! Deny customer routes to upstream with cust-only set.
1926route-map rm-community-filt-to-upstream deny 10
1927 match community cm-learnt-cust
1928 match community cm-cust-only
1929route-map rm-community-filt-to-upstream permit 20
1930!
1931! Deny customer routes to other customers with upstream-only set.
1932route-map rm-community-filt-to-cust deny 10
1933 match community cm-learnt-cust
1934 match community cm-upstream-only
1935route-map rm-community-filt-to-cust permit 20
1936!
1937! ###################################################################
1938! The top-level route-maps applied to sessions. Further entries could
1939! be added obviously..
1940!
1941! Customers
1942route-map rm-cust-in permit 10
1943 call rm-community-in
1944 on-match next
1945route-map rm-cust-in permit 20
1946 set community additive 64512:3100
1947route-map rm-cust-in permit 30
1948!
1949route-map rm-cust-out permit 10
1950 call rm-community-filt-to-cust
1951 on-match next
1952route-map rm-cust-out permit 20
1953!
1954! Upstream transit ASes
1955route-map rm-upstream-out permit 10
1956 description filter customer prefixes which are marked cust-only
1957 call rm-community-filt-to-upstream
1958 on-match next
1959route-map rm-upstream-out permit 20
1960 description only customer routes are provided to upstreams/peers
1961 match community cm-learnt-cust
1962!
1963! Peer ASes
1964! outbound policy is same as for upstream
1965route-map rm-peer-out permit 10
1966 call rm-upstream-out
1967!
1968route-map rm-peer-in permit 10
1969 set community additive 64512:3200
1970@end example