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