Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions board/common/rootfs/etc/default/mgmtd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MGMTD_ARGS="-A 127.0.0.1 -u frr -g frr --log syslog --log-level err -M grpc"
3 changes: 3 additions & 0 deletions board/common/rootfs/etc/finit.d/available/netd.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#set DEBUG=1

service <pid/mgmtd> name:netd log [S12345] netd -- Network route daemon
1 change: 1 addition & 0 deletions board/common/rootfs/etc/finit.d/enabled/netd.conf
Empty file.
8 changes: 8 additions & 0 deletions board/common/rootfs/usr/libexec/infix/iw.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,14 @@ def parse_interface_info(ifname):
if power_match:
result['txpower'] = float(power_match.group(1))

# wiphy index -> phy/radio name
elif stripped.startswith('wiphy '):
try:
wiphy_idx = int(stripped.split()[1])
result['phy'] = normalize_phy_name(f'phy{wiphy_idx}')
except (ValueError, IndexError):
pass

return result


Expand Down
15 changes: 0 additions & 15 deletions board/common/rootfs/usr/sbin/staticd-helper

This file was deleted.

29 changes: 23 additions & 6 deletions board/common/rootfs/usr/share/udhcpc/default.script
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ACTION="$1"
IP_CACHE="/var/lib/misc/${interface}.cache"
RESOLV_CONF="/run/resolvconf/interfaces/${interface}.conf"
NTPFILE="/run/chrony/dhcp-sources.d/${interface}.sources"
NAME="/etc/frr/static.d/${interface}-dhcp.conf"
NAME="/etc/netd/conf.d/${interface}-dhcp.conf"
NEXT="${NAME}+"

[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
Expand Down Expand Up @@ -75,14 +75,23 @@ was_option_requested()
# client MUST ignore the Router option.
set_dhcp_routes()
{
echo "! Generated by udhcpc" > "$NEXT"
echo "# Generated by udhcpc" > "$NEXT"
echo "" >> "$NEXT"
if [ -n "$staticroutes" ]; then
if was_option_requested 121; then
# format: dest1/mask gw1 ... destn/mask gwn
set -- $staticroutes
while [ -n "$1" -a -n "$2" ]; do
dbg "adding route $1 via $2 metric $metric tag 100"
echo "ip route $1 $2 $metric tag 100" >> "$NEXT"
cat >> "$NEXT" <<-EOF
route {
prefix = "$1"
nexthop = "$2"
distance = $metric
tag = 100
}

EOF
shift 2
done
else
Expand All @@ -91,7 +100,15 @@ set_dhcp_routes()
elif [ -n "$router" ] ; then
if was_option_requested 3; then
for i in $router ; do
echo "ip route 0.0.0.0/0 $i $metric tag 100" >> "$NEXT"
cat >> "$NEXT" <<-EOF
route {
prefix = "0.0.0.0/0"
nexthop = "$i"
distance = $metric
tag = 100
}

EOF
done
else
log "ignoring unrequested router (option 3)"
Expand All @@ -102,7 +119,7 @@ set_dhcp_routes()
cmp -s "$NAME" "$NEXT" && return
mv "$NEXT" "$NAME"

initctl -nbq restart staticd
initctl reload netd
}

clr_dhcp_routes()
Expand All @@ -111,7 +128,7 @@ clr_dhcp_routes()
[ -f "$NAME" ] || return
rm "$NAME"

initctl -nbq restart staticd
initctl reload netd
}

