Commit Graph
3974 Commits
Author SHA1 Message Date
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 WibergandGitHub 4b37474d8e Merge pull request #1214 from kernelkit/rpi-and-more
Board refactor, sensors and NanoPi R2S, RPi 3B + CM4 support

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 14:31:18 +01:00
Joachim Wiberg b1e08bd32f doc: update ChangeLog for v25.10 release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:10 +01:00
Joachim Wiberg 2fa495b112 .github: cleanup podman state before each run
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:09 +01:00
Joachim Wiberg 02615be500 configs: rename BPi-R3 bootloader defconfig for consistency
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:09 +01:00
Joachim Wiberg daf8b29178 uttls/mkimage.sh: consolidate sdcard.img generation
This commit consolidates mkimage.sh scripts into a unified SD card image
creation tool that works for all boards.  It needs a bootloader an $ARCH
rootfs.squashfs image and a genimage.cfg.in template.

- Detects build directories from `O=` environment variable or `output/`
- Sources `.config` to discover Buildroot paths
- Uses Buildroot's `support/scripts/genimage.sh` when available
- Automatically generates `.bmap` files if `bmaptool` is available
- Fallback to direct `genimage` invocation if wrapper not found

See the online instructions for usage.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:09 +01:00
Joachim Wiberg 24755e7e5f board/aarch64: add broken-flow-control interface quirk
Add new interface quirk to allow skipping disabling of flow control on
all RPi 3B/4B devices that have the smsc95xx driver.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:08 +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 c66c0b46b5 board/aarch64: update BPi-R3 factory-config
- Enable bridging of LAN ports in br0, default IP: 192.168.0.1/24
- Enable firewall with two zones: 'wan' and 'lan', policy: lan-to-wan
- Enable DHCP server on br0

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:07 +01:00
Joachim Wiberg 7784e68347 board/aarch64: bump NanoPi R2S to tier 2 status
This commit drops the board specific defconfig in favor of proper BSP
support for the FriendlyARM NanoPi R2S to Infix as part of the default
Aarch64 build.

