]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: generate lan_list from device tree to avoid startup race 24092/head
authorEvan Kinney <evan@rawr.gay>
Wed, 17 Jun 2026 01:11:11 +0000 (21:11 -0400)
committerJonas Jelonek <jelonek.jonas@gmail.com>
Mon, 6 Jul 2026 19:43:55 +0000 (21:43 +0200)
Currently, 02_network discovers lan ports from /sys/class/net/lan*.
When booting on some devices, DSA ends up registering ports _after_
config generation has started, producing a board.json/network config
that is missing those ports.

Read labels from the device tree instead; they already exist as static
board data. If they are missing, fall back to the previous behavior.

Verified on a XikeStor SKS8300-8T (a rtl930x platform).

Signed-off-by: Evan Kinney <evan@rawr.gay>
(simplified lan enumeration)
Link: https://github.com/openwrt/openwrt/pull/24092
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
target/linux/realtek/base-files/etc/board.d/02_network

index 95ea56a268e1fb2e6ab445f8269ff6d7791ec1f0..52cf1cf253555ed5c10177dfaca9f16708b90848 100644 (file)
@@ -249,9 +249,21 @@ realtek_setup_poe()
        esac
 }
 
+realtek_lan_list()
+{
+       local labels
+
+       labels="$(find /sys/firmware/devicetree/base -path '*/ethernet-ports/port@*/label' 2>/dev/null | \
+               xargs cat 2>/dev/null | tr '\0' '\n' | grep '^lan' | sort -V | uniq | xargs)"
+
+       [ -n "$labels" ] || labels="$(ls -1 -v -d /sys/class/net/lan* 2>/dev/null | xargs -n1 basename | xargs)"
+
+       echo "$labels"
+}
+
 board=$(board_name)
 board_config_update
-lan_list=$(ls -1 -v -d /sys/class/net/lan* | xargs -n1 basename | xargs)
+lan_list=$(realtek_lan_list)
 realtek_setup_interfaces "$board" "$lan_list"
 realtek_setup_macs "$board" "$lan_list"
 realtek_setup_poe "$board" "$lan_list"