routeadm(8) on Solnix vs Linux and the BSDs

routeadm is the illumos command at /usr/sbin/routeadm. It stores IP forwarding and routing-daemon settings and applies them through SMF services. The BSDs and Linux have no such command in the bundle: they use sysctl, which reads and writes kernel variables by MIB name.

What Solnix runs

A default Solnix system runs the illumos routeadm at /usr/sbin/routeadm (also /sbin/routeadm). No other variants are shipped. The same forwarding and routing services can be administered with svcadm(8) using the FMRIs svc:/network/ipv4-forwarding:default, svc:/network/ipv6-forwarding:default, svc:/network/routing/route:default and svc:/network/routing/ripng:default.

Differences

Compared withTopicWhat differs
all fourtool modelrouteadm configures named options (ipv4-forwarding, ipv4-routing and so on) backed by SMF services. sysctl gets or sets kernel variables addressed by MIB-style names. The sysctl pages do not name a forwarding variable, and routeadm does not use MIB names.
Source: Solnix routeadm(8) DESCRIPTION, OPTIONS; Linux sysctl(8) DESCRIPTION; FreeBSD/OpenBSD/NetBSD sysctl(8) DESCRIPTION
all fourchanges are staged, not immediaterouteadm -e, -d and -r make persistent changes but do not touch the running system until routeadm -u is run (or the next boot). sysctl pages describe setting kernel state directly with name=value.
Source: Solnix routeadm(8) OPTIONS (-e, -d, -r, -u); Linux sysctl(8) SYNOPSIS; NetBSD sysctl(8) -w
all fourrouting daemonsrouteadm also manages routing daemons: -s routing-svcs=, ipv4-routing-daemon=, ipv4-routing-daemon-args= and ipv4-routing-stop-cmd= (and IPv6 equivalents). -l and -m list and change a daemon service's routing properties. The sysctl pages document nothing like this.
Source: Solnix routeadm(8) DESCRIPTION, -s, -l, -m; sysctl(8) pages for all four
all fourdefaults and revertSolnix documents defaults per option: ipv4-forwarding is disabled by default, and ipv4-routing is enabled unless /etc/defaultrouter exists. routeadm -r reverts an option to its system default. The sysctl pages state no forwarding defaults and have no revert flag.
Source: Solnix routeadm(8) -r, ipv4-forwarding, ipv4-routing; sysctl(8) pages for all four
Linux-p meaningrouteadm -p [option] prints the configuration in parsable format. Linux sysctl -p file-or-regexp loads settings from files. A script using -p for one will not work with the other.
Source: Solnix routeadm(8) -p; Linux sysctl(8) SYNOPSIS (-p file-or-regexp)
FreeBSD, NetBSD-d and -e meaningrouteadm -d disables an option and -e enables it. On FreeBSD and NetBSD, sysctl -d prints a variable's description and sysctl -e separates name and value with '='. Neither changes state.
Source: Solnix routeadm(8) -e, -d; FreeBSD sysctl(8) -d, -e; NetBSD sysctl(8) -d, -e
NetBSD-r meaningrouteadm -r reverts an option to its default. NetBSD sysctl -r prints raw binary output, and sysctl -w is the flag that sets a value.
Source: Solnix routeadm(8) -r; NetBSD sysctl(8) -r, -w
FreeBSD-l meaning and jailsrouteadm -l fmri lists a routing service's properties. FreeBSD sysctl -l shows variable lengths. Where FreeBSD sysctl takes -j jail, routeadm takes -R root-dir, which must not reference a non-global zone's root.
Source: Solnix routeadm(8) -l, -R; FreeBSD sysctl(8) -l, -j
all fouralternate rootrouteadm -R root-dir applies changes under another root directory. The sysctl pages show no equivalent option.
Source: Solnix routeadm(8) -R; sysctl(8) pages for all four
all fourshowing current stateWith no arguments routeadm reports the current configuration. OpenBSD sysctl lists all values by default with no parameters, while FreeBSD and NetBSD sysctl need -a. Linux sysctl takes variable names (--all is mentioned in NOTES).
Source: Solnix routeadm(8) DESCRIPTION; OpenBSD sysctl(8) -a; FreeBSD sysctl(8) -a; NetBSD sysctl(8) -a; Linux sysctl(8) NOTES

Everyday tasks

TaskSolnixLinuxFreeBSDOpenBSDNetBSD
show current configurationrouteadm (or routeadm -p for parsable output)sysctl variable (--all is mentioned in NOTES)sysctl -asysctl -asysctl -a
enable a settingrouteadm -e ipv4-forwardingsysctl variable=valuesysctl name=valuesysctl name=valuesysctl -w name=value
disable a settingrouteadm -d ipv4-forwardingsysctl variable=valuesysctl name=valuesysctl name=valuesysctl -w name=value
apply staged changes to the running systemrouteadm -u————
load settings from a file—sysctl -p filesysctl -f filenamesysctl -f filesysctl -f file
control the forwarding service directlysvcadm on svc:/network/ipv4-forwarding:default————

Standards

  • POSIX: routeadm is not a POSIX.1-2024 utility.
  • OpenBSD: sysctl first appeared in 4.4BSD.
  • NetBSD: sysctl first appeared in 4.4BSD.

Writing portable scripts

  • Do not assume routeadm exists off Solnix. Branch on whether routeadm or sysctl is present, and use a different command for each.
  • On Solnix, follow routeadm -e/-d/-r with routeadm -u if the change must take effect without a reboot.

Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.