Commit Graph
4558 Commits
Author SHA1 Message Date
Joachim Wiberg e2bb1cfbe0 board/arm: fix rauc system.conf 2026-03-20 16:17:59 +01:00
Joachim Wiberg 95abdac7ee board/arm: update board list with Microchip SAMA7G54 eval kit
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-20 16:17:59 +01:00
Joachim Wiberg 0a7bd76ede configs/sama7g54_ek_*_boot_defconfig: switch to upstream U-Boot
The v2025.01 release supports the Microchip SamA7G5* eval kit(s), which
means we can enjoy the same patch level of U-Boot as other Infix boards

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-20 16:17:59 +01:00
Joachim Wiberg f8ef10ff2f board/common: optimize busybox for speed, drop fork+exec for applets
- The biggest changes are syncing with latest BusyBox (busybox-update-config)
 - Disable optimize for size
 - Enable feature "SH_NOFORK" which allows /bin/sh to call applet_main()
   directly without having to fork+exec busybox

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-20 16:17:58 +01:00
Joachim WibergandGitHub 63f9e8a939 Merge pull request #1451 from kernelkit/frr
Bump FRR to 10.5.3

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-18 17:58:04 +01:00
Mattias Walström be85775e50 Bump FRR to 10.5.3
For change log, see:
     https://github.com/FRRouting/frr/releases/tag/frr-10.5.3
2026-03-18 16:18:44 +01:00
Mattias WalströmandGitHub 2fea1e4a2b Merge pull request #1450 from kernelkit/upgrade-buildroot
Bump buildroot to 2025.02.12 (LTS)
2026-03-18 14:18:43 +01:00
Mattias Walström fcf9782a8c Bump buildroot to 2025.02.12 (LTS)
Alot of CVE fixes, see https://github.com/buildroot/buildroot/blob/2025.02.x/CHANGES
2026-03-17 21:48:51 +01:00
Mattias WalströmandGitHub f1584f5937 Merge pull request #1449 from kernelkit/kernel-upgrade-399f2582-484c-438e-b83c-92bd62c5dd9f
Upgrade to kernel 6.18.18
2026-03-17 08:18:27 +01:00
ael-bot 3d67876136 Upgrade Linux kernel to 6.18.18 2026-03-16 15:04:32 +00:00
Joachim WibergandGitHub 0f01012c07 Merge pull request #1447 from kernelkit/refactor-actions
Move local GitHub actions to kernelkit/actions repo

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-16 15:48:54 +01:00
Joachim WibergandClaude Sonnet 4.6 63f46d4d43 .github: move local actions to kernelkit/actions repo
Fixes a regression from 0c11cea where local composite actions
(.github/actions/) were referenced with relative paths. When spins
reuse our reusable workflows, GitHub resolves relative action paths
in the context of the calling repo, not infix — breaking the build.

Replace all uses of ./.github/actions/{cache-restore,podman-cleanup}
with kernelkit/actions/{cache-restore,podman-cleanup}@v1 (new repo).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 14:38:58 +01:00
Joachim WibergandGitHub 5487344034 Merge pull request #1444 from kernelkit/another-netd-fixup 2026-03-13 07:15:27 +01:00
Joachim Wiberg 3e762e6111 confd: Use ERRNO() instead of ERROR() after POSIX API failures
Replace ERROR() with ERRNO() in all error paths following POSIX API
calls (fopen, rename, realloc, fmkpath, etc.), removing redundant
manual strerror(errno) formatting where present.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 22:27:52 +01:00
Joachim Wiberg af15e65087 package/netd: ensure /etc/net.d exists at boot
Before netd starts confd might want to create .conf file for it to run,
so we sort of depend on /etc/net.d existing at boot.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 22:08:25 +01:00
Joachim WibergandGitHub 03b4466e09 Merge pull request #1443 from kernelkit/kernel-upgrade
Upgrade Linux kernel to 6.18.17

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 19:19:32 +01:00
Mattias Walström a1903a893a Upgrade Linux kernel to 6.18.17 2026-03-12 15:08:12 +01:00
Joachim WibergandGitHub b9cbbb053d Merge pull request #1440 from kernelkit/default-route-at-boot
Fix missing default route at boot

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 13:49:34 +01:00
Joachim Wiberg 49c66ee957 doc: update ChangeLog
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 12:07:57 +01:00
Joachim Wiberg 43f3bf0322 board/common: make dnsmasq authoritative, drop redundant options
Set dhcp-authoritative so clients with unexpired leases are not NAKed
after a router crash or factory reset that clears the lease database.

