From: Jeroen Hofstee <jeroen@myspectrum.nl>
To: openembedded-core@lists.openembedded.org
Cc: Jeroen Hofstee <jhofstee@victronenergy.com>
Subject: [OE-core] [PATCH] udev-extraconf: fix ifupdown for non hotplug devices
Date: Mon, 7 Apr 2025 19:49:04 +0200 [thread overview]
Message-ID: <20250407174904.1191173-1-jeroen@myspectrum.nl> (raw)
From: Jeroen Hofstee <jhofstee@victronenergy.com>
Commit 160f713917 (udev-extraconf: fix network.sh script did not
configure hotplugged interfaces, 2024-10-18) fixed ifupdown for
hotplug devices, but also calls it for non hotplug devices. That
can cause issue, since they might not expect the ifupdown from
udev, since it wasn't called before mentioned patch got merged.
For util-linux this can simply be fixed by adding --allow=hotplug.
Unfortunately busybox doesn't have that option, so a function is
added to check if the device is marked as allow-hotplug.
Since wilcards are supported adding 'allow-hotplug *' allows to
restore behaviour of mentioned patch, while this restores the
original behaviour.
Signed-off-by: Jeroen Hofstee <jhofstee@victronenergy.com>
---
| 28 +++++++++++++++++++
1 file changed, 28 insertions(+)
--git a/meta/recipes-core/udev/udev-extraconf/network.sh b/meta/recipes-core/udev/udev-extraconf/network.sh
index 500e60ae61..da79f00d5a 100644
--- a/meta/recipes-core/udev/udev-extraconf/network.sh
+++ b/meta/recipes-core/udev/udev-extraconf/network.sh
@@ -6,6 +6,34 @@ echo "$INTERFACE" | grep -q wifi && exit 0
# udevd does clearenv(). Export shell PATH to children.
export PATH
+# udev should only trigger ifupdown for interfaces marked as allow-hotplug
+# and with util-linux that is as simple as adding --allow=hotplug.
+# Busybox unfortunately doesn't have this option.
+# allow-hotplug is a pattern like eth0 /eth* /eth*/1 /eth*=eth.
+# This function checks if INTERFACE matches an allow-hotplug pattern.
+
+allow_hotplug() {
+ allow_hotplug="$(sed -n -e 's/^allow-hotplug \+\([^= ]*\).*/\1/p' /etc/network/interfaces)"
+ for pattern in $allow_hotplug; do
+ options="$(echo $pattern | sed -n -e 's,^/\?[^ /]\+/\(.*\),\1,p')"
+ value="$(echo $pattern | sed -n -e 's,^/\?\([^ /]\+\).*,\1,p')"
+ interfaces="$(ls -d /sys/class/net/$value 2>/dev/null | xargs -r -n 1 basename)"
+ if [ "$options" != "" ]; then
+ interfaces="$(echo $interfaces | awk -v n=$options '{print $n }')"
+ fi
+ echo "$interfaces" | grep -w -q "$INTERFACE"
+ if [ $? -eq 0 ]; then
+ return 0
+ fi
+ done
+
+ return 1
+}
+
+if ! allow_hotplug; then
+ exit 0
+fi
+
# if this interface has an entry in /etc/network/interfaces, let ifupdown
# handle it
if grep -q "iface \+$INTERFACE" /etc/network/interfaces; then
--
2.43.0
next reply other threads:[~2025-04-07 18:02 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-07 17:49 Jeroen Hofstee [this message]
2025-04-09 8:37 ` [OE-core] [PATCH] udev-extraconf: fix ifupdown for non hotplug devices Richard Purdie
2025-04-09 9:08 ` Jeroen Hofstee
2025-04-09 9:27 ` Richard Purdie
2025-04-09 10:40 ` Jeroen Hofstee
2025-04-09 10:52 ` Richard Purdie
2025-04-10 10:14 ` Alexander Kanavin
2025-04-10 12:17 ` Yoann Congal
2025-04-10 18:32 ` Jeroen Hofstee
2025-04-10 19:05 ` Alexander Kanavin
2025-04-09 9:28 ` Mike Looijmans
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250407174904.1191173-1-jeroen@myspectrum.nl \
--to=jeroen@myspectrum.nl \
--cc=jhofstee@victronenergy.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox