]> git.proxmox.com Git - mirror_frr.git/blob - doc/bgpd.texi
ospf6d: compute interface cost from its bandwidth
[mirror_frr.git] / doc / bgpd.texi
1 @c -*-texinfo-*-
2 @c This is part of the Quagga Manual.
3 @c @value{COPYRIGHT_STR}
4 @c See file quagga.texi for copying conditions.
5 @node BGP
6 @chapter BGP
7
8 @acronym{BGP} stands for a Border Gateway Protocol. The lastest BGP version
9 is 4. It is referred as BGP-4. BGP-4 is one of the Exterior Gateway
10 Protocols and de-fact standard of Inter Domain routing protocol.
11 BGP-4 is described in @cite{RFC1771, A Border Gateway Protocol
12 4 (BGP-4)}.
13
14 Many extensions have been added to @cite{RFC1771}. @cite{RFC2858,
15 Multiprotocol Extensions for BGP-4} provides multiprotocol support to
16 BGP-4.
17
18 @menu
19 * Starting BGP::
20 * BGP router::
21 * BGP network::
22 * BGP Peer::
23 * BGP Peer Group::
24 * BGP Address Family::
25 * Autonomous System::
26 * BGP Communities Attribute::
27 * BGP Extended Communities Attribute::
28 * Displaying BGP routes::
29 * Capability Negotiation::
30 * Route Reflector::
31 * Route Server::
32 * How to set up a 6-Bone connection::
33 * Dump BGP packets and table::
34 * BGP Configuration Examples::
35 @end menu
36
37 @node Starting BGP
38 @section Starting BGP
39
40 Default configuration file of @command{bgpd} is @file{bgpd.conf}.
41 @command{bgpd} searches the current directory first then
42 @value{INSTALL_PREFIX_ETC}/bgpd.conf. All of bgpd's command must be
43 configured in @file{bgpd.conf}.
44
45 @command{bgpd} specific invocation options are described below. Common
46 options may also be specified (@pxref{Common Invocation Options}).
47
48 @table @samp
49 @item -p @var{PORT}
50 @itemx --bgp_port=@var{PORT}
51 Set the bgp protocol's port number.
52
53 @item -r
54 @itemx --retain
55 When program terminates, retain BGP routes added by zebra.
56 @end table
57
58 @node BGP router
59 @section BGP router
60
61 First of all you must configure BGP router with @command{router bgp}
62 command. To configure BGP router, you need AS number. AS number is an
63 identification of autonomous system. BGP protocol uses the AS number
64 for detecting whether the BGP connection is internal one or external one.
65
66 @deffn Command {router bgp @var{asn}} {}
67 Enable a BGP protocol process with the specified @var{asn}. After
68 this statement you can input any @code{BGP Commands}. You can not
69 create different BGP process under different @var{asn} without
70 specifying @code{multiple-instance} (@pxref{Multiple instance}).
71 @end deffn
72
73 @deffn Command {no router bgp @var{asn}} {}
74 Destroy a BGP protocol process with the specified @var{asn}.
75 @end deffn
76
77 @deffn {BGP} {bgp router-id @var{A.B.C.D}} {}
78 This command specifies the router-ID. If @command{bgpd} connects to @command{zebra} it gets
79 interface and address information. In that case default router ID value
80 is selected as the largest IP Address of the interfaces. When
81 @code{router zebra} is not enabled @command{bgpd} can't get interface information
82 so @code{router-id} is set to 0.0.0.0. So please set router-id by hand.
83 @end deffn
84
85 @menu
86 * BGP distance::
87 * BGP decision process::
88 * BGP route flap dampening::
89 @end menu
90
91 @node BGP distance
92 @subsection BGP distance
93
94 @deffn {BGP} {distance bgp <1-255> <1-255> <1-255>} {}
95 This command change distance value of BGP. Each argument is distance
96 value for external routes, internal routes and local routes.
97 @end deffn
98
99 @deffn {BGP} {distance <1-255> @var{A.B.C.D/M}} {}
100 @deffnx {BGP} {distance <1-255> @var{A.B.C.D/M} @var{word}} {}
101 This command set distance value to
102 @end deffn
103
104 @node BGP decision process
105 @subsection BGP decision process
106
107 @table @asis
108 @item 1. Weight check
109
110 @item 2. Local preference check.
111
112 @item 3. Local route check.
113
114 @item 4. AS path length check.
115
116 @item 5. Origin check.
117
118 @item 6. MED check.
119 @end table
120
121 @deffn {BGP} {bgp bestpath as-path confed} {}
122 This command specifies that the length of confederation path sets and
123 sequences should should be taken into account during the BGP best path
124 decision process.
125 @end deffn
126
127 @node BGP route flap dampening
128 @subsection BGP route flap dampening
129
130 @deffn {BGP} {bgp dampening @var{<1-45>} @var{<1-20000>} @var{<1-20000>} @var{<1-255>}} {}
131 This command enables BGP route-flap dampening and specifies dampening parameters.
132
133 @table @asis
134 @item @asis{half-life}
135 Half-life time for the penalty
136 @item @asis{reuse-threshold}
137 Value to start reusing a route
138 @item @asis{suppress-threshold}
139 Value to start suppressing a route
140 @item @asis{max-suppress}
141 Maximum duration to suppress a stable route
142 @end table
143
144 The route-flap damping algorithm is compatible with @cite{RFC2439}. The use of this command
145 is not recommended nowadays, see @uref{http://www.ripe.net/ripe/docs/ripe-378,,RIPE-378}.
146 @end deffn
147
148 @node BGP network
149 @section BGP network
150
151 @menu
152 * BGP route::
153 * Route Aggregation::
154 * Redistribute to BGP::
155 @end menu
156
157 @node BGP route
158 @subsection BGP route
159
160 @deffn {BGP} {network @var{A.B.C.D/M}} {}
161 This command adds the announcement network.
162 @example
163 @group
164 router bgp 1
165 network 10.0.0.0/8
166 @end group
167 @end example
168 This configuration example says that network 10.0.0.0/8 will be
169 announced to all neighbors. Some vendors' routers don't advertise
170 routes if they aren't present in their IGP routing tables; @code{bgpd}
171 doesn't care about IGP routes when announcing its routes.
172 @end deffn
173
174 @deffn {BGP} {no network @var{A.B.C.D/M}} {}
175 @end deffn
176
177 @node Route Aggregation
178 @subsection Route Aggregation
179
180 @deffn {BGP} {aggregate-address @var{A.B.C.D/M}} {}
181 This command specifies an aggregate address.
182 @end deffn
183
184 @deffn {BGP} {aggregate-address @var{A.B.C.D/M} as-set} {}
185 This command specifies an aggregate address. Resulting routes inlucde
186 AS set.
187 @end deffn
188
189 @deffn {BGP} {aggregate-address @var{A.B.C.D/M} summary-only} {}
190 This command specifies an aggregate address. Aggreated routes will
191 not be announce.
192 @end deffn
193
194 @deffn {BGP} {no aggregate-address @var{A.B.C.D/M}} {}
195 @end deffn
196
197 @node Redistribute to BGP
198 @subsection Redistribute to BGP
199
200 @deffn {BGP} {redistribute kernel} {}
201 Redistribute kernel route to BGP process.
202 @end deffn
203
204 @deffn {BGP} {redistribute static} {}
205 Redistribute static route to BGP process.
206 @end deffn
207
208 @deffn {BGP} {redistribute connected} {}
209 Redistribute connected route to BGP process.
210 @end deffn
211
212 @deffn {BGP} {redistribute rip} {}
213 Redistribute RIP route to BGP process.
214 @end deffn
215
216 @deffn {BGP} {redistribute ospf} {}
217 Redistribute OSPF route to BGP process.
218 @end deffn
219
220 @node BGP Peer
221 @section BGP Peer
222
223 @menu
224 * Defining Peer::
225 * BGP Peer commands::
226 * Peer filtering::
227 @end menu
228
229 @node Defining Peer
230 @subsection Defining Peer
231
232 @deffn {BGP} {neighbor @var{peer} remote-as @var{asn}} {}
233 Creates a new neighbor whose remote-as is @var{asn}. @var{peer}
234 can be an IPv4 address or an IPv6 address.
235 @example
236 @group
237 router bgp 1
238 neighbor 10.0.0.1 remote-as 2
239 @end group
240 @end example
241 In this case my router, in AS-1, is trying to peer with AS-2 at
242 10.0.0.1.
243
244 This command must be the first command used when configuring a neighbor.
245 If the remote-as is not specified, @command{bgpd} will complain like this:
246 @example
247 can't find neighbor 10.0.0.1
248 @end example
249 @end deffn
250
251 @node BGP Peer commands
252 @subsection BGP Peer commands
253
254 In a @code{router bgp} clause there are neighbor specific configurations
255 required.
256
257 @deffn {BGP} {neighbor @var{peer} shutdown} {}
258 @deffnx {BGP} {no neighbor @var{peer} shutdown} {}
259 Shutdown the peer. We can delete the neighbor's configuration by
260 @code{no neighbor @var{peer} remote-as @var{as-number}} but all
261 configuration of the neighbor will be deleted. When you want to
262 preserve the configuration, but want to drop the BGP peer, use this
263 syntax.
264 @end deffn
265
266 @deffn {BGP} {neighbor @var{peer} ebgp-multihop} {}
267 @deffnx {BGP} {no neighbor @var{peer} ebgp-multihop} {}
268 @end deffn
269
270 @deffn {BGP} {neighbor @var{peer} description ...} {}
271 @deffnx {BGP} {no neighbor @var{peer} description ...} {}
272 Set description of the peer.
273 @end deffn
274
275 @deffn {BGP} {neighbor @var{peer} version @var{version}} {}
276 Set up the neighbor's BGP version. @var{version} can be @var{4},
277 @var{4+} or @var{4-}. BGP version @var{4} is the default value used for
278 BGP peering. BGP version @var{4+} means that the neighbor supports
279 Multiprotocol Extensions for BGP-4. BGP version @var{4-} is similar but
280 the neighbor speaks the old Internet-Draft revision 00's Multiprotocol
281 Extensions for BGP-4. Some routing software is still using this
282 version.
283 @end deffn
284
285 @deffn {BGP} {neighbor @var{peer} interface @var{ifname}} {}
286 @deffnx {BGP} {no neighbor @var{peer} interface @var{ifname}} {}
287 When you connect to a BGP peer over an IPv6 link-local address, you
288 have to specify the @var{ifname} of the interface used for the
289 connection. To specify IPv4 session addresses, see the
290 @code{neighbor @var{peer} update-source} command below.
291
292 This command is deprecated and may be removed in a future release. Its
293 use should be avoided.
294 @end deffn
295
296 @deffn {BGP} {neighbor @var{peer} next-hop-self} {}
297 @deffnx {BGP} {no neighbor @var{peer} next-hop-self} {}
298 This command specifies an announced route's nexthop as being equivalent
299 to the address of the bgp router.
300 @end deffn
301
302 @deffn {BGP} {neighbor @var{peer} update-source @var{<ifname|address>}} {}
303 @deffnx {BGP} {no neighbor @var{peer} update-source} {}
304 Specify the IPv4 source address to use for the @acronym{BGP} session to this
305 neighbour, may be specified as either an IPv4 address directly or
306 as an interface name (in which case the @command{zebra} daemon MUST be running
307 in order for @command{bgpd} to be able to retrieve interface state).
308 @example
309 @group
310 router bgp 64555
311 neighbor foo update-source 192.168.0.1
312 neighbor bar update-source lo0
313 @end group
314 @end example
315 @end deffn
316
317 @deffn {BGP} {neighbor @var{peer} default-originate} {}
318 @deffnx {BGP} {no neighbor @var{peer} default-originate} {}
319 @command{bgpd}'s default is to not announce the default route (0.0.0.0/0) even it
320 is in routing table. When you want to announce default routes to the
321 peer, use this command.
322 @end deffn
323
324 @deffn {BGP} {neighbor @var{peer} port @var{port}} {}
325 @deffnx {BGP} {neighbor @var{peer} port @var{port}} {}
326 @end deffn
327
328 @deffn {BGP} {neighbor @var{peer} send-community} {}
329 @deffnx {BGP} {neighbor @var{peer} send-community} {}
330 @end deffn
331
332 @deffn {BGP} {neighbor @var{peer} weight @var{weight}} {}
333 @deffnx {BGP} {no neighbor @var{peer} weight @var{weight}} {}
334 This command specifies a default @var{weight} value for the neighbor's
335 routes.
336 @end deffn
337
338 @deffn {BGP} {neighbor @var{peer} maximum-prefix @var{number}} {}
339 @deffnx {BGP} {no neighbor @var{peer} maximum-prefix @var{number}} {}
340 @end deffn
341
342 @deffn {BGP} {neighbor @var{peer} local-as @var{as-number}} {}
343 @deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend} {}
344 @deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend replace-as} {}
345 @deffnx {BGP} {no neighbor @var{peer} local-as} {}
346 Specify an alternate AS for this BGP process when interacting with the
347 specified peer. With no modifiers, the specified local-as is prepended to
348 the received AS_PATH when receiving routing updates from the peer, and
349 prepended to the outgoing AS_PATH (after the process local AS) when
350 transmitting local routes to the peer.
351
352 If the no-prepend attribute is specified, then the supplied local-as is not
353 prepended to the received AS_PATH.
354
355 If the replace-as attribute is specified, then only the supplied local-as is
356 prepended to the AS_PATH when transmitting local-route updates to this peer.
357
358 Note that replace-as can only be specified if no-prepend is.
359
360 This command is only allowed for eBGP peers.
361 @end deffn
362
363 @node Peer filtering
364 @subsection Peer filtering
365
366 @deffn {BGP} {neighbor @var{peer} distribute-list @var{name} [in|out]} {}
367 This command specifies a distribute-list for the peer. @var{direct} is
368 @samp{in} or @samp{out}.
369 @end deffn
370
371 @deffn {BGP command} {neighbor @var{peer} prefix-list @var{name} [in|out]} {}
372 @end deffn
373
374 @deffn {BGP command} {neighbor @var{peer} filter-list @var{name} [in|out]} {}
375 @end deffn
376
377 @deffn {BGP} {neighbor @var{peer} route-map @var{name} [in|out]} {}
378 Apply a route-map on the neighbor. @var{direct} must be @code{in} or
379 @code{out}.
380 @end deffn
381
382 @c -----------------------------------------------------------------------
383 @node BGP Peer Group
384 @section BGP Peer Group
385
386 @deffn {BGP} {neighbor @var{word} peer-group} {}
387 This command defines a new peer group.
388 @end deffn
389
390 @deffn {BGP} {neighbor @var{peer} peer-group @var{word}} {}
391 This command bind specific peer to peer group @var{word}.
392 @end deffn
393
394 @node BGP Address Family
395 @section BGP Address Family
396
397 @c -----------------------------------------------------------------------
398 @node Autonomous System
399 @section Autonomous System
400
401 The @acronym{AS,Autonomous System} number is one of the essential
402 element of BGP. BGP is a distance vector routing protocol, and the
403 AS-Path framework provides distance vector metric and loop detection to
404 BGP. @cite{RFC1930, Guidelines for creation, selection, and
405 registration of an Autonomous System (AS)} provides some background on
406 the concepts of an AS.
407
408 The AS number is a two octet value, ranging in value from 1 to 65535.
409 The AS numbers 64512 through 65535 are defined as private AS numbers.
410 Private AS numbers must not to be advertised in the global Internet.
411
412 @menu
413 * AS Path Regular Expression::
414 * Display BGP Routes by AS Path::
415 * AS Path Access List::
416 * Using AS Path in Route Map::
417 * Private AS Numbers::
418 @end menu
419
420 @node AS Path Regular Expression
421 @subsection AS Path Regular Expression
422
423 AS path regular expression can be used for displaying BGP routes and
424 AS path access list. AS path regular expression is based on
425 @code{POSIX 1003.2} regular expressions. Following description is
426 just a subset of @code{POSIX} regular expression. User can use full
427 @code{POSIX} regular expression. Adding to that special character '_'
428 is added for AS path regular expression.
429
430 @table @code
431 @item .
432 Matches any single character.
433 @item *
434 Matches 0 or more occurrences of pattern.
435 @item +
436 Matches 1 or more occurrences of pattern.
437 @item ?
438 Match 0 or 1 occurrences of pattern.
439 @item ^
440 Matches the beginning of the line.
441 @item $
442 Matches the end of the line.
443 @item _
444 Character @code{_} has special meanings in AS path regular expression.
445 It matches to space and comma , and AS set delimiter @{ and @} and AS
446 confederation delimiter @code{(} and @code{)}. And it also matches to
447 the beginning of the line and the end of the line. So @code{_} can be
448 used for AS value boundaries match. @code{show ip bgp regexp _7675_}
449 matches to all of BGP routes which as AS number include @var{7675}.
450 @end table
451
452 @node Display BGP Routes by AS Path
453 @subsection Display BGP Routes by AS Path
454
455 To show BGP routes which has specific AS path information @code{show
456 ip bgp} command can be used.
457
458 @deffn Command {show ip bgp regexp @var{line}} {}
459 This commands display BGP routes that matches AS path regular
460 expression @var{line}.
461 @end deffn
462
463 @node AS Path Access List
464 @subsection AS Path Access List
465
466 AS path access list is user defined AS path.
467
468 @deffn {Command} {ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
469 This command defines a new AS path access list.
470 @end deffn
471
472 @deffn {Command} {no ip as-path access-list @var{word}} {}
473 @deffnx {Command} {no ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
474 @end deffn
475
476 @node Using AS Path in Route Map
477 @subsection Using AS Path in Route Map
478
479 @deffn {Route Map} {match as-path @var{word}} {}
480 @end deffn
481
482 @deffn {Route Map} {set as-path prepend @var{as-path}} {}
483 @end deffn
484
485 @node Private AS Numbers
486 @subsection Private AS Numbers
487
488 @c -----------------------------------------------------------------------
489 @node BGP Communities Attribute
490 @section BGP Communities Attribute
491
492 BGP communities attribute is widely used for implementing policy
493 routing. Network operators can manipulate BGP communities attribute
494 based on their network policy. BGP communities attribute is defined
495 in @cite{RFC1997, BGP Communities Attribute} and
496 @cite{RFC1998, An Application of the BGP Community Attribute
497 in Multi-home Routing}. It is an optional transitive attribute,
498 therefore local policy can travel through different autonomous system.
499
500 Communities attribute is a set of communities values. Each
501 communities value is 4 octet long. The following format is used to
502 define communities value.
503
504 @table @code
505 @item AS:VAL
506 This format represents 4 octet communities value. @code{AS} is high
507 order 2 octet in digit format. @code{VAL} is low order 2 octet in
508 digit format. This format is useful to define AS oriented policy
509 value. For example, @code{7675:80} can be used when AS 7675 wants to
510 pass local policy value 80 to neighboring peer.
511 @item internet
512 @code{internet} represents well-known communities value 0.
513 @item no-export
514 @code{no-export} represents well-known communities value @code{NO_EXPORT}@*
515 @r{(0xFFFFFF01)}. All routes carry this value must not be advertised
516 to outside a BGP confederation boundary. If neighboring BGP peer is
517 part of BGP confederation, the peer is considered as inside a BGP
518 confederation boundary, so the route will be announced to the peer.
519 @item no-advertise
520 @code{no-advertise} represents well-known communities value
521 @code{NO_ADVERTISE}@*@r{(0xFFFFFF02)}. All routes carry this value
522 must not be advertise to other BGP peers.
523 @item local-AS
524 @code{local-AS} represents well-known communities value
525 @code{NO_EXPORT_SUBCONFED} @r{(0xFFFFFF03)}. All routes carry this
526 value must not be advertised to external BGP peers. Even if the
527 neighboring router is part of confederation, it is considered as
528 external BGP peer, so the route will not be announced to the peer.
529 @end table
530
531 When BGP communities attribute is received, duplicated communities
532 value in the communities attribute is ignored and each communities
533 values are sorted in numerical order.
534
535 @menu
536 * BGP Community Lists::
537 * Numbered BGP Community Lists::
538 * BGP Community in Route Map::
539 * Display BGP Routes by Community::
540 * Using BGP Communities Attribute::
541 @end menu
542
543 @node BGP Community Lists
544 @subsection BGP Community Lists
545
546 BGP community list is a user defined BGP communites attribute list.
547 BGP community list can be used for matching or manipulating BGP
548 communities attribute in updates.
549
550 There are two types of community list. One is standard community
551 list and another is expanded community list. Standard community list
552 defines communities attribute. Expanded community list defines
553 communities attribute string with regular expression. Standard
554 community list is compiled into binary format when user define it.
555 Standard community list will be directly compared to BGP communities
556 attribute in BGP updates. Therefore the comparison is faster than
557 expanded community list.
558
559 @deffn Command {ip community-list standard @var{name} @{permit|deny@} @var{community}} {}
560 This command defines a new standard community list. @var{community}
561 is communities value. The @var{community} is compiled into community
562 structure. We can define multiple community list under same name. In
563 that case match will happen user defined order. Once the
564 community list matches to communities attribute in BGP updates it
565 return permit or deny by the community list definition. When there is
566 no matched entry, deny will be returned. When @var{community} is
567 empty it matches to any routes.
568 @end deffn
569
570 @deffn Command {ip community-list expanded @var{name} @{permit|deny@} @var{line}} {}
571 This command defines a new expanded community list. @var{line} is a
572 string expression of communities attribute. @var{line} can include
573 regular expression to match communities attribute in BGP updates.
574 @end deffn
575
576 @deffn Command {no ip community-list @var{name}} {}
577 @deffnx Command {no ip community-list standard @var{name}} {}
578 @deffnx Command {no ip community-list expanded @var{name}} {}
579 These commands delete community lists specified by @var{name}. All of
580 community lists shares a single name space. So community lists can be
581 removed simpley specifying community lists name.
582 @end deffn
583
584 @deffn {Command} {show ip community-list} {}
585 @deffnx {Command} {show ip community-list @var{name}} {}
586 This command display current community list information. When
587 @var{name} is specified the specified community list's information is
588 shown.
589
590 @example
591 # show ip community-list
592 Named Community standard list CLIST
593 permit 7675:80 7675:100 no-export
594 deny internet
595 Named Community expanded list EXPAND
596 permit :
597
598 # show ip community-list CLIST
599 Named Community standard list CLIST
600 permit 7675:80 7675:100 no-export
601 deny internet
602 @end example
603 @end deffn
604
605 @node Numbered BGP Community Lists
606 @subsection Numbered BGP Community Lists
607
608 When number is used for BGP community list name, the number has
609 special meanings. Community list number in the range from 1 and 99 is
610 standard community list. Community list number in the range from 100
611 to 199 is expanded community list. These community lists are called
612 as numbered community lists. On the other hand normal community lists
613 is called as named community lists.
614
615 @deffn Command {ip community-list <1-99> @{permit|deny@} @var{community}} {}
616 This command defines a new community list. <1-99> is standard
617 community list number. Community list name within this range defines
618 standard community list. When @var{community} is empty it matches to
619 any routes.
620 @end deffn
621
622 @deffn Command {ip community-list <100-199> @{permit|deny@} @var{community}} {}
623 This command defines a new community list. <100-199> is expanded
624 community list number. Community list name within this range defines
625 expanded community list.
626 @end deffn
627
628 @deffn Command {ip community-list @var{name} @{permit|deny@} @var{community}} {}
629 When community list type is not specifed, the community list type is
630 automatically detected. If @var{community} can be compiled into
631 communities attribute, the community list is defined as a standard
632 community list. Otherwise it is defined as an expanded community
633 list. This feature is left for backward compability. Use of this
634 feature is not recommended.
635 @end deffn
636
637 @node BGP Community in Route Map
638 @subsection BGP Community in Route Map
639
640 In Route Map (@pxref{Route Map}), we can match or set BGP
641 communities attribute. Using this feature network operator can
642 implement their network policy based on BGP communities attribute.
643
644 Following commands can be used in Route Map.
645
646 @deffn {Route Map} {match community @var{word}} {}
647 @deffnx {Route Map} {match community @var{word} exact-match} {}
648 This command perform match to BGP updates using community list
649 @var{word}. When the one of BGP communities value match to the one of
650 communities value in community list, it is match. When
651 @code{exact-match} keyword is spcified, match happen only when BGP
652 updates have completely same communities value specified in the
653 community list.
654 @end deffn
655
656 @deffn {Route Map} {set community none} {}
657 @deffnx {Route Map} {set community @var{community}} {}
658 @deffnx {Route Map} {set community @var{community} additive} {}
659 This command manipulate communities value in BGP updates. When
660 @code{none} is specified as communities value, it removes entire
661 communities attribute from BGP updates. When @var{community} is not
662 @code{none}, specified communities value is set to BGP updates. If
663 BGP updates already has BGP communities value, the existing BGP
664 communities value is replaced with specified @var{community} value.
665 When @code{additive} keyword is specified, @var{community} is appended
666 to the existing communities value.
667 @end deffn
668
669 @deffn {Route Map} {set comm-list @var{word} delete} {}
670 This command remove communities value from BGP communities attribute.
671 The @var{word} is community list name. When BGP route's communities
672 value matches to the community list @var{word}, the communities value
673 is removed. When all of communities value is removed eventually, the
674 BGP update's communities attribute is completely removed.
675 @end deffn
676
677 @node Display BGP Routes by Community
678 @subsection Display BGP Routes by Community
679
680 To show BGP routes which has specific BGP communities attribute,
681 @code{show ip bgp} command can be used. The @var{community} value and
682 community list can be used for @code{show ip bgp} command.
683
684 @deffn Command {show ip bgp community} {}
685 @deffnx Command {show ip bgp community @var{community}} {}
686 @deffnx Command {show ip bgp community @var{community} exact-match} {}
687 @code{show ip bgp community} displays BGP routes which has communities
688 attribute. When @var{community} is specified, BGP routes that matches
689 @var{community} value is displayed. For this command, @code{internet}
690 keyword can't be used for @var{community} value. When
691 @code{exact-match} is specified, it display only routes that have an
692 exact match.
693 @end deffn
694
695 @deffn Command {show ip bgp community-list @var{word}} {}
696 @deffnx Command {show ip bgp community-list @var{word} exact-match} {}
697 This commands display BGP routes that matches community list
698 @var{word}. When @code{exact-match} is specified, display only routes
699 that have an exact match.
700 @end deffn
701
702 @node Using BGP Communities Attribute
703 @subsection Using BGP Communities Attribute
704
705 Following configuration is the most typical usage of BGP communities
706 attribute. AS 7675 provides upstream Internet connection to AS 100.
707 When following configuration exists in AS 7675, AS 100 networks
708 operator can set local preference in AS 7675 network by setting BGP
709 communities attribute to the updates.
710
711 @example
712 router bgp 7675
713 neighbor 192.168.0.1 remote-as 100
714 neighbor 192.168.0.1 route-map RMAP in
715 !
716 ip community-list 70 permit 7675:70
717 ip community-list 70 deny
718 ip community-list 80 permit 7675:80
719 ip community-list 80 deny
720 ip community-list 90 permit 7675:90
721 ip community-list 90 deny
722 !
723 route-map RMAP permit 10
724 match community 70
725 set local-preference 70
726 !
727 route-map RMAP permit 20
728 match community 80
729 set local-preference 80
730 !
731 route-map RMAP permit 30
732 match community 90
733 set local-preference 90
734 @end example
735
736 Following configuration announce 10.0.0.0/8 from AS 100 to AS 7675.
737 The route has communities value 7675:80 so when above configuration
738 exists in AS 7675, announced route's local preference will be set to
739 value 80.
740
741 @example
742 router bgp 100
743 network 10.0.0.0/8
744 neighbor 192.168.0.2 remote-as 7675
745 neighbor 192.168.0.2 route-map RMAP out
746 !
747 ip prefix-list PLIST permit 10.0.0.0/8
748 !
749 route-map RMAP permit 10
750 match ip address prefix-list PLIST
751 set community 7675:80
752 @end example
753
754 Following configuration is an example of BGP route filtering using
755 communities attribute. This configuration only permit BGP routes
756 which has BGP communities value 0:80 or 0:90. Network operator can
757 put special internal communities value at BGP border router, then
758 limit the BGP routes announcement into the internal network.
759
760 @example
761 router bgp 7675
762 neighbor 192.168.0.1 remote-as 100
763 neighbor 192.168.0.1 route-map RMAP in
764 !
765 ip community-list 1 permit 0:80 0:90
766 !
767 route-map RMAP permit in
768 match community 1
769 @end example
770
771 Following exmaple filter BGP routes which has communities value 1:1.
772 When there is no match community-list returns deny. To avoid
773 filtering all of routes, we need to define permit any at last.
774
775 @example
776 router bgp 7675
777 neighbor 192.168.0.1 remote-as 100
778 neighbor 192.168.0.1 route-map RMAP in
779 !
780 ip community-list standard FILTER deny 1:1
781 ip community-list standard FILTER permit
782 !
783 route-map RMAP permit 10
784 match community FILTER
785 @end example
786
787 Communities value keyword @code{internet} has special meanings in
788 standard community lists. In below example @code{internet} act as
789 match any. It matches all of BGP routes even if the route does not
790 have communities attribute at all. So community list @code{INTERNET}
791 is same as above example's @code{FILTER}.
792
793 @example
794 ip community-list standard INTERNET deny 1:1
795 ip community-list standard INTERNET permit internet
796 @end example
797
798 Following configuration is an example of communities value deletion.
799 With this configuration communities value 100:1 and 100:2 is removed
800 from BGP updates. For communities value deletion, only @code{permit}
801 community-list is used. @code{deny} community-list is ignored.
802
803 @example
804 router bgp 7675
805 neighbor 192.168.0.1 remote-as 100
806 neighbor 192.168.0.1 route-map RMAP in
807 !
808 ip community-list standard DEL permit 100:1 100:2
809 !
810 route-map RMAP permit 10
811 set comm-list DEL delete
812 @end example
813
814 @c -----------------------------------------------------------------------
815 @node BGP Extended Communities Attribute
816 @section BGP Extended Communities Attribute
817
818 BGP extended communities attribute is introduced with MPLS VPN/BGP
819 technology. MPLS VPN/BGP expands capability of network infrastructure
820 to provide VPN functionality. At the same time it requires a new
821 framework for policy routing. With BGP Extended Communities Attribute
822 we can use Route Target or Site of Origin for implementing network
823 policy for MPLS VPN/BGP.
824
825 BGP Extended Communities Attribute is similar to BGP Communities
826 Attribute. It is an optional transitive attribute. BGP Extended
827 Communities Attribute can carry multiple Extended Community value.
828 Each Extended Community value is eight octet length.
829
830 BGP Extended Communities Attribute provides an extended range
831 compared with BGP Communities Attribute. Adding to that there is a
832 type field in each value to provides community space structure.
833
834 There are two format to define Extended Community value. One is AS
835 based format the other is IP address based format.
836
837 @table @code
838 @item AS:VAL
839 This is a format to define AS based Extended Community value.
840 @code{AS} part is 2 octets Global Administrator subfield in Extended
841 Community value. @code{VAL} part is 4 octets Local Administrator
842 subfield. @code{7675:100} represents AS 7675 policy value 100.
843 @item IP-Address:VAL
844 This is a format to define IP address based Extended Community value.
845 @code{IP-Address} part is 4 octets Global Administrator subfield.
846 @code{VAL} part is 2 octets Local Administrator subfield.
847 @code{10.0.0.1:100} represents
848 @end table
849
850 @menu
851 * BGP Extended Community Lists::
852 * BGP Extended Communities in Route Map::
853 @end menu
854
855 @node BGP Extended Community Lists
856 @subsection BGP Extended Community Lists
857
858 Expanded Community Lists is a user defined BGP Expanded Community
859 Lists.
860
861 @deffn Command {ip extcommunity-list standard @var{name} @{permit|deny@} @var{extcommunity}} {}
862 This command defines a new standard extcommunity-list.
863 @var{extcommunity} is extended communities value. The
864 @var{extcommunity} is compiled into extended community structure. We
865 can define multiple extcommunity-list under same name. In that case
866 match will happen user defined order. Once the extcommunity-list
867 matches to extended communities attribute in BGP updates it return
868 permit or deny based upon the extcommunity-list definition. When
869 there is no matched entry, deny will be returned. When
870 @var{extcommunity} is empty it matches to any routes.
871 @end deffn
872
873 @deffn Command {ip extcommunity-list expanded @var{name} @{permit|deny@} @var{line}} {}
874 This command defines a new expanded extcommunity-list. @var{line} is
875 a string expression of extended communities attribute. @var{line} can
876 include regular expression to match extended communities attribute in
877 BGP updates.
878 @end deffn
879
880 @deffn Command {no ip extcommunity-list @var{name}} {}
881 @deffnx Command {no ip extcommunity-list standard @var{name}} {}
882 @deffnx Command {no ip extcommunity-list expanded @var{name}} {}
883 These commands delete extended community lists specified by
884 @var{name}. All of extended community lists shares a single name
885 space. So extended community lists can be removed simpley specifying
886 the name.
887 @end deffn
888
889 @deffn {Command} {show ip extcommunity-list} {}
890 @deffnx {Command} {show ip extcommunity-list @var{name}} {}
891 This command display current extcommunity-list information. When
892 @var{name} is specified the community list's information is shown.
893
894 @example
895 # show ip extcommunity-list
896 @end example
897 @end deffn
898
899 @node BGP Extended Communities in Route Map
900 @subsection BGP Extended Communities in Route Map
901
902 @deffn {Route Map} {match extcommunity @var{word}} {}
903 @end deffn
904
905 @deffn {Route Map} {set extcommunity rt @var{extcommunity}} {}
906 This command set Route Target value.
907 @end deffn
908
909 @deffn {Route Map} {set extcommunity soo @var{extcommunity}} {}
910 This command set Site of Origin value.
911 @end deffn
912
913 @c -----------------------------------------------------------------------
914 @node Displaying BGP routes
915 @section Displaying BGP Routes
916
917 @menu
918 * Show IP BGP::
919 * More Show IP BGP::
920 @end menu
921
922 @node Show IP BGP
923 @subsection Show IP BGP
924
925 @deffn {Command} {show ip bgp} {}
926 @deffnx {Command} {show ip bgp @var{A.B.C.D}} {}
927 @deffnx {Command} {show ip bgp @var{X:X::X:X}} {}
928 This command displays BGP routes. When no route is specified it
929 display all of IPv4 BGP routes.
930 @end deffn
931
932 @example
933 BGP table version is 0, local router ID is 10.1.1.1
934 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
935 Origin codes: i - IGP, e - EGP, ? - incomplete
936
937 Network Next Hop Metric LocPrf Weight Path
938 *> 1.1.1.1/32 0.0.0.0 0 32768 i
939
940 Total number of prefixes 1
941 @end example
942
943 @node More Show IP BGP
944 @subsection More Show IP BGP
945
946 @deffn {Command} {show ip bgp regexp @var{line}} {}
947 This command display BGP routes using AS path regular expression (@pxref{Display BGP Routes by AS Path}).
948 @end deffn
949
950 @deffn Command {show ip bgp community @var{community}} {}
951 @deffnx Command {show ip bgp community @var{community} exact-match} {}
952 This command display BGP routes using @var{community} (@pxref{Display
953 BGP Routes by Community}).
954 @end deffn
955
956 @deffn Command {show ip bgp community-list @var{word}} {}
957 @deffnx Command {show ip bgp community-list @var{word} exact-match} {}
958 This command display BGP routes using community list (@pxref{Display
959 BGP Routes by Community}).
960 @end deffn
961
962 @deffn {Command} {show ip bgp summary} {}
963 @end deffn
964
965 @deffn {Command} {show ip bgp neighbor [@var{peer}]} {}
966 @end deffn
967
968 @deffn {Command} {clear ip bgp @var{peer}} {}
969 Clear peers which have addresses of X.X.X.X
970 @end deffn
971
972 @deffn {Command} {clear ip bgp @var{peer} soft in} {}
973 Clear peer using soft reconfiguration.
974 @end deffn
975
976 @deffn {Command} {show ip bgp dampened-paths} {}
977 Display paths suppressed due to dampening
978 @end deffn
979
980 @deffn {Command} {show ip bgp flap-statistics} {}
981 Display flap statistics of routes
982 @end deffn
983
984 @deffn {Command} {show debug} {}
985 @end deffn
986
987 @deffn {Command} {debug event} {}
988 @end deffn
989
990 @deffn {Command} {debug update} {}
991 @end deffn
992
993 @deffn {Command} {debug keepalive} {}
994 @end deffn
995
996 @deffn {Command} {no debug event} {}
997 @end deffn
998
999 @deffn {Command} {no debug update} {}
1000 @end deffn
1001
1002 @deffn {Command} {no debug keepalive} {}
1003 @end deffn
1004
1005 @node Capability Negotiation
1006 @section Capability Negotiation
1007
1008 When adding IPv6 routing information exchange feature to BGP. There
1009 were some proposals. @acronym{IETF,Internet Engineering Task Force}
1010 @acronym{IDR, Inter Domain Routing} @acronym{WG, Working group} adopted
1011 a proposal called Multiprotocol Extension for BGP. The specification
1012 is described in @cite{RFC2283}. The protocol does not define new protocols.
1013 It defines new attributes to existing BGP. When it is used exchanging
1014 IPv6 routing information it is called BGP-4+. When it is used for
1015 exchanging multicast routing information it is called MBGP.
1016
1017 @command{bgpd} supports Multiprotocol Extension for BGP. So if remote
1018 peer supports the protocol, @command{bgpd} can exchange IPv6 and/or
1019 multicast routing information.
1020
1021 Traditional BGP did not have the feature to detect remote peer's
1022 capabilities, e.g. whether it can handle prefix types other than IPv4
1023 unicast routes. This was a big problem using Multiprotocol Extension
1024 for BGP to operational network. @cite{RFC2842, Capabilities
1025 Advertisement with BGP-4} adopted a feature called Capability
1026 Negotiation. @command{bgpd} use this Capability Negotiation to detect
1027 the remote peer's capabilities. If the peer is only configured as IPv4
1028 unicast neighbor, @command{bgpd} does not send these Capability
1029 Negotiation packets (at least not unless other optional BGP features
1030 require capability negotation).
1031
1032 By default, Quagga will bring up peering with minimal common capability
1033 for the both sides. For example, local router has unicast and
1034 multicast capabilitie and remote router has unicast capability. In
1035 this case, the local router will establish the connection with unicast
1036 only capability. When there are no common capabilities, Quagga sends
1037 Unsupported Capability error and then resets the connection.
1038
1039 If you want to completely match capabilities with remote peer. Please
1040 use @command{strict-capability-match} command.
1041
1042 @deffn {BGP} {neighbor @var{peer} strict-capability-match} {}
1043 @deffnx {BGP} {no neighbor @var{peer} strict-capability-match} {}
1044 Strictly compares remote capabilities and local capabilities. If capabilities
1045 are different, send Unsupported Capability error then reset connection.
1046 @end deffn
1047
1048 You may want to disable sending Capability Negotiation OPEN message
1049 optional parameter to the peer when remote peer does not implement
1050 Capability Negotiation. Please use @command{dont-capability-negotiate}
1051 command to disable the feature.
1052
1053 @deffn {BGP} {neighbor @var{peer} dont-capability-negotiate} {}
1054 @deffnx {BGP} {no neighbor @var{peer} dont-capability-negotiate} {}
1055 Suppress sending Capability Negotiation as OPEN message optional
1056 parameter to the peer. This command only affects the peer is configured
1057 other than IPv4 unicast configuration.
1058 @end deffn
1059
1060 When remote peer does not have capability negotiation feature, remote
1061 peer will not send any capabilities at all. In that case, bgp
1062 configures the peer with configured capabilities.
1063
1064 You may prefer locally configured capabilities more than the negotiated
1065 capabilities even though remote peer sends capabilities. If the peer
1066 is configured by @command{override-capability}, @command{bgpd} ignores
1067 received capabilities then override negotiated capabilities with
1068 configured values.
1069
1070 @deffn {BGP} {neighbor @var{peer} override-capability} {}
1071 @deffnx {BGP} {no neighbor @var{peer} override-capability} {}
1072 Override the result of Capability Negotiation with local configuration.
1073 Ignore remote peer's capability value.
1074 @end deffn
1075
1076 @node Route Reflector
1077 @section Route Reflector
1078
1079 @deffn {BGP} {bgp cluster-id @var{a.b.c.d}} {}
1080 @end deffn
1081
1082 @deffn {BGP} {neighbor @var{peer} route-reflector-client} {}
1083 @deffnx {BGP} {no neighbor @var{peer} route-reflector-client} {}
1084 @end deffn
1085
1086 @node Route Server
1087 @section Route Server
1088
1089 At an Internet Exchange point, many ISPs are connected to each other by
1090 external BGP peering. Normally these external BGP connection are done by
1091 @samp{full mesh} method. As with internal BGP full mesh formation,
1092 this method has a scaling problem.
1093
1094 This scaling problem is well known. Route Server is a method to resolve
1095 the problem. Each ISP's BGP router only peers to Route Server. Route
1096 Server serves as BGP information exchange to other BGP routers. By
1097 applying this method, numbers of BGP connections is reduced from
1098 O(n*(n-1)/2) to O(n).
1099
1100 Unlike normal BGP router, Route Server must have several routing tables
1101 for managing different routing policies for each BGP speaker. We call the
1102 routing tables as different @code{view}s. @command{bgpd} can work as
1103 normal BGP router or Route Server or both at the same time.
1104
1105 @menu
1106 * Multiple instance::
1107 * BGP instance and view::
1108 * Routing policy::
1109 * Viewing the view::
1110 @end menu
1111
1112 @node Multiple instance
1113 @subsection Multiple instance
1114
1115 To enable multiple view function of @code{bgpd}, you must turn on
1116 multiple instance feature beforehand.
1117
1118 @deffn {Command} {bgp multiple-instance} {}
1119 Enable BGP multiple instance feature. After this feature is enabled,
1120 you can make multiple BGP instances or multiple BGP views.
1121 @end deffn
1122
1123 @deffn {Command} {no bgp multiple-instance} {}
1124 Disable BGP multiple instance feature. You can not disable this feature
1125 when BGP multiple instances or views exist.
1126 @end deffn
1127
1128 When you want to make configuration more Cisco like one,
1129
1130 @deffn {Command} {bgp config-type cisco} {}
1131 Cisco compatible BGP configuration output.
1132 @end deffn
1133
1134 When bgp config-type cisco is specified,
1135
1136 ``no synchronization'' is displayed.
1137 ``no auto-summary'' is displayed.
1138
1139 ``network'' and ``aggregate-address'' argument is displayed as
1140 ``A.B.C.D M.M.M.M''
1141
1142 Quagga: network 10.0.0.0/8
1143 Cisco: network 10.0.0.0
1144
1145 Quagga: aggregate-address 192.168.0.0/24
1146 Cisco: aggregate-address 192.168.0.0 255.255.255.0
1147
1148 Community attribute handling is also different. If there is no
1149 configuration is specified community attribute and extended community
1150 attribute are sent to neighbor. When user manually disable the
1151 feature community attribute is not sent to the neighbor. In case of
1152 @command{bgp config-type cisco} is specified, community attribute is not
1153 sent to the neighbor by default. To send community attribute user has
1154 to specify @command{neighbor A.B.C.D send-community} command.
1155
1156 @example
1157 !
1158 router bgp 1
1159 neighbor 10.0.0.1 remote-as 1
1160 no neighbor 10.0.0.1 send-community
1161 !
1162 router bgp 1
1163 neighbor 10.0.0.1 remote-as 1
1164 neighbor 10.0.0.1 send-community
1165 !
1166 @end example
1167
1168 @deffn {Command} {bgp config-type zebra} {}
1169 Quagga style BGP configuration. This is default.
1170 @end deffn
1171
1172 @node BGP instance and view
1173 @subsection BGP instance and view
1174
1175 BGP instance is a normal BGP process. The result of route selection
1176 goes to the kernel routing table. You can setup different AS at the
1177 same time when BGP multiple instance feature is enabled.
1178
1179 @deffn {Command} {router bgp @var{as-number}} {}
1180 Make a new BGP instance. You can use arbitrary word for the @var{name}.
1181 @end deffn
1182
1183 @example
1184 @group
1185 bgp multiple-instance
1186 !
1187 router bgp 1
1188 neighbor 10.0.0.1 remote-as 2
1189 neighbor 10.0.0.2 remote-as 3
1190 !
1191 router bgp 2
1192 neighbor 10.0.0.3 remote-as 4
1193 neighbor 10.0.0.4 remote-as 5
1194 @end group
1195 @end example
1196
1197 BGP view is almost same as normal BGP process. The result of
1198 route selection does not go to the kernel routing table. BGP view is
1199 only for exchanging BGP routing information.
1200
1201 @deffn {Command} {router bgp @var{as-number} view @var{name}} {}
1202 Make a new BGP view. You can use arbitrary word for the @var{name}. This
1203 view's route selection result does not go to the kernel routing table.
1204 @end deffn
1205
1206 With this command, you can setup Route Server like below.
1207
1208 @example
1209 @group
1210 bgp multiple-instance
1211 !
1212 router bgp 1 view 1
1213 neighbor 10.0.0.1 remote-as 2
1214 neighbor 10.0.0.2 remote-as 3
1215 !
1216 router bgp 2 view 2
1217 neighbor 10.0.0.3 remote-as 4
1218 neighbor 10.0.0.4 remote-as 5
1219 @end group
1220 @end example
1221
1222 @node Routing policy
1223 @subsection Routing policy
1224
1225 You can set different routing policy for a peer. For example, you can
1226 set different filter for a peer.
1227
1228 @example
1229 @group
1230 bgp multiple-instance
1231 !
1232 router bgp 1 view 1
1233 neighbor 10.0.0.1 remote-as 2
1234 neighbor 10.0.0.1 distribute-list 1 in
1235 !
1236 router bgp 1 view 2
1237 neighbor 10.0.0.1 remote-as 2
1238 neighbor 10.0.0.1 distribute-list 2 in
1239 @end group
1240 @end example
1241
1242 This means BGP update from a peer 10.0.0.1 goes to both BGP view 1 and view
1243 2. When the update is inserted into view 1, distribute-list 1 is
1244 applied. On the other hand, when the update is inserted into view 2,
1245 distribute-list 2 is applied.
1246
1247 @node Viewing the view
1248 @subsection Viewing the view
1249
1250 To display routing table of BGP view, you must specify view name.
1251
1252 @deffn {Command} {show ip bgp view @var{name}} {}
1253 Display routing table of BGP view @var{name}.
1254 @end deffn
1255
1256 @node How to set up a 6-Bone connection
1257 @section How to set up a 6-Bone connection
1258
1259
1260 @example
1261 @group
1262 zebra configuration
1263 ===================
1264 !
1265 ! Actually there is no need to configure zebra
1266 !
1267
1268 bgpd configuration
1269 ==================
1270 !
1271 ! This means that routes go through zebra and into the kernel.
1272 !
1273 router zebra
1274 !
1275 ! MP-BGP configuration
1276 !
1277 router bgp 7675
1278 bgp router-id 10.0.0.1
1279 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 remote-as @var{as-number}
1280 !
1281 address-family ipv6
1282 network 3ffe:506::/32
1283 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 activate
1284 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 route-map set-nexthop out
1285 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 remote-as @var{as-number}
1286 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 route-map set-nexthop out
1287 exit-address-family
1288 !
1289 ipv6 access-list all permit any
1290 !
1291 ! Set output nexthop address.
1292 !
1293 route-map set-nexthop permit 10
1294 match ipv6 address all
1295 set ipv6 nexthop global 3ffe:1cfa:0:2:2c0:4fff:fe68:a225
1296 set ipv6 nexthop local fe80::2c0:4fff:fe68:a225
1297 !
1298 ! logfile FILENAME is obsolete. Please use log file FILENAME
1299
1300 log file bgpd.log
1301 !
1302 @end group
1303 @end example
1304
1305 @node Dump BGP packets and table
1306 @section Dump BGP packets and table
1307
1308 @deffn Command {dump bgp all @var{path}} {}
1309 @deffnx Command {dump bgp all @var{path} @var{interval}} {}
1310 Dump all BGP packet and events to @var{path} file.
1311 @end deffn
1312
1313 @deffn Command {dump bgp updates @var{path}} {}
1314 @deffnx Command {dump bgp updates @var{path} @var{interval}} {}
1315 Dump BGP updates to @var{path} file.
1316 @end deffn
1317
1318 @deffn Command {dump bgp routes @var{path}} {}
1319 @deffnx Command {dump bgp routes @var{path}} {}
1320 Dump whole BGP routing table to @var{path}. This is heavy process.
1321 @end deffn
1322
1323 @node BGP Configuration Examples
1324 @section BGP Configuration Examples
1325
1326 Example of a session to an upstream, advertising only one prefix to it.
1327
1328 @example
1329 router bgp 64512
1330 bgp router-id 10.236.87.1
1331 network 10.236.87.0/24
1332 neighbor upstream peer-group
1333 neighbor upstream remote-as 64515
1334 neighbor upstream capability dynamic
1335 neighbor upstream prefix-list pl-allowed-adv out
1336 neighbor 10.1.1.1 peer-group upstream
1337 neighbor 10.1.1.1 description ACME ISP
1338 !
1339 ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
1340 ip prefix-list pl-allowed-adv seq 10 deny any
1341
1342 @end example
1343
1344 A more complex example. With upstream, peer and customer sessions.
1345 Advertising global prefixes and NO_EXPORT prefixes and providing
1346 actions for customer routes based on community values. Extensive use of
1347 route-maps and the 'call' feature to support selective advertising of
1348 prefixes. This example is intended as guidance only, it has NOT been
1349 tested and almost certainly containts silly mistakes, if not serious
1350 flaws.
1351
1352 @example
1353 router bgp 64512
1354 bgp router-id 10.236.87.1
1355 network 10.123.456.0/24
1356 network 10.123.456.128/25 route-map rm-no-export
1357 neighbor upstream capability dynamic
1358 neighbor upstream route-map rm-upstream-out out
1359 neighbor cust capability dynamic
1360 neighbor cust route-map rm-cust-in in
1361 neighbor cust route-map rm-cust-out out
1362 neighbor cust send-community both
1363 neighbor peer capability dynamic
1364 neighbor peer route-map rm-peer-in in
1365 neighbor peer route-map rm-peer-out out
1366 neighbor peer send-community both
1367 neighbor 10.1.1.1 remote-as 64515
1368 neighbor 10.1.1.1 peer-group upstream
1369 neighbor 10.2.1.1 remote-as 64516
1370 neighbor 10.2.1.1 peer-group upstream
1371 neighbor 10.3.1.1 remote-as 64517
1372 neighbor 10.3.1.1 peer-group cust-default
1373 neighbor 10.3.1.1 description customer1
1374 neighbor 10.3.1.1 prefix-list pl-cust1-network in
1375 neighbor 10.4.1.1 remote-as 64518
1376 neighbor 10.4.1.1 peer-group cust
1377 neighbor 10.4.1.1 prefix-list pl-cust2-network in
1378 neighbor 10.4.1.1 description customer2
1379 neighbor 10.5.1.1 remote-as 64519
1380 neighbor 10.5.1.1 peer-group peer
1381 neighbor 10.5.1.1 prefix-list pl-peer1-network in
1382 neighbor 10.5.1.1 description peer AS 1
1383 neighbor 10.6.1.1 remote-as 64520
1384 neighbor 10.6.1.1 peer-group peer
1385 neighbor 10.6.1.1 prefix-list pl-peer2-network in
1386 neighbor 10.6.1.1 description peer AS 2
1387 !
1388 ip prefix-list pl-default permit 0.0.0.0/0
1389 !
1390 ip prefix-list pl-upstream-peers permit 10.1.1.1/32
1391 ip prefix-list pl-upstream-peers permit 10.2.1.1/32
1392 !
1393 ip prefix-list pl-cust1-network permit 10.3.1.0/24
1394 ip prefix-list pl-cust1-network permit 10.3.2.0/24
1395 !
1396 ip prefix-list pl-cust2-network permit 10.4.1.0/24
1397 !
1398 ip prefix-list pl-peer1-network permit 10.5.1.0/24
1399 ip prefix-list pl-peer1-network permit 10.5.2.0/24
1400 ip prefix-list pl-peer1-network permit 192.168.0.0/24
1401 !
1402 ip prefix-list pl-peer2-network permit 10.6.1.0/24
1403 ip prefix-list pl-peer2-network permit 10.6.2.0/24
1404 ip prefix-list pl-peer2-network permit 192.168.1.0/24
1405 ip prefix-list pl-peer2-network permit 192.168.2.0/24
1406 ip prefix-list pl-peer2-network permit 172.16.1/24
1407 !
1408 ip as-path access-list asp-own-as permit ^$
1409 ip as-path access-list asp-own-as permit _64512_
1410 !
1411 ! #################################################################
1412 ! Match communities we provide actions for, on routes receives from
1413 ! customers. Communities values of <our-ASN>:X, with X, have actions:
1414 !
1415 ! 100 - blackhole the prefix
1416 ! 200 - set no_export
1417 ! 300 - advertise only to other customers
1418 ! 400 - advertise only to upstreams
1419 ! 500 - set no_export when advertising to upstreams
1420 ! 2X00 - set local_preference to X00
1421 !
1422 ! blackhole the prefix of the route
1423 ip community-list standard cm-blackhole permit 64512:100
1424 !
1425 ! set no-export community before advertising
1426 ip community-list standard cm-set-no-export permit 64512:200
1427 !
1428 ! advertise only to other customers
1429 ip community-list standard cm-cust-only permit 64512:300
1430 !
1431 ! advertise only to upstreams
1432 ip community-list standard cm-upstream-only permit 64512:400
1433 !
1434 ! advertise to upstreams with no-export
1435 ip community-list standard cm-upstream-noexport permit 64512:500
1436 !
1437 ! set local-pref to least significant 3 digits of the community
1438 ip community-list standard cm-prefmod-100 permit 64512:2100
1439 ip community-list standard cm-prefmod-200 permit 64512:2200
1440 ip community-list standard cm-prefmod-300 permit 64512:2300
1441 ip community-list standard cm-prefmod-400 permit 64512:2400
1442 ip community-list expanded cme-prefmod-range permit 64512:2...
1443 !
1444 ! Informational communities
1445 !
1446 ! 3000 - learned from upstream
1447 ! 3100 - learned from customer
1448 ! 3200 - learned from peer
1449 !
1450 ip community-list standard cm-learnt-upstream permit 64512:3000
1451 ip community-list standard cm-learnt-cust permit 64512:3100
1452 ip community-list standard cm-learnt-peer permit 64512:3200
1453 !
1454 ! ###################################################################
1455 ! Utility route-maps
1456 !
1457 ! These utility route-maps generally should not used to permit/deny
1458 ! routes, i.e. they do not have meaning as filters, and hence probably
1459 ! should be used with 'on-match next'. These all finish with an empty
1460 ! permit entry so as not interfere with processing in the caller.
1461 !
1462 route-map rm-no-export permit 10
1463 set community additive no-export
1464 route-map rm-no-export permit 20
1465 !
1466 route-map rm-blackhole permit 10
1467 description blackhole, up-pref and ensure it cant escape this AS
1468 set ip next-hop 127.0.0.1
1469 set local-preference 10
1470 set community additive no-export
1471 route-map rm-blackhole permit 20
1472 !
1473 ! Set local-pref as requested
1474 route-map rm-prefmod permit 10
1475 match community cm-prefmod-100
1476 set local-preference 100
1477 route-map rm-prefmod permit 20
1478 match community cm-prefmod-200
1479 set local-preference 200
1480 route-map rm-prefmod permit 30
1481 match community cm-prefmod-300
1482 set local-preference 300
1483 route-map rm-prefmod permit 40
1484 match community cm-prefmod-400
1485 set local-preference 400
1486 route-map rm-prefmod permit 50
1487 !
1488 ! Community actions to take on receipt of route.
1489 route-map rm-community-in permit 10
1490 description check for blackholing, no point continuing if it matches.
1491 match community cm-blackhole
1492 call rm-blackhole
1493 route-map rm-community-in permit 20
1494 match community cm-set-no-export
1495 call rm-no-export
1496 on-match next
1497 route-map rm-community-in permit 30
1498 match community cme-prefmod-range
1499 call rm-prefmod
1500 route-map rm-community-in permit 40
1501 !
1502 ! #####################################################################
1503 ! Community actions to take when advertising a route.
1504 ! These are filtering route-maps,
1505 !
1506 ! Deny customer routes to upstream with cust-only set.
1507 route-map rm-community-filt-to-upstream deny 10
1508 match community cm-learnt-cust
1509 match community cm-cust-only
1510 route-map rm-community-filt-to-upstream permit 20
1511 !
1512 ! Deny customer routes to other customers with upstream-only set.
1513 route-map rm-community-filt-to-cust deny 10
1514 match community cm-learnt-cust
1515 match community cm-upstream-only
1516 route-map rm-community-filt-to-cust permit 20
1517 !
1518 ! ###################################################################
1519 ! The top-level route-maps applied to sessions. Further entries could
1520 ! be added obviously..
1521 !
1522 ! Customers
1523 route-map rm-cust-in permit 10
1524 call rm-community-in
1525 on-match next
1526 route-map rm-cust-in permit 20
1527 set community additive 64512:3100
1528 route-map rm-cust-in permit 30
1529 !
1530 route-map rm-cust-out permit 10
1531 call rm-community-filt-to-cust
1532 on-match next
1533 route-map rm-cust-out permit 20
1534 !
1535 ! Upstream transit ASes
1536 route-map rm-upstream-out permit 10
1537 description filter customer prefixes which are marked cust-only
1538 call rm-community-filt-to-upstream
1539 on-match next
1540 route-map rm-upstream-out permit 20
1541 description only customer routes are provided to upstreams/peers
1542 match community cm-learnt-cust
1543 !
1544 ! Peer ASes
1545 ! outbound policy is same as for upstream
1546 route-map rm-peer-out permit 10
1547 call rm-upstream-out
1548 !
1549 route-map rm-peer-in permit 10
1550 set community additive 64512:3200
1551 @end example