Drop the untagged suppress directives for options 3 (router) and 6
(dns-server): they conflict with the global options confd writes to
dnsmasq.d/, causing spurious "Ignoring duplicate dhcp-option" warnings.
Per-subnet tagged options already suppress auto-detection, and without
an active dhcp-range there is nothing to suppress anyway.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 12:07:57 +01:00
Joachim Wiberg ba8d1f6b4a confd: fix DHCP client hostname reporting, rpi-%m -> rpi-c0-ff-ee
Ensure we translate the hostname before we generate the udhcpc command
line options, otherwise we'll send '-x hostname:rpi-%m' to udhcpc.

Also update all board specific factory configs with the missing setting
'"value": "auto"' for the DHCP hostname option.  This to match what we
already do when we infer options when enabling a DHCP client in the CLI.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 12:07:56 +01:00
Joachim Wiberg 221fea13a2 netd: watch conf.d with inotify, retry on backend failure
Two races could prevent DHCP-learned default routes from being installed
at boot:

1. The signal from the DHCP client script could be lost leaving conf.d
   updated but frr.conf stale.

2. Even when the signal was received, 'vtysh -b' could fail because the
   FRR daemon chain (mgmtd→zebra→staticd) writes PID files before being
   fully operational, causing netd to give up with no retry.

Fix both by refactoring netd to use libev:

- Use an inotify watch of CONF_DIR, so netd reacts directly to file
  changes without depending on signal delivery.

- On backend_apply() failure, schedule a retry in 5s and call pidfile()
  unconditionally so dependent services are not blocked waiting for the
  Finit condition 'pid/netd' to be satisfied.

We also take this opportunity to rename /etc/netd/conf.d/ to /etc/net.d/
The extra /etc/netd/ directory level served no purpose — nothing else
lives there.  Flatten to /etc/net.d/ which reads more naturally as the
drop-in directory for network configuration snippets.

Also, reduce logging a bit since each netd backend already logs success
or fail which is sufficient to know that a configuration change has been
applied or not.

Finally, with the new inotify processing in netd it's redundant to call
'initctl reload netd' from the udhcpc script, in fact it will only cause
unnecessary overhead, so we drop it.

Fixes #1438

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-12 12:07:49 +01:00
Joachim WibergandGitHub cb243304ad Merge pull request #1436 from kernelkit/ospf-neighbor-must-expression
OSPF neighbor must expression

