# napalm-bsd NAPALM drivers for **FreeBSD** (`freebsd`) and **OpenBSD** (`openbsd`) hosts, over SSH, built on [napalm-device-types](https://git.netork.io/NAPALM/napalm-device-types)' `OSDriver`. Written for netOrk, which provisions and manages BSD VMs (NetOrk/netork#792). ## Design - One shared `BsdDriver` (`napalm_bsd/base.py`) holds the SSH layer and every reader whose tools agree between the BSDs. `FreeBSDDriver` and `OpenBSDDriver` name only the commands that differ (hostname, release, kernel, hardware, `netstat -rnW` vs `-rn`). - Every command runs on its own SSH **exec channel** (`run_on_transport` from napalm-device-types): no PTY to parse a prompt from, stdout and stderr apart, a real exit status. `run_command()` / `open_stream()` are public (`CommandChannelMixin`). - Root comes from `sudo -S` with the sudo password on stdin (never on a command line), or `sudo -n` without one, as in napalm-linux. netOrk provisions `sudo` on BSD VMs for that reason; `doas` cannot read a password from stdin. - Parsing is in `napalm_bsd/parse.py`, pure functions tested on output recorded from real systems (`tests/fixtures/`, each directory's `COMMANDS.txt` lists what produced it). ## Supported getters | Getter | FreeBSD | OpenBSD | Source | |---|---|---|---| | `get_facts` | ✓ | ✓ | `kern.hostname`/`hostname`, `freebsd-version`/`uname`, `kenv smbios.*`/`hw.*`, `kern.boottime` | | `get_interfaces`, `get_interfaces_ip` | ✓ | ✓ | `ifconfig -a` | | `get_route_to` | ✓ | ✓ | `netstat -rnW` / `netstat -rn` | | `get_arp_table` | ✓ | ✓ | `arp -an` | | `get_lldp_neighbors` | `{}` | `{}` | no LLDP daemon in either base system | | `get_users`, `get_processes`, `get_cron_jobs` | ✓ | ✓ | `/etc/passwd`+`/etc/group`, `ps … lstart`, system crontab + `crontab -l` | Packages, services, updates (#799) and SNMP (#800) follow. ## Connection arguments `optional_args`: `port` (22), `key_file`, `sudo_password`, `allow_agent`, `look_for_keys` (both off by default). ## Development ```bash pip install "napalm-device-types @ git+https://git.netork.io/NAPALM/napalm-device-types.git" pip install -e ".[dev]" pytest ```