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 guarantees its readiness to accept these connections.

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.)

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.

´.´ 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.

This option does not do any system setup (like network namespaces.) This must be done by the user, for example by running:

Specify an IP/IPv6 address to bind the TCP VTY interface to. It is generally recommended to specify ::1 or 127.0.0.1. For reasons of backwards compatibility, the default is to listen on all interfaces.

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.

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.

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.

This man page is intended to be a quick reference for command line options. The definitive document is the info file frr 7.3 or the documentation available on the project website at https://frrouting.org/.