diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 17b6e4006d5..26951dd95b7 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -194,6 +194,7 @@ define Package/base-files/install $(SED) "s#%PATH%#$(TARGET_INIT_PATH)#g" \ $(1)/sbin/hotplug-call \ + $(1)/sbin/preinit-netdev \ $(1)/etc/preinit \ $(1)/etc/profile diff --git a/package/base-files/files/etc/hotplug-preinit.json.d/10-preinit-net.json b/package/base-files/files/etc/hotplug-preinit.json.d/10-preinit-net.json new file mode 100644 index 00000000000..606e19153a8 --- /dev/null +++ b/package/base-files/files/etc/hotplug-preinit.json.d/10-preinit-net.json @@ -0,0 +1,11 @@ +[ + [ "if", + [ "and", + [ "eq", "ACTION", "add" ], + [ "eq", "SUBSYSTEM", "net" ] + ], + [ + [ "exec", "/sbin/preinit-netdev" ] + ] + ] +] diff --git a/package/base-files/files/lib/preinit/10_indicate_preinit b/package/base-files/files/lib/preinit/10_indicate_preinit index 12f8fc2e210..d0499daa564 100644 --- a/package/base-files/files/lib/preinit/10_indicate_preinit +++ b/package/base-files/files/lib/preinit/10_indicate_preinit @@ -184,6 +184,23 @@ preinit_ip() { preinit_net_echo "Doing OpenWrt Preinit\n" } +preinit_ip_event() { + [ "$pi_preinit_no_failsafe" = "y" ] && return + + if [ -z "$pi_ifname" ]; then + type set_preinit_iface > /dev/null 2>&1 && set_preinit_iface + pi_ifname=$ifname + fi + + [ -n "$pi_ifname" ] || return + + ip -4 -o address show dev "$pi_ifname" 2> /dev/null | \ + grep -q "inet $pi_ip/" && return + + preinit_ip_config "$pi_ifname" + preinit_net_echo "Doing OpenWrt Preinit\n" +} + preinit_ip_deconfig() { [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && { local netdev vid diff --git a/package/base-files/files/sbin/preinit-netdev b/package/base-files/files/sbin/preinit-netdev new file mode 100755 index 00000000000..2e13cab6247 --- /dev/null +++ b/package/base-files/files/sbin/preinit-netdev @@ -0,0 +1,15 @@ +#!/bin/sh +# Copyright (C) 2026 OpenWrt.org + +export PATH="%PATH%" + +. /lib/functions.sh +. /lib/functions/preinit.sh +. /lib/functions/system.sh + +for pi_source_file in /lib/preinit/*; do + . $pi_source_file +done + +boot_run_hook preinit_netdev +preinit_ip_event