run_device_action("fix_snmp") and get_snmp_config for both drivers, as
decided in NetOrk/netork#800: net-snmp from packages rather than the base
daemons, because it answers UCD-SNMP-MIB, which netOrk's health metrics
read.
- fix_snmp installs net-snmp, writes the configuration netOrk uses on
Linux (v2c, community "public", agentAddress udp:161) through stdin as
root, enables and restarts the agent (FreeBSD `service snmpd`, OpenBSD
`rcctl ... netsnmpd`, as `snmpd` is OpenBSD's own daemon) and asks it
for sysDescr. It stops at the first step that fails and says why.
- get_snmp_config reports a running net-snmp's community and port.
- FreeBSD's install_package bootstraps pkg on a classic system that never
had it instead of waiting for an answer that never comes.
Checked live: FreeBSD from a bare system, OpenBSD again over an existing
setup. Memory, swap and load answer on both; FreeBSD's ssCpuIdle about a
minute after start; OpenBSD's CPU figures from net-snmp are wrong (#800).
The write side NetOrk/netork#799 needs, on both drivers.
- Packages: get_packages (FreeBSD `pkg query` with the repository as
source, nothing on a classic system without pkg; OpenBSD `pkg_info`),
install_package / uninstall_package as root (`pkg install`/`pkg
delete`, `pkg_add -I`/`pkg_delete`), names checked before anything is
sent, a failure raised with what the tool printed.
- Updates: get_available_updates. FreeBSD `pkg upgrade -n`, with
`security` from VuXML (`pkg audit`: True for a listed package, False for
any other, None when the audit could not run); OpenBSD `pkg_add -u -n
-v` (no security verdict). Base-system patches are one `base-system`
entry, as decided in #799: OpenBSD's `syspatch -c`, and on a classic
FreeBSD what `freebsd-update` has fetched; on pkgbase the base system is
packages from FreeBSD-base.
- Services: get_services lists the enabled ones (FreeBSD `service ...
status` as root, as root-only pidfiles hide daemons otherwise, without
root when sudo refuses; OpenBSD `rcctl check`), manage_service runs
start/stop/restart/enable/disable as root and returns success and
output.
Fixtures recorded on the FreeBSD 15.1 and OpenBSD 7.9 VMs with genuinely
outdated packages (FreeBSD pointed at the latest branch, an OpenBSD
package taken back to its release build). Checked live on both, including
a service restart and installing and removing a package.
get_listening_sockets() in the shape of napalm-device-types'
ListeningSocketsMixin, whose ss/cgroup reading is Linux's, and with its
rule: read as root first, and without root when that brings nothing back,
which the reading reports as `attributed: False`.
- FreeBSD: `sockstat -46lq -P tcp,udp`, which sees every socket either way.
- OpenBSD: `fstat -n` as root (the sockets nothing is connected to; port 0
is unbound), `netstat -an` without root, as fstat shows a user only
their own processes; those sockets come without a process.
- Addresses as ss prints them: `*` becomes 0.0.0.0 or :: by family, IPv6
without brackets, a zone (`fe80::1%lo0`) becomes the interface. One entry
per socket, the first process holding it.
No get_kernel_facts on purpose: KernelFactsMixin reports a Linux kernel's
modules and CONFIG_ options, which a BSD kernel does not have.
Fixtures recorded on the FreeBSD 15.1 and OpenBSD 7.9 VMs with test
listeners on 127.0.0.1 and ::1 (NetOrk/netork#798).
FreeBSDDriver (`freebsd`) and OpenBSDDriver (`openbsd`) on a shared
BsdDriver, for the BSD VMs netOrk provisions and BSD hosts added by hand
(NetOrk/netork#798).
- SSH over exec channels (napalm-device-types' run_on_transport): no PTY,
stdout and stderr apart, real exit codes; run_command()/open_stream()
are public. Root through `sudo -S` with the password on stdin, or
`sudo -n` without one.
- Facts: hostname, release and running kernel (freebsd-version / uname),
hardware from SMBIOS (kenv) or hw.* sysctls, uptime from kern.boottime.
- Interfaces and addresses (ifconfig -a: ether/lladdr, hex netmasks,
scoped IPv6), routes (netstat -rn, OpenBSD's abbreviated networks
written out, host/broadcast/loopback entries left out), ARP (FreeBSD's
sentences, OpenBSD's table), users and groups, processes (lstart read as
one five-word field), cron jobs (system crontab and the login user's).
- Parsers are pure functions, tested on output recorded from FreeBSD 15.1
(hand-installed and cloud image) and OpenBSD 7.9 (NetOrk/netork#793),
with internal addresses replaced by documentation ranges.