ndd(8) on Solnix vs Linux and the BSDs
On Solnix, ndd is the illumos /usr/sbin/ndd. It reads and writes parameters of TCP/IP kernel drivers, addressed as a driver plus a parameter name. The page marks it deprecated in favour of dladm(8) and ipadm(8). It is not a sysctl clone: there is no dotted MIB name and no list-everything option.
The manual pages
What Solnix runs
A default Solnix system runs the illumos ndd at /usr/sbin/ndd. No other variants are shipped. The page says ndd is deprecated: use dladm(8) for Layer 2 properties and ipadm(8) for Layer 3 and Layer 4 properties (IP, TCP, UDP). The extracted flags -e -s -t come from the single option word -set and are not real options.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| all four | addressing a parameter | ndd takes two arguments, a driver and a parameter. sysctl takes one dotted MIB-style name. On Linux the available parameters are those under /proc/sys/, and procfs is required.Source: Solnix ndd(8) SYNOPSIS; Linux sysctl(8) DESCRIPTION; FreeBSD sysctl(8) DESCRIPTION; OpenBSD sysctl(8) DESCRIPTION; NetBSD sysctl(8) DESCRIPTION |
| all four | how to set a value | ndd uses the option word -set, then driver parameter value. The value must be given with -set. Linux, FreeBSD and OpenBSD set with name=value and no option. NetBSD synopsis shows -w name=value for setting.Source: Solnix ndd(8) SYNOPSIS, DESCRIPTION; Linux sysctl(8) SYNOPSIS; FreeBSD sysctl(8) SYNOPSIS; OpenBSD sysctl(8) SYNOPSIS; NetBSD sysctl(8) SYNOPSIS, -w |
| all four | listing parameters | ndd lists parameters one driver at a time: by convention a driver has a read-only parameter named ? that lists its parameters. There is no ndd option to dump everything. FreeBSD, OpenBSD and NetBSD sysctl have -a. The Linux page mentions an --all option.Source: Solnix ndd(8) DESCRIPTION (parameter ?); FreeBSD sysctl(8) -a; OpenBSD sysctl(8) -a; NetBSD sysctl(8) -a; Linux sysctl(8) Verboten parameters |
| all four | scope | ndd supports only drivers that implement the TCP/IP protocol family. sysctl is described as general kernel state, or as parameters under /proc/sys on Linux. Do not expect ndd to cover non-network settings.Source: Solnix ndd(8) DESCRIPTION; FreeBSD sysctl(8) DESCRIPTION; OpenBSD sysctl(8) DESCRIPTION; NetBSD sysctl(8) DESCRIPTION; Linux sysctl(8) DESCRIPTION |
| all four | stability of names | The Solnix page warns that parameter names and the ioctl() interface ndd uses may change between releases, and that scripts should expect this. The sysctl pages in the bundle carry no equivalent warning. Source: Solnix ndd(8) DESCRIPTION, NOTES |
| all four | persistent settings | The ndd page names no config file or boot-time mechanism. Linux reads /etc/sysctl.conf and sysctl.d directories. FreeBSD, OpenBSD and NetBSD sysctl can load a file with -f. Linux uses -p file. The manual does not say how to make ndd changes persist.Source: Solnix ndd(8) (no file documented); Linux sysctl(8) NOTES, SYNOPSIS -p; FreeBSD sysctl(8) -f; OpenBSD sysctl(8) -f; NetBSD sysctl(8) -f |
| FreeBSD, OpenBSD, NetBSD | output and filtering options | ndd has no options for output control. sysctl has -n (values only), -q (quiet), and on FreeBSD and NetBSD -e (name=value output) and -d (descriptions). FreeBSD also has -t (type), -N (names only) and -h.Source: Solnix ndd(8) SYNOPSIS; FreeBSD sysctl(8) -n, -q, -e, -d, -t, -N, -h; OpenBSD sysctl(8) -n, -q; NetBSD sysctl(8) -n, -q, -e, -d |
| FreeBSD | jails and zones | FreeBSD sysctl -j jail runs inside a jail. The ndd page documents no zone or jail option.Source: FreeBSD sysctl(8) -j; Solnix ndd(8) SYNOPSIS |
| all four | report size limit | If a TCP driver's report is truncated, ndd's 64K limit on reports sent through it may be the cause. The sysctl pages state no such limit. FreeBSD has -B bufsize to set the read buffer size.Source: Solnix ndd(8) NOTES; FreeBSD sysctl(8) -B |
| FreeBSD | read-only parameters | The ndd page only says some parameters may be read-only, with no list. FreeBSD sysctl(8) has a table with a Changeable column, and -W shows writable variables.Source: Solnix ndd(8) DESCRIPTION; FreeBSD sysctl(8) -W, Changeable table |
Everyday tasks
| Task | Solnix | Linux | FreeBSD | OpenBSD | NetBSD |
|---|---|---|---|---|---|
| read one parameter | ndd driver parameter | sysctl variable | sysctl name | sysctl name | sysctl name |
| set a parameter | ndd -set driver parameter value | sysctl variable=value | sysctl name=value | sysctl name=value | sysctl -w name=value |
| list parameters | ndd driver ? | sysctl --all | sysctl -a | sysctl -a | sysctl -a |
| load settings from a file | — | sysctl -p file-or-regexp | sysctl -f filename | sysctl -f file | sysctl -f file |
| print a description of a parameter | — | — | sysctl -d name | — | sysctl -d name |
| manage network properties (preferred over ndd) | dladm (Layer 2), ipadm (Layer 3 and 4) | — | — | — | — |
Standards
- POSIX: ndd is not a POSIX.1-2024 utility.
- Solnix: The page states that ndd is deprecated and that parameters and the ioctl() interface may change from release to release. It names no standard.
Writing portable scripts
- Do not script ndd for new work on Solnix: the page marks it deprecated. Use ipadm or dladm, and expect ndd parameter names to change between releases.
- Wrap parameter get and set in a function that branches on the tool present (ndd, or sysctl). Setting syntax differs: ndd
-setdriver param value, sysctl name=value, NetBSD sysctl-wname=value.
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.