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