FRR-SHARPD(8)

✨ FRR-SHARPD ✨ (section 8 of the manual, bestie)

okay so this is the manual page for frr-sharpd β€” that's the SHARP routing engine you use alongside FRRouting. it lives in section 8 (that's the "system admin / daemons" section, iykyk) and the whole thing is part of the FRR project. let's get into it πŸ’…


🌸 SYNOPSIS 🌸

sharpd [-h] [-v]

sharpd [-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 πŸ¦‹

so like, sharpd is a routing component that works with the FRRouting engine. that's the whole vibe. it's a daemon, it does routing things, it hangs out with the rest of the FRR crew. periodt ✨


πŸ’… OPTIONS πŸ’…

these are the OPTIONS available for the sharpd command. all of them. every single one. no skipping. πŸ’–

πŸŽ€ HELP AND VERSION πŸŽ€

  • -h, --help β€” prints a short lil description of the daemon's command line options. so you're not out here guessing.
  • -v, --version β€” prints version + build info for the daemon. receipts, basically. 🧾
bestie, heads up: BOTH of these options inhibit normal operation and will immediately exit. like, the daemon isn't starting, it's just telling you stuff and dipping. πŸ™ˆ

πŸ”₯ PROCESS CONTROL πŸ”₯

these options control background operation, aka how the daemon exists in the world:

  • -d, --daemon β€” launches the process in background/daemon mode, forking and detaching from the terminal. it's giving "independent main character energy." πŸ‘‘

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. so like, it doesn't just yeet itself into the void β€” it waits til it's actually ready. 🫢

  • -t, --terminal β€” opens an interactive VTY session right there 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. so, startup first, vibes second. ✨

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 <#cmdoption-d> and --terminal <#cmdoption-t> will delay the daemon from going into background until the terminal session ends (by end of file.) so they're holding hands. 🫱🫲
  • if the process receives SIGINT (e.g. a Ctrl+C keypress) in this mode, it will exit instead of daemonizing. nope, we're not doing that today.
  • it is safe to suspend (SIGTSTP / Ctrl+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 the terminal naps, the daemon keeps grinding. πŸ’€βž‘οΈπŸ”₯

πŸ“ CONFIGURATION AND PATHS πŸ“

the following options control configuration and file system locations for frr processes:

  • -f, --config_file config-file β€” specify a configuration file to be used instead of the default /etc/frr/<daemon>.conf file.

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 it's not read-only, she writes back. ✍️

  • -C, --dryrun β€” load the configuration file and check its validity, then exit. it's the "try it on in the fitting room but don't buy" option. πŸŽ€
  • -i, --pid_file pid-file β€” output a pid file to a location other than the default /var/run/frr/<daemon>.pid.
  • -z, --socket zclient-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. no mixing and matching, bestie. 🚫
  • -N, --pathspace pathspace β€” 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. yes, empty is fine, dots and slashes are not. make it make sense. 🀷

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. they overrule her, periodt.

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. ships passing in the night, truly. πŸ›³οΈπŸŒ™

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

ip netns exec namespace <daemon> -N namespace

πŸ‘‘ PROCESS CREDENTIALS πŸ‘‘

  • -u, --user user β€” (default: frr)
  • -g, --group group β€” (default: frr)

change the user/group which the daemon will switch to. glow-up, but for permissions. ✨

  • -S, --skip_runas β€” skip setting the process effective user and group. just don't do the thing.
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. non-negotiable, bestie. πŸ’…

🌈 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. two ways to pull up. πŸšͺπŸšͺ

  • -A, --vty_addr vty-addr β€” 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. (yes, all of them. bold. 😳)
  • -P, --vty_port vty-port β€” override the daemon's default TCP VTY port (each daemon has a different default value upwards of 2600, listed below.) specifying 0 disables the TCP VTY interface. so 0 = bye bye TCP VTY.

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. (that's why it's missing from the list, she's busy. πŸ’€)

  • --vty_socket vty-path β€” overrides the directory used for the <daemon>.vty sockets. vtysh connects 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. read that again, bestie. πŸ“‚

this option is primarily used by the SNAP packaging system, its semantics may change. it should not be necessary in most other scenarios. so like, unless you know, you don't need it. 🫢

🧚 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. so what you get depends on your distro's mood that day. 🌦️

  • -M, --module module[: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. she took the scenic route. πŸ›£οΈ

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. it's like a matching outfit for each daemon. πŸ‘—

the meaning of options is specific to the module being loaded. most modules currently ignore it. they're unbothered. πŸ™ˆ

modules are loaded in the order as listed on the command line. this is not generally relevant. (but now you know, and knowing is half the battle. ✨)

  • --moduledir module-path β€” look for modules in the module-path directory instead of the default /usr/lib/frr/modules. (this path is not affected by the -N option.) noted, no pathspace for you, module dir. πŸš«πŸ“

the list of loaded modules can be inspected at runtime with the show modules VTY command. πŸ”


πŸ“ FILES πŸ“

  • /usr/lib/frr/sharpd β€” the default location of the sharpd binary.
  • /etc/frr/sharpd.conf β€” the default location of the sharpd config file.
  • $(PWD)/sharpd.log β€” if the sharpd process is configured to output logs to a file, then you will find this file in the directory where you started sharpd. so like, where you were standing when you launched her. πŸ“

⚠️ WARNING ⚠️

this man page is intended to be a quick reference for command line options. the definitive document is the info file frr 10.7.1 or the documentation available on the project website at <https://frrouting.org/>. so if you need the real real, go there. this is the group chat version. πŸ’¬


🩺 DIAGNOSTICS 🩺

the daemon may log to standard output, to a VTY, to a log file, or through syslog to the system logs. she's versatile like that. FRR supports many debugging options, see the Info file, web docs or source for details. ngl there's a lot going on in there. πŸ”


πŸ‘€ 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), and the website at <https://frrouting.org/>. the whole friend group fr fr 🫢


πŸ› BUGS πŸ›

FRR eats bugs for breakfast. if you have food for the maintainers, please email <<dev@lists.frrouting.org>>. they're hungry, bestie. 🍽️


2017, FRR


and that's the whole page, babes! πŸ’– this was FRR-SHARPD(8) from the FRR manual, version 10.7.1, dated Oct 01, 2026, footer tagged FRR-SHARPD(8). slay, stay safe, and don't forget your pathspace. βœ¨πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from
  • fedora 44: frr 10.7.1-1.fc44 Β· GPL-2.0-or-later AND ISC AND LGPL-2.0-or-later AND BSD-2-Clause AND BSD-3-Clause AND (GPL-2.0-or-later OR ISC) AND MIT
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms