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