flowadm(8) on Solnix vs Linux and the BSDs
flowadm is the illumos command at /usr/sbin/flowadm for creating and managing per-link flows. A flow is a set of Layer 3/4 attributes with its own kernel resources and optional bandwidth limits. The nearest Linux tool is tc, which uses qdiscs, classes and filters instead, and the option letters do not carry over.
The manual pages
- Solnix: flowadm(8) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: tc(8) iproute2-7.0.0 (different command, similar job)
What Solnix runs
A default Solnix system runs the illumos flowadm at /usr/sbin/flowadm (also /sbin/flowadm). No other variants are shipped. Statistics are no longer in flowadm; use flowstat(8). The bundle contains no FreeBSD, OpenBSD or NetBSD counterpart page, so nothing is claimed about the BSDs.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| Linux | traffic model | flowadm defines a flow from Layer 3 and Layer 4 attributes, and the flow gets its own kernel queues and processing threads. tc builds traffic control from three object kinds: qdiscs, classes and filters. Source: Solnix flowadm(8) DESCRIPTION; Linux tc(8) DESCRIPTION |
| Linux | command structure | flowadm uses six subcommands: add-flow, remove-flow, show-flow, set-flowprop, reset-flowprop and show-flowprop. tc uses object words (qdisc, class, filter, chain, monitor) with add, change, replace, delete and show verbs. Source: Solnix flowadm(8) SYNOPSIS; Linux tc(8) SYNOPSIS |
| Linux | identifying the link | flowadm names the data link with -l link, and the page says physical links, virtual NICs and link aggregations all work. tc names the device as a positional dev DEV argument.Source: Solnix flowadm(8) SYNOPSIS, DESCRIPTION; Linux tc(8) SYNOPSIS |
| Linux | -o meaning | In flowadm show-flow and show-flowprop, -o field[,...] selects output fields. In tc, -o (-oneline) prints each record on one line.Source: Solnix flowadm(8) SYNOPSIS (show-flow -o); Linux tc(8) OPTIONS -o, -oneline |
| Linux | -p meaning | In flowadm add-flow, set-flowprop and reset-flowprop, -p takes property names or prop=value pairs. In show-flow it is a bare flag. In tc, -p (-pretty) is an output format.Source: Solnix flowadm(8) SYNOPSIS; Linux tc(8) SYNOPSIS (FORMAT -p[retty]) |
| Linux | -t meaning | flowadm add-flow, remove-flow, set-flowprop and reset-flowprop accept -t; the trimmed page does not describe it. In tc, -t (-timestamp) prints a timestamp before each tc monitor event.Source: Solnix flowadm(8) SYNOPSIS; Linux tc(8) OPTIONS -t, -timestamp |
| Linux | statistics | Statistics display from flowadm show-flow, and the show-usage subcommand, were removed; flowstat(8) replaces them. tc takes statistics from the -s format option on show commands.Source: Solnix flowadm(8) NOTES; Linux tc(8) SYNOPSIS (FORMAT -s[tatistics]) |
| Linux | alternate root and batch mode | flowadm configuration subcommands take -R root-dir. The flowadm page documents no batch or network-namespace option. tc has -b/-batch to read commands from a file or stdin, and -n/-netns to select a network namespace.Source: Solnix flowadm(8) SYNOPSIS; Linux tc(8) OPTIONS -b, -n |
| Linux | flow without a limit | flowadm can create a flow with no bandwidth limit, only to give that traffic its own queues and resources. The tc page does not describe an equivalent. Source: Solnix flowadm(8) DESCRIPTION; Linux tc(8) DESCRIPTION |
| Linux | direction | The tc page says shaping and scheduling happen only on egress, and policing on ingress. The flowadm page says inbound and outbound packets are matched to flows, and does not split behaviour by direction. Source: Linux tc(8) DESCRIPTION; Solnix flowadm(8) DESCRIPTION |
| Linux | exit status | flowadm documents 0 for success and >0 for any error. The tc page documents an exit status only for batch mode: with -force it returns non-zero if any command failed.Source: Solnix flowadm(8) EXIT STATUS; Linux tc(8) -force |
Everyday tasks
| Task | Solnix | Linux |
|---|---|---|
| define a flow or traffic match on a link | flowadm add-flow -l link -a attr=value[,...] flow | tc filter add dev DEV ... flowid flow-id |
| remove a flow or filter | flowadm remove-flow -l link (or: flowadm remove-flow flow) | tc filter delete dev DEV ... |
| set bandwidth or other properties | flowadm set-flowprop -p prop=value[,...] flow | tc class change dev DEV parent qdisc-id ... (qdisc specific parameters) |
| show configured flows or classes | flowadm show-flow [-l link] [flow] | tc class show dev DEV; tc filter show dev DEV |
| show flow properties | flowadm show-flowprop [-l link] [flow] | — |
| show traffic statistics | flowstat(8) | tc -s qdisc show dev DEV |
Standards
- POSIX: flowadm is not a POSIX.1-2024 utility.
- Solnix: Interface Stability: Committed.
Writing portable scripts
- flowadm and tc share no syntax. Wrap them in separate per-OS functions and branch on which command exists rather than translating options.
- Do not parse flowadm show-flow output for statistics; that was removed, so call flowstat(8) instead.
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.