[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-11 12:33:12 +01:00
Joachim Wiberg fc757a439a doc: amend static neighbors to new OSPF point-to-multipoint
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-11 11:16:02 +01:00
Joachim Wiberg 757afe5206 confd: follow-up to OSPF point-to-multipoint
Add a must expression to ensure users do not set static neighbors when
the interface type is not point-to-multipoint or non-broadcast.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-11 11:16:01 +01:00
Joachim WibergandGitHub 5b7b0bc249 Merge pull request #1430 from kernelkit/bpi-r64
Add support for Banana Pi BPi-R64

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-11 09:48:44 +01:00
Joachim WibergandGitHub d04f493f08 Merge pull request #1435 from kernelkit/ospf-point-to-multipoint
Followup OSPF point-to-multipoint
2026-03-11 09:30:35 +01:00
Mattias Walström f0b220b6e7 Followup OSPF point-to-multipoint
[skip ci]
2026-03-11 09:12:48 +01:00
Joachim WibergandGitHub f35e3b3ec3 Merge pull request #1429 from kernelkit/ospf-point-to-multipoint
ospf: add point-to-multipoint and hybrid interface type support

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 15:15:11 +01:00
Mattias Walström 312b856fba ospf: add point-to-multipoint and hybrid interface type support 2026-03-10 12:44:47 +01:00
Joachim Wiberg 4deaee0b8e doc: update changelog with BPi-R64 and RPi-400 support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:33 +01:00
Joachim Wiberg 121abe7891 .github: add bpi-r64 to image builder
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:11 +01:00
Joachim Wiberg cc10b70f19 wifi: add Mediatek MT7615 firmware
Used in BPI-MT7615 802.11ac PCIe WiFi card for the BPi-R64 router board.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:11 +01:00
Joachim Wiberg 6560af1b94 board: add support for Banana Pi BPI-R64
Add board support for the BananaPi BPi-R64 router board, based on the
MediaTek MT7622 SoC and MT7531 Gigabit Ethernet switch.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:10 +01:00
Joachim Wiberg 784b911253 patches/genimage: add gpt-protective-first option for hybrid MBR
In a hybrid MBR the conventional layout (used by gdisk and others) is:

  MBR[0] = 0xEE  (GPT protective, covers whole disk)
  MBR[1..3] = user-selected GPT partitions with legacy type codes

genimage currently appends the 0xEE entry after the data partitions,
producing the opposite order.  This is fine for most platforms, but
breaks firmware that detects GPT by inspecting only MBR entry 0: seeing
a non-0xEE type there it falls into pure-MBR mode and cannot look up
GPT partitions by name.

The TF-A partition driver (drivers/partition/partition.c) exhibits
exactly this behaviour: load_mbr_header() copies entry[0] and checks
type == 0xEE to select between MBR and GPT mode.  The MediaTek MT7622
platform (BananaPi BPI-R64) is a concrete example where this matters.

On the other hand, Raspberry Pi firmware scans all MBR slots for a
bootable FAT32 partition.  If slot 0 holds a 0xEE protective entry the
firmware switches to GPT detection, looks for an EFI System Partition
UUID, and reports "no bootable partitions" when none is found.

Add an opt-in hdimage option `gpt-protective-first = true` that places
the 0xEE entry at slot 0 and shifts data partitions to slots 1..3.
The default (false) preserves the existing genimage behaviour so that
platforms like Raspberry Pi continue to work without any changes.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:10 +01:00
Joachim Wiberg 35ba2ca37f board/aarch64: add dedicated RPi 400 product configuration
The Raspberry Pi 400 shares hardware with the RPi 4B but differs in one
important way: it has an internal keyboard and mouse connected through a
VIA Labs USB hub on the VL805 xHCI controller.  Break the symlink to
raspberrypi,4-model-b and maintain a dedicated product directory.

Factory config changes from the 4B default:
- USB1/USB2/USB3 all unlocked: USB2 carries the internal keyboard hub
  and USB3 the superspeed companion; all are unlocked as this is a
  desktop device
- DHCP vendor-class corrected to "Raspberry Pi 400"

Also add interface-quirks.json for the eth0 PHY detach behaviour and
the smsc95xx broken flow-control quirk (inherited from the 4B config
but now explicit), and remove the spurious bootable flag from the
primary and secondary rootfs partitions in genimage.cfg.in.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:09 +01:00
Joachim Wiberg e16f0a2504 board/aarch64: enable HDMI display output on RPi4
Remove console=map:0 from the [pi4] section which was suppressing HDMI
output and disabling the display getty.  Making it really difficult to
use it as a regular console.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:09 +01:00
Joachim Wiberg 799fd93cac board/common: fix authorization cascade for internal USB hubs
Two related problems prevented devices behind an intermediate hub (e.g.
the VIA Labs hub on the RPi 400's VL805 xHCI) from being authorized
when confd unlocks a USB bus:

1. Cascade ordering: usb_authorize() ran nftw() with FTW_DEPTH, which
   visits children before the root-hub entry.  The hub was authorized
   while authorized_default was still 2, so when the kernel probed the
   hub's children it immediately denied them.  Fix: write
   authorized_default=1 on the bus before entering nftw.

2. Slow/async probe: hub port enumeration is asynchronous — devices
   behind a hub may appear in sysfs after nftw has already finished.
   Fix: add a udev rule that catches usb_device add events on buses
   where authorized_default=1 is already set on any ancestor root hub
   and authorizes them immediately.

The ATTRS{} matcher in udev walks the full sysfs parent chain, so
authorized_default=1 on the root hub is visible even for devices several
hubs deep.  Buses still locked at authorized_default=0 are left alone.

Also expand the docstring in generic_usb_ports() to document the
design: each root hub gets its own uniquely-named entry (USB, or USB1/
USB2/... when multiple) so buses can be individually controlled, and
boards needing finer control should use DT usb-ports annotations.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:08 +01:00
Joachim Wiberg 726a3132e3 board/common: optimize sysctl-sync-ip-conf, drop filtering loop
Replace the costly read-only filter loop (awk+tr per line) with a
stderr redirect, use /sys/class/net/ instead of ip+jq, and batch
all sysctl writes into a single call.

Reduces boot time by ~4s on 32-bit Arm systems.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:08 +01:00
Joachim Wiberg 6994e5dd63 board/common: mnt: drop tune2fs and speed up mounting
Calling tune2fs for ext4 partitions at boot costs more than one second
boot time on 32-bit Arm systems, with very little gain.  Dropping this
restores the default periodic fsck *and* saves boot time.

Instead of calling sgdisk four times, call it only when resizing and
instead use sysfs to find named paritions.  Saves seconds on boards
with weaker CPU and slow media.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:05 +01:00
Joachim WibergandGitHub 5bb21e5221 Merge pull request #1432 from kernelkit/kernel-upgrade-c773e829-0c4b-45bc-ab56-a3c57307ccfb
Upgrade to kernel 6.18.16
2026-03-10 12:10:50 +01:00
ael-bot 04eef91c0d Upgrade Linux kernel to 6.18.16 2026-03-10 04:53:43 +00:00
Joachim WibergandGitHub 6c8eeb2a5f Merge pull request #1425 from kernelkit/mdns-fixes
Mdns fixes
2026-03-09 19:26:41 +01:00
Joachim Wiberg 784be611de doc: update ChangeLog with fixes and enw features
[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-09 19:26:13 +01:00
Joachim Wiberg cdd56e6a2d doc: document how to add a default route
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-09 19:26:05 +01:00
Joachim Wiberg 4b39b2c2d3 board: relocate SafeXcel firmware selection to Marvell BSPs
The MVEBU SafeXcel Crypto Engine firmware (linux-firmware minifw) was
originally added in 70c12c3 to the generic aarch64 defconfigs to silence
kernel probe failures on Marvell Armada SoCs (37xx, 7k, 8k, CN913x):

  crypto-safexcel f2800000.crypto: Firmware load failed.
  crypto-safexcel f2800000.crypto: HW init failed (-2)

It was then accidentally dropped in 0e2d12e (kernel upgrade to 6.18),
which rebased on a tree that predated the firmware addition.

Rather than restoring it to the generic defconfigs, move it to the two
Marvell board Config.in files where it actually belongs — consistent
with how RTL8169 firmware was handled for the Raspberry Pi CM4 IoT
Router Board Mini in 68313773.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-09 19:26:04 +01:00
Joachim Wiberg b2c729dc7d utils: fix kernel-upgrade.sh clobbering existing ChangeLog entries
The awk insertion path used getline to peek at the line right after the
"### Changes", but only printed it when NF == 0 (blank line).  If the
section already had a non-blank entry (e.g. a Buildroot upgrade line),
getline consumed it silently and the kernel line was written in its
place.

Fix by adding the missing else branch so the consumed line is always
re-emitted — blank lines before the new entry, non-blank lines after it.

Also demote the missing-UNRELEASED guard from exit 1 to a warning with
return 0, so the workflow doesn't abort when a new release cycle hasn't
had its ChangeLog section opened yet.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-09 19:26:04 +01:00
Joachim Wiberg 290c03b2b5 cli: add 'ssh' commands to log onto other devices and manage keys
Add three SSH-related commands to the operational CLI:

  ssh [user <name>] [port <num>] <host>
      Connect to a remote device over SSH, running as the
      CLI user (not root) by dropping privileges before exec.

  set ssh known-hosts <host> <keytype> <pubkey>
      Pre-enroll a host public key received out-of-band (e.g.
      via email after a factory reset) into ~/.ssh/known_hosts,
      avoiding a TOFU prompt on first connect.

  no ssh known-hosts <host>
      Remove a stale host key entry using ssh-keygen -R, e.g.
      after a device factory reset causes a key mismatch.

Tab completion is provided for key types (ssh-ed25519,
ecdsa-sha2-nistp256, etc.) and for known host names/IPs.

A new run_as_user() helper is introduced alongside the existing
run(), factoring out the fork+setuid+execvp pattern used by
infix_shell() so it can be shared across the SSH functions.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-09 19:26:03 +01:00
Joachim Wiberg b9a8014e41 patches: lift iptables name length limit in firewalld
A legacy name length limit in firewalld triggered problems with longer
policy names.  This patch to firewalld lifts that limit by checking the
backend in use, no limit for nftables.

Fixes #1389

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-09 19:26:03 +01:00
Joachim Wiberg 27a07d0179 statd: silence 'show firewall' when firewall is disabled
Fixes #1416

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-09 19:26:02 +01:00