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.
The manual pages
- Solnix: routeadm(8) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: sysctl(8) procps-4.0.6 (different command, similar job)
- FreeBSD: sysctl(8) 15.1-RELEASE (different command, similar job)
- OpenBSD: sysctl(8) 8.0 (different command, similar job)
- NetBSD: sysctl(8) 11.0 (different command, similar job)
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 with | Topic | What differs |
|---|---|---|
| all four | tool model | routeadm 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 four | changes are staged, not immediate | routeadm -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 four | routing daemons | routeadm 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 four | defaults and revert | Solnix 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 meaning | routeadm -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 meaning | routeadm -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 meaning | routeadm -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 jails | routeadm -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 four | alternate root | routeadm -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 four | showing current state | With 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
| Task | Solnix | Linux | FreeBSD | OpenBSD | NetBSD |
|---|---|---|---|---|---|
| show current configuration | routeadm (or routeadm -p for parsable output) | sysctl variable (--all is mentioned in NOTES) | sysctl -a | sysctl -a | sysctl -a |
| enable a setting | routeadm -e ipv4-forwarding | sysctl variable=value | sysctl name=value | sysctl name=value | sysctl -w name=value |
| disable a setting | routeadm -d ipv4-forwarding | sysctl variable=value | sysctl name=value | sysctl name=value | sysctl -w name=value |
| apply staged changes to the running system | routeadm -u | — | — | — | — |
| load settings from a file | — | sysctl -p file | sysctl -f filename | sysctl -f file | sysctl -f file |
| control the forwarding service directly | svcadm 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-uif 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.