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