FRR-ZEBRA(8)
π FRR-ZEBRA(8) β the bestie edition π
okay so hi bestie π«Ά you found the manual page for frr-zebra, brought to you by the FRR girlies. sit down, grab a strawberry drink π, and let's get into it because this one's lowkey iconic.
β¨ NAME β¨
frr-zebra β a routing manager for use with its associated FRRouting components. that's the whole name section. she's a manager. she manages. π
πΈ SYNOPSIS πΈ
zebra [-h] [-v]
zebra [-d|-t|-dt] [-C] [-f config-file] [-i pid-file] [-z zclient-path]
[-u user] [-g group] [-A vty-addr] [-P vty-port] [-M module[:options]]
[-N pathspace] [--vty_socket vty-path] [--moduledir module-path]
π¦ DESCRIPTION π¦
zebra is a routing manager that implements the zebra route engine. zebra supports all protocol daemons in the FRRouting suite. like, all of them. every single one. she does not play favourites. π
π OPTIONS π
here are the OPTIONS available for the zebra command. there's a lot. we're getting through all of them. no skipping. periodt.
β¨ HELP AND VERSION β¨
-h,--helpβ prints a short description of the daemon's command line options. the classic "what does any of this even do" button.-v,--versionβ prints version and build information for the daemon. receipts. π§Ύ
both of these options inhibit normal operation and will immediately exit. they do not run the thing. they just say their piece and leave. honestly? iconic.
π PROCESS CONTROL π
these options control background operation, aka the whole "do I live in your terminal or do I ghost you" situation:
-d,--daemonβ launches the process in background/daemon mode, forking and detaching from the terminal.
the parent process will delay its exit until the daemon/child has finished its initialization and has entered its main loop. this is important for zebra startup because the other daemons will attempt to connect to zebra. a return from zebra -d therefore guarantees its readiness to accept these connections. she said "I'll text you when I'm ready" and she MEANT it. π«Ά
-t,--terminalβ opens an interactive VTY session on the terminal, allowing for both state and configuration operations. note that the terminal starts operating after startup has completed and the configuration file has been loaded.
the process will exit when end of file is detected on the terminal. it is possible to daemonize a process started with -t (but without -d) by sending SIGQUIT to the process (normally mapped to a ^keypress.)
the combination of --daemon and --terminal will delay the daemon from going into background until the terminal session ends (by end of file.)
if the process receives SIGINT (e.g. a ^C keypress) in this mode, it will exit instead of daemonizing.
it is safe to suspend (SIGTSTP / ^Z) the terminal session opened by the previous two options; this will only stop the terminal but not the protocol daemon itself (which runs in a separate second process.) so yes, you can pause the chat and your girl keeps working in the background. multitasking queen. β¨
π CONFIGURATION AND PATHS π
the following options control configuration and file system locations for frr processes:
-f,--config_fileconfig-file β specify a configuration file to be used instead of the default/etc/frr/<daemon>.conf.
note that the daemon will attempt to write to this file if the write file command is issued on its VTY interface or through vtysh. so she's not just reading it, bestie. she edits. π
-C,--dryrunβ load the configuration file and check its validity, then exit. a vibe check for your config. β¨-i,--pid_filepid-file β output a pid file to a location other than the default/var/run/frr/<daemon>.pid.-z,--socketzclient-path β override the path of the ZAPI socket used to communicate between zebra and the various protocol daemons. the default is/var/run/frr/zserv.api. the value of this option must be the same across all daemons. everyone's in the same group chat, no exceptions. π±-N,--pathspacepathspace β insert pathspace into all default paths, changing the defaults to:
/etc/frr/pathspace/<daemon>.conf
/var/run/frr/pathspace/<daemon>.pid
/var/run/frr/pathspace/<daemon>.vty
/var/run/frr/pathspace/zserv.api
Β΄.Β΄ and Β΄/Β΄ characters will not be accepted in pathspace, but the empty string will be accepted.
note that this only changes the respective defaults β it has no effect on the respective path if the -f, -i, -z or --vty_socket options are used.
the purpose of this option is to easily group all file system related bits together for running multiple fully-separate "logical routers" on a system, particularly with Linux network namespaces. groups of daemons running with distinct pathspace values will be completely unaware of each other and not interact in any way. separate friend groups. zero drama. π¦
this option does not do any system setup (like network namespaces.) that must be done by the user, for example by running:
ip netns exec namespace <daemon> -N namespace
π PROCESS CREDENTIALS π
-u,--useruser β (default:frr)-g,--groupgroup β (default:frr)
change the user/group which the daemon will switch to.
-S,--skip_runasβ skip setting the process effective user and group.
note that there is an additional group, frrvty, which controls group ownership of the VTY sockets. the name of this group cannot currently be changed, and user must be a member of this group.
π VTY SETUP π
these following options control the daemon's VTY (interactive command line) interface. the interface is available over TCP, using the telnet protocol, as well as through the vtysh frontend.
-A,--vty_addrvty-addr β specify an IP/IPv6 address to bind the TCP VTY interface to. it is generally recommended to specify::1or127.0.0.1. for reasons of backwards compatibility, the default is to listen on all interfaces. (yes. all. she's an open book. maybe close the book, bestie. π)-P,--vty_portvty-port β override the daemon's default TCP VTY port (each daemon has a different default value upwards of 2600, listed below.) specifying0disables the TCP VTY interface.
default ports are:
zebra 2601
ripd 2602
ripngd 2603
ospfd 2604
bgpd 2605
ospf6d 2606
isisd 2608
babeld 2609
nhrpd 2610
pimd 2611
ldpd 2612
eigrpd 2613
pbrd 2615
staticd 2616
bfdd 2617
fabricd 2618
vrrpd 2619
port 2607 is used for ospfd's Opaque LSA API. (she skipped a number for reasons of her own. it's giving β¨mysteriousβ¨.)
--vty_socketvty-path β overrides the directory used for the<daemon>.vtysockets.vtyshconnects to these sockets in order to access each daemon's VTY. default:/var/run/frr[/<pathspace>]
NB: unlike the other options, this option specifies a directory, not a full path.
this option is primarily used by the SNAP packaging system, its semantics may change. it should not be necessary in most other scenarios.
π§ MODULE LOADING π§
frr supports optional dynamically loadable modules, although these can only be loaded at startup. the set of available modules may vary across distributions and packages, and modules may be available for installation as separate packages.
-M,--modulemodule[:options] β load a module named module, optionally passing options to it.
if there is a Β΄/Β΄ character in module, the value is assumed to be a pathname to a module.
if there is no Β΄/Β΄ character, the module directory (see next option) is searched first for a module named "<daemon>_<module>.so", then for "<module>.so". this allows for a module to exist in variations appropriate for particular daemons, e.g. zebra_snmp and bgp_snmp, with the correct one selected by -M snmp. so thoughtful. so considerate. π
the meaning of options is specific to the module being loaded. most modules currently ignore it.
modules are loaded in the order as listed on the command line. this is not generally relevant.
--moduledirmodule-path β look for modules in the module-path directory instead of the default/usr/lib/frr/modules. (this path is not affected by the-Noption.)
the list of loaded modules can be inspected at runtime with the show modules VTY command.
-b,--batchβ runs in batch mode, zebra parses its config and exits. in and out. no small talk. π-s,--nl-bufsize<netlink-buffer-size>β set netlink receive buffer size. there are cases where the zebra daemon can't handle a flood of netlink messages from the kernel. if you ever see"recvmsg overrun"messages in the zebra log, you are in trouble.
the solution is to increase the receive buffer of the netlink socket. note that kernel < 2.6.14 doesn't allow increasing it over the maximum value defined in /proc/sys/net/core/rmem_max. if you want to do it, you have to increase the maximum before starting zebra.
note that this affects Linux only.
-n,--vrfwnetnsβ enable namespace VRF backend. by default, the VRF backend relies on VRF-lite support from the Linux kernel. this option permits discovering Linux named network namespaces and mapping it to FRR VRF contexts.
this option is deprecated. please use the global -w option instead. she's asking you to move on. respectfully. π
π ROUTES π
-r,--retainβ when the program terminates, do not flush routes installed by zebra from the kernel. she leaves them right where they are. haunting the place. πΈ-R,--routing-table<tableno>β specify which kernel routing table Zebra should communicate with. if this option is not specified the default table (RT_TABLE_MAIN) is used.
π FILES π
/usr/lib/frr/zebraβ the default location of the zebra binary./etc/frr/zebra.confβ the default location of the zebra config file.$(PWD)/zebra.logβ if the zebra process is configured to output logs to a file, then you will find this file in the directory where you started zebra. wherever you launched her is where she journals. main character energy. π
β οΈ WARNING β οΈ
this man page is intended to be a quick reference for command line options. the definitive document is the info file frr latest or the documentation available on the project website at <https://frrouting.org/>.
like yeah this page is cute but the real lore lives elsewhere. go read the actual docs when it counts, bestie. π«Ά
π©Ί DIAGNOSTICS π©Ί
the daemon may log to standard output, to a VTY, to a log file, or through syslog to the system logs. FRR supports many debugging options, see the Info file, web docs or source for details. she's always talking somewhere. you just have to know where to listen. π§
π SEE ALSO π
frr-zebra(8), vtysh(1), frr-ripd(8), frr-ripngd(8), frr-ospfd(8), frr-ospf6d(8), frr-bgpd(8), frr-isisd(8), frr-babeld(8), frr-nhrpd(8), frr-pimd(8), frr-pbrd(8), frr-ldpd(8), frr-eigrpd(8), frr-staticd(8), frr-fabricd(8), frr-vrrpd(8), mtracebis(8) <https://frrouting.org/>
the whole friend group, honestly. go say hi to all of them. π
π BUGS π
FRR eats bugs for breakfast. if you have food for the maintainers, please email <dev@lists.frrouting.org>.
Copyright: 2017, FRR
and that's the whole thing, bestie π this was the FRR manual's frr-zebra(8), in its latest incarnation, dated Sep 22, 2026, dropped by the lovely people at FRR. you're welcome. slay responsibly. periodt. πβ¨
π¦ where this page comes from
- ubuntu stonking: frr 10.7.1-3ubuntu1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms