Commit Graph
106 Commits
Author SHA1 Message Date
Mattias Walström fb89d47c90 yanger: Allow to read back SSIDs encoded with utf-8 2026-01-27 11:09:54 +01:00
Mattias Walström 01e82547f7 confd: Wi-Fi: Rename RSSI to signal-strength
RSSI is a vendor-specific relative index (0-255), while dBm is an
absolute power measurement. Since we report dBm values from iw,
rename the leaf to signal-strength for accuracy.
2026-01-27 11:09:51 +01:00
Joachim Wiberg 87a754eab1 statd: Add rx/tx bitrate to WiFi station operational data
Extend the WiFi station mode with rx-speed and tx-speed leaves,
mirroring what already exists for AP mode connected stations.
Display bitrates in 'show interface <wifi>' detailed view.

Also standardize speed units to kbps/Mbps across the YANG model.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-24 19:17:48 +01:00
Mattias Walström 3aa912164a yanger: wifi: Refactor to only use iw data (except for scanning)
Before it was a mess with wpa_cli and hostapd_cli commands, but now
we have a iw => json tool (iw.py) so we can use iw to get the information.
2026-01-24 15:01:32 +01:00
Mattias Walström 0ac4c4ca6f yanger: show proper phy name for Wi-Fi phys 2026-01-23 13:03:58 +01:00
Mattias Walström 1f913b5c7e yang: wifi: Use correct type for counters 2026-01-23 13:03:57 +01:00
Joachim Wiberg b6a7d0f294 cli: new admin-exec level command 'show nacm'
Show operational details about nacm and user//group mappings.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-23 06:12:21 +01:00
Joachim Wiberg f23b14d15e statd: backport finit patch to fix 'show services'
Service descriptions or command arguments may contain special characters
that need to be escaped in JSON strings.

Example:

{
  ...
  "command": "udhcpc -f -p /run/dhcp-client-wan.pid -t 3 -T 5 -A 30 -a1000 -S -R -o -O 1 -O 3 -O 6 -O 12 -O 15 -O 28 -O 42 -i wan -V "NanoPi R2S"",
  ...
}

Also, wrap add_services() in a try/except instead of testing for keys.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-18 23:31:45 +01:00
Mattias Walström 7e5da21cf6 Add support for WireGuard
Almost full support for WireGuard

admin@server:/> show interface wg0
name                : wg0
type                : wireguard
index               : 10
mtu                 : 1420
operational status  : up
ipv4 addresses      : 10.0.0.1/24 (static)
ipv6 addresses      : fd00::1/64 (static)
peers               : 2

  Peer 1:
    public key        : ROaZyvJc5DzA2XUAAeTj2YlwDsy2w0lr3t+rWj2imAk=
    status            : UP
    endpoint          : 192.168.10.2:51821
    latest handshake  : 2025-12-09T22:51:38+00:00
    transfer tx       : 1412 bytes
    transfer rx       : 1324 bytes

  Peer 2:
    public key        : Om9CPLYdK3l93GauKrq5WXo/gbcD+1CeqFpobRLLkB4=
    status            : UP
    endpoint          : 2001:db8:3c4d:20::2:51822
    latest handshake  : 2025-12-09T22:51:38+00:00
    transfer tx       : 1812 bytes
    transfer rx       : 428 bytes
in-octets           : 1752
out-octets          : 3224

admin@server:/>
2026-01-09 11:11:32 +01:00
Mattias Walström 8e9fd27e24 yanger: hardware: Do not crash if failing to read /run/system.json 2026-01-09 11:08:32 +01:00
Mattias Walström 651a274470 yanger: Do not crash if fails to get ethernet links 2026-01-09 10:23:52 +01:00
Joachim WibergandGitHub 84688864ef Merge pull request #1343 from kernelkit/misc-wifi-fixes 2026-01-06 23:47:16 +01:00
Mattias Walström f86436e739 yanger: Fix wifi status
use sh -c to expand the *
2026-01-06 20:20:22 +01:00
Joachim Wiberg efe4903d9c confd: initial support for NTP server
Fixes #904

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-03 22:13:24 +01:00
Mattias Walström c8f989e965 yanger: Use HOST.run(ls) instead of glob.glob()
This allows to run yanger remote.

Signed-off-by: Mattias Walström <lazzer@gmail.com>
2026-01-02 22:32:58 +01:00
Mattias Walström da37904108 WiFi: Refactor statd (python) implementation
* Add support for AP (list connected stations)
* Add scan-mode (Scan without create a fully configured station)

Signed-off-by: Mattias Walström <lazzer@gmail.com>
2026-01-02 22:32:57 +01:00
Mattias WalströmandGitHub fce59ef93c Merge pull request #1327 from kernelkit/container-limits
Container limits
2025-12-25 21:55:43 +01:00
Tobias WaldekranzandGitHub a42b4240f7 Merge pull request #1299 from kernelkit/statd-add-service-stat
Add service runtime statistics and table formatting framework
2025-12-23 10:20:08 +01:00
Mattias Walström 0a9664eea6 yanger: Allow lldpd to be disabled (or crashed)
Allow to query operational even with no lldpd running.
2025-12-18 08:53:03 +01:00
Joachim Wiberg 4941b6f91a confd: add support for container resource limits
Add resource-limit and resource-usage containers to YANG model.  Podman,
and later conmon, enforce CPU and memory limits in a delegated cgroupsv2
hierarchy managed by Finit.

Resource usage is queried from 'podman inspect', which has more nodes
than what is currently possible to limit.

Requires Finit 4.15, or later.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-18 07:26:40 +01:00
Richard Alpe f653cacd1a statd: populate service runtime statistic
Populate operational runtime statistics for services.

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-12-17 15:34:07 +01:00
Joachim Wiberg 024b51cc6a statd: add support for ip forwarding operational state
This patch unlocks "routing interfaces" support in the ietf-routing yang
model.  An array of interface with IP forwarding enabled.

Note, because of #515 we skip IPv6 forwarding for now.  This will in the
near future be handled by a per-interface force_forwarding sysctl flag.

The 'show interface [ifname]' admin-exec command has been extended with
a Flags field for a quick overview of which interfaces have forwarding
currently enabled.

Fixes #647

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-05 11:12:03 +01:00
Joachim Wiberg 1cbc9a49a2 confd: initial support for rip
Fixes #582

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-05 10:58:35 +01:00
Joachim Wiberg 51f289a273 statd: reduce log warning to debug
This fixes the following log message on systems w/o firewall enabled
dumping operational data:

Dec  2 09:24:57 test-00-02-00 yanger[5352]: Failed to connect to firewalld D-Bus: org.freedesktop.DBus.Error.ServiceUnknown: The name org.fedoraproject.FirewallD1 was not provided by any .service files

[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-02 11:02:06 +01:00
Joachim Wiberg fdb02895fb statd: add pwm fan support
Due to their nature we cannot read out the RPM of the pwm fans on the
BPi-R3.  But we can at least show it's alive, or steering out a signal
to the fan.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-30 17:16:21 +01:00
Joachim Wiberg 6c194007a1 statd: fix double timezone in DHCP lease expiry timestamps
The isoformat() method already includes the timezone offset when the
datetime object has timezone info.  Appending "+00:00" created an
invalid double-timezone suffix like "2025-11-30T13:13:49+00:00+00:00"
which failed YANG validation.

Error was:
  admin@bpi-26-60-00:/> show dhcp-server
  Error running sysrepocfg: Command '['sysrepocfg', '-f', 'json', '-X',
  '-d', 'operational', '-x', '/infix-dhcp-server:dhcp-server']' returned
  non-zero exit status 1.
  No interface data retrieved.

With syslog showing:
  statd[4291]: libyang[0]: Invalid union value
  "2025-11-30T13:13:49+00:00+00:00" - no matching subtype found

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-30 13:36:44 +01:00
Joachim Wiberg 173daf8fce statd: skip CAN interfaces in IETF interface model
Skip CAN interfaces that don't fit the IETF interface model.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-27 17:03:08 +01:00
Joachim Wiberg f79c0ee903 statd: extend ospf operational data to replace vtysh commands in cli
Collect more data from FRR to the OSPF and BFD operational datastore.
Refactor CLI commands to use the YANG datastore instead of vtysh.

Additionally, the BFD command(s) have been moved to the top level of
admin-exec, which is where vtysh has them.

Finally, preparing for future OSPFv3 support, all commands have been
given a new context under 'show ip ospf'.  Deprecation warnings have
been added to the existing 'show ospf' commands.

Also, for consistency, all commands names in plural have been changed to
their singular form: routes -> route, interfaes -> interface, etc.  This
is what vtysh, Cisco, and others do as well.

Fixes #1190

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-12 22:28:18 +01:00
Joachim Wiberg f1f2c66934 statd: wifi: Add error handling to prevent interface query failures
Wrap wpa_cli operations in try-except blocks to ensure WiFi errors don't
cause sysrepocfg to fail.  Interface queries now return data for working
interfaces even when WiFi has issues.

Fixes:

    admin@rpi-79-41-1d:/> show interfaces
    Error running sysrepocfg: Command '['sysrepocfg', '-f', 'json', '-X', '-d', 'operational', '-x', '/ietf-interfaces:interfaces']' returned non-zero exit status 1.
    No interface data retrieved.
    admin@rpi-79-41-1d:/>

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 14:44:43 +01:00
Joachim Wiberg 4b55e38741 board/aarch64: use %m modifier in default xPi hostnames
The xPi's usually don't have a VPD so the chassis mac-address probed at
boot is usually null in /run/system.json.  This commit adds a fallbkack
mechanism to populate this field so it can be used for unique hostnames
even on these boards.

Ths ietf-hardware.yang model does not have a notion of physical address,
so we augment one tht is generic enought to be used for other hardware
components than Ethernet, similar to what ietf-interfaces.yang use.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:08 +01:00
Joachim Wiberg d1fda087ec statd: refactor, use parent node for sensor relationships
For more advanced hardware with multiple sensor types per device
(e.g., SFP modules with temperature, voltage, current, and power
sensors), use the YANG parent/child relationship to group related
sensors together for better presentation.

Changes:
 - Remove parent/parent-rel-pos deviations from infix-hardware.yang
 - Create parent components (class: module) for multi-sensor devices
 - Add parent references to child sensor components
 - Add human-readable descriptions from hwmon labels
 - Extend hwmon discovery to support voltage, current, and power
 - Normalize sensor names: strip vendor prefixes (mt7915_phy0 -> phy0)
 - Remove redundant TYPE column, clarify units (V -> VDC, add spaces)
 - Simplify child sensor display by stripping parent prefix
 - Fix "show system" to only show CPU temperature and fan speed

Example output from "show hardware":

  NAME                     VALUE               STATUS
  ===================================================
  sfp1:
    Rx Power               0.000 W             ok
    Tx Power               0.001 W             ok
    Vcc                    3.35 VDC            ok
    Bias                   0.006 A             ok
    Temperature            30.3 °C             ok

  sfp2:
    Rx Power               0.000 W             ok
    Tx Power               0.001 W             ok
    Vcc                    3.34 VDC            ok
    Bias                   0.006 A             ok
    Temperature            32.0 °C             ok

  cpu                      42.8 °C             ok
  phy0                     47.0 °C             ok
  phy1                     53.0 °C             ok

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:04 +01:00
Joachim Wiberg 46919e2d1f statd: add chassis information to ietf-hardware.yang
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:04 +01:00
Joachim Wiberg 08c9c97823 confd: add system resource usage to ietf-system.yang
This commit adds resource usage: memory, loadavg, and filesystem usage
by augmenting ietf-system:/system-state.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:03 +01:00
Joachim Wiberg 8b10cce172 confd: add support for temperature sensors in ietf-hardware.yang
- Remove class deviation to allow iana-hardware:sensor
 - Populate sensor operational data from /sys/class/thermal
 - Extend 'show hardware'

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:03 +01:00
Joachim Wiberg 804fd1e08e statd: fix "show firewall" crash if no zone description
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:25:58 +01:00
Richard Alpe c119436f97 confd: augment new services container to ietf-system
This patch adds operational data support for system services. The
data is in a generic format but is intended to be able to represent
finit information (initctl) nicely.

The reason for augmenting this to ietf-system and not to
infix-services is that we consider this generic system information
which is totally disconnected from what ever services infix might
provide.

In this first state we only support pid, name, description and state.
Making the data look something like:

  "infix-system:services": {
    "service": [
      {
        "pid": 1185,
        "name": "udevd",
        "status": "running",
        "description": "Device event daemon (udev)"
      }]

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-27 15:30:29 +01:00
Joachim Wiberg 3224f49b65 confd: initial zone-based firewall support, based on firewalld
Add supoprt for infix-firewall.yang, modeled on the zone-based firewalld
The terminology is a mix of firewalld, classic netfilter and inspired by
Ubiquity.  E.g., zone 'policy' -> 'action', and the zone matrix overview.

 - Port forwarding allows forwarding a range of ports
 - Operational data comes from firewalld active rules
 - Firewall logging goes to /var/log/firewall.log
 - Show implicit/built-in rules and zones (HOST) in firewall matrix,
   includes "locked" policy for the default-drop behavior
 - The zone services field in admin-exec 'show firewall' shows ANY when
   the zone default action is set to 'accept'
 - Zone 'forwarding' and 'masquerade' settings live in Infix in the
   policys instead, meaning users need to explicitly add a policy
   to allow both intra-zone and inter-zone forwarding
 - Support for emergency lockdown (kill switch)
 - Pre-defined services (xml+enums) are filtered and included as a
   separate YANG model, extensions added for netconf and restconf
 - Includes initial support for firewalld rich rules

firewalld policy rules, including rich rules, have an obnoxious priority
field which is extremely hard to get right, so in Infix we use the far
superior YANG construct 'ordered-by user;'.  This ensure all rules are
generated in that order by setting the priority field, on read-back from
firewalld (operational) the priority field is used to sort the output
of rules in the CLI.

Fixes #448

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-10 15:14:12 +02:00
Richard Alpe b3fe0d58d8 yager: handle usb info though the HOST api
Prior to this commit yanger looked at the running system using
os.path..., this meant that the static reply / capture data wasn't
used properly. This resulted in strange behavior during unit testing
on GitHub runners where USB ports are missing.

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-08-11 14:33:07 +02:00
Mattias Walström 5fbb30fed5 Wi-Fi: Add Wi-Fi information to operational and CLI output
* show wifi scan <ifname> to see located SSIDs
* interface status
2025-06-19 15:23:30 +02:00
Ahmed Karic aff385f37f statd: Drop unsupported Chassis-ID and Port-ID Subtypes 2025-05-13 16:59:35 +02:00
Ahmed Karic cae5cfd3f0 statd: Set default dest-mac-address for LLDP 2025-05-13 16:58:02 +02:00
Mattias Walström cfbdce1b90 Change timezone test to check timezone in operational instead of checking time
Libyang is smart, it "fixes" the timezone for you, this was overriden by a
hack in netconf.py and restconf.py, but what you really want is to see
in operational what the current timezone is.
2025-04-30 11:51:45 +02:00
Mattias Walström 4ea451362f yanger: DHCP: Fix bug when search exist but no nameserver
When running a DHCP test `resolvconf -l` looked like this:
admin@client:~$ resolvconf -l
search example.com # e5
admin@client:~$

This resulted in broken result when reading operational data from
system-state (which used resolvonf -l)
2025-04-23 13:45:49 +02:00
Mattias Walström dc0871a093 yanger: Do not fail if rauc or /run/system.json exist
This allowes to run statd on your computer.
2025-04-23 13:45:48 +02:00
Mattias Walström c6b44db18a statd: Move operational from confd to statd (yanger) 2025-04-23 13:45:48 +02:00
Mattias Walström 2d806de2cd yanger: Refactor how ethtool is read from interfaces
Upgrade ethtool to get json support for main command:

ethtool --json eth1
2025-02-13 20:27:00 +01:00
Joachim WibergandTobias Waldekranz 78499757b0 confd,statd: add support for link aggregates
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-12 23:21:08 +01:00
Joachim WibergandTobias Waldekranz 1ca11f1fe7 statd: yanger: ignore 'podman' errors when built without containers
- Avoid unnecessary error messages in syslog when build w/o containers
 - Simplify log messages slightly

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-12 23:21:08 +01:00
Ahmed Karic 14fede3e56 statd: Add LLDP operational data retrieval
Enable statd to fetch LLDP neighbor data via lldpcli for verifying
LLDP admin status. Currently, only chassis ID and chassis ID subtype
are retrieved.
2025-02-12 10:41:46 +01:00
Joachim Wiberg 95cfcaa2fe confd: refactor dhcp server counters
Counters should follow the format from ieee802-ethernet-interface
model, which use:

 - in/out for Rx/Tx
 - plural from

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-01-31 13:56:40 +01:00