]> git.proxmox.com Git - mirror_frr.git/blame - doc/user/bgp.rst
Merge pull request #5095 from donaldsharp/static_fix_for_ROUTE_ALL
[mirror_frr.git] / doc / user / bgp.rst
CommitLineData
0efdf0fe 1.. _bgp:
42fc5d26
QY
2
3***
4BGP
5***
6
8fcedbd2 7:abbr:`BGP` stands for Border Gateway Protocol. The latest BGP version is 4.
d1e7591e 8BGP-4 is one of the Exterior Gateway Protocols and the de facto standard
8fcedbd2
QY
9interdomain routing protocol. BGP-4 is described in :rfc:`1771` and updated by
10:rfc:`4271`. :rfc:`2858` adds multiprotocol support to BGP-4.
42fc5d26 11
0efdf0fe 12.. _starting-bgp:
42fc5d26
QY
13
14Starting BGP
15============
16
8fcedbd2
QY
17The default configuration file of *bgpd* is :file:`bgpd.conf`. *bgpd* searches
18the current directory first, followed by |INSTALL_PREFIX_ETC|/bgpd.conf. All of
19*bgpd*'s commands must be configured in :file:`bgpd.conf` when the integrated
20config is not being used.
42fc5d26 21
c1a54c05 22*bgpd* specific invocation options are described below. Common options may also
0efdf0fe 23be specified (:ref:`common-invocation-options`).
42fc5d26 24
c1a54c05 25.. program:: bgpd
42fc5d26 26
c9365894 27.. option:: -p, --bgp_port <port>
42fc5d26 28
db759bb0 29 Set the bgp protocol's port number. When port number is 0, that means do not
30 listen bgp port.
42fc5d26 31
c9365894 32.. option:: -l, --listenon
42fc5d26 33
c0868e8b
QY
34 Specify a specific IP address for bgpd to listen on, rather than its default
35 of ``0.0.0.0`` / ``::``. This can be useful to constrain bgpd to an internal
36 address, or to run multiple bgpd processes on one host.
42fc5d26 37
8fcedbd2 38.. _bgp-basic-concepts:
42fc5d26 39
8fcedbd2
QY
40Basic Concepts
41==============
42fc5d26 42
8fcedbd2 43.. _bgp-autonomous-systems:
c3c5a71f 44
8fcedbd2
QY
45Autonomous Systems
46------------------
42fc5d26 47
c0868e8b
QY
48From :rfc:`1930`:
49
50 An AS is a connected group of one or more IP prefixes run by one or more
51 network operators which has a SINGLE and CLEARLY DEFINED routing policy.
52
53Each AS has an identifying number associated with it called an :abbr:`ASN
54(Autonomous System Number)`. This is a two octet value ranging in value from 1
55to 65535. The AS numbers 64512 through 65535 are defined as private AS numbers.
56Private AS numbers must not be advertised on the global Internet.
57
58The :abbr:`ASN (Autonomous System Number)` is one of the essential elements of
8fcedbd2 59BGP. BGP is a distance vector routing protocol, and the AS-Path framework
c0868e8b 60provides distance vector metric and loop detection to BGP.
42fc5d26 61
c0868e8b 62.. seealso:: :rfc:`1930`
42fc5d26 63
8fcedbd2 64.. _bgp-address-families:
42fc5d26 65
8fcedbd2
QY
66Address Families
67----------------
42fc5d26 68
c0868e8b
QY
69Multiprotocol extensions enable BGP to carry routing information for multiple
70network layer protocols. BGP supports an Address Family Identifier (AFI) for
71IPv4 and IPv6. Support is also provided for multiple sets of per-AFI
72information via the BGP Subsequent Address Family Identifier (SAFI). FRR
73supports SAFIs for unicast information, labeled information (:rfc:`3107` and
74:rfc:`8277`), and Layer 3 VPN information (:rfc:`4364` and :rfc:`4659`).
c3c5a71f 75
8fcedbd2 76.. _bgp-route-selection:
42fc5d26 77
8fcedbd2
QY
78Route Selection
79---------------
42fc5d26 80
8fcedbd2
QY
81The route selection process used by FRR's BGP implementation uses the following
82decision criterion, starting at the top of the list and going towards the
83bottom until one of the factors can be used.
42fc5d26 84
8fcedbd2 851. **Weight check**
42fc5d26 86
c1a54c05 87 Prefer higher local weight routes to lower routes.
42fc5d26 88
8fcedbd2
QY
892. **Local preference check**
90
c1a54c05 91 Prefer higher local preference routes to lower.
42fc5d26 92
8fcedbd2
QY
933. **Local route check**
94
c1a54c05 95 Prefer local routes (statics, aggregates, redistributed) to received routes.
42fc5d26 96
8fcedbd2
QY
974. **AS path length check**
98
c1a54c05 99 Prefer shortest hop-count AS_PATHs.
42fc5d26 100
8fcedbd2
QY
1015. **Origin check**
102
c1a54c05
QY
103 Prefer the lowest origin type route. That is, prefer IGP origin routes to
104 EGP, to Incomplete routes.
42fc5d26 105
8fcedbd2
QY
1066. **MED check**
107
c1a54c05 108 Where routes with a MED were received from the same AS, prefer the route
0efdf0fe 109 with the lowest MED. :ref:`bgp-med`.
42fc5d26 110
8fcedbd2
QY
1117. **External check**
112
c1a54c05
QY
113 Prefer the route received from an external, eBGP peer over routes received
114 from other types of peers.
42fc5d26 115
8fcedbd2
QY
1168. **IGP cost check**
117
c1a54c05 118 Prefer the route with the lower IGP cost.
42fc5d26 119
8fcedbd2
QY
1209. **Multi-path check**
121
c1a54c05
QY
122 If multi-pathing is enabled, then check whether the routes not yet
123 distinguished in preference may be considered equal. If
9e146a81 124 :clicmd:`bgp bestpath as-path multipath-relax` is set, all such routes are
c1a54c05
QY
125 considered equal, otherwise routes received via iBGP with identical AS_PATHs
126 or routes received from eBGP neighbours in the same AS are considered equal.
42fc5d26 127
8fcedbd2
QY
12810. **Already-selected external check**
129
07738543
QY
130 Where both routes were received from eBGP peers, then prefer the route
131 which is already selected. Note that this check is not applied if
132 :clicmd:`bgp bestpath compare-routerid` is configured. This check can
133 prevent some cases of oscillation.
134
8fcedbd2
QY
13511. **Router-ID check**
136
07738543
QY
137 Prefer the route with the lowest `router-ID`. If the route has an
138 `ORIGINATOR_ID` attribute, through iBGP reflection, then that router ID is
139 used, otherwise the `router-ID` of the peer the route was received from is
140 used.
141
8fcedbd2
QY
14212. **Cluster-List length check**
143
07738543
QY
144 The route with the shortest cluster-list length is used. The cluster-list
145 reflects the iBGP reflection path the route has taken.
146
8fcedbd2
QY
14713. **Peer address**
148
07738543
QY
149 Prefer the route received from the peer with the higher transport layer
150 address, as a last-resort tie-breaker.
42fc5d26 151
8fcedbd2
QY
152.. _bgp-capability-negotiation:
153
154Capability Negotiation
155----------------------
156
157When adding IPv6 routing information exchange feature to BGP. There were some
158proposals. :abbr:`IETF (Internet Engineering Task Force)`
159:abbr:`IDR (Inter Domain Routing)` adopted a proposal called Multiprotocol
160Extension for BGP. The specification is described in :rfc:`2283`. The protocol
161does not define new protocols. It defines new attributes to existing BGP. When
162it is used exchanging IPv6 routing information it is called BGP-4+. When it is
163used for exchanging multicast routing information it is called MBGP.
164
165*bgpd* supports Multiprotocol Extension for BGP. So if a remote peer supports
166the protocol, *bgpd* can exchange IPv6 and/or multicast routing information.
167
168Traditional BGP did not have the feature to detect a remote peer's
169capabilities, e.g. whether it can handle prefix types other than IPv4 unicast
170routes. This was a big problem using Multiprotocol Extension for BGP in an
171operational network. :rfc:`2842` adopted a feature called Capability
172Negotiation. *bgpd* use this Capability Negotiation to detect the remote peer's
173capabilities. If a peer is only configured as an IPv4 unicast neighbor, *bgpd*
174does not send these Capability Negotiation packets (at least not unless other
175optional BGP features require capability negotiation).
176
177By default, FRR will bring up peering with minimal common capability for the
178both sides. For example, if the local router has unicast and multicast
179capabilities and the remote router only has unicast capability the local router
180will establish the connection with unicast only capability. When there are no
181common capabilities, FRR sends Unsupported Capability error and then resets the
182connection.
183
8fcedbd2
QY
184.. _bgp-router-configuration:
185
186BGP Router Configuration
187========================
188
189ASN and Router ID
190-----------------
191
192First of all you must configure BGP router with the :clicmd:`router bgp ASN`
193command. The AS number is an identifier for the autonomous system. The BGP
194protocol uses the AS number for detecting whether the BGP connection is
195internal or external.
196
197.. index:: router bgp ASN
198.. clicmd:: router bgp ASN
199
200 Enable a BGP protocol process with the specified ASN. After
201 this statement you can input any `BGP Commands`.
202
203.. index:: no router bgp ASN
204.. clicmd:: no router bgp ASN
205
206 Destroy a BGP protocol process with the specified ASN.
207
208.. index:: bgp router-id A.B.C.D
209.. clicmd:: bgp router-id A.B.C.D
210
211 This command specifies the router-ID. If *bgpd* connects to *zebra* it gets
212 interface and address information. In that case default router ID value is
213 selected as the largest IP Address of the interfaces. When `router zebra` is
214 not enabled *bgpd* can't get interface information so `router-id` is set to
215 0.0.0.0. So please set router-id by hand.
216
c8a5e5e1
QY
217
218.. _bgp-multiple-autonomous-systems:
219
220Multiple Autonomous Systems
221---------------------------
222
223FRR's BGP implementation is capable of running multiple autonomous systems at
224once. Each configured AS corresponds to a :ref:`zebra-vrf`. In the past, to get
225the same functionality the network administrator had to run a new *bgpd*
226process; using VRFs allows multiple autonomous systems to be handled in a
227single process.
228
229When using multiple autonomous systems, all router config blocks after the
230first one must specify a VRF to be the target of BGP's route selection. This
231VRF must be unique within respect to all other VRFs being used for the same
232purpose, i.e. two different autonomous systems cannot use the same VRF.
233However, the same AS can be used with different VRFs.
234
235.. note::
236
237 The separated nature of VRFs makes it possible to peer a single *bgpd*
edde3ce9
QY
238 process to itself, on one machine. Note that this can be done fully within
239 BGP without a corresponding VRF in the kernel or Zebra, which enables some
240 practical use cases such as :ref:`route reflectors <bgp-route-reflector>`
241 and route servers.
c8a5e5e1
QY
242
243Configuration of additional autonomous systems, or of a router that targets a
244specific VRF, is accomplished with the following command:
245
246.. index:: router bgp ASN vrf VRFNAME
247.. clicmd:: router bgp ASN vrf VRFNAME
248
249 ``VRFNAME`` is matched against VRFs configured in the kernel. When ``vrf
250 VRFNAME`` is not specified, the BGP protocol process belongs to the default
251 VRF.
252
253An example configuration with multiple autonomous systems might look like this:
254
255.. code-block:: frr
256
257 router bgp 1
258 neighbor 10.0.0.1 remote-as 20
259 neighbor 10.0.0.2 remote-as 30
260 !
261 router bgp 2 vrf blue
262 neighbor 10.0.0.3 remote-as 40
263 neighbor 10.0.0.4 remote-as 50
264 !
265 router bgp 3 vrf red
266 neighbor 10.0.0.5 remote-as 60
267 neighbor 10.0.0.6 remote-as 70
268 ...
269
c8a5e5e1
QY
270.. seealso:: :ref:`bgp-vrf-route-leaking`
271.. seealso:: :ref:`zebra-vrf`
272
273
274.. _bgp-views:
275
276Views
277-----
278
279In addition to supporting multiple autonomous systems, FRR's BGP implementation
280also supports *views*.
281
282BGP views are almost the same as normal BGP processes, except that routes
195c7461
QY
283selected by BGP are not installed into the kernel routing table. Each BGP view
284provides an independent set of routing information which is only distributed
285via BGP. Multiple views can be supported, and BGP view information is always
286independent from other routing protocols and Zebra/kernel routes. BGP views use
287the core instance (i.e., default VRF) for communication with peers.
edde3ce9 288
c8a5e5e1
QY
289.. index:: router bgp AS-NUMBER view NAME
290.. clicmd:: router bgp AS-NUMBER view NAME
291
292 Make a new BGP view. You can use an arbitrary word for the ``NAME``. Routes
293 selected by the view are not installed into the kernel routing table.
294
295 With this command, you can setup Route Server like below.
296
297 .. code-block:: frr
298
299 !
300 router bgp 1 view 1
301 neighbor 10.0.0.1 remote-as 2
302 neighbor 10.0.0.2 remote-as 3
303 !
304 router bgp 2 view 2
305 neighbor 10.0.0.3 remote-as 4
306 neighbor 10.0.0.4 remote-as 5
307
308.. index:: show [ip] bgp view NAME
309.. clicmd:: show [ip] bgp view NAME
310
311 Display the routing table of BGP view ``NAME``.
312
313
8fcedbd2
QY
314Route Selection
315---------------
c3c5a71f 316
c1a54c05 317.. index:: bgp bestpath as-path confed
29adcd50 318.. clicmd:: bgp bestpath as-path confed
42fc5d26 319
c1a54c05
QY
320 This command specifies that the length of confederation path sets and
321 sequences should should be taken into account during the BGP best path
322 decision process.
42fc5d26 323
c3c5a71f 324.. index:: bgp bestpath as-path multipath-relax
29adcd50 325.. clicmd:: bgp bestpath as-path multipath-relax
42fc5d26 326
c1a54c05
QY
327 This command specifies that BGP decision process should consider paths
328 of equal AS_PATH length candidates for multipath computation. Without
329 the knob, the entire AS_PATH must match for multipath computation.
c3c5a71f 330
29adcd50 331.. clicmd:: bgp bestpath compare-routerid
42fc5d26 332
c1a54c05
QY
333 Ensure that when comparing routes where both are equal on most metrics,
334 including local-pref, AS_PATH length, IGP cost, MED, that the tie is broken
335 based on router-ID.
42fc5d26 336
c1a54c05
QY
337 If this option is enabled, then the already-selected check, where
338 already selected eBGP routes are preferred, is skipped.
42fc5d26 339
c1a54c05
QY
340 If a route has an `ORIGINATOR_ID` attribute because it has been reflected,
341 that `ORIGINATOR_ID` will be used. Otherwise, the router-ID of the peer the
342 route was received from will be used.
42fc5d26 343
c1a54c05
QY
344 The advantage of this is that the route-selection (at this point) will be
345 more deterministic. The disadvantage is that a few or even one lowest-ID
d1e7591e 346 router may attract all traffic to otherwise-equal paths because of this
c1a54c05
QY
347 check. It may increase the possibility of MED or IGP oscillation, unless
348 other measures were taken to avoid these. The exact behaviour will be
349 sensitive to the iBGP and reflection topology.
42fc5d26 350
8fcedbd2
QY
351.. _bgp-distance:
352
353Administrative Distance Metrics
354-------------------------------
355
356.. index:: distance bgp (1-255) (1-255) (1-255)
357.. clicmd:: distance bgp (1-255) (1-255) (1-255)
358
359 This command change distance value of BGP. The arguments are the distance
360 values for for external routes, internal routes and local routes
361 respectively.
362
363.. index:: distance (1-255) A.B.C.D/M
364.. clicmd:: distance (1-255) A.B.C.D/M
365
366.. index:: distance (1-255) A.B.C.D/M WORD
367.. clicmd:: distance (1-255) A.B.C.D/M WORD
368
369 Sets the administrative distance for a particular route.
42fc5d26 370
713c64dd
DA
371.. _bgp-requires-policy:
372
373Require policy on EBGP
374-------------------------------
375
376.. index:: [no] bgp ebgp-requires-policy
377.. clicmd:: [no] bgp ebgp-requires-policy
378
379 This command requires incoming and outgoing filters to be applied for eBGP sessions. Without the incoming filter, no routes will be accepted. Without the outgoing filter, no routes will be announced.
380
0efdf0fe 381.. _bgp-route-flap-dampening:
42fc5d26 382
8fcedbd2
QY
383Route Flap Dampening
384--------------------
42fc5d26 385
c1a54c05
QY
386.. clicmd:: bgp dampening (1-45) (1-20000) (1-20000) (1-255)
387
c1a54c05 388 This command enables BGP route-flap dampening and specifies dampening parameters.
42fc5d26 389
c1a54c05
QY
390 half-life
391 Half-life time for the penalty
42fc5d26 392
c1a54c05
QY
393 reuse-threshold
394 Value to start reusing a route
42fc5d26 395
c1a54c05
QY
396 suppress-threshold
397 Value to start suppressing a route
42fc5d26 398
c1a54c05
QY
399 max-suppress
400 Maximum duration to suppress a stable route
42fc5d26 401
c1a54c05
QY
402 The route-flap damping algorithm is compatible with :rfc:`2439`. The use of
403 this command is not recommended nowadays.
42fc5d26 404
c1a54c05 405.. seealso::
8fcedbd2 406 https://www.ripe.net/publications/docs/ripe-378
42fc5d26 407
0efdf0fe 408.. _bgp-med:
42fc5d26 409
8fcedbd2
QY
410Multi-Exit Discriminator
411------------------------
42fc5d26 412
8fcedbd2 413The BGP :abbr:`MED (Multi-Exit Discriminator)` attribute has properties which
c1a54c05
QY
414can cause subtle convergence problems in BGP. These properties and problems
415have proven to be hard to understand, at least historically, and may still not
416be widely understood. The following attempts to collect together and present
417what is known about MED, to help operators and FRR users in designing and
418configuring their networks.
42fc5d26 419
07a17e6d
QY
420The BGP :abbr:`MED` attribute is intended to allow one AS to indicate its
421preferences for its ingress points to another AS. The MED attribute will not be
422propagated on to another AS by the receiving AS - it is 'non-transitive' in the
423BGP sense.
42fc5d26 424
c1a54c05
QY
425E.g., if AS X and AS Y have 2 different BGP peering points, then AS X might set
426a MED of 100 on routes advertised at one and a MED of 200 at the other. When AS
427Y selects between otherwise equal routes to or via AS X, AS Y should prefer to
428take the path via the lower MED peering of 100 with AS X. Setting the MED
429allows an AS to influence the routing taken to it within another, neighbouring
430AS.
42fc5d26
QY
431
432In this use of MED it is not really meaningful to compare the MED value on
c1a54c05
QY
433routes where the next AS on the paths differs. E.g., if AS Y also had a route
434for some destination via AS Z in addition to the routes from AS X, and AS Z had
435also set a MED, it wouldn't make sense for AS Y to compare AS Z's MED values to
436those of AS X. The MED values have been set by different administrators, with
437different frames of reference.
42fc5d26
QY
438
439The default behaviour of BGP therefore is to not compare MED values across
dc1046f7 440routes received from different neighbouring ASes. In FRR this is done by
c1a54c05
QY
441comparing the neighbouring, left-most AS in the received AS_PATHs of the routes
442and only comparing MED if those are the same.
443
444Unfortunately, this behaviour of MED, of sometimes being compared across routes
445and sometimes not, depending on the properties of those other routes, means MED
446can cause the order of preference over all the routes to be undefined. That is,
447given routes A, B, and C, if A is preferred to B, and B is preferred to C, then
448a well-defined order should mean the preference is transitive (in the sense of
013f9762 449orders [#med-transitivity-rant]_) and that A would be preferred to C.
42fc5d26 450
c3c5a71f
QY
451However, when MED is involved this need not be the case. With MED it is
452possible that C is actually preferred over A. So A is preferred to B, B is
453preferred to C, but C is preferred to A. This can be true even where BGP
c1a54c05
QY
454defines a deterministic 'most preferred' route out of the full set of A,B,C.
455With MED, for any given set of routes there may be a deterministically
456preferred route, but there need not be any way to arrange them into any order
457of preference. With unmodified MED, the order of preference of routes literally
458becomes undefined.
42fc5d26 459
c3c5a71f 460That MED can induce non-transitive preferences over routes can cause issues.
c1a54c05
QY
461Firstly, it may be perceived to cause routing table churn locally at speakers;
462secondly, and more seriously, it may cause routing instability in iBGP
463topologies, where sets of speakers continually oscillate between different
464paths.
42fc5d26 465
c3c5a71f 466The first issue arises from how speakers often implement routing decisions.
c1a54c05
QY
467Though BGP defines a selection process that will deterministically select the
468same route as best at any given speaker, even with MED, that process requires
469evaluating all routes together. For performance and ease of implementation
470reasons, many implementations evaluate route preferences in a pair-wise fashion
471instead. Given there is no well-defined order when MED is involved, the best
472route that will be chosen becomes subject to implementation details, such as
473the order the routes are stored in. That may be (locally) non-deterministic,
474e.g.: it may be the order the routes were received in.
42fc5d26
QY
475
476This indeterminism may be considered undesirable, though it need not cause
c1a54c05
QY
477problems. It may mean additional routing churn is perceived, as sometimes more
478updates may be produced than at other times in reaction to some event .
42fc5d26
QY
479
480This first issue can be fixed with a more deterministic route selection that
c3c5a71f 481ensures routes are ordered by the neighbouring AS during selection.
9e146a81 482:clicmd:`bgp deterministic-med`. This may reduce the number of updates as routes
c1a54c05
QY
483are received, and may in some cases reduce routing churn. Though, it could
484equally deterministically produce the largest possible set of updates in
485response to the most common sequence of received updates.
42fc5d26
QY
486
487A deterministic order of evaluation tends to imply an additional overhead of
c3c5a71f 488sorting over any set of n routes to a destination. The implementation of
dc1046f7 489deterministic MED in FRR scales significantly worse than most sorting
c1a54c05
QY
490algorithms at present, with the number of paths to a given destination. That
491number is often low enough to not cause any issues, but where there are many
492paths, the deterministic comparison may quickly become increasingly expensive
493in terms of CPU.
494
495Deterministic local evaluation can *not* fix the second, more major, issue of
496MED however. Which is that the non-transitive preference of routes MED can
497cause may lead to routing instability or oscillation across multiple speakers
498in iBGP topologies. This can occur with full-mesh iBGP, but is particularly
499problematic in non-full-mesh iBGP topologies that further reduce the routing
500information known to each speaker. This has primarily been documented with iBGP
749afd7d
RF
501:ref:`route-reflection <bgp-route-reflector>` topologies. However, any
502route-hiding technologies potentially could also exacerbate oscillation with MED.
c1a54c05
QY
503
504This second issue occurs where speakers each have only a subset of routes, and
505there are cycles in the preferences between different combinations of routes -
506as the undefined order of preference of MED allows - and the routes are
507distributed in a way that causes the BGP speakers to 'chase' those cycles. This
508can occur even if all speakers use a deterministic order of evaluation in route
509selection.
510
511E.g., speaker 4 in AS A might receive a route from speaker 2 in AS X, and from
512speaker 3 in AS Y; while speaker 5 in AS A might receive that route from
513speaker 1 in AS Y. AS Y might set a MED of 200 at speaker 1, and 100 at speaker
5143. I.e, using ASN:ID:MED to label the speakers:
42fc5d26
QY
515
516::
517
c1a54c05
QY
518 .
519 /---------------\\
42fc5d26 520 X:2------|--A:4-------A:5--|-Y:1:200
c1a54c05
QY
521 Y:3:100--|-/ |
522 \\---------------/
c3c5a71f 523
42fc5d26 524
42fc5d26 525
c1a54c05
QY
526Assuming all other metrics are equal (AS_PATH, ORIGIN, 0 IGP costs), then based
527on the RFC4271 decision process speaker 4 will choose X:2 over Y:3:100, based
528on the lower ID of 2. Speaker 4 advertises X:2 to speaker 5. Speaker 5 will
529continue to prefer Y:1:200 based on the ID, and advertise this to speaker 4.
530Speaker 4 will now have the full set of routes, and the Y:1:200 it receives
531from 5 will beat X:2, but when speaker 4 compares Y:1:200 to Y:3:100 the MED
532check now becomes active as the ASes match, and now Y:3:100 is preferred.
533Speaker 4 therefore now advertises Y:3:100 to 5, which will also agrees that
534Y:3:100 is preferred to Y:1:200, and so withdraws the latter route from 4.
535Speaker 4 now has only X:2 and Y:3:100, and X:2 beats Y:3:100, and so speaker 4
536implicitly updates its route to speaker 5 to X:2. Speaker 5 sees that Y:1:200
537beats X:2 based on the ID, and advertises Y:1:200 to speaker 4, and the cycle
538continues.
42fc5d26
QY
539
540The root cause is the lack of a clear order of preference caused by how MED
541sometimes is and sometimes is not compared, leading to this cycle in the
542preferences between the routes:
543
544::
545
c1a54c05
QY
546 .
547 /---> X:2 ---beats---> Y:3:100 --\\
548 | |
549 | |
550 \\---beats--- Y:1:200 <---beats---/
c3c5a71f 551
42fc5d26 552
42fc5d26
QY
553
554This particular type of oscillation in full-mesh iBGP topologies can be
555avoided by speakers preferring already selected, external routes rather than
c1a54c05
QY
556choosing to update to new a route based on a post-MED metric (e.g. router-ID),
557at the cost of a non-deterministic selection process. FRR implements this, as
558do many other implementations, so long as it is not overridden by setting
9e146a81 559:clicmd:`bgp bestpath compare-routerid`, and see also
8fcedbd2 560:ref:`bgp-route-selection`.
42fc5d26
QY
561
562However, more complex and insidious cycles of oscillation are possible with
c3c5a71f 563iBGP route-reflection, which are not so easily avoided. These have been
c1a54c05
QY
564documented in various places. See, e.g.:
565
566- [bgp-route-osci-cond]_
567- [stable-flexible-ibgp]_
568- [ibgp-correctness]_
569
570for concrete examples and further references.
571
572There is as of this writing *no* known way to use MED for its original purpose;
573*and* reduce routing information in iBGP topologies; *and* be sure to avoid the
574instability problems of MED due the non-transitive routing preferences it can
575induce; in general on arbitrary networks.
576
577There may be iBGP topology specific ways to reduce the instability risks, even
578while using MED, e.g.: by constraining the reflection topology and by tuning
013f9762 579IGP costs between route-reflector clusters, see :rfc:`3345` for details. In the
c1a54c05
QY
580near future, the Add-Path extension to BGP may also solve MED oscillation while
581still allowing MED to be used as intended, by distributing "best-paths per
582neighbour AS". This would be at the cost of distributing at least as many
583routes to all speakers as a full-mesh iBGP would, if not more, while also
584imposing similar CPU overheads as the "Deterministic MED" feature at each
585Add-Path reflector.
42fc5d26
QY
586
587More generally, the instability problems that MED can introduce on more
588complex, non-full-mesh, iBGP topologies may be avoided either by:
589
013f9762 590- Setting :clicmd:`bgp always-compare-med`, however this allows MED to be compared
42fc5d26
QY
591 across values set by different neighbour ASes, which may not produce
592 coherent desirable results, of itself.
4b44467c 593- Effectively ignoring MED by setting MED to the same value (e.g.: 0) using
013f9762
QY
594 :clicmd:`set metric METRIC` on all received routes, in combination with
595 setting :clicmd:`bgp always-compare-med` on all speakers. This is the simplest
42fc5d26
QY
596 and most performant way to avoid MED oscillation issues, where an AS is happy
597 not to allow neighbours to inject this problematic metric.
598
42fc5d26
QY
599As MED is evaluated after the AS_PATH length check, another possible use for
600MED is for intra-AS steering of routes with equal AS_PATH length, as an
c1a54c05
QY
601extension of the last case above. As MED is evaluated before IGP metric, this
602can allow cold-potato routing to be implemented to send traffic to preferred
603hand-offs with neighbours, rather than the closest hand-off according to the
604IGP metric.
605
606Note that even if action is taken to address the MED non-transitivity issues,
607other oscillations may still be possible. E.g., on IGP cost if iBGP and IGP
608topologies are at cross-purposes with each other - see the Flavel and Roughan
609paper above for an example. Hence the guideline that the iBGP topology should
610follow the IGP topology.
611
c3c5a71f 612.. index:: bgp deterministic-med
29adcd50 613.. clicmd:: bgp deterministic-med
42fc5d26 614
c1a54c05
QY
615 Carry out route-selection in way that produces deterministic answers
616 locally, even in the face of MED and the lack of a well-defined order of
617 preference it can induce on routes. Without this option the preferred route
618 with MED may be determined largely by the order that routes were received
619 in.
42fc5d26 620
c1a54c05
QY
621 Setting this option will have a performance cost that may be noticeable when
622 there are many routes for each destination. Currently in FRR it is
623 implemented in a way that scales poorly as the number of routes per
624 destination increases.
42fc5d26 625
c1a54c05 626 The default is that this option is not set.
42fc5d26
QY
627
628Note that there are other sources of indeterminism in the route selection
629process, specifically, the preference for older and already selected routes
8fcedbd2 630from eBGP peers, :ref:`bgp-route-selection`.
42fc5d26 631
c3c5a71f 632.. index:: bgp always-compare-med
29adcd50 633.. clicmd:: bgp always-compare-med
42fc5d26 634
c1a54c05
QY
635 Always compare the MED on routes, even when they were received from
636 different neighbouring ASes. Setting this option makes the order of
637 preference of routes more defined, and should eliminate MED induced
638 oscillations.
42fc5d26 639
c1a54c05 640 If using this option, it may also be desirable to use
9e146a81 641 :clicmd:`set metric METRIC` to set MED to 0 on routes received from external
c1a54c05 642 neighbours.
42fc5d26 643
9e146a81
QY
644 This option can be used, together with :clicmd:`set metric METRIC` to use
645 MED as an intra-AS metric to steer equal-length AS_PATH routes to, e.g.,
646 desired exit points.
42fc5d26 647
0efdf0fe 648.. _bgp-network:
42fc5d26 649
8fcedbd2
QY
650Networks
651--------
42fc5d26 652
c1a54c05
QY
653.. index:: network A.B.C.D/M
654.. clicmd:: network A.B.C.D/M
42fc5d26 655
9eb95b3b 656 This command adds the announcement network.
c3c5a71f 657
9eb95b3b
QY
658 .. code-block:: frr
659
660 router bgp 1
661 address-family ipv4 unicast
662 network 10.0.0.0/8
663 exit-address-family
42fc5d26 664
c1a54c05
QY
665 This configuration example says that network 10.0.0.0/8 will be
666 announced to all neighbors. Some vendors' routers don't advertise
667 routes if they aren't present in their IGP routing tables; `bgpd`
668 doesn't care about IGP routes when announcing its routes.
c3c5a71f 669
c1a54c05
QY
670.. index:: no network A.B.C.D/M
671.. clicmd:: no network A.B.C.D/M
42fc5d26 672
8fcedbd2 673.. _bgp-route-aggregation:
42fc5d26
QY
674
675Route Aggregation
676-----------------
677
5101fece 678.. _bgp-route-aggregation-ipv4:
679
680Route Aggregation-IPv4 Address Family
681^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
682
c1a54c05
QY
683.. index:: aggregate-address A.B.C.D/M
684.. clicmd:: aggregate-address A.B.C.D/M
c3c5a71f 685
c1a54c05 686 This command specifies an aggregate address.
42fc5d26 687
ac2201bb
DA
688.. index:: aggregate-address A.B.C.D/M route-map NAME
689.. clicmd:: aggregate-address A.B.C.D/M route-map NAME
690
691 Apply a route-map for an aggregated prefix.
692
c1a54c05
QY
693.. index:: aggregate-address A.B.C.D/M as-set
694.. clicmd:: aggregate-address A.B.C.D/M as-set
42fc5d26 695
c1a54c05
QY
696 This command specifies an aggregate address. Resulting routes include
697 AS set.
42fc5d26 698
c1a54c05
QY
699.. index:: aggregate-address A.B.C.D/M summary-only
700.. clicmd:: aggregate-address A.B.C.D/M summary-only
c3c5a71f 701
d1e7591e 702 This command specifies an aggregate address. Aggregated routes will
c1a54c05 703 not be announce.
42fc5d26 704
c1a54c05
QY
705.. index:: no aggregate-address A.B.C.D/M
706.. clicmd:: no aggregate-address A.B.C.D/M
ac2201bb 707
5101fece 708 This command removes an aggregate address.
709
710
ac2201bb 711 This configuration example setup the aggregate-address under
5101fece 712 ipv4 address-family.
713
714 .. code-block:: frr
715
716 router bgp 1
717 address-family ipv4 unicast
718 aggregate-address 10.0.0.0/8
719 aggregate-address 20.0.0.0/8 as-set
720 aggregate-address 40.0.0.0/8 summary-only
ac2201bb 721 aggregate-address 50.0.0.0/8 route-map aggr-rmap
5101fece 722 exit-address-family
723
724
725.. _bgp-route-aggregation-ipv6:
726
727Route Aggregation-IPv6 Address Family
728^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
729
730.. index:: aggregate-address X:X::X:X/M
731.. clicmd:: aggregate-address X:X::X:X/M
732
733 This command specifies an aggregate address.
734
ac2201bb
DA
735.. index:: aggregate-address X:X::X:X/M route-map NAME
736.. clicmd:: aggregate-address X:X::X:X/M route-map NAME
737
738 Apply a route-map for an aggregated prefix.
739
5101fece 740.. index:: aggregate-address X:X::X:X/M as-set
741.. clicmd:: aggregate-address X:X::X:X/M as-set
742
743 This command specifies an aggregate address. Resulting routes include
744 AS set.
745
746.. index:: aggregate-address X:X::X:X/M summary-only
747.. clicmd:: aggregate-address X:X::X:X/M summary-only
748
749 This command specifies an aggregate address. Aggregated routes will
750 not be announce.
751
752.. index:: no aggregate-address X:X::X:X/M
753.. clicmd:: no aggregate-address X:X::X:X/M
754
755 This command removes an aggregate address.
756
757
ac2201bb
DA
758 This configuration example setup the aggregate-address under
759 ipv6 address-family.
5101fece 760
761 .. code-block:: frr
762
763 router bgp 1
764 address-family ipv6 unicast
765 aggregate-address 10::0/64
ac2201bb
DA
766 aggregate-address 20::0/64 as-set
767 aggregate-address 40::0/64 summary-only
768 aggregate-address 50::0/64 route-map aggr-rmap
5101fece 769 exit-address-family
c3c5a71f 770
8fcedbd2 771.. _bgp-redistribute-to-bgp:
42fc5d26 772
8fcedbd2
QY
773Redistribution
774--------------
42fc5d26 775
c3c5a71f 776.. index:: redistribute kernel
29adcd50 777.. clicmd:: redistribute kernel
42fc5d26 778
c1a54c05 779 Redistribute kernel route to BGP process.
42fc5d26 780
c3c5a71f 781.. index:: redistribute static
29adcd50 782.. clicmd:: redistribute static
42fc5d26 783
c1a54c05 784 Redistribute static route to BGP process.
42fc5d26 785
c3c5a71f 786.. index:: redistribute connected
29adcd50 787.. clicmd:: redistribute connected
42fc5d26 788
c1a54c05 789 Redistribute connected route to BGP process.
42fc5d26 790
c3c5a71f 791.. index:: redistribute rip
29adcd50 792.. clicmd:: redistribute rip
42fc5d26 793
c1a54c05 794 Redistribute RIP route to BGP process.
42fc5d26 795
c3c5a71f 796.. index:: redistribute ospf
29adcd50 797.. clicmd:: redistribute ospf
42fc5d26 798
c1a54c05 799 Redistribute OSPF route to BGP process.
42fc5d26 800
c3c5a71f 801.. index:: redistribute vpn
29adcd50 802.. clicmd:: redistribute vpn
42fc5d26 803
c1a54c05 804 Redistribute VNC routes to BGP process.
42fc5d26 805
c1a54c05
QY
806.. index:: update-delay MAX-DELAY
807.. clicmd:: update-delay MAX-DELAY
c3c5a71f 808
c1a54c05
QY
809.. index:: update-delay MAX-DELAY ESTABLISH-WAIT
810.. clicmd:: update-delay MAX-DELAY ESTABLISH-WAIT
c3c5a71f 811
c1a54c05
QY
812 This feature is used to enable read-only mode on BGP process restart or when
813 BGP process is cleared using 'clear ip bgp \*'. When applicable, read-only
814 mode would begin as soon as the first peer reaches Established status and a
815 timer for max-delay seconds is started.
42fc5d26 816
c1a54c05
QY
817 During this mode BGP doesn't run any best-path or generate any updates to its
818 peers. This mode continues until:
42fc5d26 819
c1a54c05
QY
820 1. All the configured peers, except the shutdown peers, have sent explicit EOR
821 (End-Of-RIB) or an implicit-EOR. The first keep-alive after BGP has reached
822 Established is considered an implicit-EOR.
823 If the establish-wait optional value is given, then BGP will wait for
d1e7591e 824 peers to reach established from the beginning of the update-delay till the
c1a54c05
QY
825 establish-wait period is over, i.e. the minimum set of established peers for
826 which EOR is expected would be peers established during the establish-wait
827 window, not necessarily all the configured neighbors.
828 2. max-delay period is over.
42fc5d26 829
c1a54c05
QY
830 On hitting any of the above two conditions, BGP resumes the decision process
831 and generates updates to its peers.
42fc5d26 832
c1a54c05 833 Default max-delay is 0, i.e. the feature is off by default.
c3c5a71f 834
c1a54c05
QY
835.. index:: table-map ROUTE-MAP-NAME
836.. clicmd:: table-map ROUTE-MAP-NAME
42fc5d26 837
c1a54c05
QY
838 This feature is used to apply a route-map on route updates from BGP to
839 Zebra. All the applicable match operations are allowed, such as match on
840 prefix, next-hop, communities, etc. Set operations for this attach-point are
841 limited to metric and next-hop only. Any operation of this feature does not
842 affect BGPs internal RIB.
42fc5d26 843
c1a54c05
QY
844 Supported for ipv4 and ipv6 address families. It works on multi-paths as
845 well, however, metric setting is based on the best-path only.
42fc5d26 846
8fcedbd2 847.. _bgp-peers:
42fc5d26 848
8fcedbd2
QY
849Peers
850-----
42fc5d26 851
8fcedbd2 852.. _bgp-defining-peers:
42fc5d26 853
8fcedbd2
QY
854Defining Peers
855^^^^^^^^^^^^^^
42fc5d26 856
c1a54c05
QY
857.. index:: neighbor PEER remote-as ASN
858.. clicmd:: neighbor PEER remote-as ASN
42fc5d26 859
c1a54c05 860 Creates a new neighbor whose remote-as is ASN. PEER can be an IPv4 address
9eb95b3b 861 or an IPv6 address or an interface to use for the connection.
76bd1499 862
9eb95b3b
QY
863 .. code-block:: frr
864
865 router bgp 1
866 neighbor 10.0.0.1 remote-as 2
76bd1499 867
c1a54c05 868 In this case my router, in AS-1, is trying to peer with AS-2 at 10.0.0.1.
76bd1499 869
c1a54c05 870 This command must be the first command used when configuring a neighbor. If
9eb95b3b 871 the remote-as is not specified, *bgpd* will complain like this: ::
76bd1499 872
c1a54c05 873 can't find neighbor 10.0.0.1
c3c5a71f 874
5413757f
DS
875.. index:: neighbor PEER remote-as internal
876.. clicmd:: neighbor PEER remote-as internal
877
878 Create a peer as you would when you specify an ASN, except that if the
879 peers ASN is different than mine as specified under the :clicmd:`router bgp ASN`
880 command the connection will be denied.
881
882.. index:: neighbor PEER remote-as external
883.. clicmd:: neighbor PEER remote-as external
884
885 Create a peer as you would when you specify an ASN, except that if the
886 peers ASN is the same as mine as specified under the :clicmd:`router bgp ASN`
887 command the connection will be denied.
42fc5d26 888
d7b9898c
DA
889.. index:: [no] bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group PGNAME
890.. clicmd:: [no] bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group PGNAME
d79e0e08
QY
891
892 Accept connections from any peers in the specified prefix. Configuration
893 from the specified peer-group is used to configure these peers.
894
895.. note::
896
897 When using BGP listen ranges, if the associated peer group has TCP MD5
898 authentication configured, your kernel must support this on prefixes. On
899 Linux, this support was added in kernel version 4.14. If your kernel does
900 not support this feature you will get a warning in the log file, and the
901 listen range will only accept connections from peers without MD5 configured.
902
903 Additionally, we have observed that when using this option at scale (several
904 hundred peers) the kernel may hit its option memory limit. In this situation
905 you will see error messages like:
906
907 ``bgpd: sockopt_tcp_signature: setsockopt(23): Cannot allocate memory``
908
909 In this case you need to increase the value of the sysctl
910 ``net.core.optmem_max`` to allow the kernel to allocate the necessary option
911 memory.
912
8fcedbd2 913.. _bgp-configuring-peers:
42fc5d26 914
8fcedbd2
QY
915Configuring Peers
916^^^^^^^^^^^^^^^^^
42fc5d26 917
c0868e8b
QY
918.. index:: [no] neighbor PEER shutdown
919.. clicmd:: [no] neighbor PEER shutdown
c3c5a71f 920
c1a54c05
QY
921 Shutdown the peer. We can delete the neighbor's configuration by
922 ``no neighbor PEER remote-as ASN`` but all configuration of the neighbor
923 will be deleted. When you want to preserve the configuration, but want to
924 drop the BGP peer, use this syntax.
c3c5a71f 925
c0868e8b
QY
926.. index:: [no] neighbor PEER disable-connected-check
927.. clicmd:: [no] neighbor PEER disable-connected-check
c3c5a71f 928
c0868e8b
QY
929 Allow peerings between directly connected eBGP peers using loopback
930 addresses.
c3c5a71f 931
c0868e8b
QY
932.. index:: [no] neighbor PEER ebgp-multihop
933.. clicmd:: [no] neighbor PEER ebgp-multihop
42fc5d26 934
c0868e8b
QY
935.. index:: [no] neighbor PEER description ...
936.. clicmd:: [no] neighbor PEER description ...
42fc5d26 937
c1a54c05 938 Set description of the peer.
42fc5d26 939
c0868e8b
QY
940.. index:: [no] neighbor PEER version VERSION
941.. clicmd:: [no] neighbor PEER version VERSION
42fc5d26 942
4da7fda3
QY
943 Set up the neighbor's BGP version. `version` can be `4`, `4+` or `4-`. BGP
944 version `4` is the default value used for BGP peering. BGP version `4+`
945 means that the neighbor supports Multiprotocol Extensions for BGP-4. BGP
946 version `4-` is similar but the neighbor speaks the old Internet-Draft
947 revision 00's Multiprotocol Extensions for BGP-4. Some routing software is
948 still using this version.
42fc5d26 949
c0868e8b
QY
950.. index:: [no] neighbor PEER interface IFNAME
951.. clicmd:: [no] neighbor PEER interface IFNAME
42fc5d26 952
c1a54c05
QY
953 When you connect to a BGP peer over an IPv6 link-local address, you have to
954 specify the IFNAME of the interface used for the connection. To specify
955 IPv4 session addresses, see the ``neighbor PEER update-source`` command
956 below.
42fc5d26 957
c1a54c05
QY
958 This command is deprecated and may be removed in a future release. Its use
959 should be avoided.
42fc5d26 960
c0868e8b
QY
961.. index:: [no] neighbor PEER next-hop-self [all]
962.. clicmd:: [no] neighbor PEER next-hop-self [all]
42fc5d26 963
c1a54c05
QY
964 This command specifies an announced route's nexthop as being equivalent to
965 the address of the bgp router if it is learned via eBGP. If the optional
d1e7591e 966 keyword `all` is specified the modification is done also for routes learned
c1a54c05 967 via iBGP.
42fc5d26 968
c0868e8b
QY
969.. index:: [no] neighbor PEER update-source <IFNAME|ADDRESS>
970.. clicmd:: [no] neighbor PEER update-source <IFNAME|ADDRESS>
42fc5d26 971
c1a54c05
QY
972 Specify the IPv4 source address to use for the :abbr:`BGP` session to this
973 neighbour, may be specified as either an IPv4 address directly or as an
974 interface name (in which case the *zebra* daemon MUST be running in order
9eb95b3b
QY
975 for *bgpd* to be able to retrieve interface state).
976
977 .. code-block:: frr
42fc5d26 978
c1a54c05
QY
979 router bgp 64555
980 neighbor foo update-source 192.168.0.1
981 neighbor bar update-source lo0
42fc5d26 982
42fc5d26 983
c0868e8b
QY
984.. index:: [no] neighbor PEER default-originate
985.. clicmd:: [no] neighbor PEER default-originate
42fc5d26 986
4da7fda3
QY
987 *bgpd*'s default is to not announce the default route (0.0.0.0/0) even if it
988 is in routing table. When you want to announce default routes to the peer,
989 use this command.
42fc5d26 990
c1a54c05
QY
991.. index:: neighbor PEER port PORT
992.. clicmd:: neighbor PEER port PORT
42fc5d26 993
c1a54c05
QY
994.. index:: neighbor PEER send-community
995.. clicmd:: neighbor PEER send-community
42fc5d26 996
c0868e8b
QY
997.. index:: [no] neighbor PEER weight WEIGHT
998.. clicmd:: [no] neighbor PEER weight WEIGHT
42fc5d26 999
c1a54c05 1000 This command specifies a default `weight` value for the neighbor's routes.
42fc5d26 1001
c0868e8b
QY
1002.. index:: [no] neighbor PEER maximum-prefix NUMBER
1003.. clicmd:: [no] neighbor PEER maximum-prefix NUMBER
42fc5d26 1004
886026c8
QY
1005 Sets a maximum number of prefixes we can receive from a given peer. If this
1006 number is exceeded, the BGP session will be destroyed.
1007
1008 In practice, it is generally preferable to use a prefix-list to limit what
1009 prefixes are received from the peer instead of using this knob. Tearing down
1010 the BGP session when a limit is exceeded is far more destructive than merely
1011 rejecting undesired prefixes. The prefix-list method is also much more
1012 granular and offers much smarter matching criterion than number of received
1013 prefixes, making it more suited to implementing policy.
1014
1015.. index:: [no] neighbor PEER local-as AS-NUMBER [no-prepend] [replace-as]
1016.. clicmd:: [no] neighbor PEER local-as AS-NUMBER [no-prepend] [replace-as]
42fc5d26 1017
c1a54c05
QY
1018 Specify an alternate AS for this BGP process when interacting with the
1019 specified peer. With no modifiers, the specified local-as is prepended to
1020 the received AS_PATH when receiving routing updates from the peer, and
1021 prepended to the outgoing AS_PATH (after the process local AS) when
1022 transmitting local routes to the peer.
42fc5d26 1023
c1a54c05
QY
1024 If the no-prepend attribute is specified, then the supplied local-as is not
1025 prepended to the received AS_PATH.
c3c5a71f 1026
c1a54c05
QY
1027 If the replace-as attribute is specified, then only the supplied local-as is
1028 prepended to the AS_PATH when transmitting local-route updates to this peer.
c3c5a71f 1029
c1a54c05 1030 Note that replace-as can only be specified if no-prepend is.
c3c5a71f 1031
c1a54c05 1032 This command is only allowed for eBGP peers.
c3c5a71f 1033
c0868e8b
QY
1034.. index:: [no] neighbor PEER ttl-security hops NUMBER
1035.. clicmd:: [no] neighbor PEER ttl-security hops NUMBER
c3c5a71f 1036
c1a54c05
QY
1037 This command enforces Generalized TTL Security Mechanism (GTSM), as
1038 specified in RFC 5082. With this command, only neighbors that are the
1039 specified number of hops away will be allowed to become neighbors. This
d1e7591e 1040 command is mutually exclusive with *ebgp-multihop*.
42fc5d26 1041
19f2b5e8
DS
1042.. index:: [no] neighbor PEER capability extended-nexthop
1043.. clicmd:: [no] neighbor PEER capability extended-nexthop
1044
1045 Allow bgp to negotiate the extended-nexthop capability with it's peer.
1046 If you are peering over a v6 LL address then this capability is turned
1047 on automatically. If you are peering over a v6 Global Address then
1048 turning on this command will allow BGP to install v4 routes with
1049 v6 nexthops if you do not have v4 configured on interfaces.
1050
eb938189
DS
1051.. index:: [no] bgp fast-external-failover
1052.. clicmd:: [no] bgp fast-external-failover
1053
1054 This command causes bgp to not take down ebgp peers immediately
1055 when a link flaps. `bgp fast-external-failover` is the default
1056 and will not be displayed as part of a `show run`. The no form
1057 of the command turns off this ability.
1058
bc132029
DS
1059.. index:: [no] bgp default ipv4-unicast
1060.. clicmd:: [no] bgp default ipv4-unicast
1061
1062 This command allows the user to specify that v4 peering is turned
1063 on by default or not. This command defaults to on and is not displayed.
1064 The `no bgp default ipv4-unicast` form of the command is displayed.
1065
8fcedbd2 1066.. _bgp-peer-filtering:
42fc5d26 1067
8fcedbd2
QY
1068Peer Filtering
1069^^^^^^^^^^^^^^
42fc5d26 1070
c1a54c05
QY
1071.. index:: neighbor PEER distribute-list NAME [in|out]
1072.. clicmd:: neighbor PEER distribute-list NAME [in|out]
42fc5d26 1073
c1a54c05
QY
1074 This command specifies a distribute-list for the peer. `direct` is
1075 ``in`` or ``out``.
42fc5d26 1076
c3c5a71f 1077.. index:: neighbor PEER prefix-list NAME [in|out]
29adcd50 1078.. clicmd:: neighbor PEER prefix-list NAME [in|out]
42fc5d26 1079
c1a54c05 1080.. index:: neighbor PEER filter-list NAME [in|out]
29adcd50 1081.. clicmd:: neighbor PEER filter-list NAME [in|out]
42fc5d26 1082
c1a54c05
QY
1083.. index:: neighbor PEER route-map NAME [in|out]
1084.. clicmd:: neighbor PEER route-map NAME [in|out]
42fc5d26 1085
c1a54c05 1086 Apply a route-map on the neighbor. `direct` must be `in` or `out`.
42fc5d26 1087
c3c5a71f 1088.. index:: bgp route-reflector allow-outbound-policy
29adcd50 1089.. clicmd:: bgp route-reflector allow-outbound-policy
42fc5d26 1090
c1a54c05
QY
1091 By default, attribute modification via route-map policy out is not reflected
1092 on reflected routes. This option allows the modifications to be reflected as
1093 well. Once enabled, it affects all reflected routes.
42fc5d26 1094
0efdf0fe 1095.. _bgp-peer-group:
42fc5d26 1096
8fcedbd2
QY
1097Peer Groups
1098^^^^^^^^^^^
42fc5d26 1099
199ad5c4
LB
1100Peer groups are used to help improve scaling by generating the same
1101update information to all members of a peer group. Note that this means
1102that the routes generated by a member of a peer group will be sent back
1103to that originating peer with the originator identifier attribute set to
1104indicated the originating peer. All peers not associated with a
1105specific peer group are treated as belonging to a default peer group,
1106and will share updates.
1107
c1a54c05
QY
1108.. index:: neighbor WORD peer-group
1109.. clicmd:: neighbor WORD peer-group
42fc5d26 1110
c1a54c05 1111 This command defines a new peer group.
42fc5d26 1112
d7b9898c
DA
1113.. index:: neighbor PEER peer-group PGNAME
1114.. clicmd:: neighbor PEER peer-group PGNAME
c3c5a71f 1115
c1a54c05 1116 This command bind specific peer to peer group WORD.
42fc5d26 1117
199ad5c4
LB
1118.. index:: neighbor PEER solo
1119.. clicmd:: neighbor PEER solo
1120
1121 This command is used to indicate that routes advertised by the peer
1122 should not be reflected back to the peer. This command only is only
1123 meaningful when there is a single peer defined in the peer-group.
1124
8fcedbd2
QY
1125Capability Negotiation
1126^^^^^^^^^^^^^^^^^^^^^^
42fc5d26 1127
8fcedbd2
QY
1128.. index:: neighbor PEER strict-capability-match
1129.. clicmd:: neighbor PEER strict-capability-match
42fc5d26 1130
8fcedbd2
QY
1131.. index:: no neighbor PEER strict-capability-match
1132.. clicmd:: no neighbor PEER strict-capability-match
c1a54c05 1133
8fcedbd2
QY
1134 Strictly compares remote capabilities and local capabilities. If
1135 capabilities are different, send Unsupported Capability error then reset
1136 connection.
42fc5d26 1137
8fcedbd2
QY
1138 You may want to disable sending Capability Negotiation OPEN message optional
1139 parameter to the peer when remote peer does not implement Capability
1140 Negotiation. Please use *dont-capability-negotiate* command to disable the
1141 feature.
42fc5d26 1142
8fcedbd2
QY
1143.. index:: neighbor PEER dont-capability-negotiate
1144.. clicmd:: neighbor PEER dont-capability-negotiate
42fc5d26 1145
8fcedbd2
QY
1146.. index:: no neighbor PEER dont-capability-negotiate
1147.. clicmd:: no neighbor PEER dont-capability-negotiate
42fc5d26 1148
8fcedbd2
QY
1149 Suppress sending Capability Negotiation as OPEN message optional parameter
1150 to the peer. This command only affects the peer is configured other than
1151 IPv4 unicast configuration.
42fc5d26 1152
8fcedbd2
QY
1153 When remote peer does not have capability negotiation feature, remote peer
1154 will not send any capabilities at all. In that case, bgp configures the peer
1155 with configured capabilities.
42fc5d26 1156
8fcedbd2
QY
1157 You may prefer locally configured capabilities more than the negotiated
1158 capabilities even though remote peer sends capabilities. If the peer is
1159 configured by *override-capability*, *bgpd* ignores received capabilities
1160 then override negotiated capabilities with configured values.
42fc5d26 1161
8fcedbd2
QY
1162.. index:: neighbor PEER override-capability
1163.. clicmd:: neighbor PEER override-capability
42fc5d26 1164
8fcedbd2
QY
1165.. index:: no neighbor PEER override-capability
1166.. clicmd:: no neighbor PEER override-capability
c1a54c05 1167
8fcedbd2
QY
1168 Override the result of Capability Negotiation with local configuration.
1169 Ignore remote peer's capability value.
42fc5d26 1170
8fcedbd2 1171.. _bgp-as-path-access-lists:
42fc5d26 1172
8fcedbd2
QY
1173AS Path Access Lists
1174--------------------
42fc5d26
QY
1175
1176AS path access list is user defined AS path.
1177
c3c5a71f 1178.. index:: ip as-path access-list WORD permit|deny LINE
29adcd50 1179.. clicmd:: ip as-path access-list WORD permit|deny LINE
42fc5d26 1180
c1a54c05 1181 This command defines a new AS path access list.
42fc5d26 1182
c1a54c05 1183.. index:: no ip as-path access-list WORD
29adcd50 1184.. clicmd:: no ip as-path access-list WORD
42fc5d26 1185
c1a54c05 1186.. index:: no ip as-path access-list WORD permit|deny LINE
29adcd50 1187.. clicmd:: no ip as-path access-list WORD permit|deny LINE
42fc5d26 1188
8fcedbd2 1189.. _bgp-using-as-path-in-route-map:
42fc5d26
QY
1190
1191Using AS Path in Route Map
1192--------------------------
1193
eb1f303d
DS
1194.. index:: [no] match as-path WORD
1195.. clicmd:: [no] match as-path WORD
42fc5d26 1196
eb1f303d
DS
1197 For a given as-path, WORD, match it on the BGP as-path given for the prefix
1198 and if it matches do normal route-map actions. The no form of the command
1199 removes this match from the route-map.
42fc5d26 1200
eb1f303d
DS
1201.. index:: [no] set as-path prepend AS-PATH
1202.. clicmd:: [no] set as-path prepend AS-PATH
42fc5d26 1203
eb1f303d
DS
1204 Prepend the given string of AS numbers to the AS_PATH of the BGP path's NLRI.
1205 The no form of this command removes this set operation from the route-map.
42fc5d26 1206
eb1f303d
DS
1207.. index:: [no] set as-path prepend last-as NUM
1208.. clicmd:: [no] set as-path prepend last-as NUM
c1a54c05
QY
1209
1210 Prepend the existing last AS number (the leftmost ASN) to the AS_PATH.
eb1f303d 1211 The no form of this command removes this set operation from the route-map.
42fc5d26 1212
0efdf0fe 1213.. _bgp-communities-attribute:
42fc5d26 1214
8fcedbd2
QY
1215Communities Attribute
1216---------------------
42fc5d26 1217
8fcedbd2 1218The BGP communities attribute is widely used for implementing policy routing.
c1a54c05
QY
1219Network operators can manipulate BGP communities attribute based on their
1220network policy. BGP communities attribute is defined in :rfc:`1997` and
1221:rfc:`1998`. It is an optional transitive attribute, therefore local policy can
1222travel through different autonomous system.
1223
8fcedbd2
QY
1224The communities attribute is a set of communities values. Each community value
1225is 4 octet long. The following format is used to define the community value.
c1a54c05 1226
8fcedbd2 1227``AS:VAL``
c1a54c05
QY
1228 This format represents 4 octet communities value. ``AS`` is high order 2
1229 octet in digit format. ``VAL`` is low order 2 octet in digit format. This
1230 format is useful to define AS oriented policy value. For example,
1231 ``7675:80`` can be used when AS 7675 wants to pass local policy value 80 to
1232 neighboring peer.
1233
8fcedbd2
QY
1234``internet``
1235 ``internet`` represents well-known communities value 0.
c1a54c05 1236
cae770d3
C
1237``graceful-shutdown``
1238 ``graceful-shutdown`` represents well-known communities value
1239 ``GRACEFUL_SHUTDOWN`` ``0xFFFF0000`` ``65535:0``. :rfc:`8326` implements
1240 the purpose Graceful BGP Session Shutdown to reduce the amount of
56f0bea7 1241 lost traffic when taking BGP sessions down for maintenance. The use
cae770d3
C
1242 of the community needs to be supported from your peers side to
1243 actually have any effect.
1244
1245``accept-own``
1246 ``accept-own`` represents well-known communities value ``ACCEPT_OWN``
1247 ``0xFFFF0001`` ``65535:1``. :rfc:`7611` implements a way to signal
1248 to a router to accept routes with a local nexthop address. This
1249 can be the case when doing policing and having traffic having a
1250 nexthop located in another VRF but still local interface to the
1251 router. It is recommended to read the RFC for full details.
1252
1253``route-filter-translated-v4``
1254 ``route-filter-translated-v4`` represents well-known communities value
1255 ``ROUTE_FILTER_TRANSLATED_v4`` ``0xFFFF0002`` ``65535:2``.
1256
1257``route-filter-v4``
1258 ``route-filter-v4`` represents well-known communities value
1259 ``ROUTE_FILTER_v4`` ``0xFFFF0003`` ``65535:3``.
1260
1261``route-filter-translated-v6``
1262 ``route-filter-translated-v6`` represents well-known communities value
1263 ``ROUTE_FILTER_TRANSLATED_v6`` ``0xFFFF0004`` ``65535:4``.
1264
1265``route-filter-v6``
1266 ``route-filter-v6`` represents well-known communities value
1267 ``ROUTE_FILTER_v6`` ``0xFFFF0005`` ``65535:5``.
1268
1269``llgr-stale``
1270 ``llgr-stale`` represents well-known communities value ``LLGR_STALE``
1271 ``0xFFFF0006`` ``65535:6``.
56f0bea7 1272 Assigned and intended only for use with routers supporting the
cae770d3 1273 Long-lived Graceful Restart Capability as described in
49606d58 1274 [Draft-IETF-uttaro-idr-bgp-persistence]_.
56f0bea7 1275 Routers receiving routes with this community may (depending on
cae770d3
C
1276 implementation) choose allow to reject or modify routes on the
1277 presence or absence of this community.
1278
1279``no-llgr``
1280 ``no-llgr`` represents well-known communities value ``NO_LLGR``
1281 ``0xFFFF0007`` ``65535:7``.
56f0bea7 1282 Assigned and intended only for use with routers supporting the
cae770d3 1283 Long-lived Graceful Restart Capability as described in
49606d58 1284 [Draft-IETF-uttaro-idr-bgp-persistence]_.
56f0bea7 1285 Routers receiving routes with this community may (depending on
cae770d3
C
1286 implementation) choose allow to reject or modify routes on the
1287 presence or absence of this community.
1288
1289``accept-own-nexthop``
1290 ``accept-own-nexthop`` represents well-known communities value
1291 ``accept-own-nexthop`` ``0xFFFF0008`` ``65535:8``.
49606d58 1292 [Draft-IETF-agrewal-idr-accept-own-nexthop]_ describes
cae770d3
C
1293 how to tag and label VPN routes to be able to send traffic between VRFs
1294 via an internal layer 2 domain on the same PE device. Refer to
49606d58 1295 [Draft-IETF-agrewal-idr-accept-own-nexthop]_ for full details.
cae770d3
C
1296
1297``blackhole``
1298 ``blackhole`` represents well-known communities value ``BLACKHOLE``
1299 ``0xFFFF029A`` ``65535:666``. :rfc:`7999` documents sending prefixes to
1300 EBGP peers and upstream for the purpose of blackholing traffic.
1301 Prefixes tagged with the this community should normally not be
1302 re-advertised from neighbors of the originating network. It is
1303 recommended upon receiving prefixes tagged with this community to
1304 add ``NO_EXPORT`` and ``NO_ADVERTISE``.
1305
8fcedbd2 1306``no-export``
c1a54c05
QY
1307 ``no-export`` represents well-known communities value ``NO_EXPORT``
1308 ``0xFFFFFF01``. All routes carry this value must not be advertised to
1309 outside a BGP confederation boundary. If neighboring BGP peer is part of BGP
1310 confederation, the peer is considered as inside a BGP confederation
1311 boundary, so the route will be announced to the peer.
1312
8fcedbd2 1313``no-advertise``
c1a54c05
QY
1314 ``no-advertise`` represents well-known communities value ``NO_ADVERTISE``
1315 ``0xFFFFFF02``. All routes carry this value must not be advertise to other
1316 BGP peers.
1317
8fcedbd2 1318``local-AS``
c1a54c05
QY
1319 ``local-AS`` represents well-known communities value ``NO_EXPORT_SUBCONFED``
1320 ``0xFFFFFF03``. All routes carry this value must not be advertised to
1321 external BGP peers. Even if the neighboring router is part of confederation,
1322 it is considered as external BGP peer, so the route will not be announced to
1323 the peer.
1324
cae770d3
C
1325``no-peer``
1326 ``no-peer`` represents well-known communities value ``NOPEER``
1327 ``0xFFFFFF04`` ``65535:65284``. :rfc:`3765` is used to communicate to
1328 another network how the originating network want the prefix propagated.
1329
aa9eafa4
QY
1330When the communities attribute is received duplicate community values in the
1331attribute are ignored and value is sorted in numerical order.
42fc5d26 1332
49606d58
PG
1333.. [Draft-IETF-uttaro-idr-bgp-persistence] <https://tools.ietf.org/id/draft-uttaro-idr-bgp-persistence-04.txt>
1334.. [Draft-IETF-agrewal-idr-accept-own-nexthop] <https://tools.ietf.org/id/draft-agrewal-idr-accept-own-nexthop-00.txt>
1335
0efdf0fe 1336.. _bgp-community-lists:
42fc5d26 1337
8fcedbd2
QY
1338Community Lists
1339^^^^^^^^^^^^^^^
aa9eafa4
QY
1340Community lists are user defined lists of community attribute values. These
1341lists can be used for matching or manipulating the communities attribute in
1342UPDATE messages.
42fc5d26 1343
aa9eafa4 1344There are two types of community list:
c1a54c05 1345
aa9eafa4 1346standard
56f0bea7 1347 This type accepts an explicit value for the attribute.
aa9eafa4
QY
1348
1349expanded
1350 This type accepts a regular expression. Because the regex must be
1351 interpreted on each use expanded community lists are slower than standard
1352 lists.
42fc5d26 1353
c3c5a71f 1354.. index:: ip community-list standard NAME permit|deny COMMUNITY
29adcd50 1355.. clicmd:: ip community-list standard NAME permit|deny COMMUNITY
42fc5d26 1356
aa9eafa4
QY
1357 This command defines a new standard community list. ``COMMUNITY`` is
1358 communities value. The ``COMMUNITY`` is compiled into community structure.
1359 We can define multiple community list under same name. In that case match
1360 will happen user defined order. Once the community list matches to
1361 communities attribute in BGP updates it return permit or deny by the
1362 community list definition. When there is no matched entry, deny will be
1363 returned. When ``COMMUNITY`` is empty it matches to any routes.
42fc5d26 1364
aa9eafa4
QY
1365.. index:: ip community-list expanded NAME permit|deny COMMUNITY
1366.. clicmd:: ip community-list expanded NAME permit|deny COMMUNITY
42fc5d26 1367
aa9eafa4
QY
1368 This command defines a new expanded community list. ``COMMUNITY`` is a
1369 string expression of communities attribute. ``COMMUNITY`` can be a regular
1370 expression (:ref:`bgp-regular-expressions`) to match the communities
47f47873
PG
1371 attribute in BGP updates. The expanded community is only used to filter,
1372 not `set` actions.
42fc5d26 1373
aa9eafa4
QY
1374.. deprecated:: 5.0
1375 It is recommended to use the more explicit versions of this command.
42fc5d26 1376
aa9eafa4
QY
1377.. index:: ip community-list NAME permit|deny COMMUNITY
1378.. clicmd:: ip community-list NAME permit|deny COMMUNITY
1379
1380 When the community list type is not specified, the community list type is
1381 automatically detected. If ``COMMUNITY`` can be compiled into communities
1382 attribute, the community list is defined as a standard community list.
1383 Otherwise it is defined as an expanded community list. This feature is left
1384 for backward compatibility. Use of this feature is not recommended.
42fc5d26 1385
42fc5d26 1386
aa9eafa4
QY
1387.. index:: no ip community-list [standard|expanded] NAME
1388.. clicmd:: no ip community-list [standard|expanded] NAME
42fc5d26 1389
aa9eafa4
QY
1390 Deletes the community list specified by ``NAME``. All community lists share
1391 the same namespace, so it's not necessary to specify ``standard`` or
1392 ``expanded``; these modifiers are purely aesthetic.
42fc5d26 1393
aa9eafa4
QY
1394.. index:: show ip community-list [NAME]
1395.. clicmd:: show ip community-list [NAME]
42fc5d26 1396
aa9eafa4
QY
1397 Displays community list information. When ``NAME`` is specified the
1398 specified community list's information is shown.
c3c5a71f 1399
c1a54c05 1400 ::
76bd1499 1401
c1a54c05
QY
1402 # show ip community-list
1403 Named Community standard list CLIST
1404 permit 7675:80 7675:100 no-export
1405 deny internet
1406 Named Community expanded list EXPAND
1407 permit :
76bd1499 1408
c1a54c05
QY
1409 # show ip community-list CLIST
1410 Named Community standard list CLIST
1411 permit 7675:80 7675:100 no-export
1412 deny internet
42fc5d26 1413
42fc5d26 1414
8fcedbd2 1415.. _bgp-numbered-community-lists:
42fc5d26 1416
8fcedbd2
QY
1417Numbered Community Lists
1418^^^^^^^^^^^^^^^^^^^^^^^^
42fc5d26
QY
1419
1420When number is used for BGP community list name, the number has
c3c5a71f
QY
1421special meanings. Community list number in the range from 1 and 99 is
1422standard community list. Community list number in the range from 100
1423to 199 is expanded community list. These community lists are called
1424as numbered community lists. On the other hand normal community lists
42fc5d26
QY
1425is called as named community lists.
1426
29adcd50 1427.. index:: ip community-list (1-99) permit|deny COMMUNITY
29adcd50 1428.. clicmd:: ip community-list (1-99) permit|deny COMMUNITY
42fc5d26 1429
aa9eafa4
QY
1430 This command defines a new community list. The argument to (1-99) defines
1431 the list identifier.
42fc5d26 1432
c1a54c05 1433.. index:: ip community-list (100-199) permit|deny COMMUNITY
29adcd50 1434.. clicmd:: ip community-list (100-199) permit|deny COMMUNITY
42fc5d26 1435
aa9eafa4
QY
1436 This command defines a new expanded community list. The argument to
1437 (100-199) defines the list identifier.
42fc5d26 1438
8fcedbd2 1439.. _bgp-using-communities-in-route-map:
42fc5d26 1440
8fcedbd2
QY
1441Using Communities in Route Maps
1442^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42fc5d26 1443
aa9eafa4
QY
1444In :ref:`route-map` we can match on or set the BGP communities attribute. Using
1445this feature network operator can implement their network policy based on BGP
1446communities attribute.
42fc5d26 1447
aa9eafa4 1448The ollowing commands can be used in route maps:
42fc5d26 1449
aa9eafa4
QY
1450.. index:: match community WORD exact-match [exact-match]
1451.. clicmd:: match community WORD exact-match [exact-match]
42fc5d26 1452
c1a54c05
QY
1453 This command perform match to BGP updates using community list WORD. When
1454 the one of BGP communities value match to the one of communities value in
d1e7591e 1455 community list, it is match. When `exact-match` keyword is specified, match
c1a54c05
QY
1456 happen only when BGP updates have completely same communities value
1457 specified in the community list.
42fc5d26 1458
aa9eafa4
QY
1459.. index:: set community <none|COMMUNITY> additive
1460.. clicmd:: set community <none|COMMUNITY> additive
42fc5d26 1461
aa9eafa4
QY
1462 This command sets the community value in BGP updates. If the attribute is
1463 already configured, the newly provided value replaces the old one unless the
1464 ``additive`` keyword is specified, in which case the new value is appended
1465 to the existing value.
42fc5d26 1466
aa9eafa4
QY
1467 If ``none`` is specified as the community value, the communities attribute
1468 is not sent.
42fc5d26 1469
47f47873
PG
1470 It is not possible to set an expanded community list.
1471
c1a54c05 1472.. index:: set comm-list WORD delete
29adcd50 1473.. clicmd:: set comm-list WORD delete
c1a54c05 1474
aa9eafa4
QY
1475 This command remove communities value from BGP communities attribute. The
1476 ``word`` is community list name. When BGP route's communities value matches
1477 to the community list ``word``, the communities value is removed. When all
1478 of communities value is removed eventually, the BGP update's communities
1479 attribute is completely removed.
42fc5d26 1480
8fcedbd2 1481.. _bgp-communities-example:
c1a54c05 1482
8fcedbd2
QY
1483Example Configuration
1484^^^^^^^^^^^^^^^^^^^^^
9eb95b3b 1485
8fcedbd2
QY
1486The following configuration is exemplary of the most typical usage of BGP
1487communities attribute. In the example, AS 7675 provides an upstream Internet
1488connection to AS 100. When the following configuration exists in AS 7675, the
1489network operator of AS 100 can set local preference in AS 7675 network by
1490setting BGP communities attribute to the updates.
9eb95b3b
QY
1491
1492.. code-block:: frr
c1a54c05
QY
1493
1494 router bgp 7675
1495 neighbor 192.168.0.1 remote-as 100
1496 address-family ipv4 unicast
1497 neighbor 192.168.0.1 route-map RMAP in
1498 exit-address-family
1499 !
1500 ip community-list 70 permit 7675:70
1501 ip community-list 70 deny
1502 ip community-list 80 permit 7675:80
1503 ip community-list 80 deny
1504 ip community-list 90 permit 7675:90
1505 ip community-list 90 deny
1506 !
1507 route-map RMAP permit 10
1508 match community 70
1509 set local-preference 70
1510 !
1511 route-map RMAP permit 20
1512 match community 80
1513 set local-preference 80
1514 !
1515 route-map RMAP permit 30
1516 match community 90
1517 set local-preference 90
c3c5a71f 1518
42fc5d26 1519
8fcedbd2
QY
1520The following configuration announces ``10.0.0.0/8`` from AS 100 to AS 7675.
1521The route has communities value ``7675:80`` so when above configuration exists
1522in AS 7675, the announced routes' local preference value will be set to 80.
9eb95b3b
QY
1523
1524.. code-block:: frr
c1a54c05
QY
1525
1526 router bgp 100
1527 network 10.0.0.0/8
1528 neighbor 192.168.0.2 remote-as 7675
1529 address-family ipv4 unicast
1530 neighbor 192.168.0.2 route-map RMAP out
1531 exit-address-family
1532 !
1533 ip prefix-list PLIST permit 10.0.0.0/8
1534 !
1535 route-map RMAP permit 10
1536 match ip address prefix-list PLIST
1537 set community 7675:80
c3c5a71f 1538
42fc5d26 1539
8fcedbd2
QY
1540The following configuration is an example of BGP route filtering using
1541communities attribute. This configuration only permit BGP routes which has BGP
1542communities value ``0:80`` or ``0:90``. The network operator can set special
1543internal communities value at BGP border router, then limit the BGP route
1544announcements into the internal network.
9eb95b3b
QY
1545
1546.. code-block:: frr
42fc5d26 1547
c1a54c05
QY
1548 router bgp 7675
1549 neighbor 192.168.0.1 remote-as 100
1550 address-family ipv4 unicast
1551 neighbor 192.168.0.1 route-map RMAP in
1552 exit-address-family
1553 !
1554 ip community-list 1 permit 0:80 0:90
1555 !
1556 route-map RMAP permit in
1557 match community 1
c3c5a71f 1558
42fc5d26 1559
8fcedbd2
QY
1560The following example filters BGP routes which have a community value of
1561``1:1``. When there is no match community-list returns ``deny``. To avoid
1562filtering all routes, a ``permit`` line is set at the end of the
1563community-list.
9eb95b3b
QY
1564
1565.. code-block:: frr
42fc5d26 1566
c1a54c05
QY
1567 router bgp 7675
1568 neighbor 192.168.0.1 remote-as 100
1569 address-family ipv4 unicast
1570 neighbor 192.168.0.1 route-map RMAP in
1571 exit-address-family
1572 !
1573 ip community-list standard FILTER deny 1:1
1574 ip community-list standard FILTER permit
1575 !
1576 route-map RMAP permit 10
1577 match community FILTER
c3c5a71f 1578
42fc5d26 1579
8fcedbd2
QY
1580The communities value keyword ``internet`` has special meanings in standard
1581community lists. In the below example ``internet`` matches all BGP routes even
1582if the route does not have communities attribute at all. So community list
1583``INTERNET`` is the same as ``FILTER`` in the previous example.
9eb95b3b
QY
1584
1585.. code-block:: frr
42fc5d26 1586
c1a54c05
QY
1587 ip community-list standard INTERNET deny 1:1
1588 ip community-list standard INTERNET permit internet
c3c5a71f 1589
42fc5d26 1590
8fcedbd2
QY
1591The following configuration is an example of communities value deletion. With
1592this configuration the community values ``100:1`` and ``100:2`` are removed
1593from BGP updates. For communities value deletion, only ``permit``
1594community-list is used. ``deny`` community-list is ignored.
9eb95b3b
QY
1595
1596.. code-block:: frr
42fc5d26 1597
c1a54c05
QY
1598 router bgp 7675
1599 neighbor 192.168.0.1 remote-as 100
1600 address-family ipv4 unicast
1601 neighbor 192.168.0.1 route-map RMAP in
1602 exit-address-family
1603 !
1604 ip community-list standard DEL permit 100:1 100:2
1605 !
1606 route-map RMAP permit 10
1607 set comm-list DEL delete
c3c5a71f 1608
42fc5d26 1609
0efdf0fe 1610.. _bgp-extended-communities-attribute:
42fc5d26 1611
8fcedbd2
QY
1612Extended Communities Attribute
1613^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42fc5d26 1614
c1a54c05
QY
1615BGP extended communities attribute is introduced with MPLS VPN/BGP technology.
1616MPLS VPN/BGP expands capability of network infrastructure to provide VPN
1617functionality. At the same time it requires a new framework for policy routing.
1618With BGP Extended Communities Attribute we can use Route Target or Site of
1619Origin for implementing network policy for MPLS VPN/BGP.
42fc5d26 1620
c1a54c05
QY
1621BGP Extended Communities Attribute is similar to BGP Communities Attribute. It
1622is an optional transitive attribute. BGP Extended Communities Attribute can
1623carry multiple Extended Community value. Each Extended Community value is
1624eight octet length.
42fc5d26 1625
c1a54c05
QY
1626BGP Extended Communities Attribute provides an extended range compared with BGP
1627Communities Attribute. Adding to that there is a type field in each value to
1628provides community space structure.
42fc5d26 1629
c1a54c05
QY
1630There are two format to define Extended Community value. One is AS based format
1631the other is IP address based format.
42fc5d26 1632
8fcedbd2
QY
1633``AS:VAL``
1634 This is a format to define AS based Extended Community value. ``AS`` part
1635 is 2 octets Global Administrator subfield in Extended Community value.
1636 ``VAL`` part is 4 octets Local Administrator subfield. ``7675:100``
1637 represents AS 7675 policy value 100.
42fc5d26 1638
8fcedbd2 1639``IP-Address:VAL``
c1a54c05 1640 This is a format to define IP address based Extended Community value.
8fcedbd2
QY
1641 ``IP-Address`` part is 4 octets Global Administrator subfield. ``VAL`` part
1642 is 2 octets Local Administrator subfield.
42fc5d26 1643
0efdf0fe 1644.. _bgp-extended-community-lists:
42fc5d26 1645
8fcedbd2
QY
1646Extended Community Lists
1647^^^^^^^^^^^^^^^^^^^^^^^^
42fc5d26 1648
c3c5a71f 1649.. index:: ip extcommunity-list standard NAME permit|deny EXTCOMMUNITY
29adcd50 1650.. clicmd:: ip extcommunity-list standard NAME permit|deny EXTCOMMUNITY
42fc5d26 1651
4da7fda3
QY
1652 This command defines a new standard extcommunity-list. `extcommunity` is
1653 extended communities value. The `extcommunity` is compiled into extended
1654 community structure. We can define multiple extcommunity-list under same
1655 name. In that case match will happen user defined order. Once the
1656 extcommunity-list matches to extended communities attribute in BGP updates
1657 it return permit or deny based upon the extcommunity-list definition. When
1658 there is no matched entry, deny will be returned. When `extcommunity` is
1659 empty it matches to any routes.
42fc5d26 1660
c1a54c05 1661.. index:: ip extcommunity-list expanded NAME permit|deny LINE
29adcd50 1662.. clicmd:: ip extcommunity-list expanded NAME permit|deny LINE
42fc5d26 1663
4da7fda3
QY
1664 This command defines a new expanded extcommunity-list. `line` is a string
1665 expression of extended communities attribute. `line` can be a regular
1666 expression (:ref:`bgp-regular-expressions`) to match an extended communities
1667 attribute in BGP updates.
42fc5d26 1668
c1a54c05 1669.. index:: no ip extcommunity-list NAME
29adcd50 1670.. clicmd:: no ip extcommunity-list NAME
42fc5d26 1671
c1a54c05 1672.. index:: no ip extcommunity-list standard NAME
29adcd50 1673.. clicmd:: no ip extcommunity-list standard NAME
42fc5d26 1674
c1a54c05 1675.. index:: no ip extcommunity-list expanded NAME
29adcd50 1676.. clicmd:: no ip extcommunity-list expanded NAME
42fc5d26 1677
4da7fda3
QY
1678 These commands delete extended community lists specified by `name`. All of
1679 extended community lists shares a single name space. So extended community
d1e7591e 1680 lists can be removed simply specifying the name.
42fc5d26 1681
c1a54c05 1682.. index:: show ip extcommunity-list
29adcd50 1683.. clicmd:: show ip extcommunity-list
42fc5d26 1684
c1a54c05 1685.. index:: show ip extcommunity-list NAME
29adcd50 1686.. clicmd:: show ip extcommunity-list NAME
c1a54c05 1687
4da7fda3 1688 This command displays current extcommunity-list information. When `name` is
9eb95b3b 1689 specified the community list's information is shown.::
42fc5d26 1690
9eb95b3b 1691 # show ip extcommunity-list
c3c5a71f 1692
42fc5d26 1693
0efdf0fe 1694.. _bgp-extended-communities-in-route-map:
42fc5d26
QY
1695
1696BGP Extended Communities in Route Map
8fcedbd2 1697"""""""""""""""""""""""""""""""""""""
42fc5d26 1698
c3c5a71f 1699.. index:: match extcommunity WORD
29adcd50 1700.. clicmd:: match extcommunity WORD
42fc5d26 1701
c1a54c05 1702.. index:: set extcommunity rt EXTCOMMUNITY
29adcd50 1703.. clicmd:: set extcommunity rt EXTCOMMUNITY
42fc5d26 1704
c1a54c05 1705 This command set Route Target value.
42fc5d26 1706
c1a54c05 1707.. index:: set extcommunity soo EXTCOMMUNITY
29adcd50 1708.. clicmd:: set extcommunity soo EXTCOMMUNITY
c1a54c05
QY
1709
1710 This command set Site of Origin value.
42fc5d26 1711
47f47873
PG
1712
1713Note that the extended expanded community is only used for `match` rule, not for
1714`set` actions.
1715
0efdf0fe 1716.. _bgp-large-communities-attribute:
42fc5d26 1717
8fcedbd2
QY
1718Large Communities Attribute
1719^^^^^^^^^^^^^^^^^^^^^^^^^^^
42fc5d26
QY
1720
1721The BGP Large Communities attribute was introduced in Feb 2017 with
c1a54c05 1722:rfc:`8092`.
42fc5d26 1723
8fcedbd2
QY
1724The BGP Large Communities Attribute is similar to the BGP Communities Attribute
1725except that it has 3 components instead of two and each of which are 4 octets
1726in length. Large Communities bring additional functionality and convenience
1727over traditional communities, specifically the fact that the ``GLOBAL`` part
1728below is now 4 octets wide allowing seamless use in networks using 4-byte ASNs.
1729
1730``GLOBAL:LOCAL1:LOCAL2``
1731 This is the format to define Large Community values. Referencing :rfc:`8195`
1732 the values are commonly referred to as follows:
1733
1734 - The ``GLOBAL`` part is a 4 octet Global Administrator field, commonly used
1735 as the operators AS number.
1736 - The ``LOCAL1`` part is a 4 octet Local Data Part 1 subfield referred to as
1737 a function.
1738 - The ``LOCAL2`` part is a 4 octet Local Data Part 2 field and referred to
1739 as the parameter subfield.
1740
1741 As an example, ``65551:1:10`` represents AS 65551 function 1 and parameter
1742 10. The referenced RFC above gives some guidelines on recommended usage.
42fc5d26 1743
0efdf0fe 1744.. _bgp-large-community-lists:
42fc5d26 1745
8fcedbd2
QY
1746Large Community Lists
1747"""""""""""""""""""""
42fc5d26
QY
1748
1749Two types of large community lists are supported, namely `standard` and
1750`expanded`.
1751
c3c5a71f 1752.. index:: ip large-community-list standard NAME permit|deny LARGE-COMMUNITY
29adcd50 1753.. clicmd:: ip large-community-list standard NAME permit|deny LARGE-COMMUNITY
42fc5d26 1754
4da7fda3
QY
1755 This command defines a new standard large-community-list. `large-community`
1756 is the Large Community value. We can add multiple large communities under
1757 same name. In that case the match will happen in the user defined order.
1758 Once the large-community-list matches the Large Communities attribute in BGP
1759 updates it will return permit or deny based upon the large-community-list
1760 definition. When there is no matched entry, a deny will be returned. When
1761 `large-community` is empty it matches any routes.
42fc5d26 1762
c1a54c05 1763.. index:: ip large-community-list expanded NAME permit|deny LINE
29adcd50 1764.. clicmd:: ip large-community-list expanded NAME permit|deny LINE
42fc5d26 1765
4da7fda3
QY
1766 This command defines a new expanded large-community-list. Where `line` is a
1767 string matching expression, it will be compared to the entire Large
1768 Communities attribute as a string, with each large-community in order from
1769 lowest to highest. `line` can also be a regular expression which matches
1770 this Large Community attribute.
42fc5d26 1771
c1a54c05 1772.. index:: no ip large-community-list NAME
29adcd50 1773.. clicmd:: no ip large-community-list NAME
42fc5d26 1774
c1a54c05 1775.. index:: no ip large-community-list standard NAME
29adcd50 1776.. clicmd:: no ip large-community-list standard NAME
42fc5d26 1777
c1a54c05 1778.. index:: no ip large-community-list expanded NAME
29adcd50 1779.. clicmd:: no ip large-community-list expanded NAME
42fc5d26 1780
4da7fda3
QY
1781 These commands delete Large Community lists specified by `name`. All Large
1782 Community lists share a single namespace. This means Large Community lists
1783 can be removed by simply specifying the name.
42fc5d26 1784
c1a54c05 1785.. index:: show ip large-community-list
29adcd50 1786.. clicmd:: show ip large-community-list
42fc5d26 1787
c1a54c05 1788.. index:: show ip large-community-list NAME
29adcd50 1789.. clicmd:: show ip large-community-list NAME
42fc5d26 1790
c1a54c05
QY
1791 This command display current large-community-list information. When
1792 `name` is specified the community list information is shown.
42fc5d26 1793
c1a54c05 1794.. index:: show ip bgp large-community-info
29adcd50 1795.. clicmd:: show ip bgp large-community-info
c1a54c05
QY
1796
1797 This command displays the current large communities in use.
42fc5d26 1798
0efdf0fe 1799.. _bgp-large-communities-in-route-map:
42fc5d26 1800
8fcedbd2
QY
1801Large Communities in Route Map
1802""""""""""""""""""""""""""""""
42fc5d26 1803
03ff9a14 1804.. index:: match large-community LINE [exact-match]
1805.. clicmd:: match large-community LINE [exact-match]
42fc5d26 1806
4da7fda3
QY
1807 Where `line` can be a simple string to match, or a regular expression. It
1808 is very important to note that this match occurs on the entire
c1a54c05 1809 large-community string as a whole, where each large-community is ordered
03ff9a14 1810 from lowest to highest. When `exact-match` keyword is specified, match
1811 happen only when BGP updates have completely same large communities value
1812 specified in the large community list.
42fc5d26 1813
c1a54c05 1814.. index:: set large-community LARGE-COMMUNITY
29adcd50 1815.. clicmd:: set large-community LARGE-COMMUNITY
42fc5d26 1816
c1a54c05 1817.. index:: set large-community LARGE-COMMUNITY LARGE-COMMUNITY
29adcd50 1818.. clicmd:: set large-community LARGE-COMMUNITY LARGE-COMMUNITY
42fc5d26 1819
c1a54c05 1820.. index:: set large-community LARGE-COMMUNITY additive
29adcd50 1821.. clicmd:: set large-community LARGE-COMMUNITY additive
c1a54c05
QY
1822
1823 These commands are used for setting large-community values. The first
1824 command will overwrite any large-communities currently present.
1825 The second specifies two large-communities, which overwrites the current
1826 large-community list. The third will add a large-community value without
1827 overwriting other values. Multiple large-community values can be specified.
42fc5d26 1828
47f47873
PG
1829Note that the large expanded community is only used for `match` rule, not for
1830`set` actions.
b572f826 1831
c8a5e5e1 1832.. _bgp-l3vpn-vrfs:
b572f826 1833
c8a5e5e1
QY
1834L3VPN VRFs
1835----------
b572f826 1836
c8a5e5e1
QY
1837*bgpd* supports :abbr:`L3VPN (Layer 3 Virtual Private Networks)` :abbr:`VRFs
1838(Virtual Routing and Forwarding)` for IPv4 :rfc:`4364` and IPv6 :rfc:`4659`.
1839L3VPN routes, and their associated VRF MPLS labels, can be distributed to VPN
1840SAFI neighbors in the *default*, i.e., non VRF, BGP instance. VRF MPLS labels
1841are reached using *core* MPLS labels which are distributed using LDP or BGP
1842labeled unicast. *bgpd* also supports inter-VRF route leaking.
b572f826 1843
b572f826 1844
c8a5e5e1 1845.. _bgp-vrf-route-leaking:
8fcedbd2
QY
1846
1847VRF Route Leaking
c8a5e5e1 1848-----------------
8fcedbd2
QY
1849
1850BGP routes may be leaked (i.e. copied) between a unicast VRF RIB and the VPN
f90115c5
LB
1851SAFI RIB of the default VRF for use in MPLS-based L3VPNs. Unicast routes may
1852also be leaked between any VRFs (including the unicast RIB of the default BGP
1853instanced). A shortcut syntax is also available for specifying leaking from one
1854VRF to another VRF using the default instance's VPN RIB as the intemediary. A
1855common application of the VRF-VRF feature is to connect a customer's private
8fcedbd2
QY
1856routing domain to a provider's VPN service. Leaking is configured from the
1857point of view of an individual VRF: ``import`` refers to routes leaked from VPN
1858to a unicast VRF, whereas ``export`` refers to routes leaked from a unicast VRF
1859to VPN.
1860
1861Required parameters
c8a5e5e1 1862^^^^^^^^^^^^^^^^^^^
b572f826 1863
4da7fda3
QY
1864Routes exported from a unicast VRF to the VPN RIB must be augmented by two
1865parameters:
1866
1867- an :abbr:`RD (Route Distinguisher)`
1868- an :abbr:`RTLIST (Route-target List)`
1869
1870Configuration for these exported routes must, at a minimum, specify these two
1871parameters.
1872
1873Routes imported from the VPN RIB to a unicast VRF are selected according to
1874their RTLISTs. Routes whose RTLIST contains at least one route-target in
1875common with the configured import RTLIST are leaked. Configuration for these
1876imported routes must specify an RTLIST to be matched.
1877
1878The RD, which carries no semantic value, is intended to make the route unique
1879in the VPN RIB among all routes of its prefix that originate from all the
1880customers and sites that are attached to the provider's VPN service.
1881Accordingly, each site of each customer is typically assigned an RD that is
1882unique across the entire provider network.
1883
1884The RTLIST is a set of route-target extended community values whose purpose is
1885to specify route-leaking policy. Typically, a customer is assigned a single
1886route-target value for import and export to be used at all customer sites. This
1887configuration specifies a simple topology wherein a customer has a single
1888routing domain which is shared across all its sites. More complex routing
1889topologies are possible through use of additional route-targets to augment the
1890leaking of sets of routes in various ways.
b572f826 1891
e967a1d0
DS
1892When using the shortcut syntax for vrf-to-vrf leaking, the RD and RT are
1893auto-derived.
fb3d9f3e 1894
8fcedbd2 1895General configuration
c8a5e5e1 1896^^^^^^^^^^^^^^^^^^^^^
b572f826 1897
f90115c5 1898Configuration of route leaking between a unicast VRF RIB and the VPN SAFI RIB
4da7fda3
QY
1899of the default VRF is accomplished via commands in the context of a VRF
1900address-family:
b572f826
PZ
1901
1902.. index:: rd vpn export AS:NN|IP:nn
1903.. clicmd:: rd vpn export AS:NN|IP:nn
1904
4da7fda3
QY
1905 Specifies the route distinguisher to be added to a route exported from the
1906 current unicast VRF to VPN.
b572f826
PZ
1907
1908.. index:: no rd vpn export [AS:NN|IP:nn]
1909.. clicmd:: no rd vpn export [AS:NN|IP:nn]
1910
1911 Deletes any previously-configured export route distinguisher.
1912
1913.. index:: rt vpn import|export|both RTLIST...
1914.. clicmd:: rt vpn import|export|both RTLIST...
1915
4da7fda3
QY
1916 Specifies the route-target list to be attached to a route (export) or the
1917 route-target list to match against (import) when exporting/importing between
1918 the current unicast VRF and VPN.
b572f826 1919
4da7fda3
QY
1920 The RTLIST is a space-separated list of route-targets, which are BGP
1921 extended community values as described in
b572f826
PZ
1922 :ref:`bgp-extended-communities-attribute`.
1923
1924.. index:: no rt vpn import|export|both [RTLIST...]
1925.. clicmd:: no rt vpn import|export|both [RTLIST...]
1926
1927 Deletes any previously-configured import or export route-target list.
1928
e70e9f8e
PZ
1929.. index:: label vpn export (0..1048575)|auto
1930.. clicmd:: label vpn export (0..1048575)|auto
b572f826 1931
8a2124f7 1932 Enables an MPLS label to be attached to a route exported from the current
1933 unicast VRF to VPN. If the value specified is ``auto``, the label value is
1934 automatically assigned from a pool maintained by the Zebra daemon. If Zebra
1935 is not running, or if this command is not configured, automatic label
1936 assignment will not complete, which will block corresponding route export.
b572f826 1937
e70e9f8e
PZ
1938.. index:: no label vpn export [(0..1048575)|auto]
1939.. clicmd:: no label vpn export [(0..1048575)|auto]
b572f826
PZ
1940
1941 Deletes any previously-configured export label.
1942
1943.. index:: nexthop vpn export A.B.C.D|X:X::X:X
1944.. clicmd:: nexthop vpn export A.B.C.D|X:X::X:X
1945
4da7fda3
QY
1946 Specifies an optional nexthop value to be assigned to a route exported from
1947 the current unicast VRF to VPN. If left unspecified, the nexthop will be set
1948 to 0.0.0.0 or 0:0::0:0 (self).
b572f826
PZ
1949
1950.. index:: no nexthop vpn export [A.B.C.D|X:X::X:X]
1951.. clicmd:: no nexthop vpn export [A.B.C.D|X:X::X:X]
1952
1953 Deletes any previously-configured export nexthop.
1954
1955.. index:: route-map vpn import|export MAP
1956.. clicmd:: route-map vpn import|export MAP
1957
4da7fda3 1958 Specifies an optional route-map to be applied to routes imported or exported
d1e7591e 1959 between the current unicast VRF and VPN.
b572f826
PZ
1960
1961.. index:: no route-map vpn import|export [MAP]
1962.. clicmd:: no route-map vpn import|export [MAP]
1963
1964 Deletes any previously-configured import or export route-map.
1965
1966.. index:: import|export vpn
1967.. clicmd:: import|export vpn
1968
d1e7591e 1969 Enables import or export of routes between the current unicast VRF and VPN.
b572f826
PZ
1970
1971.. index:: no import|export vpn
1972.. clicmd:: no import|export vpn
1973
d1e7591e 1974 Disables import or export of routes between the current unicast VRF and VPN.
b572f826 1975
fb3d9f3e
DS
1976.. index:: import vrf VRFNAME
1977.. clicmd:: import vrf VRFNAME
1978
e967a1d0
DS
1979 Shortcut syntax for specifying automatic leaking from vrf VRFNAME to
1980 the current VRF using the VPN RIB as intermediary. The RD and RT
1981 are auto derived and should not be specified explicitly for either the
1982 source or destination VRF's.
1983
1984 This shortcut syntax mode is not compatible with the explicit
1985 `import vpn` and `export vpn` statements for the two VRF's involved.
1986 The CLI will disallow attempts to configure incompatible leaking
1987 modes.
fb3d9f3e
DS
1988
1989.. index:: no import vrf VRFNAME
1990.. clicmd:: no import vrf VRFNAME
1991
e967a1d0
DS
1992 Disables automatic leaking from vrf VRFNAME to the current VRF using
1993 the VPN RIB as intermediary.
b572f826 1994
42fc5d26 1995
8fcedbd2 1996.. _bgp-cisco-compatibility:
42fc5d26 1997
8fcedbd2
QY
1998Cisco Compatibility
1999-------------------
42fc5d26 2000
8fcedbd2
QY
2001FRR has commands that change some configuration syntax and default behavior to
2002behave more closely to Cisco conventions. These are deprecated and will be
2003removed in a future version of FRR.
42fc5d26 2004
8fcedbd2
QY
2005.. deprecated:: 5.0
2006 Please transition to using the FRR specific syntax for your configuration.
42fc5d26 2007
8fcedbd2
QY
2008.. index:: bgp config-type cisco
2009.. clicmd:: bgp config-type cisco
42fc5d26 2010
8fcedbd2 2011 Cisco compatible BGP configuration output.
42fc5d26 2012
8fcedbd2 2013 When this configuration line is specified:
c1a54c05 2014
8fcedbd2
QY
2015 - ``no synchronization`` is displayed. This command does nothing and is for
2016 display purposes only.
2017 - ``no auto-summary`` is displayed.
2018 - The ``network`` and ``aggregate-address`` arguments are displayed as:
42fc5d26 2019
8fcedbd2 2020 ::
42fc5d26 2021
8fcedbd2 2022 A.B.C.D M.M.M.M
42fc5d26 2023
8fcedbd2
QY
2024 FRR: network 10.0.0.0/8
2025 Cisco: network 10.0.0.0
42fc5d26 2026
8fcedbd2
QY
2027 FRR: aggregate-address 192.168.0.0/24
2028 Cisco: aggregate-address 192.168.0.0 255.255.255.0
42fc5d26 2029
8fcedbd2
QY
2030 Community attribute handling is also different. If no configuration is
2031 specified community attribute and extended community attribute are sent to
2032 the neighbor. If a user manually disables the feature, the community
2033 attribute is not sent to the neighbor. When ``bgp config-type cisco`` is
2034 specified, the community attribute is not sent to the neighbor by default.
2035 To send the community attribute user has to specify
2036 :clicmd:`neighbor A.B.C.D send-community` like so:
42fc5d26 2037
8fcedbd2 2038 .. code-block:: frr
42fc5d26 2039
8fcedbd2
QY
2040 !
2041 router bgp 1
2042 neighbor 10.0.0.1 remote-as 1
2043 address-family ipv4 unicast
2044 no neighbor 10.0.0.1 send-community
2045 exit-address-family
2046 !
2047 router bgp 1
2048 neighbor 10.0.0.1 remote-as 1
2049 address-family ipv4 unicast
2050 neighbor 10.0.0.1 send-community
2051 exit-address-family
2052 !
42fc5d26 2053
8fcedbd2
QY
2054.. deprecated:: 5.0
2055 Please transition to using the FRR specific syntax for your configuration.
2056
2057.. index:: bgp config-type zebra
2058.. clicmd:: bgp config-type zebra
2059
2060 FRR style BGP configuration. This is the default.
2061
2062.. _bgp-debugging:
2063
2064Debugging
2065---------
42fc5d26 2066
c1a54c05 2067.. index:: show debug
29adcd50 2068.. clicmd:: show debug
42fc5d26 2069
8fcedbd2 2070 Show all enabled debugs.
42fc5d26 2071
53b758f3
PG
2072.. index:: [no] debug bgp neighbor-events
2073.. clicmd:: [no] debug bgp neighbor-events
42fc5d26 2074
8fcedbd2
QY
2075 Enable or disable debugging for neighbor events. This provides general
2076 information on BGP events such as peer connection / disconnection, session
2077 establishment / teardown, and capability negotiation.
42fc5d26 2078
53b758f3
PG
2079.. index:: [no] debug bgp updates
2080.. clicmd:: [no] debug bgp updates
42fc5d26 2081
8fcedbd2
QY
2082 Enable or disable debugging for BGP updates. This provides information on
2083 BGP UPDATE messages transmitted and received between local and remote
2084 instances.
42fc5d26 2085
53b758f3
PG
2086.. index:: [no] debug bgp keepalives
2087.. clicmd:: [no] debug bgp keepalives
42fc5d26 2088
8fcedbd2
QY
2089 Enable or disable debugging for BGP keepalives. This provides information on
2090 BGP KEEPALIVE messages transmitted and received between local and remote
2091 instances.
c1a54c05 2092
8fcedbd2
QY
2093.. index:: [no] debug bgp bestpath <A.B.C.D/M|X:X::X:X/M>
2094.. clicmd:: [no] debug bgp bestpath <A.B.C.D/M|X:X::X:X/M>
42fc5d26 2095
8fcedbd2 2096 Enable or disable debugging for bestpath selection on the specified prefix.
42fc5d26 2097
8fcedbd2
QY
2098.. index:: [no] debug bgp nht
2099.. clicmd:: [no] debug bgp nht
4da7fda3 2100
8fcedbd2 2101 Enable or disable debugging of BGP nexthop tracking.
4da7fda3 2102
8fcedbd2
QY
2103.. index:: [no] debug bgp update-groups
2104.. clicmd:: [no] debug bgp update-groups
4b44467c 2105
8fcedbd2
QY
2106 Enable or disable debugging of dynamic update groups. This provides general
2107 information on group creation, deletion, join and prune events.
4b44467c 2108
8fcedbd2
QY
2109.. index:: [no] debug bgp zebra
2110.. clicmd:: [no] debug bgp zebra
42fc5d26 2111
8fcedbd2 2112 Enable or disable debugging of communications between *bgpd* and *zebra*.
c3c5a71f 2113
8fcedbd2
QY
2114Dumping Messages and Routing Tables
2115^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42fc5d26 2116
8fcedbd2
QY
2117.. index:: dump bgp all PATH [INTERVAL]
2118.. clicmd:: dump bgp all PATH [INTERVAL]
42fc5d26 2119
8fcedbd2
QY
2120.. index:: dump bgp all-et PATH [INTERVAL]
2121.. clicmd:: dump bgp all-et PATH [INTERVAL]
c3c5a71f 2122
8fcedbd2
QY
2123.. index:: no dump bgp all [PATH] [INTERVAL]
2124.. clicmd:: no dump bgp all [PATH] [INTERVAL]
42fc5d26 2125
8fcedbd2
QY
2126 Dump all BGP packet and events to `path` file.
2127 If `interval` is set, a new file will be created for echo `interval` of
2128 seconds. The path `path` can be set with date and time formatting
2129 (strftime). The type ‘all-et’ enables support for Extended Timestamp Header
2130 (:ref:`packet-binary-dump-format`).
c3c5a71f 2131
8fcedbd2
QY
2132.. index:: dump bgp updates PATH [INTERVAL]
2133.. clicmd:: dump bgp updates PATH [INTERVAL]
42fc5d26 2134
8fcedbd2
QY
2135.. index:: dump bgp updates-et PATH [INTERVAL]
2136.. clicmd:: dump bgp updates-et PATH [INTERVAL]
42fc5d26 2137
8fcedbd2
QY
2138.. index:: no dump bgp updates [PATH] [INTERVAL]
2139.. clicmd:: no dump bgp updates [PATH] [INTERVAL]
42fc5d26 2140
8fcedbd2
QY
2141 Dump only BGP updates messages to `path` file.
2142 If `interval` is set, a new file will be created for echo `interval` of
2143 seconds. The path `path` can be set with date and time formatting
2144 (strftime). The type ‘updates-et’ enables support for Extended Timestamp
2145 Header (:ref:`packet-binary-dump-format`).
42fc5d26 2146
8fcedbd2
QY
2147.. index:: dump bgp routes-mrt PATH
2148.. clicmd:: dump bgp routes-mrt PATH
c3c5a71f 2149
8fcedbd2
QY
2150.. index:: dump bgp routes-mrt PATH INTERVAL
2151.. clicmd:: dump bgp routes-mrt PATH INTERVAL
42fc5d26 2152
8fcedbd2
QY
2153.. index:: no dump bgp route-mrt [PATH] [INTERVAL]
2154.. clicmd:: no dump bgp route-mrt [PATH] [INTERVAL]
42fc5d26 2155
8fcedbd2
QY
2156 Dump whole BGP routing table to `path`. This is heavy process. The path
2157 `path` can be set with date and time formatting (strftime). If `interval` is
2158 set, a new file will be created for echo `interval` of seconds.
42fc5d26 2159
8fcedbd2 2160 Note: the interval variable can also be set using hours and minutes: 04h20m00.
42fc5d26 2161
c3c5a71f 2162
8fcedbd2 2163.. _bgp-other-commands:
42fc5d26 2164
8fcedbd2
QY
2165Other BGP Commands
2166------------------
42fc5d26 2167
dc912615
DS
2168.. index:: clear bgp \*
2169.. clicmd:: clear bgp \*
2170
2171 Clear all peers.
2172
8fcedbd2
QY
2173.. index:: clear bgp ipv4|ipv6 \*
2174.. clicmd:: clear bgp ipv4|ipv6 \*
42fc5d26 2175
dc912615
DS
2176 Clear all peers with this address-family activated.
2177
2178.. index:: clear bgp ipv4|ipv6 unicast \*
2179.. clicmd:: clear bgp ipv4|ipv6 unicast \*
2180
2181 Clear all peers with this address-family and sub-address-family activated.
42fc5d26 2182
8fcedbd2
QY
2183.. index:: clear bgp ipv4|ipv6 PEER
2184.. clicmd:: clear bgp ipv4|ipv6 PEER
42fc5d26 2185
dc912615
DS
2186 Clear peers with address of X.X.X.X and this address-family activated.
2187
2188.. index:: clear bgp ipv4|ipv6 unicast PEER
2189.. clicmd:: clear bgp ipv4|ipv6 unicast PEER
2190
2191 Clear peer with address of X.X.X.X and this address-family and sub-address-family activated.
2192
2193.. index:: clear bgp ipv4|ipv6 PEER soft|in|out
2194.. clicmd:: clear bgp ipv4|ipv6 PEER soft|in|out
2195
2196 Clear peer using soft reconfiguration in this address-family.
42fc5d26 2197
dc912615
DS
2198.. index:: clear bgp ipv4|ipv6 unicast PEER soft|in|out
2199.. clicmd:: clear bgp ipv4|ipv6 unicast PEER soft|in|out
42fc5d26 2200
dc912615 2201 Clear peer using soft reconfiguration in this address-family and sub-address-family.
42fc5d26 2202
42fc5d26 2203
8fcedbd2 2204.. _bgp-displaying-bgp-information:
42fc5d26 2205
8fcedbd2
QY
2206Displaying BGP Information
2207==========================
42fc5d26 2208
e6f59415
PG
2209The following four commands display the IPv6 and IPv4 routing tables, depending
2210on whether or not the ``ip`` keyword is used.
2211Actually, :clicmd:`show ip bgp` command was used on older `Quagga` routing
2212daemon project, while :clicmd:`show bgp` command is the new format. The choice
2213has been done to keep old format with IPv4 routing table, while new format
2214displays IPv6 routing table.
2215
8fcedbd2
QY
2216.. index:: show ip bgp
2217.. clicmd:: show ip bgp
42fc5d26 2218
8fcedbd2
QY
2219.. index:: show ip bgp A.B.C.D
2220.. clicmd:: show ip bgp A.B.C.D
c1a54c05 2221
e6f59415
PG
2222.. index:: show bgp
2223.. clicmd:: show bgp
2224
2225.. index:: show bgp X:X::X:X
2226.. clicmd:: show bgp X:X::X:X
42fc5d26 2227
8fcedbd2 2228 These commands display BGP routes. When no route is specified, the default
e6f59415 2229 is to display all BGP routes.
42fc5d26 2230
8fcedbd2 2231 ::
c1a54c05 2232
8fcedbd2
QY
2233 BGP table version is 0, local router ID is 10.1.1.1
2234 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
2235 Origin codes: i - IGP, e - EGP, ? - incomplete
42fc5d26 2236
8fcedbd2
QY
2237 Network Next Hop Metric LocPrf Weight Path
2238 \*> 1.1.1.1/32 0.0.0.0 0 32768 i
42fc5d26 2239
8fcedbd2 2240 Total number of prefixes 1
4da7fda3 2241
e6f59415
PG
2242Some other commands provide additional options for filtering the output.
2243
2244.. index:: show [ip] bgp regexp LINE
2245.. clicmd:: show [ip] bgp regexp LINE
42fc5d26 2246
8fcedbd2
QY
2247 This command displays BGP routes using AS path regular expression
2248 (:ref:`bgp-regular-expressions`).
42fc5d26 2249
e6f59415
PG
2250.. index:: show [ip] bgp summary
2251.. clicmd:: show [ip] bgp summary
42fc5d26 2252
8fcedbd2 2253 Show a bgp peer summary for the specified address family.
42fc5d26 2254
e6f59415
PG
2255The old command structure :clicmd:`show ip bgp` may be removed in the future
2256and should no longer be used. In order to reach the other BGP routing tables
2257other than the IPv6 routing table given by :clicmd:`show bgp`, the new command
2258structure is extended with :clicmd:`show bgp [afi] [safi]`.
2259
2260.. index:: show bgp [afi] [safi]
2261.. clicmd:: show bgp [afi] [safi]
2262
2263.. index:: show bgp <ipv4|ipv6> <unicast|multicast|vpn|labeled-unicast>
2264.. clicmd:: show bgp <ipv4|ipv6> <unicast|multicast|vpn|labeled-unicast>
2265
2266 These commands display BGP routes for the specific routing table indicated by
2267 the selected afi and the selected safi. If no afi and no safi value is given,
2268 the command falls back to the default IPv6 routing table
2269
2270.. index:: show bgp [afi] [safi] summary
2271.. clicmd:: show bgp [afi] [safi] summary
2272
2273 Show a bgp peer summary for the specified address family, and subsequent
2274 address-family.
2275
3577f1c5
DD
2276.. index:: show bgp [afi] [safi] summary failed [json]
2277.. clicmd:: show bgp [afi] [safi] summary failed [json]
2278
2279 Show a bgp peer summary for peers that are not succesfully exchanging routes
2280 for the specified address family, and subsequent address-family.
2281
e6f59415
PG
2282.. index:: show bgp [afi] [safi] neighbor [PEER]
2283.. clicmd:: show bgp [afi] [safi] neighbor [PEER]
9eb95b3b 2284
e6f59415
PG
2285 This command shows information on a specific BGP peer of the relevant
2286 afi and safi selected.
c1a54c05 2287
e6f59415
PG
2288.. index:: show bgp [afi] [safi] dampening dampened-paths
2289.. clicmd:: show bgp [afi] [safi] dampening dampened-paths
42fc5d26 2290
e6f59415
PG
2291 Display paths suppressed due to dampening of the selected afi and safi
2292 selected.
42fc5d26 2293
e6f59415
PG
2294.. index:: show bgp [afi] [safi] dampening flap-statistics
2295.. clicmd:: show bgp [afi] [safi] dampening flap-statistics
c1a54c05 2296
e6f59415 2297 Display flap statistics of routes of the selected afi and safi selected.
42fc5d26 2298
8fcedbd2 2299.. _bgp-display-routes-by-community:
42fc5d26 2300
8fcedbd2
QY
2301Displaying Routes by Community Attribute
2302----------------------------------------
42fc5d26 2303
8fcedbd2
QY
2304The following commands allow displaying routes based on their community
2305attribute.
42fc5d26 2306
8fcedbd2
QY
2307.. index:: show [ip] bgp <ipv4|ipv6> community
2308.. clicmd:: show [ip] bgp <ipv4|ipv6> community
42fc5d26 2309
8fcedbd2
QY
2310.. index:: show [ip] bgp <ipv4|ipv6> community COMMUNITY
2311.. clicmd:: show [ip] bgp <ipv4|ipv6> community COMMUNITY
42fc5d26 2312
8fcedbd2
QY
2313.. index:: show [ip] bgp <ipv4|ipv6> community COMMUNITY exact-match
2314.. clicmd:: show [ip] bgp <ipv4|ipv6> community COMMUNITY exact-match
76bd1499 2315
8fcedbd2
QY
2316 These commands display BGP routes which have the community attribute.
2317 attribute. When ``COMMUNITY`` is specified, BGP routes that match that
2318 community are displayed. When `exact-match` is specified, it display only
2319 routes that have an exact match.
c3c5a71f 2320
8fcedbd2
QY
2321.. index:: show [ip] bgp <ipv4|ipv6> community-list WORD
2322.. clicmd:: show [ip] bgp <ipv4|ipv6> community-list WORD
42fc5d26 2323
8fcedbd2
QY
2324.. index:: show [ip] bgp <ipv4|ipv6> community-list WORD exact-match
2325.. clicmd:: show [ip] bgp <ipv4|ipv6> community-list WORD exact-match
42fc5d26 2326
8fcedbd2
QY
2327 These commands display BGP routes for the address family specified that
2328 match the specified community list. When `exact-match` is specified, it
2329 displays only routes that have an exact match.
42fc5d26 2330
36a206db 2331.. _bgp-display-routes-by-lcommunity:
2332
2333Displaying Routes by Large Community Attribute
2334----------------------------------------------
2335
ac2201bb 2336The following commands allow displaying routes based on their
36a206db 2337large community attribute.
2338
2339.. index:: show [ip] bgp <ipv4|ipv6> large-community
2340.. clicmd:: show [ip] bgp <ipv4|ipv6> large-community
2341
2342.. index:: show [ip] bgp <ipv4|ipv6> large-community LARGE-COMMUNITY
2343.. clicmd:: show [ip] bgp <ipv4|ipv6> large-community LARGE-COMMUNITY
2344
2345.. index:: show [ip] bgp <ipv4|ipv6> large-community LARGE-COMMUNITY exact-match
2346.. clicmd:: show [ip] bgp <ipv4|ipv6> large-community LARGE-COMMUNITY exact-match
2347
2348.. index:: show [ip] bgp <ipv4|ipv6> large-community LARGE-COMMUNITY json
2349.. clicmd:: show [ip] bgp <ipv4|ipv6> large-community LARGE-COMMUNITY json
2350
2351 These commands display BGP routes which have the large community attribute.
2352 attribute. When ``LARGE-COMMUNITY`` is specified, BGP routes that match that
ac2201bb
DA
2353 large community are displayed. When `exact-match` is specified, it display
2354 only routes that have an exact match. When `json` is specified, it display
36a206db 2355 routes in json format.
2356
2357.. index:: show [ip] bgp <ipv4|ipv6> large-community-list WORD
2358.. clicmd:: show [ip] bgp <ipv4|ipv6> large-community-list WORD
2359
2360.. index:: show [ip] bgp <ipv4|ipv6> large-community-list WORD exact-match
2361.. clicmd:: show [ip] bgp <ipv4|ipv6> large-community-list WORD exact-match
2362
2363.. index:: show [ip] bgp <ipv4|ipv6> large-community-list WORD json
2364.. clicmd:: show [ip] bgp <ipv4|ipv6> large-community-list WORD json
2365
2366 These commands display BGP routes for the address family specified that
ac2201bb
DA
2367 match the specified large community list. When `exact-match` is specified,
2368 it displays only routes that have an exact match. When `json` is specified,
36a206db 2369 it display routes in json format.
2370
8fcedbd2 2371.. _bgp-display-routes-by-as-path:
42fc5d26 2372
36a206db 2373
8fcedbd2
QY
2374Displaying Routes by AS Path
2375----------------------------
42fc5d26 2376
8fcedbd2
QY
2377.. index:: show bgp ipv4|ipv6 regexp LINE
2378.. clicmd:: show bgp ipv4|ipv6 regexp LINE
76bd1499 2379
8fcedbd2
QY
2380 This commands displays BGP routes that matches a regular
2381 expression `line` (:ref:`bgp-regular-expressions`).
2382
e6f59415
PG
2383.. index:: show [ip] bgp ipv4 vpn
2384.. clicmd:: show [ip] bgp ipv4 vpn
8fcedbd2 2385
e6f59415
PG
2386.. index:: show [ip] bgp ipv6 vpn
2387.. clicmd:: show [ip] bgp ipv6 vpn
8fcedbd2
QY
2388
2389 Print active IPV4 or IPV6 routes advertised via the VPN SAFI.
2390
2391.. index:: show bgp ipv4 vpn summary
2392.. clicmd:: show bgp ipv4 vpn summary
2393
2394.. index:: show bgp ipv6 vpn summary
2395.. clicmd:: show bgp ipv6 vpn summary
2396
2397 Print a summary of neighbor connections for the specified AFI/SAFI combination.
2398
09d78f10
DS
2399Displaying Update Group Information
2400-----------------------------------
2401
2402..index:: show bgp update-groups SUBGROUP-ID [advertise-queue|advertised-routes|packet-queue]
2403..clicmd:: show bgp update-groups [advertise-queue|advertised-routes|packet-queue]
2404
2405 Display Information about each individual update-group being used.
2406 If SUBGROUP-ID is specified only display about that particular group. If
2407 advertise-queue is specified the list of routes that need to be sent
2408 to the peers in the update-group is displayed, advertised-routes means
2409 the list of routes we have sent to the peers in the update-group and
2410 packet-queue specifies the list of packets in the queue to be sent.
2411
2412..index:: show bgp update-groups statistics
2413..clicmd:: show bgp update-groups statistics
2414
2415 Display Information about update-group events in FRR.
8fcedbd2
QY
2416
2417.. _bgp-route-reflector:
2418
2419Route Reflector
2420===============
2421
749afd7d
RF
2422BGP routers connected inside the same AS through BGP belong to an internal
2423BGP session, or IBGP. In order to prevent routing table loops, IBGP does not
2424advertise IBGP-learned routes to other routers in the same session. As such,
2425IBGP requires a full mesh of all peers. For large networks, this quickly becomes
2426unscalable. Introducing route reflectors removes the need for the full-mesh.
8fcedbd2 2427
749afd7d
RF
2428When route reflectors are configured, these will reflect the routes announced
2429by the peers configured as clients. A route reflector client is configured
2430with:
8fcedbd2
QY
2431
2432.. index:: neighbor PEER route-reflector-client
2433.. clicmd:: neighbor PEER route-reflector-client
2434
2435.. index:: no neighbor PEER route-reflector-client
2436.. clicmd:: no neighbor PEER route-reflector-client
c3c5a71f 2437
749afd7d
RF
2438To avoid single points of failure, multiple route reflectors can be configured.
2439
2440A cluster is a collection of route reflectors and their clients, and is used
2441by route reflectors to avoid looping.
2442
2443.. index:: bgp cluster-id A.B.C.D
2444.. clicmd:: bgp cluster-id A.B.C.D
42fc5d26 2445
0efdf0fe 2446.. _routing-policy:
42fc5d26 2447
8fcedbd2
QY
2448Routing Policy
2449==============
42fc5d26 2450
4da7fda3 2451You can set different routing policy for a peer. For example, you can set
9eb95b3b
QY
2452different filter for a peer.
2453
2454.. code-block:: frr
c1a54c05 2455
c1a54c05
QY
2456 !
2457 router bgp 1 view 1
2458 neighbor 10.0.0.1 remote-as 2
2459 address-family ipv4 unicast
2460 neighbor 10.0.0.1 distribute-list 1 in
2461 exit-address-family
2462 !
2463 router bgp 1 view 2
2464 neighbor 10.0.0.1 remote-as 2
2465 address-family ipv4 unicast
2466 neighbor 10.0.0.1 distribute-list 2 in
2467 exit-address-family
c3c5a71f 2468
4da7fda3
QY
2469This means BGP update from a peer 10.0.0.1 goes to both BGP view 1 and view 2.
2470When the update is inserted into view 1, distribute-list 1 is applied. On the
2471other hand, when the update is inserted into view 2, distribute-list 2 is
2472applied.
42fc5d26 2473
42fc5d26 2474
0efdf0fe 2475.. _bgp-regular-expressions:
42fc5d26
QY
2476
2477BGP Regular Expressions
2478=======================
2479
8fcedbd2
QY
2480BGP regular expressions are based on :t:`POSIX 1003.2` regular expressions. The
2481following description is just a quick subset of the POSIX regular expressions.
42fc5d26
QY
2482
2483
8fcedbd2 2484.\*
c1a54c05 2485 Matches any single character.
42fc5d26 2486
8fcedbd2 2487\*
c1a54c05 2488 Matches 0 or more occurrences of pattern.
42fc5d26 2489
8fcedbd2 2490\+
c1a54c05 2491 Matches 1 or more occurrences of pattern.
42fc5d26
QY
2492
2493?
c1a54c05 2494 Match 0 or 1 occurrences of pattern.
42fc5d26
QY
2495
2496^
c1a54c05 2497 Matches the beginning of the line.
42fc5d26
QY
2498
2499$
c1a54c05 2500 Matches the end of the line.
42fc5d26
QY
2501
2502_
8fcedbd2
QY
2503 The ``_`` character has special meanings in BGP regular expressions. It
2504 matches to space and comma , and AS set delimiter ``{`` and ``}`` and AS
2505 confederation delimiter ``(`` and ``)``. And it also matches to the
2506 beginning of the line and the end of the line. So ``_`` can be used for AS
2507 value boundaries match. This character technically evaluates to
2508 ``(^|[,{}()]|$)``.
42fc5d26 2509
42fc5d26 2510
c1a54c05 2511.. _bgp-configuration-examples:
42fc5d26 2512
8fcedbd2
QY
2513Miscellaneous Configuration Examples
2514====================================
42fc5d26 2515
9eb95b3b
QY
2516Example of a session to an upstream, advertising only one prefix to it.
2517
2518.. code-block:: frr
42fc5d26 2519
c1a54c05
QY
2520 router bgp 64512
2521 bgp router-id 10.236.87.1
2522 neighbor upstream peer-group
2523 neighbor upstream remote-as 64515
2524 neighbor upstream capability dynamic
2525 neighbor 10.1.1.1 peer-group upstream
2526 neighbor 10.1.1.1 description ACME ISP
c3c5a71f 2527
c1a54c05
QY
2528 address-family ipv4 unicast
2529 network 10.236.87.0/24
2530 neighbor upstream prefix-list pl-allowed-adv out
2531 exit-address-family
2532 !
2533 ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
2534 ip prefix-list pl-allowed-adv seq 10 deny any
42fc5d26 2535
aa9eafa4
QY
2536A more complex example including upstream, peer and customer sessions
2537advertising global prefixes and NO_EXPORT prefixes and providing actions for
2538customer routes based on community values. Extensive use is made of route-maps
2539and the 'call' feature to support selective advertising of prefixes. This
2540example is intended as guidance only, it has NOT been tested and almost
2541certainly contains silly mistakes, if not serious flaws.
42fc5d26 2542
9eb95b3b 2543.. code-block:: frr
42fc5d26 2544
c1a54c05
QY
2545 router bgp 64512
2546 bgp router-id 10.236.87.1
2547 neighbor upstream capability dynamic
2548 neighbor cust capability dynamic
2549 neighbor peer capability dynamic
2550 neighbor 10.1.1.1 remote-as 64515
2551 neighbor 10.1.1.1 peer-group upstream
2552 neighbor 10.2.1.1 remote-as 64516
2553 neighbor 10.2.1.1 peer-group upstream
2554 neighbor 10.3.1.1 remote-as 64517
2555 neighbor 10.3.1.1 peer-group cust-default
2556 neighbor 10.3.1.1 description customer1
2557 neighbor 10.4.1.1 remote-as 64518
2558 neighbor 10.4.1.1 peer-group cust
2559 neighbor 10.4.1.1 description customer2
2560 neighbor 10.5.1.1 remote-as 64519
2561 neighbor 10.5.1.1 peer-group peer
2562 neighbor 10.5.1.1 description peer AS 1
2563 neighbor 10.6.1.1 remote-as 64520
2564 neighbor 10.6.1.1 peer-group peer
2565 neighbor 10.6.1.1 description peer AS 2
2566
2567 address-family ipv4 unicast
2568 network 10.123.456.0/24
2569 network 10.123.456.128/25 route-map rm-no-export
2570 neighbor upstream route-map rm-upstream-out out
2571 neighbor cust route-map rm-cust-in in
2572 neighbor cust route-map rm-cust-out out
2573 neighbor cust send-community both
2574 neighbor peer route-map rm-peer-in in
2575 neighbor peer route-map rm-peer-out out
2576 neighbor peer send-community both
2577 neighbor 10.3.1.1 prefix-list pl-cust1-network in
2578 neighbor 10.4.1.1 prefix-list pl-cust2-network in
2579 neighbor 10.5.1.1 prefix-list pl-peer1-network in
2580 neighbor 10.6.1.1 prefix-list pl-peer2-network in
2581 exit-address-family
2582 !
2583 ip prefix-list pl-default permit 0.0.0.0/0
2584 !
2585 ip prefix-list pl-upstream-peers permit 10.1.1.1/32
2586 ip prefix-list pl-upstream-peers permit 10.2.1.1/32
2587 !
2588 ip prefix-list pl-cust1-network permit 10.3.1.0/24
2589 ip prefix-list pl-cust1-network permit 10.3.2.0/24
2590 !
2591 ip prefix-list pl-cust2-network permit 10.4.1.0/24
2592 !
2593 ip prefix-list pl-peer1-network permit 10.5.1.0/24
2594 ip prefix-list pl-peer1-network permit 10.5.2.0/24
2595 ip prefix-list pl-peer1-network permit 192.168.0.0/24
2596 !
2597 ip prefix-list pl-peer2-network permit 10.6.1.0/24
2598 ip prefix-list pl-peer2-network permit 10.6.2.0/24
2599 ip prefix-list pl-peer2-network permit 192.168.1.0/24
2600 ip prefix-list pl-peer2-network permit 192.168.2.0/24
2601 ip prefix-list pl-peer2-network permit 172.16.1/24
2602 !
2603 ip as-path access-list asp-own-as permit ^$
2604 ip as-path access-list asp-own-as permit _64512_
2605 !
2606 ! #################################################################
2607 ! Match communities we provide actions for, on routes receives from
2608 ! customers. Communities values of <our-ASN>:X, with X, have actions:
2609 !
2610 ! 100 - blackhole the prefix
2611 ! 200 - set no_export
2612 ! 300 - advertise only to other customers
2613 ! 400 - advertise only to upstreams
2614 ! 500 - set no_export when advertising to upstreams
2615 ! 2X00 - set local_preference to X00
2616 !
2617 ! blackhole the prefix of the route
2618 ip community-list standard cm-blackhole permit 64512:100
2619 !
2620 ! set no-export community before advertising
2621 ip community-list standard cm-set-no-export permit 64512:200
2622 !
2623 ! advertise only to other customers
2624 ip community-list standard cm-cust-only permit 64512:300
2625 !
2626 ! advertise only to upstreams
2627 ip community-list standard cm-upstream-only permit 64512:400
2628 !
2629 ! advertise to upstreams with no-export
2630 ip community-list standard cm-upstream-noexport permit 64512:500
2631 !
2632 ! set local-pref to least significant 3 digits of the community
2633 ip community-list standard cm-prefmod-100 permit 64512:2100
2634 ip community-list standard cm-prefmod-200 permit 64512:2200
2635 ip community-list standard cm-prefmod-300 permit 64512:2300
2636 ip community-list standard cm-prefmod-400 permit 64512:2400
2637 ip community-list expanded cme-prefmod-range permit 64512:2...
2638 !
2639 ! Informational communities
2640 !
2641 ! 3000 - learned from upstream
2642 ! 3100 - learned from customer
2643 ! 3200 - learned from peer
2644 !
2645 ip community-list standard cm-learnt-upstream permit 64512:3000
2646 ip community-list standard cm-learnt-cust permit 64512:3100
2647 ip community-list standard cm-learnt-peer permit 64512:3200
2648 !
2649 ! ###################################################################
2650 ! Utility route-maps
2651 !
2652 ! These utility route-maps generally should not used to permit/deny
2653 ! routes, i.e. they do not have meaning as filters, and hence probably
2654 ! should be used with 'on-match next'. These all finish with an empty
2655 ! permit entry so as not interfere with processing in the caller.
2656 !
2657 route-map rm-no-export permit 10
2658 set community additive no-export
2659 route-map rm-no-export permit 20
2660 !
2661 route-map rm-blackhole permit 10
f6aa36f5 2662 description blackhole, up-pref and ensure it cannot escape this AS
c1a54c05
QY
2663 set ip next-hop 127.0.0.1
2664 set local-preference 10
2665 set community additive no-export
2666 route-map rm-blackhole permit 20
2667 !
2668 ! Set local-pref as requested
2669 route-map rm-prefmod permit 10
2670 match community cm-prefmod-100
2671 set local-preference 100
2672 route-map rm-prefmod permit 20
2673 match community cm-prefmod-200
2674 set local-preference 200
2675 route-map rm-prefmod permit 30
2676 match community cm-prefmod-300
2677 set local-preference 300
2678 route-map rm-prefmod permit 40
2679 match community cm-prefmod-400
2680 set local-preference 400
2681 route-map rm-prefmod permit 50
2682 !
2683 ! Community actions to take on receipt of route.
2684 route-map rm-community-in permit 10
2685 description check for blackholing, no point continuing if it matches.
2686 match community cm-blackhole
2687 call rm-blackhole
2688 route-map rm-community-in permit 20
2689 match community cm-set-no-export
2690 call rm-no-export
2691 on-match next
2692 route-map rm-community-in permit 30
2693 match community cme-prefmod-range
2694 call rm-prefmod
2695 route-map rm-community-in permit 40
2696 !
2697 ! #####################################################################
2698 ! Community actions to take when advertising a route.
2699 ! These are filtering route-maps,
2700 !
2701 ! Deny customer routes to upstream with cust-only set.
2702 route-map rm-community-filt-to-upstream deny 10
2703 match community cm-learnt-cust
2704 match community cm-cust-only
2705 route-map rm-community-filt-to-upstream permit 20
2706 !
2707 ! Deny customer routes to other customers with upstream-only set.
2708 route-map rm-community-filt-to-cust deny 10
2709 match community cm-learnt-cust
2710 match community cm-upstream-only
2711 route-map rm-community-filt-to-cust permit 20
2712 !
2713 ! ###################################################################
2714 ! The top-level route-maps applied to sessions. Further entries could
2715 ! be added obviously..
2716 !
2717 ! Customers
2718 route-map rm-cust-in permit 10
2719 call rm-community-in
2720 on-match next
2721 route-map rm-cust-in permit 20
2722 set community additive 64512:3100
2723 route-map rm-cust-in permit 30
2724 !
2725 route-map rm-cust-out permit 10
2726 call rm-community-filt-to-cust
2727 on-match next
2728 route-map rm-cust-out permit 20
2729 !
2730 ! Upstream transit ASes
2731 route-map rm-upstream-out permit 10
2732 description filter customer prefixes which are marked cust-only
2733 call rm-community-filt-to-upstream
2734 on-match next
2735 route-map rm-upstream-out permit 20
2736 description only customer routes are provided to upstreams/peers
2737 match community cm-learnt-cust
2738 !
2739 ! Peer ASes
2740 ! outbound policy is same as for upstream
2741 route-map rm-peer-out permit 10
2742 call rm-upstream-out
2743 !
2744 route-map rm-peer-in permit 10
2745 set community additive 64512:3200
c3c5a71f 2746
8fcedbd2
QY
2747
2748Example of how to set up a 6-Bone connection.
2749
2750.. code-block:: frr
2751
2752 ! bgpd configuration
2753 ! ==================
2754 !
2755 ! MP-BGP configuration
2756 !
2757 router bgp 7675
2758 bgp router-id 10.0.0.1
2759 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 remote-as `as-number`
2760 !
2761 address-family ipv6
2762 network 3ffe:506::/32
2763 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 activate
2764 neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 route-map set-nexthop out
2765 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 remote-as `as-number`
2766 neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 route-map set-nexthop out
2767 exit-address-family
2768 !
2769 ipv6 access-list all permit any
2770 !
2771 ! Set output nexthop address.
2772 !
2773 route-map set-nexthop permit 10
2774 match ipv6 address all
2775 set ipv6 nexthop global 3ffe:1cfa:0:2:2c0:4fff:fe68:a225
2776 set ipv6 nexthop local fe80::2c0:4fff:fe68:a225
2777 !
2778 log file bgpd.log
2779 !
2780
2781
9e146a81 2782.. include:: routeserver.rst
f3817860
QY
2783
2784.. include:: rpki.rst
c1a54c05 2785
00458d01
PG
2786.. include:: flowspec.rst
2787
d1e7591e 2788.. [#med-transitivity-rant] For some set of objects to have an order, there *must* be some binary ordering relation that is defined for *every* combination of those objects, and that relation *must* be transitive. I.e.:, if the relation operator is <, and if a < b and b < c then that relation must carry over and it *must* be that a < c for the objects to have an order. The ordering relation may allow for equality, i.e. a < b and b < a may both be true and imply that a and b are equal in the order and not distinguished by it, in which case the set has a partial order. Otherwise, if there is an order, all the objects have a distinct place in the order and the set has a total order)
c1a54c05
QY
2789.. [bgp-route-osci-cond] McPherson, D. and Gill, V. and Walton, D., "Border Gateway Protocol (BGP) Persistent Route Oscillation Condition", IETF RFC3345
2790.. [stable-flexible-ibgp] Flavel, A. and M. Roughan, "Stable and flexible iBGP", ACM SIGCOMM 2009
2791.. [ibgp-correctness] Griffin, T. and G. Wilfong, "On the correctness of IBGP configuration", ACM SIGCOMM 2002