]> git.proxmox.com Git - mirror_frr.git/blame - doc/user/routemap.rst
Merge pull request #13649 from donaldsharp/unlock_the_node_or_else
[mirror_frr.git] / doc / user / routemap.rst
CommitLineData
0efdf0fe 1.. _route-map:
42fc5d26 2
655cdc32
QY
3**********
4Route Maps
5**********
42fc5d26 6
655cdc32
QY
7Route maps provide a means to both filter and/or apply actions to route, hence
8allowing policy to be applied to routes.
42fc5d26 9
a690202f 10For a route reflector to apply a ``route-map`` to reflected routes, be sure to
11include ``bgp route-reflector allow-outbound-policy`` in ``router bgp`` mode.
12
655cdc32 13Route maps are an ordered list of route map entries. Each entry may specify up
d1e7591e 14to four distinct sets of clauses:
42fc5d26 15
013f9762 16.. glossary::
42fc5d26 17
013f9762
QY
18 Matching Conditions
19 A route-map entry may, optionally, specify one or more conditions which
20 must be matched if the entry is to be considered further, as governed by
d1e7591e 21 the Match Policy. If a route-map entry does not explicitly specify any
013f9762 22 matching conditions, then it always matches.
42fc5d26 23
013f9762
QY
24 Set Actions
25 A route-map entry may, optionally, specify one or more Set Actions to set
26 or modify attributes of the route.
42fc5d26 27
013f9762
QY
28 Matching Policy
29 This specifies the policy implied if the :term:`Matching Conditions` are
30 met or not met, and which actions of the route-map are to be taken, if
31 any. The two possibilities are:
42fc5d26 32
013f9762
QY
33 - :dfn:`permit`: If the entry matches, then carry out the
34 :term:`Set Actions`. Then finish processing the route-map, permitting
35 the route, unless an :term:`Exit Policy` action indicates otherwise.
42fc5d26 36
013f9762
QY
37 - :dfn:`deny`: If the entry matches, then finish processing the route-map and
38 deny the route (return `deny`).
42fc5d26 39
013f9762
QY
40 The `Matching Policy` is specified as part of the command which defines
41 the ordered entry in the route-map. See below.
42fc5d26 42
013f9762 43 Call Action
c9cf9db6
QY
44 Call to another route-map, after any :term:`Set Actions` have been
45 carried out. If the route-map called returns `deny` then processing of
46 the route-map finishes and the route is denied, regardless of the
47 :term:`Matching Policy` or the :term:`Exit Policy`. If the called
48 route-map returns `permit`, then :term:`Matching Policy` and :term:`Exit
49 Policy` govern further behaviour, as normal.
42fc5d26 50
013f9762
QY
51 Exit Policy
52 An entry may, optionally, specify an alternative :dfn:`Exit Policy` to
53 take if the entry matched, rather than the normal policy of exiting the
54 route-map and permitting the route. The two possibilities are:
42fc5d26 55
013f9762 56 - :dfn:`next`: Continue on with processing of the route-map entries.
42fc5d26 57
013f9762
QY
58 - :dfn:`goto N`: Jump ahead to the first route-map entry whose order in
59 the route-map is >= N. Jumping to a previous entry is not permitted.
42fc5d26 60
655cdc32
QY
61The default action of a route-map, if no entries match, is to deny. I.e. a
62route-map essentially has as its last entry an empty *deny* entry, which
63matches all routes. To change this behaviour, one must specify an empty
64*permit* entry as the last entry in the route-map.
42fc5d26
QY
65
66To summarise the above:
67
655cdc32
QY
68+--------+--------+----------+
69| | Match | No Match |
70+========+========+==========+
71| Permit | action | cont |
72+--------+--------+----------+
73| Deny | deny | cont |
74+--------+--------+----------+
75
76action
77 - Apply *set* statements
78 - If *call* is present, call given route-map. If that returns a ``deny``,
79 finish processing and return ``deny``.
80 - If *Exit Policy* is *next*, goto next route-map entry
81 - If *Exit Policy* is *goto*, goto first entry whose order in the
82 list is >= the given order.
83 - Finish processing the route-map and permit the route.
84
85deny
86 The route is denied by the route-map (return ``deny``).
87
88cont
89 goto next route-map entry
42fc5d26 90
1fa30509
DS
91.. _route-map-show-command:
92
856ed18a 93.. clicmd:: show route-map [WORD] [json]
1fa30509
DS
94
95 Display data about each daemons knowledge of individual route-maps.
96 If WORD is supplied narrow choice to that particular route-map.
97
856ed18a
RW
98 If the ``json`` option is specified, output is displayed in JSON format.
99
1fa30509
DS
100.. _route-map-clear-counter-command:
101
1fa30509
DS
102.. clicmd:: clear route-map counter [WORD]
103
104 Clear counters that are being stored about the route-map utilization
105 so that subsuquent show commands will indicate since the last clear.
106 If WORD is specified clear just that particular route-map's counters.
107
0efdf0fe 108.. _route-map-command:
42fc5d26
QY
109
110Route Map Command
111=================
112
655cdc32 113.. clicmd:: route-map ROUTE-MAP-NAME (permit|deny) ORDER
42fc5d26 114
655cdc32
QY
115 Configure the `order`'th entry in `route-map-name` with ``Match Policy`` of
116 either *permit* or *deny*.
42fc5d26 117
0efdf0fe 118.. _route-map-match-command:
42fc5d26
QY
119
120Route Map Match Command
121=======================
122
655cdc32 123.. clicmd:: match ip address ACCESS_LIST
42fc5d26 124
655cdc32 125 Matches the specified `access_list`
42fc5d26 126
ec3bff6f 127.. clicmd:: match ip address prefix-list PREFIX_LIST
42fc5d26 128
ec3bff6f 129 Matches the specified `PREFIX_LIST`
42fc5d26 130
655cdc32 131.. clicmd:: match ip address prefix-len 0-32
42fc5d26 132
655cdc32 133 Matches the specified `prefix-len`. This is a Zebra specific command.
42fc5d26 134
655cdc32 135.. clicmd:: match ipv6 address ACCESS_LIST
42fc5d26 136
655cdc32 137 Matches the specified `access_list`
42fc5d26 138
ec3bff6f 139.. clicmd:: match ipv6 address prefix-list PREFIX_LIST
42fc5d26 140
ec3bff6f 141 Matches the specified `PREFIX_LIST`
42fc5d26 142
655cdc32 143.. clicmd:: match ipv6 address prefix-len 0-128
42fc5d26 144
655cdc32 145 Matches the specified `prefix-len`. This is a Zebra specific command.
42fc5d26 146
f7517a8b
DA
147.. clicmd:: match ip next-hop ACCESS_LIST
148
149 Match the next-hop according to the given access-list.
150
be7735b3 151.. clicmd:: match ip next-hop address IPV4_ADDR
42fc5d26 152
be7735b3
PG
153 This is a BGP specific match command. Matches the specified `ipv4_addr`.
154
c5ec8f66
IR
155.. clicmd:: match ip next-hop prefix-list PREFIX_LIST
156
157 Match the next-hop according to the given prefix-list.
158
f7517a8b
DA
159.. clicmd:: match ipv6 next-hop ACCESS_LIST
160
161 Match the next-hop according to the given access-list.
162
03030106 163.. clicmd:: match ipv6 next-hop address IPV6_ADDR
be7735b3
PG
164
165 This is a BGP specific match command. Matches the specified `ipv6_addr`.
42fc5d26 166
cce442b5
DA
167.. clicmd:: match ipv6 next-hop prefix-list PREFIX_LIST
168
169 Match the next-hop according to the given prefix-list.
170
c7854434 171.. clicmd:: match as-path AS_PATH
42fc5d26 172
655cdc32 173 Matches the specified `as_path`.
42fc5d26 174
655cdc32 175.. clicmd:: match metric METRIC
42fc5d26 176
655cdc32 177 Matches the specified `metric`.
42fc5d26 178
a5a48dbf
QY
179.. clicmd:: match tag TAG
180
181 Matches the specified tag value associated with the route. This tag value
182 can be in the range of (1-4294967295).
183
655cdc32 184.. clicmd:: match local-preference METRIC
42fc5d26 185
655cdc32 186 Matches the specified `local-preference`.
42fc5d26 187
655cdc32 188.. clicmd:: match community COMMUNITY_LIST
42fc5d26 189
655cdc32 190 Matches the specified `community_list`
42fc5d26 191
655cdc32 192.. clicmd:: match peer IPV4_ADDR
42fc5d26 193
655cdc32
QY
194 This is a BGP specific match command. Matches the peer ip address
195 if the neighbor was specified in this manner.
42fc5d26 196
655cdc32 197.. clicmd:: match peer IPV6_ADDR
42fc5d26 198
655cdc32
QY
199 This is a BGP specific match command. Matches the peer ipv6
200 address if the neighbor was specified in this manner.
42fc5d26 201
655cdc32 202.. clicmd:: match peer INTERFACE_NAME
42fc5d26 203
655cdc32 204 This is a BGP specific match command. Matches the peer
42fc5d26
QY
205 interface name specified if the neighbor was specified
206 in this manner.
207
1bb1c0cf
DS
208.. clicmd:: match peer PEER_GROUP_NAME
209
210 This is a BGP specific match command. Matches the peer
211 group name specified for the peer in question.
212
af21c682
DS
213.. clicmd:: match source-protocol PROTOCOL_NAME
214
052fa79d 215 This is a ZEBRA and BGP specific match command. Matches the
af21c682
DS
216 originating protocol specified.
217
af21c682
DS
218.. clicmd:: match source-instance NUMBER
219
220 This is a ZEBRA specific match command. The number is a range from (0-255).
221 Matches the originating protocols instance specified.
222
79d2f64e
CS
223.. clicmd:: match evpn route-type ROUTE_TYPE_NAME
224
225 This is a BGP EVPN specific match command. It matches to EVPN route-type
226 from type-1 (EAD route-type) to type-5 (Prefix route-type).
227 User can provide in an integral form (1-5) or string form of route-type
228 (i.e ead, macip, multicast, es, prefix).
229
230.. clicmd:: match evpn vni NUMBER
231
232 This is a BGP EVPN specific match command which matches to EVPN VNI id.
233 The number is a range from (1-6777215).
234
0efdf0fe 235.. _route-map-set-command:
42fc5d26
QY
236
237Route Map Set Command
238=====================
239
013f9762
QY
240.. program:: configure
241
a5a48dbf
QY
242.. clicmd:: set tag TAG
243
a5a48dbf
QY
244 Set a tag on the matched route. This tag value can be from (1-4294967295).
245 Additionally if you have compiled with the :option:`--enable-realms`
246 configure option. Tag values from (1-255) are sent to the Linux kernel as a
f2b8c0b5
DS
247 realm value. Then route policy can be applied. See the tc man page. As
248 a note realms cannot currently be used with the installation of nexthops
249 as nexthop groups in the linux kernel.
a5a48dbf 250
655cdc32 251.. clicmd:: set ip next-hop IPV4_ADDRESS
42fc5d26 252
e13fd66f
DS
253 Set the BGP nexthop address to the specified IPV4_ADDRESS. For both
254 incoming and outgoing route-maps.
255
e13fd66f
DS
256.. clicmd:: set ip next-hop peer-address
257
258 Set the BGP nexthop address to the address of the peer. For an incoming
259 route-map this means the ip address of our peer is used. For an outgoing
260 route-map this means the ip address of our self is used to establish the
261 peering with our neighbor.
262
e13fd66f
DS
263.. clicmd:: set ip next-hop unchanged
264
265 Set the route-map as unchanged. Pass the route-map through without
266 changing it's value.
267
e13fd66f
DS
268.. clicmd:: set ipv6 next-hop peer-address
269
270 Set the BGP nexthop address to the address of the peer. For an incoming
271 route-map this means the ipv6 address of our peer is used. For an outgoing
272 route-map this means the ip address of our self is used to establish the
273 peering with our neighbor.
274
e13fd66f
DS
275.. clicmd:: set ipv6 next-hop prefer-global
276
277 For Incoming and Import Route-maps if we receive a v6 global and v6 LL
278 address for the route, then prefer to use the global address as the nexthop.
279
e13fd66f
DS
280.. clicmd:: set ipv6 next-hop global IPV6_ADDRESS
281
f22744c3 282 Set the next-hop to the specified IPV6_ADDRESS for both incoming and
e13fd66f 283 outgoing route-maps.
42fc5d26 284
655cdc32 285.. clicmd:: set local-preference LOCAL_PREF
42fc5d26 286
655cdc32 287 Set the BGP local preference to `local_pref`.
42fc5d26 288
94f75688
DA
289.. clicmd:: set local-preference +LOCAL_PREF
290
291 Add the BGP local preference to an existing `local_pref`.
292
94f75688
DA
293.. clicmd:: set local-preference -LOCAL_PREF
294
295 Subtract the BGP local preference from an existing `local_pref`.
296
d58e6dbc 297.. clicmd:: set distance (1-255)
4dac4cc9 298
d58e6dbc 299 Set the Administrative distance to use for the route.
4dac4cc9
DS
300 This is only locally significant and will not be dispersed to peers.
301
655cdc32 302.. clicmd:: set weight WEIGHT
42fc5d26 303
655cdc32 304 Set the route's weight.
42fc5d26 305
03750f1e 306.. clicmd:: set metric <[+|-](1-4294967295)|rtt|+rtt|-rtt>
42fc5d26 307
f24dfccb
JAG
308 Set the route metric. When used with BGP, set the BGP attribute MED to a
309 specific value. Use `+`/`-` to add or subtract the specified value to/from
310 the existing/MED. Use `rtt` to set the MED to the round trip time or
311 `+rtt`/`-rtt` to add/subtract the round trip time to/from the MED.
312
313.. clicmd:: set min-metric <(0-4294967295)>
314
315 Set the minimum meric for the route.
316
317.. clicmd:: set max-metric <(0-4294967295)>
318
319 Set the maximum meric for the route.
42fc5d26 320
91e9aee0
DA
321.. clicmd:: set aigp-metric <igp-metric|(1-4294967295)>
322
323 Set the BGP attribute AIGP to a specific value. If ``igp-metric`` is specified,
324 then the value is taken from the IGP protocol, otherwise an arbitrary value.
325
655cdc32 326.. clicmd:: set as-path prepend AS_PATH
42fc5d26 327
655cdc32 328 Set the BGP AS path to prepend.
42fc5d26 329
bedcbe4b
LS
330.. clicmd:: set as-path exclude AS-NUMBER...
331
332 Drop AS-NUMBER from the BGP AS path.
333
655cdc32 334.. clicmd:: set community COMMUNITY
42fc5d26 335
655cdc32 336 Set the BGP community attribute.
42fc5d26 337
655cdc32 338.. clicmd:: set ipv6 next-hop local IPV6_ADDRESS
42fc5d26 339
655cdc32 340 Set the BGP-4+ link local IPv6 nexthop address.
42fc5d26 341
90da9a14
C
342.. clicmd:: set origin ORIGIN <egp|igp|incomplete>
343
344 Set BGP route origin.
345
951745bd
PG
346.. clicmd:: set table (1-4294967295)
347
348 Set the BGP table to a given table identifier
349
ef3e0d04
SM
350.. clicmd:: set sr-te color (1-4294967295)
351
352 Set the color of a SR-TE Policy to be applied to a learned route. The SR-TE
353 Policy is uniquely determined by the color and the BGP nexthop.
354
1bb550b6
PG
355.. clicmd:: set l3vpn next-hop encapsulation gre
356
357 Accept L3VPN traffic over GRE encapsulation.
03750f1e 358
0efdf0fe 359.. _route-map-call-command:
42fc5d26
QY
360
361Route Map Call Command
362======================
363
655cdc32 364.. clicmd:: call NAME
42fc5d26 365
655cdc32
QY
366 Call route-map `name`. If it returns deny, deny the route and
367 finish processing the route-map.
42fc5d26 368
03750f1e 369
0efdf0fe 370.. _route-map-exit-action-command:
42fc5d26
QY
371
372Route Map Exit Action Command
373=============================
374
655cdc32 375.. clicmd:: on-match next
42fc5d26 376
655cdc32 377.. clicmd:: continue
42fc5d26 378
655cdc32 379 Proceed on to the next entry in the route-map.
42fc5d26 380
655cdc32 381.. clicmd:: on-match goto N
42fc5d26 382
655cdc32 383.. clicmd:: continue N
42fc5d26 384
655cdc32 385 Proceed processing the route-map at the first entry whose order is >= N
42fc5d26 386
03750f1e 387
009d25a0
NT
388.. _route-map-optimization-command:
389
390Route Map Optimization Command
391==============================
392
38133c4a 393.. clicmd:: route-map ROUTE-MAP-NAME optimization
009d25a0 394
38133c4a
IR
395 Enable route-map processing optimization for `route-map-name`.
396 The optimization is enabled by default.
009d25a0
NT
397 Instead of sequentially passing through all the route-map indexes
398 until a match is found, the search for the best-match index will be
399 based on a look-up in a prefix-tree. A per-route-map prefix-tree
400 will be constructed for this purpose. The prefix-tree will compose
401 of all the prefixes in all the prefix-lists that are included in the
402 match rule of all the sequences of a route-map.
403
1fa30509 404
42fc5d26
QY
405Route Map Examples
406==================
407
408A simple example of a route-map:
409
9eb95b3b 410.. code-block:: frr
42fc5d26 411
9eb95b3b
QY
412 route-map test permit 10
413 match ip address 10
414 set local-preference 200
a8c90e15 415
42fc5d26
QY
416
417This means that if a route matches ip access-list number 10 it's
418local-preference value is set to 200.
419
c1a54c05 420See :ref:`bgp-configuration-examples` for examples of more sophisticated
d1e7591e 421usage of route-maps, including of the ``call`` action.
42fc5d26 422