The name FriendlyARM was elected over FriendlyELEC ("new" name) to be
consistent with both kernel and Buildroot naming standards.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:07 +01:00
Joachim Wiberg ab56c1be50 Relocate src/board/* and package/board/* to board/
This commit consolidates all BSP support files into the Buildroot standard
board/ directory.  The concept of selectable boards in menuconfig remains
as-is but now lives in board/ instead.

Drop support for board-specific post-build.sh scripts, not needed atm. and
we should really use Buildroot _POST_INSTALL_HOOKS in the board .mk files
instead.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:06 +01:00
Joachim Wiberg 8af593707a Rename raspberry-pi-4 -> raspberry-pi64
With the additional support for RPi3, including Zero 2W, this commit renames
all relevant directories and Config.In options to match.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:06 +01:00
Joachim Wiberg 20d09febeb test: fix container-upgrade $ARCH mapping on Aarch64 systems
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:05 +01:00
Joachim Wiberg 921c4c809d test: update mock data for 'show hardware'
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:05 +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 ee6def793c cli: add 'reboot' option to upgrade command
Usually, when upgrading a system, you want to reboot it so the upgrade
takes effect.  This commit adds a 'reboot' option/flag, alongside the
'force' option, to facilitate this.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:02 +01:00
Joachim Wiberg ee37a19ab0 cli: add support for admin-exec 'show system' overview
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:02 +01:00
Joachim Wiberg 3265f46990 board/aarch64: ensure dwc2 controller is in host mode
The DWC2 controller is a very common IP block in ARM and RiscV SoCs.  With the
USB subsystem back to a built-in we can now enable host mode for the DWC2 (USB
2.0) ports on RPi.  It also opens up for merging the NanoPi R2S into the
generic aarch64 build.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:02 +01:00
Joachim Wiberg e39b9cfee4 board/common: allow resizing /var on any mmc block device
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:01 +01:00
Joachim Wiberg db06ddb93b board/common: move resize2fs of /var to after reboot
On some boards, and in particular with a hybrid mbr/gpt partition table,
like on the RPi64, we must resize ext *after* reboot.

Also, do some cleanup and consolidation of error handling to prevent us
from entering an endless boot loop.

Follow-up to 391e9715

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:01 +01:00
Joachim Wiberg 6aaf612095 board/common: simplify USB port discovery and fix duplicate entries
This commit refactors USB port probing to:

- Eliminate duplicates: previously, 'authorized' and 'authorized_default'
  were listed as separate USB port entries (confusing).  Now each USB
  port is represented once, with the path pointing to the USB device
  directory, confd appends the appropriate attribute file as needed

- Add support for Raspberry Pi 4B and CM4 USB port(s) using a generic
  discovery function that scans /sys/bus/usb/devices for USB root hubs.
  This should work seamlessly across all platforms

- For backwards compatibility and better UX:
   - Single USB port systems: Named "USB" (no number)
   - Multi-port systems: Named "USB1", "USB2", etc.

- Device tree-based discovery is tried first (for boards like Alder with
  explicit DT USB port definitions), with fallback to generic discovery
  for boards without DT

Fixes: #315

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:00 +01:00
Joachim Wiberg 54d88cc00e Support for Compute Module 4 IoT Router Broad Mini
This commit adds support for the Raspberry Pi CM4 based mini DFRobot IoT
Router board, SKU:DFR0767.  It comes with an additional RTL8111 PCIe NIC
hence the addidtional kernel module and firmware.  The latter fixes:

r8169 0000:01:00.0: Direct firmware load for rtl_nic/rtl8168h-2.fw failed with error -2
r8169 0000:01:00.0: Unable to load firmware rtl_nic/rtl8168h-2.fw (-2)

Please note, the change in BCMGENET from module to built-in is to ensure
it is probed before any PCIe NIC, both this board and the CM4-based NVME
NAS base board enumerate the built-in MAC as eth0.

Also, unlike the RPi 3B/4B, it is not a given fact that a CM4 based board
comes with WiFi onboard, and since most compute module setups are DYI, we
take the easy way out and leave it as an exercise to the user to add WiFi
interface to the config.

https://wiki.dfrobot.com/Compute_Module_4_IoT_Router_Board_Mini_SKU_DFR0767

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:00 +01:00
Joachim Wiberg 9b057ad547 Support for Raspberry Pi 3B (BCM2837)
The BCM2837 core is used not just in the RPi 3B but also in the Zero 2W,
both device trees have been added to the board config.

The BCM2711 support has been extended to include RPi 400 and CM4 I/O.

To support the BCM2837 family more firmware options habe been enabled,
since the RPi3 does not have bootcode.bin flashed in the SoC.  The SD
card image now uses a hybrid GPT/MBR format so the RPi3 bootcode.bin
can read all files from the first VFAT partition.

The default device tree for Linux is now chosen by the U-Boot probe and
the only exception is the "laundry room" detector that looks for a RPi4
with a 7" touch screen, which then selects the DSI enabled RPi4 variant.
This is enough to properly load an RPi 3B and a CM4 based router board.

The BCM2837 does not have PCI/PCIe or a built-in MAC so it relies on the
USB to Ethernet LAN78xx which does not support disabling pause frames.
I have opted for checking for EOPNOTSUPP instead of adding yet another
quirk, because it is likely to be a common limitation of more drivers
and chipsets, and this code is best-effort anyway.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:25:59 +01:00
Joachim Wiberg 937d4c38c7 board: make usb subsystem a built-in
Use kernel cmdline option 'usbcore.authorized_default=2' to lock all
external/user-visible USB ports by default.

The kernel distinguishes internal vs external USB ports using ACPI
methods (_UPC and _PLD) on x86/x86_64 systems.  On ACPI systems, ports
marked as non-visible but connectable are considered internal (e.g.,
hard-wired USB-to-Ethernet adapters) and are automatically authorized,
while user-visible external ports require manual authorization.

However, on device tree systems the kernel lacks a standard mechanism
for identifying internal ports. The 'authorized_default=2' setting falls
back to requiring authorization for all devices on these platforms,

We list user-accessible USB ports in the device tree ('usb-ports' and
'usb-port-names'), with unlisted ports being implicitly internal and
managed separately.

Fixes #1065

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:25:59 +01:00
Joachim Wiberg b2a41e4868 board: drop team support, add common USB to Ethernet drivers
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:25:59 +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
Joachim WibergandGitHub eb829afb93 Merge pull request #1213 from kernelkit/copyright
Right some wrongs with `copy`

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 12:44:48 +01:00
Mattias Walström a280960d47 kernel-upgrade: Improve error handling 2025-10-31 09:47:37 +01:00
Mattias Walström 98b30d7d45 confd: Remove core hooks
Not needed anymore, the configuration change is sequential in change_cb.
2025-10-30 13:14:49 +01:00
Mattias Walström 5cdcf1f4fe confd: Add support for dependency tracking between modules
Sysrepo lack the functionallity for if change in model A also
should demand actions of model B. Previous we have handled this by
having callbacks for keystore changes in for example infix-services
to be able to reconfigure SSH on asymmetric key changes.

This commit instead add a pass where dependencies are found and added
to the diff.
2025-10-30 13:14:49 +01:00
Mattias Walström da29771398 confd: Refactor how sysrepo callbacks are handled
Sysrepo only care about model changes, but we want the system
configuration. Therefore add a common callback for all modules
and handle dependencies between the modules, if someone should be
run before another for example.
2025-10-30 12:28:03 +01:00
Mattias Walström 021e864a6f all.yaml: meta/bootorder.py needs to be run after ietf-system (where upgrade resides)
To verify the bootorder is still valid after that part of the suite has run.
2025-10-30 12:28:02 +01:00
Mattias Walström 9aba65e14b test: ntp: Make NTP tests more robust 2025-10-30 12:28:00 +01:00
Mattias Walström 489487be16 test: syslog: Make syslog/remote test more robust 2025-10-29 22:05:29 +01:00
Mattias WalströmandGitHub aad3f83a6a Merge pull request #1212 from kernelkit/kernel-upgrade 2025-10-29 16:40:36 +01:00
Tobias Waldekranz 0977ab476b bin: copy: Always get startup from sysrepo
This will make sure to apply NACM rules for all the data. It also
makes it possible for a luser access a subset of the data, even if
they to do not have read access to /cfg/startup-config.cfg.
2025-10-29 16:36:04 +01:00
Tobias Waldekranz d26e311c6d bin: copy: Refactor
copy() made some...creative...use of control flow that made it quite
difficult to follow.

Take a first priciples approach to simplify the logic.
2025-10-29 16:36:03 +01:00
Tobias Waldekranz 11cf4ddda9 bin: copy: Add a rudimenary test script
Add a simple script that verifies all the common use-cases of copy.
2025-10-29 16:35:56 +01:00
Mattias Walström b5b35e7615 Update developers guide on howto upgrade Linux kernel 2025-10-29 15:30:10 +01:00
Mattias Walström bb274dcdd7 Automate kernel updates to new minor version
This will fix #1106, in time, but only allows manual trigger for now,
needs more test and verification

utils/kernel-upgrade.sh at least automate all the manual manual processes
for upgrading the kernel.
2025-10-29 15:24:35 +01:00
Mattias Walström 483ee14dbe Upgrade Linux kernel to 6.12.56 (LTS) 2025-10-29 15:11:22 +01:00
Joachim WibergandGitHub 9d271eb7c6 Merge pull request #1033 from kernelkit/yang-add-services
Add new operational support for services

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-29 09:59:33 +01:00
Joachim WibergandGitHub b72fb8fc7d Merge pull request #1211 from kernelkit/misc-fixes 2025-10-28 20:43:19 +01:00
Joachim Wiberg 7e37fc49a3 confd: prevent IP addresses on bridge ports
Bridge ports should not have IP addresses configured. The IP address
should be configured on the bridge interface itself, not its member ports.

Add YANG must expression to enforce this rule at configuration time.

Fixes #1122

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-28 19:35:32 +01:00
Joachim Wiberg cb5d804a88 confd: add dhcp-server validation of address pool and/or static host
A valid DHCP server setup for a subnet is one of pool and/or at least one
static host entry/lease.  If pool is enabled the pool must have a start
and an end address.

To allow setting up a DHCP server with no pool and at least one static host
entry/lease, we make the pool a presence container, otherwise the pool will
always be set and trigger the below inference.

When an interactive CLI/Web user enables the address pool we infer a default
range .100-.250, but only for /24, C-class networks.  This is what most users
know and expect.

The YANG model now validates that:
- If an address pool is created, both start-address and end-address must be set
- Each subnet must have either a pool or at least one static host entry
- The pool container is now a presence container, so "no pool" fully deletes it

Fixes #1121

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-28 19:34:53 +01:00
Joachim Wiberg d80186a556 test/docker: security analysis of GHSA-cq46-m9x9-j8w2 for scapy
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-28 17:31:32 +01:00
Joachim Wiberg f8e62fb8df patch/libyang: follow-up to 77963d5, fix wrong arguments to LOGDBG()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-28 17:31:31 +01:00