clr_dhcp_addresses()
Expand Down
2 changes: 1 addition & 1 deletion buildroot
1 change: 1 addition & 0 deletions configs/aarch64_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
BR2_PACKAGE_FEATURE_WIFI_REALTEK=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
BR2_PACKAGE_CURIOS_HTTPD=y
BR2_PACKAGE_CURIOS_NFTABLES=y
Expand Down
1 change: 1 addition & 0 deletions configs/aarch64_minimal_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
BR2_PACKAGE_GENCERT=y
BR2_PACKAGE_STATD=y
Expand Down
1 change: 1 addition & 0 deletions configs/arm_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
BR2_PACKAGE_FEATURE_WIFI_REALTEK=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
BR2_PACKAGE_GENCERT=y
BR2_PACKAGE_STATD=y
Expand Down
1 change: 1 addition & 0 deletions configs/arm_minimal_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
BR2_PACKAGE_GENCERT=y
BR2_PACKAGE_STATD=y
Expand Down
1 change: 1 addition & 0 deletions configs/riscv64_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ BR2_PACKAGE_FEATURE_WIFI=y
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
BR2_PACKAGE_FEATURE_WIFI_REALTEK=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_GENCERT=y
BR2_PACKAGE_STATD=y
BR2_PACKAGE_FACTORY=y
Expand Down
1 change: 1 addition & 0 deletions configs/x86_64_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ BR2_PACKAGE_FEATURE_WIFI=y
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
BR2_PACKAGE_FEATURE_WIFI_REALTEK=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
BR2_PACKAGE_CURIOS_HTTPD=y
BR2_PACKAGE_CURIOS_NFTABLES=y
Expand Down
1 change: 1 addition & 0 deletions configs/x86_64_minimal_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
BR2_PACKAGE_GENCERT=y
BR2_PACKAGE_STATD=y
Expand Down
4 changes: 3 additions & 1 deletion doc/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@ Change Log

All notable changes to the project are documented in this file.

[v26.01.0][UNRELEASED]
[v26.02.0][UNRELEASED] -
-------------------------

### Changes

- Upgrade Linux kernel to 6.18.9 (LTS)
- Upgrade FRR to 10.5.1
- Add support for Microchip SAMA7G54-EK Evaluation Kit, Arm Cortex-A7

### Fixes

N/A


[v26.01.0][] - 2026-02-03
-------------------------

Expand Down
2 changes: 2 additions & 0 deletions package/Config.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ source "$BR2_EXTERNAL_INFIX_PATH/package/feature-wifi/Config.in"
comment "Software Packages"
source "$BR2_EXTERNAL_INFIX_PATH/package/bin/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/confd/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/netd/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/confd-test-mode/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/curios-httpd/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/curios-nftables/Config.in"
Expand All @@ -31,6 +32,7 @@ source "$BR2_EXTERNAL_INFIX_PATH/package/mdns-alias/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/netbrowse/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/onieprom/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/podman/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/python-spy/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/python-libyang/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/python-yangdoc/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/package/skeleton-init-finit/Config.in"
Expand Down
31 changes: 31 additions & 0 deletions package/finit/0004-Don-t-hide-cursor-when-shutting-down.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
From 7090321ff3c812644507d43e1ddea25de8cff93a Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Tue, 10 Feb 2026 15:58:46 +0100
Subject: [PATCH 4/5] Don't hide cursor when shutting down
Organization: Wires

Users starting Finit based systems using U-Boot or Barebox may otherwise
not get a visible cursor at their prompt.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
---
src/sm.c | 3 ---
1 file changed, 3 deletions(-)

diff --git a/src/sm.c b/src/sm.c
index a1e982b..f23fa65 100644
--- a/src/sm.c
+++ b/src/sm.c
@@ -361,9 +361,6 @@ restart:

/* Restore terse mode and run hooks before shutdown */
if (runlevel == 0 || runlevel == 6) {
- /* Hide cursor, we're going down ... */
- dprint(STDOUT_FILENO, "\033[?25l", 6);
-
api_exit();
log_exit();
plugin_run_hooks(HOOK_SHUTDOWN);
--
2.43.0

Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
From f0914f6d32b9cd055a888cf0a1c7e45dec871824 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Tue, 10 Feb 2026 15:59:49 +0100
Subject: [PATCH 5/5] Fix 'initctl reload NAME' not updating conditions for
dependents
Organization: Wires

When reloading a specific service with 'initctl reload foo', the
pid/foo and service/foo/ready conditions were never cleared, so
dependent services were not notified of the reload.

Clear the service's pid condition and, for pid/none notify types,
the ready condition before reloading. The conditions are then
reasserted by the pidfile inotify handler when the service touches
its PID file after processing SIGHUP.

For s6/systemd services the ready condition is left intact since
their readiness notification may not re-trigger on SIGHUP.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
---
src/api.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

diff --git a/src/api.c b/src/api.c
index 381c219..8537335 100644
--- a/src/api.c
+++ b/src/api.c
@@ -112,6 +112,8 @@ static int restart(svc_t *svc, void *user_data)

static int reload(svc_t *svc, void *user_data)
{
+ char cond[MAX_COND_LEN];
+
(void)user_data;

if (!svc)
@@ -122,6 +124,20 @@ static int reload(svc_t *svc, void *user_data)
else
service_timeout_cancel(svc);

+ /*
+ * Clear conditions before reload to ensure dependent services
+ * are properly updated. The conditions are reasserted when
+ * the service touches its PID file after processing SIGHUP.
+ *
+ * Note: only clear 'ready' for services where the pidfile
+ * inotify handler reasserts it (pid/none). For s6/systemd
+ * services readiness relies on their respective notification
+ * mechanism which may not re-trigger on SIGHUP.
+ */
+ cond_clear(mkcond(svc, cond, sizeof(cond)));
+ if (svc->notify == SVC_NOTIFY_PID || svc->notify == SVC_NOTIFY_NONE)
+ service_ready(svc, 0);
+
svc_mark_dirty(svc);
service_step(svc);

--
2.43.0

31 changes: 31 additions & 0 deletions package/netd/Config.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
config BR2_PACKAGE_NETD
bool "netd"
select BR2_PACKAGE_LIBITE
select BR2_PACKAGE_LIBCONFUSE
help
Network route daemon. Manages static routes and RIP routing.
Reads configuration from /etc/netd/conf.d/*.conf.

With FRR: Full routing via gRPC (static routes, RIP, OSPF).
Without FRR: Standalone Linux backend via rtnetlink.

https://github.com/kernelkit/infix

if BR2_PACKAGE_NETD

config BR2_PACKAGE_NETD_FRR
bool "FRR integration"
default y if BR2_PACKAGE_FRR
depends on BR2_PACKAGE_FRR
select BR2_PACKAGE_PROTOBUF
select BR2_PACKAGE_GRPC
select BR2_PACKAGE_HOST_PROTOBUF
select BR2_PACKAGE_HOST_GRPC
help
Enable FRR integration via gRPC northbound API.
Provides full routing support (static routes, RIP, OSPF).

If disabled, netd uses Linux kernel backend (rtnetlink)
with static routes only.

endif
3 changes: 3 additions & 0 deletions package/netd/netd.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#set DEBUG=1

service name:netd log [S12345] netd -p /run/netd.pid -- Network route daemon
32 changes: 32 additions & 0 deletions package/netd/netd.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
################################################################################
#
# netd
#
################################################################################

NETD_VERSION = 1.0
NETD_SITE_METHOD = local
NETD_SITE = $(BR2_EXTERNAL_INFIX_PATH)/src/netd
NETD_LICENSE = BSD-3-Clause
NETD_LICENSE_FILES = LICENSE
NETD_REDISTRIBUTE = NO
NETD_DEPENDENCIES = libite libconfuse jansson
NETD_AUTORECONF = YES

NETD_CONF_ENV = CFLAGS="$(INFIX_CFLAGS)"

NETD_CONF_OPTS = --prefix= --disable-silent-rules

# FRR integration (gRPC backend) or standalone Linux backend
ifeq ($(BR2_PACKAGE_NETD_FRR),y)
NETD_DEPENDENCIES += frr grpc host-grpc protobuf
NETD_CONF_ENV += \
PROTOC="$(HOST_DIR)/bin/protoc" \
GRPC_CPP_PLUGIN="$(HOST_DIR)/bin/grpc_cpp_plugin"
else
NETD_CONF_OPTS += --without-frr
endif

NETD_TARGET_FINALIZE_HOOKS += NETD_INSTALL_EXTRA

$(eval $(autotools-package))
8 changes: 8 additions & 0 deletions package/python-spy/Config.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
config BR2_PACKAGE_PYTHON_SPY
bool "python-spy"
depends on BR2_aarch64 || BR2_x86_64
select BR2_PACKAGE_PYTHON3
help
Sampling profiler for Python programs.

https://github.com/benfred/py-spy
3 changes: 3 additions & 0 deletions package/python-spy/python-spy.hash
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Locally calculated
sha256 ee776b9d512a011d1ad3907ed53ae32ce2f3d9ff3e1782236554e22103b5c084 py_spy-0.4.1-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
sha256 6a80ec05eb8a6883863a367c6a4d4f2d57de68466f7956b6367d4edd5c61bb29 py_spy-0.4.1-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Loading
Loading