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