]> git.proxmox.com Git - mirror_frr.git/blame - doc/user/zebra.rst
Merge pull request #9766 from opensourcerouting/typesafe-member-nhrp-zap
[mirror_frr.git] / doc / user / zebra.rst
CommitLineData
0efdf0fe 1.. _zebra:
42fc5d26
QY
2
3*****
4Zebra
5*****
6
d1a242fd 7*zebra* is an IP routing manager. It provides kernel routing
42fc5d26
QY
8table updates, interface lookups, and redistribution of routes between
9different routing protocols.
10
0efdf0fe 11.. _invoking-zebra:
42fc5d26
QY
12
13Invoking zebra
14==============
15
0efdf0fe 16Besides the common invocation options (:ref:`common-invocation-options`), the
42fc5d26
QY
17*zebra* specific invocation options are listed below.
18
d1a242fd 19.. program:: zebra
42fc5d26 20
c9365894 21.. option:: -b, --batch
42fc5d26 22
d1a242fd
QY
23 Runs in batch mode. *zebra* parses configuration file and terminates
24 immediately.
42fc5d26 25
d4644d41
DS
26.. option:: -K TIME, --graceful_restart TIME
27
28 If this option is specified, the graceful restart time is TIME seconds.
29 Zebra, when started, will read in routes. Those routes that Zebra
30 identifies that it was the originator of will be swept in TIME seconds.
31 If no time is specified then we will sweep those routes immediately.
32
c9365894 33.. option:: -r, --retain
42fc5d26 34
da7e1a92
QY
35 When program terminates, do not flush routes installed by *zebra* from the
36 kernel.
42fc5d26 37
0d8df934
DS
38.. option:: -e X, --ecmp X
39
40 Run zebra with a limited ecmp ability compared to what it is compiled to.
41 If you are running zebra on hardware limited functionality you can
42 force zebra to limit the maximum ecmp allowed to X. This number
43 is bounded by what you compiled FRR with as the maximum number.
44
204ed384
PG
45.. option:: -n, --vrfwnetns
46
47 When *Zebra* starts with this option, the VRF backend is based on Linux
48 network namespaces. That implies that all network namespaces discovered by
49 ZEBRA will create an associated VRF. The other daemons will operate on the VRF
80ca5b6d 50 VRF defined by *Zebra*, as usual.
204ed384 51
f90115c5 52 .. seealso:: :ref:`zebra-vrf`
013f9762 53
cc6743c2
PG
54.. option:: -o, --vrfdefaultname
55
56 When *Zebra* starts with this option, the default VRF name is changed to the
57 parameter.
58
59 .. seealso:: :ref:`zebra-vrf`
60
6ed85950
DS
61.. option:: -z <path_to_socket>, --socket <path_to_socket>
62
63 If this option is supplied on the cli, the path to the zebra
64 control socket(zapi), is used. This option overrides a -N <namespace>
65 option if handed to it on the cli.
66
4354d381
DS
67.. option:: --v6-rr-semantics
68
69 The linux kernel is receiving the ability to use the same route
70 replacement semantics for v6 that v4 uses. If you are using a
71 kernel that supports this functionality then run *Zebra* with this
72 option and we will use Route Replace Semantics instead of delete
73 than add.
74
e4876266
DS
75.. option:: --asic-offload [notify_on_offload|notify_on_ack]
76
77 The linux kernel has the ability to use asic-offload ( see switchdev
78 development ). When the operator knows that FRR will be working in
79 this way, allow them to specify this with FRR. At this point this
80 code only supports asynchronous notification of the offload state.
81 In other words the initial ACK received for linux kernel installation
82 does not give zebra any data about what the state of the offload
83 is. This option takes the optional paramegers notify_on_offload
84 or notify_on_ack. This signals to zebra to notify upper level
85 protocols about route installation/update on ack received from
86 the linux kernel or from offload notification.
87
0efdf0fe 88.. _interface-commands:
42fc5d26 89
4d25da4f
PG
90Configuration Addresses behaviour
91=================================
92
93At startup, *Zebra* will first discover the underlying networking objects
94from the operating system. This includes interfaces, addresses of
95interfaces, static routes, etc. Then, it will read the configuration
96file, including its own interface addresses, static routes, etc. All this
97information comprises the operational context from *Zebra*. But
98configuration context from *Zebra* will remain the same as the one from
99:file:`zebra.conf` config file. As an example, executing the following
100:clicmd:`show running-config` will reflect what was in :file:`zebra.conf`.
101In a similar way, networking objects that are configured outside of the
102*Zebra* like *iproute2* will not impact the configuration context from
103*Zebra*. This behaviour permits you to continue saving your own config
104file, and decide what is really to be pushed on the config file, and what
105is dependent on the underlying system.
106Note that inversely, from *Zebra*, you will not be able to delete networking
107objects that were previously configured outside of *Zebra*.
108
109
42fc5d26
QY
110Interface Commands
111==================
112
0efdf0fe 113.. _standard-commands:
42fc5d26
QY
114
115Standard Commands
116-----------------
117
d1a242fd
QY
118
119.. clicmd:: interface IFNAME
120
204ed384
PG
121
122.. clicmd:: interface IFNAME vrf VRF
123
42fc5d26 124
d1a242fd 125.. clicmd:: shutdown
42fc5d26 126
42fc5d26 127
d1a242fd 128 Up or down the current interface.
42fc5d26 129
42fc5d26 130
d1a242fd 131.. clicmd:: ip address ADDRESS/PREFIX
42fc5d26 132
d1a242fd 133.. clicmd:: ipv6 address ADDRESS/PREFIX
42fc5d26 134
42fc5d26 135
42fc5d26 136
d1a242fd 137 Set the IPv4 or IPv6 address/prefix for the interface.
42fc5d26 138
42fc5d26 139
d1a242fd 140.. clicmd:: ip address LOCAL-ADDR peer PEER-ADDR/PREFIX
42fc5d26 141
42fc5d26 142
d1e7591e
QY
143 Configure an IPv4 Point-to-Point address on the interface. (The concept of
144 PtP addressing does not exist for IPv6.)
42fc5d26 145
d1a242fd
QY
146 `local-addr` has no subnet mask since the local side in PtP addressing is
147 always a single (/32) address. `peer-addr/prefix` can be an arbitrary subnet
148 behind the other end of the link (or even on the link in Point-to-Multipoint
149 setups), though generally /32s are used.
42fc5d26 150
42fc5d26 151
d1a242fd 152.. clicmd:: description DESCRIPTION ...
42fc5d26 153
d1a242fd 154 Set description for the interface.
42fc5d26 155
42fc5d26 156
d1a242fd 157.. clicmd:: multicast
42fc5d26 158
42fc5d26 159
d1a242fd 160 Enable or disables multicast flag for the interface.
42fc5d26 161
42fc5d26 162
d1a242fd 163.. clicmd:: bandwidth (1-10000000)
d1a242fd 164
d1a242fd
QY
165
166 Set bandwidth value of the interface in kilobits/sec. This is for
167 calculating OSPF cost. This command does not affect the actual device
168 configuration.
169
d1a242fd
QY
170
171.. clicmd:: link-detect
d1a242fd 172
d1a242fd
QY
173
174 Enable/disable link-detect on platforms which support this. Currently only
32d9e333
DS
175 Linux, and only where network interface drivers support reporting
176 link-state via the ``IFF_RUNNING`` flag.
4c97fd1a 177
30980e0a 178 In FRR, link-detect is on by default.
42fc5d26 179
0efdf0fe 180.. _link-parameters-commands:
42fc5d26
QY
181
182Link Parameters Commands
183------------------------
184
85400b29
MS
185.. note::
186
187 At this time, FRR offers partial support for some of the routing
188 protocol extensions that can be used with MPLS-TE. FRR does not
189 support a complete RSVP-TE solution currently.
190
d1a242fd 191.. clicmd:: link-params
42fc5d26 192
42fc5d26 193
85400b29
MS
194 Enter into the link parameters sub node. At least 'enable' must be
195 set to activate the link parameters, and consequently routing
196 information that could be used as part of Traffic Engineering on
197 this interface. MPLS-TE must be enable at the OSPF
198 (:ref:`ospf-traffic-engineering`) or ISIS
199 (:ref:`isis-traffic-engineering`) router level in complement to
e33dbe08 200 this.
42fc5d26 201
d1a242fd 202 Under link parameter statement, the following commands set the different TE values:
42fc5d26 203
e33dbe08 204.. clicmd:: enable
42fc5d26 205
d1a242fd 206 Enable link parameters for this interface.
42fc5d26 207
e33dbe08 208.. clicmd:: metric (0-4294967295)
42fc5d26 209
e33dbe08 210.. clicmd:: max-bw BANDWIDTH
42fc5d26 211
e33dbe08 212.. clicmd:: max-rsv-bw BANDWIDTH
42fc5d26 213
e33dbe08 214.. clicmd:: unrsv-bw (0-7) BANDWIDTH
42fc5d26 215
e33dbe08 216.. clicmd:: admin-grp BANDWIDTH
42fc5d26 217
d1a242fd
QY
218 These commands specifies the Traffic Engineering parameters of the interface
219 in conformity to RFC3630 (OSPF) or RFC5305 (ISIS). There are respectively
220 the TE Metric (different from the OSPF or ISIS metric), Maximum Bandwidth
221 (interface speed by default), Maximum Reservable Bandwidth, Unreserved
222 Bandwidth for each 0-7 priority and Admin Group (ISIS) or Resource
223 Class/Color (OSPF).
42fc5d26 224
c5e0101c 225 Note that BANDWIDTH is specified in IEEE floating point format and express
d1a242fd 226 in Bytes/second.
42fc5d26 227
e33dbe08 228.. clicmd:: delay (0-16777215) [min (0-16777215) | max (0-16777215)]
42fc5d26 229
e33dbe08 230.. clicmd:: delay-variation (0-16777215)
42fc5d26 231
e33dbe08 232.. clicmd:: packet-loss PERCENTAGE
42fc5d26 233
e33dbe08 234.. clicmd:: res-bw BANDWIDTH
42fc5d26 235
e33dbe08 236.. clicmd:: ava-bw BANDWIDTH
42fc5d26 237
e33dbe08 238.. clicmd:: use-bw BANDWIDTH
42fc5d26 239
d1e7591e 240 These command specifies additional Traffic Engineering parameters of the
d1a242fd
QY
241 interface in conformity to draft-ietf-ospf-te-metrics-extension-05.txt and
242 draft-ietf-isis-te-metrics-extension-03.txt. There are respectively the
243 delay, jitter, loss, available bandwidth, reservable bandwidth and utilized
244 bandwidth.
42fc5d26 245
d1a242fd
QY
246 Note that BANDWIDTH is specified in IEEE floating point format and express
247 in Bytes/second. Delays and delay variation are express in micro-second
248 (µs). Loss is specified in PERCENTAGE ranging from 0 to 50.331642% by step
249 of 0.000003.
42fc5d26 250
e33dbe08 251.. clicmd:: neighbor <A.B.C.D> as (0-65535)
42fc5d26 252
d1a242fd
QY
253 Specifies the remote ASBR IP address and Autonomous System (AS) number
254 for InterASv2 link in OSPF (RFC5392). Note that this option is not yet
255 supported for ISIS (RFC5316).
42fc5d26 256
a090c2da
IR
257Nexthop Tracking
258================
259
260Nexthop tracking doesn't resolve nexthops via the default route by default.
261Allowing this might be useful when e.g. you want to allow BGP to peer across
262the default route.
263
43b8e264
QY
264.. clicmd:: ip nht resolve-via-default
265
a090c2da
IR
266 Allow IPv4 nexthop tracking to resolve via the default route. This parameter
267 is configured per-VRF, so the command is also available in the VRF subnode.
268
269.. clicmd:: ipv6 nht resolve-via-default
270
271 Allow IPv6 nexthop tracking to resolve via the default route. This parameter
272 is configured per-VRF, so the command is also available in the VRF subnode.
43b8e264 273
9187f11a
DS
274Administrative Distance
275=======================
276
277Administrative distance allows FRR to make decisions about what routes
278should be installed in the rib based upon the originating protocol.
279The lowest Admin Distance is the route selected. This is purely a
280subjective decision about ordering and care has been taken to choose
281the same distances that other routing suites have choosen.
282
283+------------+-----------+
284| Protocol | Distance |
285+------------+-----------+
286| System | 0 |
287+------------+-----------+
288| Kernel | 0 |
289+------------+-----------+
290| Connect | 0 |
291+------------+-----------+
292| Static | 1 |
293+------------+-----------+
294| NHRP | 10 |
295+------------+-----------+
296| EBGP | 20 |
297+------------+-----------+
298| EIGRP | 90 |
299+------------+-----------+
300| BABEL | 100 |
301+------------+-----------+
302| OSPF | 110 |
303+------------+-----------+
304| ISIS | 115 |
305+------------+-----------+
306| OPENFABRIC | 115 |
307+------------+-----------+
308| RIP | 120 |
309+------------+-----------+
310| Table | 150 |
311+------------+-----------+
312| SHARP | 150 |
313+------------+-----------+
314| IBGP | 200 |
315+------------+-----------+
316| PBR | 200 |
317+------------+-----------+
318
319An admin distance of 255 indicates to Zebra that the route should not be
320installed into the Data Plane. Additionally routes with an admin distance
321of 255 will not be redistributed.
322
323Zebra does treat Kernel routes as special case for the purposes of Admin
324Distance. Upon learning about a route that is not originated by FRR
325we read the metric value as a uint32_t. The top byte of the value
326is interpreted as the Administrative Distance and the low three bytes
327are read in as the metric. This special case is to facilitate VRF
328default routes.
329
ba5e7ae2
DS
330Route Replace Semantics
331=======================
332
333When using the Linux Kernel as a forwarding plane, routes are installed
334with a metric of 20 to the kernel. Please note that the kernel's metric
335value bears no resemblence to FRR's RIB metric or admin distance. It
336merely is a way for the Linux Kernel to decide which route to use if it
337has multiple routes for the same prefix from multiple sources. An example
338here would be if someone else was running another routing suite besides
339FRR at the same time, the kernel must choose what route to use to forward
340on. FRR choose the value of 20 because of two reasons. FRR wanted a
341value small enough to be choosen but large enough that the operator could
342allow route prioritization by the kernel when multiple routing suites are
343being run and FRR wanted to take advantage of Route Replace semantics that
344the linux kernel offers. In order for Route Replacement semantics to
345work FRR must use the same metric when issuing the replace command.
346Currently FRR only supports Route Replace semantics using the Linux
347Kernel.
348
75b8d482
IR
349.. _zebra-vrf:
350
80ca5b6d
QY
351Virtual Routing and Forwarding
352==============================
42fc5d26 353
80ca5b6d
QY
354FRR supports :abbr:`VRF (Virtual Routing and Forwarding)`. VRF is a way to
355separate networking contexts on the same machine. Those networking contexts are
356associated with separate interfaces, thus making it possible to associate one
357interface with a specific VRF.
204ed384 358
204ed384 359VRF can be used, for example, when instantiating per enterprise networking
80ca5b6d
QY
360services, without having to instantiate the physical host machine or the
361routing management daemons for each enterprise. As a result, interfaces are
362separate for each set of VRF, and routing daemons can have their own context
363for each VRF.
204ed384
PG
364
365This conceptual view introduces the *Default VRF* case. If the user does not
80ca5b6d
QY
366configure any specific VRF, then by default, FRR uses the *Default VRF*.
367
204ed384 368Configuring VRF networking contexts can be done in various ways on FRR. The VRF
80ca5b6d 369interfaces can be configured by entering in interface configuration mode
614aa5c1 370:clicmd:`interface IFNAME vrf VRF`.
204ed384
PG
371
372A VRF backend mode is chosen when running *Zebra*.
373
374If no option is chosen, then the *Linux VRF* implementation as references in
80ca5b6d 375https://www.kernel.org/doc/Documentation/networking/vrf.txt will be mapped over
204ed384
PG
376the *Zebra* VRF. The routing table associated to that VRF is a Linux table
377identifier located in the same *Linux network namespace* where *Zebra* started.
eff8e8a2
DS
378Please note when using the *Linux VRF* routing table it is expected that a
379default Kernel route will be installed that has a metric as outlined in the
380www.kernel.org doc above. The Linux Kernel does table lookup via a combination
381of rule application of the rule table and then route lookup of the specified
382table. If no route match is found then the next applicable rule is applied
383to find the next route table to use to look for a route match. As such if
384your VRF table does not have a default blackhole route with a high metric
385VRF route lookup will leave the table specified by the VRF, which is undesirable.
204ed384 386
80ca5b6d
QY
387If the :option:`-n` option is chosen, then the *Linux network namespace* will
388be mapped over the *Zebra* VRF. That implies that *Zebra* is able to configure
389several *Linux network namespaces*. The routing table associated to that VRF
390is the whole routing tables located in that namespace. For instance, this mode
391matches OpenStack Network Namespaces. It matches also OpenFastPath. The default
392behavior remains Linux VRF which is supported by the Linux kernel community,
393see https://www.kernel.org/doc/Documentation/networking/vrf.txt.
204ed384
PG
394
395Because of that difference, there are some subtle differences when running some
396commands in relationship to VRF. Here is an extract of some of those commands:
397
204ed384
PG
398.. clicmd:: vrf VRF
399
400 This command is available on configuration mode. By default, above command
52119114 401 permits accessing the VRF configuration mode. This mode is available for
d66a93dd
PG
402 both VRFs. It is to be noted that *Zebra* does not create Linux VRF.
403 The network administrator can however decide to provision this command in
404 configuration file to provide more clarity about the intended configuration.
204ed384 405
204ed384
PG
406.. clicmd:: netns NAMESPACE
407
80ca5b6d
QY
408 This command is based on VRF configuration mode. This command is available
409 when *Zebra* is run in :option:`-n` mode. This command reflects which *Linux
410 network namespace* is to be mapped with *Zebra* VRF. It is to be noted that
411 *Zebra* creates and detects added/suppressed VRFs from the Linux environment
d66a93dd
PG
412 (in fact, those managed with iproute2). The network administrator can however
413 decide to provision this command in configuration file to provide more clarity
414 about the intended configuration.
204ed384 415
204ed384
PG
416.. clicmd:: show ip route vrf VRF
417
418 The show command permits dumping the routing table associated to the VRF. If
80ca5b6d
QY
419 *Zebra* is launched with default settings, this will be the ``TABLENO`` of
420 the VRF configured on the kernel, thanks to information provided in
421 https://www.kernel.org/doc/Documentation/networking/vrf.txt. If *Zebra* is
422 launched with :option:`-n` option, this will be the default routing table of
423 the *Linux network namespace* ``VRF``.
204ed384 424
204ed384
PG
425.. clicmd:: show ip route vrf VRF table TABLENO
426
80ca5b6d
QY
427 The show command is only available with :option:`-n` option. This command
428 will dump the routing table ``TABLENO`` of the *Linux network namespace*
429 ``VRF``.
430
5a81528c
PG
431.. clicmd:: show ip route vrf VRF tables
432
433 This command will dump the routing tables within the vrf scope. If `vrf all`
434 is executed, all routing tables will be dumped.
435
a3fd74f7
DS
436.. clicmd:: show <ip|ipv6> route summary [vrf VRF] [table TABLENO] [prefix]
437
438 This command will dump a summary output of the specified VRF and TABLENO
439 combination. If neither VRF or TABLENO is specified FRR defaults to
440 the default vrf and default table. If prefix is specified dump the
441 number of prefix routes.
442
c94e6725
PG
443By using the :option:`-n` option, the *Linux network namespace* will be mapped
444over the *Zebra* VRF. One nice feature that is possible by handling *Linux
445network namespace* is the ability to name default VRF. At startup, *Zebra*
446discovers the available *Linux network namespace* by parsing folder
447`/var/run/netns`. Each file stands for a *Linux network namespace*, but not all
448*Linux network namespaces* are available under that folder. This is the case for
449default VRF. It is possible to name the default VRF, by creating a file, by
450executing following commands.
451
452.. code-block:: shell
453
454 touch /var/run/netns/vrf0
455 mount --bind /proc/self/ns/net /var/run/netns/vrf0
456
457Above command illustrates what happens when the default VRF is visible under
458`var/run/netns/`. Here, the default VRF file is `vrf0`.
459At startup, FRR detects the presence of that file. It detects that the file
460statistics information matches the same file statistics information as
461`/proc/self/ns/net` ( through stat() function). As statistics information
462matches, then `vrf0` stands for the new default namespace name.
56f0bea7 463Consequently, the VRF naming `Default` will be overridden by the new discovered
c94e6725
PG
464namespace name `vrf0`.
465
466For those who don't use VRF backend with *Linux network namespace*, it is
467possible to statically configure and recompile FRR. It is possible to choose an
468alternate name for default VRF. Then, the default VRF naming will automatically
469be updated with the new name. To illustrate, if you want to recompile with
470`global` value, use the following command:
471
cc4345d4 472.. code-block:: shell
c94e6725
PG
473
474 ./configure --with-defaultvrfname=global
475
42d4b30e
PG
476.. _zebra-table-allocation:
477
478Table Allocation
479================
480
481Some services like BGP flowspec allocate routing tables to perform policy
482routing based on netfilter criteria and IP rules. In order to avoid
483conflicts between VRF allocated routing tables and those services, Zebra
484proposes to define a chunk of routing tables to use by other services.
485
486Allocation configuration can be done like below, with the range of the
487chunk of routing tables to be used by the given service.
488
489.. clicmd:: ip table range <STARTTABLENO> <ENDTABLENO>
490
df55b448
DS
491.. _zebra-ecmp:
492
493ECMP
494====
495
496FRR supports ECMP as part of normal operations and is generally compiled
497with a limit of 64 way ECMP. This of course can be modified via configure
498options on compilation if the end operator desires to do so. Individual
499protocols each have their own way of dictating ECMP policy and their
500respective documentation should be read.
501
502ECMP can be inspected in zebra by doing a `show ip route X` command.
503
504.. code-block:: shell
505
506 eva# show ip route 4.4.4.4/32
507 Codes: K - kernel route, C - connected, S - static, R - RIP,
508 O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
509 T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
510 F - PBR, f - OpenFabric,
511 > - selected route, * - FIB route, q - queued, r - rejected, b - backup
512 t - trapped, o - offload failure
513
514 D>* 4.4.4.4/32 [150/0] via 192.168.161.1, enp39s0, weight 1, 00:00:02
515 * via 192.168.161.2, enp39s0, weight 1, 00:00:02
516 * via 192.168.161.3, enp39s0, weight 1, 00:00:02
517 * via 192.168.161.4, enp39s0, weight 1, 00:00:02
518 * via 192.168.161.5, enp39s0, weight 1, 00:00:02
519 * via 192.168.161.6, enp39s0, weight 1, 00:00:02
520 * via 192.168.161.7, enp39s0, weight 1, 00:00:02
521 * via 192.168.161.8, enp39s0, weight 1, 00:00:02
522 * via 192.168.161.9, enp39s0, weight 1, 00:00:02
523 * via 192.168.161.10, enp39s0, weight 1, 00:00:02
524 * via 192.168.161.11, enp39s0, weight 1, 00:00:02
525 * via 192.168.161.12, enp39s0, weight 1, 00:00:02
526 * via 192.168.161.13, enp39s0, weight 1, 00:00:02
527 * via 192.168.161.14, enp39s0, weight 1, 00:00:02
528 * via 192.168.161.15, enp39s0, weight 1, 00:00:02
529 * via 192.168.161.16, enp39s0, weight 1, 00:00:02
530
531In this example we have 16 way ecmp for the 4.4.4.4/32 route. The `*` character
532tells us that the route is installed in the Data Plane, or FIB.
533
534If you are using the Linux kernel as a Data Plane, this can be inspected
535via a `ip route show X` command:
536
537.. code-block:: shell
538
539 sharpd@eva ~/f/doc(ecmp_doc_change)> ip route show 4.4.4.4/32
540 4.4.4.4 nhid 185483868 proto sharp metric 20
541 nexthop via 192.168.161.1 dev enp39s0 weight 1
542 nexthop via 192.168.161.10 dev enp39s0 weight 1
543 nexthop via 192.168.161.11 dev enp39s0 weight 1
544 nexthop via 192.168.161.12 dev enp39s0 weight 1
545 nexthop via 192.168.161.13 dev enp39s0 weight 1
546 nexthop via 192.168.161.14 dev enp39s0 weight 1
547 nexthop via 192.168.161.15 dev enp39s0 weight 1
548 nexthop via 192.168.161.16 dev enp39s0 weight 1
549 nexthop via 192.168.161.2 dev enp39s0 weight 1
550 nexthop via 192.168.161.3 dev enp39s0 weight 1
551 nexthop via 192.168.161.4 dev enp39s0 weight 1
552 nexthop via 192.168.161.5 dev enp39s0 weight 1
553 nexthop via 192.168.161.6 dev enp39s0 weight 1
554 nexthop via 192.168.161.7 dev enp39s0 weight 1
555 nexthop via 192.168.161.8 dev enp39s0 weight 1
556 nexthop via 192.168.161.9 dev enp39s0 weight 1
557
558Once installed into the FIB, FRR currently has little control over what
559nexthops are choosen to forward packets on. Currently the Linux kernel
560has a `fib_multipath_hash_policy` sysctl which dictates how the hashing
561algorithm is used to forward packets.
562
b03d3432
PG
563.. _zebra-mpls:
564
565MPLS Commands
566=============
567
568You can configure static mpls entries in zebra. Basically, handling MPLS
569consists of popping, swapping or pushing labels to IP packets.
570
571MPLS Acronyms
572-------------
573
574:abbr:`LSR (Labeled Switch Router)`
575 Networking devices handling labels used to forward traffic between and through
576 them.
577
578:abbr:`LER (Labeled Edge Router)`
579 A Labeled edge router is located at the edge of an MPLS network, generally
580 between an IP network and an MPLS network.
581
582MPLS Push Action
583----------------
584
585The push action is generally used for LER devices, which want to encapsulate
586all traffic for a wished destination into an MPLS label. This action is stored
587in routing entry, and can be configured like a route:
588
03750f1e 589.. clicmd:: ip route NETWORK MASK GATEWAY|INTERFACE label LABEL
b03d3432 590
56f0bea7 591 NETWORK and MASK stand for the IP prefix entry to be added as static
b03d3432
PG
592 route entry.
593 GATEWAY is the gateway IP address to reach, in order to reach the prefix.
594 INTERFACE is the interface behind which the prefix is located.
595 LABEL is the MPLS label to use to reach the prefix abovementioned.
596
597 You can check that the static entry is stored in the zebra RIB database, by
598 looking at the presence of the entry.
599
600 ::
601
602 zebra(configure)# ip route 1.1.1.1/32 10.0.1.1 label 777
603 zebra# show ip route
604 Codes: K - kernel route, C - connected, S - static, R - RIP,
605 O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
606 T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
607 F - PBR,
608 > - selected route, * - FIB route
609
610 S>* 1.1.1.1/32 [1/0] via 10.0.1.1, r2-eth0, label 777, 00:39:42
611
612MPLS Swap and Pop Action
613------------------------
614
615The swap action is generally used for LSR devices, which swap a packet with a
616label, with an other label. The Pop action is used on LER devices, at the
617termination of the MPLS traffic; this is used to remove MPLS header.
618
03750f1e 619.. clicmd:: mpls lsp INCOMING_LABEL GATEWAY OUTGOING_LABEL|explicit-null|implicit-null
b03d3432
PG
620
621 INCOMING_LABEL and OUTGOING_LABEL are MPLS labels with values ranging from 16
622 to 1048575.
623 GATEWAY is the gateway IP address where to send MPLS packet.
624 The outgoing label can either be a value or have an explicit-null label header. This
625 specific header can be read by IP devices. The incoming label can also be removed; in
626 that case the implicit-null keyword is used, and the outgoing packet emitted is an IP
627 packet without MPLS header.
628
629You can check that the MPLS actions are stored in the zebra MPLS table, by looking at the
630presence of the entry.
631
b03d3432
PG
632.. clicmd:: show mpls table
633
634::
635
636 zebra(configure)# mpls lsp 18 10.125.0.2 implicit-null
637 zebra(configure)# mpls lsp 19 10.125.0.2 20
638 zebra(configure)# mpls lsp 21 10.125.0.2 explicit-null
639 zebra# show mpls table
640 Inbound Outbound
641 Label Type Nexthop Label
642 -------- ------- --------------- --------
643 18 Static 10.125.0.2 implicit-null
644 19 Static 10.125.0.2 20
645 21 Static 10.125.0.2 IPv4 Explicit Null
646
647
4c6f9934
HS
648.. _zebra-srv6:
649
4ccd4033 650Segment-Routing IPv6
4c6f9934
HS
651====================
652
653Segment-Routing is source routing paradigm that allows
654network operator to encode network intent into the packets.
655SRv6 is an implementation of Segment-Routing
656with application of IPv6 and segment-routing-header.
657
658All routing daemon can use the Segment-Routing base
659framework implemented on zebra to use SRv6 routing mechanism.
660In that case, user must configure initial srv6 setting on
661FRR's cli or frr.conf or zebra.conf. This section shows how
662to configure SRv6 on FRR. Of course SRv6 can be used as standalone,
663and this section also helps that case.
664
4c6f9934
HS
665.. clicmd:: show segment-routing srv6 locator [json]
666
4ccd4033
HS
667 This command dump SRv6-locator configured on zebra. SRv6-locator is used
668 to route to the node before performing the SRv6-function. and that works as
669 aggregation of SRv6-function's IDs. Following console log shows two
670 SRv6-locators loc1 and loc2. All locators are identified by unique IPv6
671 prefix. User can get that information as JSON string when ``json`` key word
672 at the end of cli is presented.
4c6f9934
HS
673
674::
675
676 router# sh segment-routing srv6 locator
677 Locator:
678 Name ID Prefix Status
679 -------------------- ------- ------------------------ -------
4ccd4033
HS
680 loc1 1 2001:db8:1:1::/64 Up
681 loc2 2 2001:db8:2:2::/64 Up
682
4ccd4033
HS
683.. clicmd:: show segment-routing srv6 locator NAME detail [json]
684
685 As shown in the example, by specifying the name of the locator, you
686 can see the detailed information for each locator. Locator can be
687 represented by a single IPv6 prefix, but SRv6 is designed to share this
688 Locator among multiple Routing Protocols. For this purpose, zebra divides
689 the IPv6 prefix block that makes the Locator unique into multiple chunks,
690 and manages the ownership of each chunk.
691
692 For example, loc1 has system as its owner. For example, loc1 is owned by
693 system, which means that it is not yet proprietary to any routing protocol.
694 For example, loc2 has sharp as its owner. This means that the shaprd for
695 function development holds the owner of the chunk of this locator, and no
696 other routing protocol will use this area.
697
698::
699
700 router# show segment-routing srv6 locator loc1 detail
701 Name: loc1
702 Prefix: 2001:db8:1:1::/64
703 Chunks:
704 - prefix: 2001:db8:1:1::/64, owner: system
705
706 router# show segment-routing srv6 locator loc2 detail
707 Name: loc2
708 Prefix: 2001:db8:2:2::/64
709 Chunks:
710 - prefix: 2001:db8:2:2::/64, owner: sharp
4c6f9934 711
4c6f9934 712.. clicmd:: segment-routing
4ccd4033
HS
713
714 Move from configure mode to segment-routing node.
715
4c6f9934 716.. clicmd:: srv6
4ccd4033
HS
717
718 Move from segment-routing node to srv6 node.
719
4c6f9934
HS
720.. clicmd:: locators
721
4ccd4033
HS
722 Move from srv6 node to locator node. In this locator node, user can
723 configure detailed settings such as the actual srv6 locator.
4c6f9934 724
4c6f9934 725.. clicmd:: locator NAME
4c6f9934 726
4ccd4033
HS
727 Create a new locator. If the name of an existing locator is specified,
728 move to specified locator's configuration node to change the settings it.
4c6f9934 729
4ccd4033 730.. clicmd:: prefix X:X::X:X/M [function-bits-length 32]
4c6f9934 731
4ccd4033
HS
732 Set the ipv6 prefix block of the locator. SRv6 locator is defined by
733 RFC8986. The actual routing protocol specifies the locator and allocates a
734 SID to be used by each routing protocol. This SID is included in the locator
735 as an IPv6 prefix.
736
737 Following example console log shows the typical configuration of SRv6
738 data-plane. After a new SRv6 locator, named loc1, is created, loc1's prefix
739 is configured as ``2001:db8:1:1::/64``. If user or some routing daemon
740 allocates new SID on this locator, new SID will allocated in range of this
741 prefix. For example, if some routing daemon creates new SID on locator
742 (``2001:db8:1:1::/64``), Then new SID will be ``2001:db8:1:1:7::/80``,
743 ``2001:db8:1:1:8::/80``, and so on. Each locator has default SID that is
744 SRv6 local function "End". Usually default SID is allocated as
745 ``PREFIX:1::``. (``PREFIX`` is locator's prefix) For example, if user
746 configure the locator's prefix as ``2001:db8:1:1::/64``, then default SID
747 will be ``2001:db8:1:1:1::``)
748
749 The function bits range is 16bits by default. If operator want to change
750 function bits range, they can configure with ``function-bits-length``
751 option.
4c6f9934
HS
752
753::
754
755 router# configure terminal
756 router(config)# segment-routinig
757 router(config-sr)# srv6
758 router(config-srv6)# locators
4ccd4033
HS
759 router(config-srv6-locs)# locator loc1
760 router(config-srv6-loc)# prefix 2001:db8:1:1::/64
4c6f9934
HS
761
762 router(config-srv6-loc)# show run
763 ...
764 segment-routing
765 srv6
766 locators
4ccd4033
HS
767 locator loc1
768 prefix 2001:db8:1:1::/64
4c6f9934
HS
769 !
770 ...
771
80ca5b6d
QY
772.. _multicast-rib-commands:
773
42fc5d26
QY
774Multicast RIB Commands
775======================
776
777The Multicast RIB provides a separate table of unicast destinations which
d1a242fd 778is used for Multicast Reverse Path Forwarding decisions. It is used with
42fc5d26
QY
779a multicast source's IP address, hence contains not multicast group
780addresses but unicast addresses.
781
d1a242fd 782This table is fully separate from the default unicast table. However,
42fc5d26
QY
783RPF lookup can include the unicast table.
784
dc1046f7 785WARNING: RPF lookup results are non-responsive in this version of FRR,
42fc5d26
QY
786i.e. multicast routing does not actively react to changes in underlying
787unicast topology!
788
d1a242fd 789.. clicmd:: ip multicast rpf-lookup-mode MODE
42fc5d26 790
42fc5d26 791
d1a242fd 792 MODE sets the method used to perform RPF lookups. Supported modes:
42fc5d26 793
9eb95b3b
QY
794 urib-only
795 Performs the lookup on the Unicast RIB. The Multicast RIB is never used.
42fc5d26 796
9eb95b3b
QY
797 mrib-only
798 Performs the lookup on the Multicast RIB. The Unicast RIB is never used.
42fc5d26 799
9eb95b3b
QY
800 mrib-then-urib
801 Tries to perform the lookup on the Multicast RIB. If any route is found,
802 that route is used. Otherwise, the Unicast RIB is tried.
42fc5d26 803
9eb95b3b
QY
804 lower-distance
805 Performs a lookup on the Multicast RIB and Unicast RIB each. The result
806 with the lower administrative distance is used; if they're equal, the
807 Multicast RIB takes precedence.
42fc5d26 808
9eb95b3b
QY
809 longer-prefix
810 Performs a lookup on the Multicast RIB and Unicast RIB each. The result
811 with the longer prefix length is used; if they're equal, the
812 Multicast RIB takes precedence.
42fc5d26 813
9eb95b3b
QY
814 The `mrib-then-urib` setting is the default behavior if nothing is
815 configured. If this is the desired behavior, it should be explicitly
816 configured to make the configuration immune against possible changes in
817 what the default behavior is.
42fc5d26 818
d1a242fd 819.. warning::
1e31580f 820
d1a242fd
QY
821 Unreachable routes do not receive special treatment and do not cause
822 fallback to a second lookup.
42fc5d26 823
d1a242fd 824.. clicmd:: show ip rpf ADDR
42fc5d26 825
d1a242fd
QY
826 Performs a Multicast RPF lookup, as configured with ``ip multicast
827 rpf-lookup-mode MODE``. ADDR specifies the multicast source address to look
828 up.
42fc5d26 829
d1a242fd 830 ::
42fc5d26
QY
831
832 > show ip rpf 192.0.2.1
833 Routing entry for 192.0.2.0/24 using Unicast RIB
d1a242fd
QY
834
835 Known via "kernel", distance 0, metric 0, best
836 * 198.51.100.1, via eth0
a8c90e15 837
42fc5d26 838
d1a242fd
QY
839 Indicates that a multicast source lookup for 192.0.2.1 would use an
840 Unicast RIB entry for 192.0.2.0/24 with a gateway of 198.51.100.1.
42fc5d26 841
d1a242fd 842.. clicmd:: show ip rpf
42fc5d26 843
d1a242fd
QY
844 Prints the entire Multicast RIB. Note that this is independent of the
845 configured RPF lookup mode, the Multicast RIB may be printed yet not
846 used at all.
42fc5d26 847
d1a242fd 848.. clicmd:: ip mroute PREFIX NEXTHOP [DISTANCE]
42fc5d26 849
42fc5d26 850
d1a242fd
QY
851 Adds a static route entry to the Multicast RIB. This performs exactly as the
852 ``ip route`` command, except that it inserts the route in the Multicast RIB
853 instead of the Unicast RIB.
42fc5d26 854
0efdf0fe 855.. _zebra-route-filtering:
42fc5d26
QY
856
857zebra Route Filtering
858=====================
859
0efdf0fe 860Zebra supports :dfn:`prefix-list` s and :ref:`route-map` s to match routes
013f9762 861received from other FRR components. The permit/deny facilities provided by
d1a242fd
QY
862these commands can be used to filter which routes zebra will install in the
863kernel.
42fc5d26 864
d1a242fd 865.. clicmd:: ip protocol PROTOCOL route-map ROUTEMAP
42fc5d26 866
013f9762 867 Apply a route-map filter to routes for the specified protocol. PROTOCOL can
431dd37e 868 be:
013f9762 869
563018b9
DS
870 - any,
871 - babel,
872 - bgp,
013f9762 873 - connected,
563018b9
DS
874 - eigrp,
875 - isis,
876 - kernel,
877 - nhrp,
878 - openfabric,
013f9762
QY
879 - ospf,
880 - ospf6,
563018b9
DS
881 - rip,
882 - sharp,
883 - static,
884 - ripng,
885 - table,
886 - vnc.
887
888 If you choose any as the option that will cause all protocols that are sending
889 routes to zebra. You can specify a :dfn:`ip protocol PROTOCOL route-map ROUTEMAP`
890 on a per vrf basis, by entering this command under vrf mode for the vrf you
891 want to apply the route-map against.
d1a242fd 892
d1a242fd
QY
893.. clicmd:: set src ADDRESS
894
895 Within a route-map, set the preferred source address for matching routes
896 when installing in the kernel.
897
898
899The following creates a prefix-list that matches all addresses, a route-map
900that sets the preferred source address, and applies the route-map to all
901*rip* routes.
902
9eb95b3b 903.. code-block:: frr
42fc5d26 904
d1a242fd
QY
905 ip prefix-list ANY permit 0.0.0.0/0 le 32
906 route-map RM1 permit 10
907 match ip address prefix-list ANY
908 set src 10.0.0.1
42fc5d26 909
d1a242fd 910 ip protocol rip route-map RM1
a8c90e15 911
1d0372dd
TB
912IPv6 example for OSPFv3.
913
914.. code-block:: frr
915
916 ipv6 prefix-list ANY seq 10 permit any
917 route-map RM6 permit 10
918 match ipv6 address prefix-list ANY
919 set src 2001:db8:425:1000::3
920
921 ipv6 protocol ospf6 route-map RM6
922
923
924.. note::
925
1f74d96c
IR
926 For both IPv4 and IPv6, the IP address has to exist on some interface when
927 the route is getting installed into the system. Otherwise, kernel rejects
928 the route. To solve the problem of disappearing IPv6 addresses when the
929 interface goes down, use ``net.ipv6.conf.all.keep_addr_on_down``
930 :ref:`sysctl option <zebra-sysctl>`.
42fc5d26 931
03750f1e 932.. clicmd:: zebra route-map delay-timer (0-600)
3d34678f
DS
933
934 Set the delay before any route-maps are processed in zebra. The
935 default time for this is 5 seconds.
936
0efdf0fe 937.. _zebra-fib-push-interface:
42fc5d26
QY
938
939zebra FIB push interface
940========================
941
942Zebra supports a 'FIB push' interface that allows an external
dc1046f7 943component to learn the forwarding information computed by the FRR
d1a242fd 944routing suite. This is a loadable module that needs to be enabled
0efdf0fe 945at startup as described in :ref:`loadable-module-support`.
42fc5d26 946
dc1046f7 947In FRR, the Routing Information Base (RIB) resides inside
42fc5d26
QY
948zebra. Routing protocols communicate their best routes to zebra, and
949zebra computes the best route across protocols for each prefix. This
950latter information makes up the Forwarding Information Base
951(FIB). Zebra feeds the FIB to the kernel, which allows the IP stack in
952the kernel to forward packets according to the routes computed by
dc1046f7 953FRR. The kernel FIB is updated in an OS-specific way. For example,
d1e7591e 954the `Netlink` interface is used on Linux, and route sockets are
42fc5d26
QY
955used on FreeBSD.
956
957The FIB push interface aims to provide a cross-platform mechanism to
958support scenarios where the router has a forwarding path that is
959distinct from the kernel, commonly a hardware-based fast path. In
960these cases, the FIB needs to be maintained reliably in the fast path
961as well. We refer to the component that programs the forwarding plane
962(directly or indirectly) as the Forwarding Plane Manager or FPM.
963
80ca5b6d
QY
964.. program:: configure
965
42fc5d26 966The relevant zebra code kicks in when zebra is configured with the
9d736133
RZ
967:option:`--enable-fpm` flag and started with the module (``-M fpm``
968or ``-M dplane_fpm_nl``).
969
970.. note::
971
972 The ``fpm`` implementation attempts to connect to ``127.0.0.1`` port ``2620``
973 by default without configurations. The ``dplane_fpm_nl`` only attempts to
974 connect to a server if configured.
975
976Zebra periodically attempts to connect to the well-known FPM port (``2620``).
977Once the connection is up, zebra starts sending messages containing routes
978over the socket to the FPM. Zebra sends a complete copy of the forwarding
979table to the FPM, including routes that it may have picked up from the kernel.
980The existing interaction of zebra with the kernel remains unchanged -- that
981is, the kernel continues to receive FIB updates as before.
982
983The default FPM message format is netlink, however it can be controlled
984with the module load-time option. The modules accept the following options:
985
986- ``fpm``: ``netlink`` and ``protobuf``.
987- ``dplane_fpm_nl``: none, it only implements netlink.
42fc5d26
QY
988
989The zebra FPM interface uses replace semantics. That is, if a 'route
990add' message for a prefix is followed by another 'route add' message,
991the information in the second message is complete by itself, and
992replaces the information sent in the first message.
993
994If the connection to the FPM goes down for some reason, zebra sends
995the FPM a complete copy of the forwarding table(s) when it reconnects.
996
9d736133
RZ
997For more details on the implementation, please read the developer's manual FPM
998section.
999
1000FPM Commands
1001============
1002
1003``fpm`` implementation
1004----------------------
1005
9d736133
RZ
1006.. clicmd:: fpm connection ip A.B.C.D port (1-65535)
1007
03750f1e
QY
1008 Configure ``zebra`` to connect to a different FPM server than the default of
1009 ``127.0.0.1:2060``
9d736133 1010
9d736133
RZ
1011.. clicmd:: show zebra fpm stats
1012
1013 Shows the FPM statistics.
1014
1015 Sample output:
1016
1017 ::
1018
1019 Counter Total Last 10 secs
1020
1021 connect_calls 3 2
1022 connect_no_sock 0 0
1023 read_cb_calls 2 2
1024 write_cb_calls 2 0
1025 write_calls 1 0
1026 partial_writes 0 0
1027 max_writes_hit 0 0
1028 t_write_yields 0 0
1029 nop_deletes_skipped 6 0
1030 route_adds 5 0
1031 route_dels 0 0
1032 updates_triggered 11 0
1033 redundant_triggers 0 0
1034 dests_del_after_update 0 0
1035 t_conn_down_starts 0 0
1036 t_conn_down_dests_processed 0 0
1037 t_conn_down_yields 0 0
1038 t_conn_down_finishes 0 0
1039 t_conn_up_starts 1 0
1040 t_conn_up_dests_processed 11 0
1041 t_conn_up_yields 0 0
1042 t_conn_up_aborts 0 0
1043 t_conn_up_finishes 1 0
1044
1045
9d736133
RZ
1046.. clicmd:: clear zebra fpm stats
1047
6d8589da
RZ
1048 Reset statistics related to the zebra code that interacts with the
1049 optional Forwarding Plane Manager (FPM) component.
9d736133
RZ
1050
1051
1052``dplane_fpm_nl`` implementation
1053--------------------------------
1054
9d736133
RZ
1055.. clicmd:: fpm address <A.B.C.D|X:X::X:X> [port (1-65535)]
1056
1057 Configures the FPM server address. Once configured ``zebra`` will attempt
1058 to connect to it immediately.
1059
03750f1e
QY
1060 The ``no`` form disables FPM entirely. ``zebra`` will close any current
1061 connections and will not attempt to connect to it anymore.
9d736133 1062
5f66e9a0
RZ
1063.. clicmd:: fpm use-next-hop-groups
1064
1065 Use the new netlink messages ``RTM_NEWNEXTHOP`` / ``RTM_DELNEXTHOP`` to
1066 group repeated route next hop information.
1067
f41ddc27 1068 The ``no`` form uses the old known FPM behavior of including next hop
03750f1e 1069 information in the route (e.g. ``RTM_NEWROUTE``) messages.
5f66e9a0 1070
9d736133
RZ
1071.. clicmd:: show fpm counters [json]
1072
1073 Show the FPM statistics (plain text or JSON formatted).
1074
1075 Sample output:
1076
1077 ::
1078
1079 FPM counters
1080 ============
1081 Input bytes: 0
1082 Output bytes: 308
1083 Output buffer current size: 0
1084 Output buffer peak size: 308
1085 Connection closes: 0
1086 Connection errors: 0
1087 Data plane items processed: 0
1088 Data plane items enqueued: 0
1089 Data plane items queue peak: 0
1090 Buffer full hits: 0
1091 User FPM configurations: 1
1092 User FPM disable requests: 0
1093
1094
9d736133
RZ
1095.. clicmd:: clear fpm counters
1096
6d8589da
RZ
1097 Reset statistics related to the zebra code that interacts with the
1098 optional Forwarding Plane Manager (FPM) component.
9d736133
RZ
1099
1100
3fdcb303
MS
1101.. _zebra-dplane:
1102
1103Dataplane Commands
1104==================
1105
1106The zebra dataplane subsystem provides a framework for FIB
1107programming. Zebra uses the dataplane to program the local kernel as
1108it makes changes to objects such as IP routes, MPLS LSPs, and
1109interface IP addresses. The dataplane runs in its own pthread, in
1110order to off-load work from the main zebra pthread.
1111
1112
3fdcb303
MS
1113.. clicmd:: show zebra dplane [detailed]
1114
1115 Display statistics about the updates and events passing through the
1116 dataplane subsystem.
1117
1118
3fdcb303
MS
1119.. clicmd:: show zebra dplane providers
1120
1121 Display information about the running dataplane plugins that are
1122 providing updates to a FIB. By default, the local kernel plugin is
1123 present.
1124
1125
3fdcb303
MS
1126.. clicmd:: zebra dplane limit [NUMBER]
1127
1128 Configure the limit on the number of pending updates that are
1129 waiting to be processed by the dataplane pthread.
1130
1131
42fc5d26
QY
1132zebra Terminal Mode Commands
1133============================
1134
d1a242fd 1135.. clicmd:: show ip route
42fc5d26 1136
d1a242fd 1137 Display current routes which zebra holds in its database.
42fc5d26
QY
1138
1139::
1140
42fc5d26
QY
1141 Router# show ip route
1142 Codes: K - kernel route, C - connected, S - static, R - RIP,
d1a242fd 1143 B - BGP * - FIB route.
42fc5d26 1144
d1a242fd
QY
1145 K* 0.0.0.0/0 203.181.89.241
1146 S 0.0.0.0/0 203.181.89.1
1147 C* 127.0.0.0/8 lo
42fc5d26 1148 C* 203.181.89.240/28 eth0
a8c90e15 1149
42fc5d26 1150
d1a242fd 1151.. clicmd:: show ipv6 route
42fc5d26 1152
da3ef85b 1153.. clicmd:: show [ip|ipv6] route [PREFIX] [nexthop-group]
fbe49edb 1154
da3ef85b
SW
1155 Display detailed information about a route. If [nexthop-group] is
1156 included, it will display the nexthop group ID the route is using as well.
1157
c15dc24f
RW
1158.. clicmd:: show interface [NAME] [{vrf VRF|brief}] [json]
1159
1160.. clicmd:: show interface [NAME] [{vrf all|brief}] [json]
1161
da3ef85b
SW
1162.. clicmd:: show interface [NAME] [{vrf VRF|brief}] [nexthop-group]
1163
da3ef85b
SW
1164.. clicmd:: show interface [NAME] [{vrf all|brief}] [nexthop-group]
1165
1166 Display interface information. If no extra information is added, it will
1167 dump information on all interfaces. If [NAME] is specified, it will display
1168 detailed information about that single interface. If [nexthop-group] is
1169 specified, it will display nexthop groups pointing out that interface.
42fc5d26 1170
c15dc24f
RW
1171 If the ``json`` option is specified, output is displayed in JSON format.
1172
d1a242fd 1173.. clicmd:: show ip prefix-list [NAME]
42fc5d26 1174
d1a242fd 1175.. clicmd:: show route-map [NAME]
42fc5d26 1176
d1a242fd 1177.. clicmd:: show ip protocol
42fc5d26 1178
854cdf7c 1179.. clicmd:: show ip forward
42fc5d26 1180
d1a242fd
QY
1181 Display whether the host's IP forwarding function is enabled or not.
1182 Almost any UNIX kernel can be configured with IP forwarding disabled.
1183 If so, the box can't work as a router.
42fc5d26 1184
854cdf7c 1185.. clicmd:: show ipv6 forward
42fc5d26 1186
d1a242fd 1187 Display whether the host's IP v6 forwarding is enabled or not.
42fc5d26 1188
d1a242fd 1189.. clicmd:: show zebra
42fc5d26 1190
d1a242fd
QY
1191 Display various statistics related to the installation and deletion
1192 of routes, neighbor updates, and LSP's into the kernel.
42fc5d26 1193
46677ed2
DS
1194.. clicmd:: show zebra client [summary]
1195
1196 Display statistics about clients that are connected to zebra. This is
1197 useful for debugging and seeing how much data is being passed between
1198 zebra and it's clients. If the summary form of the command is choosen
1199 a table is displayed with shortened information.
1200
46677ed2
DS
1201.. clicmd:: show zebra router table summary
1202
1203 Display summarized data about tables created, their afi/safi/tableid
1204 and how many routes each table contains. Please note this is the
1205 total number of route nodes in the table. Which will be higher than
1206 the actual number of routes that are held.
1207
a8ad9a89 1208.. clicmd:: show nexthop-group rib [ID] [vrf NAME] [singleton [ip|ip6]] [type]
083954e9
DS
1209
1210 Display nexthop groups created by zebra. The [vrf NAME] option
1211 is only meaningful if you have started zebra with the --vrfwnetns
1212 option as that nexthop groups are per namespace in linux.
1213 If you specify singleton you would like to see the singleton
a8ad9a89
SW
1214 nexthop groups that do have an afi. [type] allows you to filter those
1215 only coming from a specific NHG type (protocol).
da3ef85b 1216
d29fd1b7 1217.. clicmd:: show <ip|ipv6> zebra route dump [<vrf> VRFNAME]
1218
1219 It dumps all the routes from RIB with detailed information including
1220 internal flags, status etc. This is defined as a hidden command.
1221
13b01f2f
JAG
1222
1223Router-id
1224=========
1225
1226Many routing protocols require a router-id to be configured. To have a
1227consistent router-id across all daemons, the following commands are available
1228to configure and display the router-id:
1229
03750f1e 1230.. clicmd:: [ip] router-id A.B.C.D
13b01f2f 1231
17d1eafa 1232 Allow entering of the router-id. This command also works under the
98a3fb0a 1233 vrf subnode, to allow router-id's per vrf.
13b01f2f 1234
03750f1e 1235.. clicmd:: [ip] router-id A.B.C.D vrf NAME
17d1eafa
DS
1236
1237 Configure the router-id of this router from the configure NODE.
1238 A show run of this command will display the router-id command
1239 under the vrf sub node. This command is deprecated and will
1240 be removed at some point in time in the future.
98a3fb0a 1241
98a3fb0a 1242.. clicmd:: show [ip] router-id [vrf NAME]
13b01f2f
JAG
1243
1244 Display the user configured router-id.
1245
98a3fb0a
SM
1246For protocols requiring an IPv6 router-id, the following commands are available:
1247
03750f1e 1248.. clicmd:: ipv6 router-id X:X::X:X
98a3fb0a
SM
1249
1250 Configure the IPv6 router-id of this router. Like its IPv4 counterpart,
1251 this command works under the vrf subnode, to allow router-id's per vrf.
1252
98a3fb0a 1253.. clicmd:: show ipv6 router-id [vrf NAME]
13b01f2f 1254
98a3fb0a 1255 Display the user configured IPv6 router-id.
8d150f52 1256
1f74d96c
IR
1257.. _zebra-sysctl:
1258
229f842b
TA
1259sysctl settings
1260===============
cbacd05b
DS
1261
1262The linux kernel has a variety of sysctl's that affect it's operation as a router. This
1263section is meant to act as a starting point for those sysctl's that must be used in
1264order to provide FRR with smooth operation as a router. This section is not meant
1265as the full documentation for sysctl's. The operator must use the sysctl documentation
229f842b
TA
1266with the linux kernel for that. The following link has helpful references to many relevant
1267sysctl values: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
1268
1269Expected sysctl settings
4c9cf198 1270------------------------
cbacd05b
DS
1271
1272.. option:: net.ipv4.ip_forward = 1
1273
229f842b
TA
1274 This global option allows the linux kernel to forward (route) ipv4 packets incoming from one
1275 interface to an outgoing interface. If this is set to 0, the system will not route transit
1276 ipv4 packets, i.e. packets that are not sent to/from a process running on the local system.
cbacd05b 1277
229f842b 1278.. option:: net.ipv4.conf.{all,default,<interface>}.forwarding = 1
cbacd05b 1279
229f842b
TA
1280 The linux kernel can selectively enable forwarding (routing) of ipv4 packets on a per
1281 interface basis. The forwarding check in the kernel dataplane occurs against the ingress
1282 Layer 3 interface, i.e. if the ingress L3 interface has forwarding set to 0, packets will not
1283 be routed.
cbacd05b 1284
229f842b
TA
1285.. option:: net.ipv6.conf.{all,default,<interface>}.forwarding = 1
1286
1287 This per interface option allows the linux kernel to forward (route) transit ipv6 packets
1288 i.e. incoming from one Layer 3 interface to an outgoing Layer 3 interface.
1289 The forwarding check in the kernel dataplane occurs against the ingress Layer 3 interface,
1290 i.e. if the ingress L3 interface has forwarding set to 0, packets will not be routed.
1291
1292.. option:: net.ipv6.conf.all.keep_addr_on_down = 1
cbacd05b
DS
1293
1294 When an interface is taken down, do not remove the v6 addresses associated with the interface.
1295 This option is recommended because this is the default behavior for v4 as well.
1296
229f842b 1297.. option:: net.ipv6.route.skip_notify_on_dev_down = 1
cbacd05b
DS
1298
1299 When an interface is taken down, the linux kernel will not notify, via netlink, about routes
1300 that used that interface being removed from the FIB. This option is recommended because this
1301 is the default behavior for v4 as well.
8d150f52 1302
229f842b 1303Optional sysctl settings
4c9cf198 1304------------------------
229f842b
TA
1305
1306.. option:: net.ipv4.conf.{all,default,<interface>}.bc_forwarding = 0
1307
1308 This per interface option allows the linux kernel to optionally allow Directed Broadcast
1309 (i.e. Routed Broadcast or Subnet Broadcast) packets to be routed onto the connected network
1310 segment where the subnet exists.
1311 If the local router receives a routed packet destined for a broadcast address of a connected
1312 subnet, setting bc_forwarding to 1 on the interface with the target subnet assigned to it will
1313 allow non locally-generated packets to be routed via the broadcast route.
1314 If bc_forwarding is set to 0, routed packets destined for a broadcast route will be dropped.
1315 e.g.
1316 Host1 (SIP:192.0.2.10, DIP:10.0.0.255) -> (eth0:192.0.2.1/24) Router1 (eth1:10.0.0.1/24) -> BC
1317 If net.ipv4.conf.{all,default,<interface>}.bc_forwarding=1, then Router1 will forward each
1318 packet destined to 10.0.0.255 onto the eth1 interface with a broadcast DMAC (ff:ff:ff:ff:ff:ff).
1319
1320.. option:: net.ipv4.conf.{all,default,<interface>}.arp_accept = 1
1321
1322 This per interface option allows the linux kernel to optionally skip the creation of ARP
1323 entries upon the receipt of a Gratuitous ARP (GARP) frame carrying an IP that is not already
1324 present in the ARP cache. Setting arp_accept to 0 on an interface will ensure NEW ARP entries
1325 are not created due to the arrival of a GARP frame.
1326 Note: This does not impact how the kernel reacts to GARP frames that carry a "known" IP
1327 (that is already in the ARP cache) -- an existing ARP entry will always be updated
1328 when a GARP for that IP is received.
1329
1330.. option:: net.ipv4.conf.{all,default,<interface>}.arp_ignore = 0
1331
1332 This per interface option allows the linux kernel to control what conditions must be met in
1333 order for an ARP reply to be sent in response to an ARP request targeting a local IP address.
1334 When arp_ignore is set to 0, the kernel will send ARP replies in response to any ARP Request
1335 with a Target-IP matching a local address.
1336 When arp_ignore is set to 1, the kernel will send ARP replies if the Target-IP in the ARP
1337 Request matches an IP address on the interface the Request arrived at.
1338 When arp_ignore is set to 2, the kernel will send ARP replies only if the Target-IP matches an
1339 IP address on the interface where the Request arrived AND the Sender-IP falls within the subnet
1340 assigned to the local IP/interface.
1341
1342.. option:: net.ipv4.conf.{all,default,<interface>}.arp_notify = 1
1343
1344 This per interface option allows the linux kernel to decide whether to send a Gratuitious ARP
1345 (GARP) frame when the Layer 3 interface comes UP.
1346 When arp_notify is set to 0, no GARP is sent.
1347 When arp_notify is set to 1, a GARP is sent when the interface comes UP.
1348
1349.. option:: net.ipv6.conf.{all,default,<interface>}.ndisc_notify = 1
1350
1351 This per interface option allows the linux kernel to decide whether to send an Unsolicited
1352 Neighbor Advertisement (U-NA) frame when the Layer 3 interface comes UP.
1353 When ndisc_notify is set to 0, no U-NA is sent.
1354 When ndisc_notify is set to 1, a U-NA is sent when the interface comes UP.
1355
8d150f52
MS
1356Debugging
1357=========
1358
1359.. clicmd:: debug zebra mpls [detailed]
1360
1361 MPLS-related events and information.
1362
1363.. clicmd:: debug zebra events
1364
1365 Zebra events
1366
1367.. clicmd:: debug zebra nht [detailed]
1368
1369 Nexthop-tracking / reachability information
1370
1371.. clicmd:: debug zebra vxlan
1372
1373 VxLAN (EVPN) events
1374
1375.. clicmd:: debug zebra pseudowires
1376
1377 Pseudowire events.
1378
1379.. clicmd:: debug zebra packet [<recv|send>] [detail]
1380
1381 ZAPI message and packet details
1382
1383.. clicmd:: debug zebra kernel
1384
1385 Kernel / OS events.
1386
1387.. clicmd:: debug zebra kernel msgdump [<recv|send>]
1388
1389 Raw OS (netlink) message details.
1390
1391.. clicmd:: debug zebra rib [detailed]
1392
1393 RIB events.
1394
1395.. clicmd:: debug zebra fpm
1396
1397 FPM (forwarding-plane manager) events.
1398
1399.. clicmd:: debug zebra dplane [detailed]
1400
1401 Dataplane / FIB events.
1402
1403.. clicmd:: debug zebra pbr
1404
1405 PBR (policy-based routing) events.
1406
1407.. clicmd:: debug zebra mlag
1408
1409 MLAG events.
1410
1411.. clicmd:: debug zebra evpn mh <es|mac|neigh|nh>
1412
1413 EVPN multi-hop events.
1414
1415.. clicmd:: debug zebra nexthop [detail]
1416
1417 Nexthop and nexthop-group events.
1418