]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/routemap.rst
Merge pull request #9517 from anlancs/reload-add-str
[mirror_frr.git] / doc / user / routemap.rst
1 .. _route-map:
2
3 **********
4 Route Maps
5 **********
6
7 Route maps provide a means to both filter and/or apply actions to route, hence
8 allowing policy to be applied to routes.
9
10 For a route reflector to apply a ``route-map`` to reflected routes, be sure to
11 include ``bgp route-reflector allow-outbound-policy`` in ``router bgp`` mode.
12
13 Route maps are an ordered list of route map entries. Each entry may specify up
14 to four distinct sets of clauses:
15
16 .. glossary::
17
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
21 the Match Policy. If a route-map entry does not explicitly specify any
22 matching conditions, then it always matches.
23
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.
27
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:
32
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.
36
37 - :dfn:`deny`: If the entry matches, then finish processing the route-map and
38 deny the route (return `deny`).
39
40 The `Matching Policy` is specified as part of the command which defines
41 the ordered entry in the route-map. See below.
42
43 Call Action
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.
50
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:
55
56 - :dfn:`next`: Continue on with processing of the route-map entries.
57
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.
60
61 The default action of a route-map, if no entries match, is to deny. I.e. a
62 route-map essentially has as its last entry an empty *deny* entry, which
63 matches all routes. To change this behaviour, one must specify an empty
64 *permit* entry as the last entry in the route-map.
65
66 To summarise the above:
67
68 +--------+--------+----------+
69 | | Match | No Match |
70 +========+========+==========+
71 | Permit | action | cont |
72 +--------+--------+----------+
73 | Deny | deny | cont |
74 +--------+--------+----------+
75
76 action
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
85 deny
86 The route is denied by the route-map (return ``deny``).
87
88 cont
89 goto next route-map entry
90
91 .. _route-map-show-command:
92
93 .. clicmd:: show route-map [WORD] [json]
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
98 If the ``json`` option is specified, output is displayed in JSON format.
99
100 .. _route-map-clear-counter-command:
101
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
108 .. _route-map-command:
109
110 Route Map Command
111 =================
112
113 .. clicmd:: route-map ROUTE-MAP-NAME (permit|deny) ORDER
114
115 Configure the `order`'th entry in `route-map-name` with ``Match Policy`` of
116 either *permit* or *deny*.
117
118 .. _route-map-match-command:
119
120 Route Map Match Command
121 =======================
122
123 .. clicmd:: match ip address ACCESS_LIST
124
125 Matches the specified `access_list`
126
127 .. clicmd:: match ip address prefix-list PREFIX_LIST
128
129 Matches the specified `PREFIX_LIST`
130
131 .. clicmd:: match ip address prefix-len 0-32
132
133 Matches the specified `prefix-len`. This is a Zebra specific command.
134
135 .. clicmd:: match ipv6 address ACCESS_LIST
136
137 Matches the specified `access_list`
138
139 .. clicmd:: match ipv6 address prefix-list PREFIX_LIST
140
141 Matches the specified `PREFIX_LIST`
142
143 .. clicmd:: match ipv6 address prefix-len 0-128
144
145 Matches the specified `prefix-len`. This is a Zebra specific command.
146
147 .. clicmd:: match ip next-hop ACCESS_LIST
148
149 Match the next-hop according to the given access-list.
150
151 .. clicmd:: match ip next-hop address IPV4_ADDR
152
153 This is a BGP specific match command. Matches the specified `ipv4_addr`.
154
155 .. clicmd:: match ip next-hop prefix-list PREFIX_LIST
156
157 Match the next-hop according to the given prefix-list.
158
159 .. clicmd:: match ipv6 next-hop ACCESS_LIST
160
161 Match the next-hop according to the given access-list.
162
163 .. clicmd:: match ipv6 next-hop address IPV6_ADDR
164
165 This is a BGP specific match command. Matches the specified `ipv6_addr`.
166
167 .. clicmd:: match ipv6 next-hop prefix-list PREFIX_LIST
168
169 Match the next-hop according to the given prefix-list.
170
171 .. clicmd:: match as-path AS_PATH
172
173 Matches the specified `as_path`.
174
175 .. clicmd:: match metric METRIC
176
177 Matches the specified `metric`.
178
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
184 .. clicmd:: match local-preference METRIC
185
186 Matches the specified `local-preference`.
187
188 .. clicmd:: match community COMMUNITY_LIST
189
190 Matches the specified `community_list`
191
192 .. clicmd:: match peer IPV4_ADDR
193
194 This is a BGP specific match command. Matches the peer ip address
195 if the neighbor was specified in this manner.
196
197 .. clicmd:: match peer IPV6_ADDR
198
199 This is a BGP specific match command. Matches the peer ipv6
200 address if the neighbor was specified in this manner.
201
202 .. clicmd:: match peer INTERFACE_NAME
203
204 This is a BGP specific match command. Matches the peer
205 interface name specified if the neighbor was specified
206 in this manner.
207
208 .. clicmd:: match source-protocol PROTOCOL_NAME
209
210 This is a ZEBRA specific match command. Matches the
211 originating protocol specified.
212
213 .. clicmd:: match source-instance NUMBER
214
215 This is a ZEBRA specific match command. The number is a range from (0-255).
216 Matches the originating protocols instance specified.
217
218 .. _route-map-set-command:
219
220 Route Map Set Command
221 =====================
222
223 .. program:: configure
224
225 .. clicmd:: set tag TAG
226
227 Set a tag on the matched route. This tag value can be from (1-4294967295).
228 Additionally if you have compiled with the :option:`--enable-realms`
229 configure option. Tag values from (1-255) are sent to the Linux kernel as a
230 realm value. Then route policy can be applied. See the tc man page.
231
232 .. clicmd:: set ip next-hop IPV4_ADDRESS
233
234 Set the BGP nexthop address to the specified IPV4_ADDRESS. For both
235 incoming and outgoing route-maps.
236
237 .. clicmd:: set ip next-hop peer-address
238
239 Set the BGP nexthop address to the address of the peer. For an incoming
240 route-map this means the ip address of our peer is used. For an outgoing
241 route-map this means the ip address of our self is used to establish the
242 peering with our neighbor.
243
244 .. clicmd:: set ip next-hop unchanged
245
246 Set the route-map as unchanged. Pass the route-map through without
247 changing it's value.
248
249 .. clicmd:: set ipv6 next-hop peer-address
250
251 Set the BGP nexthop address to the address of the peer. For an incoming
252 route-map this means the ipv6 address of our peer is used. For an outgoing
253 route-map this means the ip address of our self is used to establish the
254 peering with our neighbor.
255
256 .. clicmd:: set ipv6 next-hop prefer-global
257
258 For Incoming and Import Route-maps if we receive a v6 global and v6 LL
259 address for the route, then prefer to use the global address as the nexthop.
260
261 .. clicmd:: set ipv6 next-hop global IPV6_ADDRESS
262
263 Set the next-hop to the specified IPV6_ADDRESS for both incoming and
264 outgoing route-maps.
265
266 .. clicmd:: set local-preference LOCAL_PREF
267
268 Set the BGP local preference to `local_pref`.
269
270 .. clicmd:: set local-preference +LOCAL_PREF
271
272 Add the BGP local preference to an existing `local_pref`.
273
274 .. clicmd:: set local-preference -LOCAL_PREF
275
276 Subtract the BGP local preference from an existing `local_pref`.
277
278 .. clicmd:: set distance DISTANCE
279
280 Set the Administrative distance to DISTANCE to use for the route.
281 This is only locally significant and will not be dispersed to peers.
282
283 .. clicmd:: set weight WEIGHT
284
285 Set the route's weight.
286
287 .. clicmd:: set metric <[+|-](1-4294967295)|rtt|+rtt|-rtt>
288
289 Set the BGP attribute MED to a specific value. Use `+`/`-` to add or subtract
290 the specified value to/from the MED. Use `rtt` to set the MED to the round
291 trip time or `+rtt`/`-rtt` to add/subtract the round trip time to/from the
292 MED.
293
294 .. clicmd:: set as-path prepend AS_PATH
295
296 Set the BGP AS path to prepend.
297
298 .. clicmd:: set as-path exclude AS-NUMBER...
299
300 Drop AS-NUMBER from the BGP AS path.
301
302 .. clicmd:: set community COMMUNITY
303
304 Set the BGP community attribute.
305
306 .. clicmd:: set ipv6 next-hop local IPV6_ADDRESS
307
308 Set the BGP-4+ link local IPv6 nexthop address.
309
310 .. clicmd:: set origin ORIGIN <egp|igp|incomplete>
311
312 Set BGP route origin.
313
314 .. clicmd:: set table (1-4294967295)
315
316 Set the BGP table to a given table identifier
317
318 .. clicmd:: set sr-te color (1-4294967295)
319
320 Set the color of a SR-TE Policy to be applied to a learned route. The SR-TE
321 Policy is uniquely determined by the color and the BGP nexthop.
322
323
324 .. _route-map-call-command:
325
326 Route Map Call Command
327 ======================
328
329 .. clicmd:: call NAME
330
331 Call route-map `name`. If it returns deny, deny the route and
332 finish processing the route-map.
333
334
335 .. _route-map-exit-action-command:
336
337 Route Map Exit Action Command
338 =============================
339
340 .. clicmd:: on-match next
341
342 .. clicmd:: continue
343
344 Proceed on to the next entry in the route-map.
345
346 .. clicmd:: on-match goto N
347
348 .. clicmd:: continue N
349
350 Proceed processing the route-map at the first entry whose order is >= N
351
352
353 .. _route-map-optimization-command:
354
355 Route Map Optimization Command
356 ==============================
357
358 .. clicmd:: route-map ROUTE-MAP-NAME optimization
359
360 Enable route-map processing optimization for `route-map-name`.
361 The optimization is enabled by default.
362 Instead of sequentially passing through all the route-map indexes
363 until a match is found, the search for the best-match index will be
364 based on a look-up in a prefix-tree. A per-route-map prefix-tree
365 will be constructed for this purpose. The prefix-tree will compose
366 of all the prefixes in all the prefix-lists that are included in the
367 match rule of all the sequences of a route-map.
368
369
370 Route Map Examples
371 ==================
372
373 A simple example of a route-map:
374
375 .. code-block:: frr
376
377 route-map test permit 10
378 match ip address 10
379 set local-preference 200
380
381
382 This means that if a route matches ip access-list number 10 it's
383 local-preference value is set to 200.
384
385 See :ref:`bgp-configuration-examples` for examples of more sophisticated
386 usage of route-maps, including of the ``call`` action.
387