[PATCH] rockchip: board: assign up to 3 static Ethernet MAC addresses
MichaIng
micha at dietpi.com
Thu Jun 12 17:59:42 CEST 2025
Hi Quentin,
thanks for the review!
> You could set the eth2addr in your board file if you wanted instead of
> setting it for everybody.
We provide OS images for everyone, and our users complained about the
changing MAC addresses. I agree with them that generally the exception
is that MAC addresses are static by default, and randomising them being
an optional privacy feature when connecting to untrusted networks, like
a WiFi hotspot with a mobile phone. Setting eth2addr in boot
script/environment would require a random MAC address generation our end
on first boot or so on each system, to rule out collisions. Since U-Boot
has the feature implemented already, it just makes sense to make use of
it and extend it for the affected Rockchip builds, also to have the
somewhat nicely aligned with the last digit deferring only. So we
currently patch our sources.
> What's the number when we'll decide this is too many? I have a board
> with 5 Ethernet ports for example :)
Good question. In Germany we say "Aller guten Dinge sind drei" (All good
things come in threes). Jokes aside: not sure whether there are Rockchip
SoC boards which provide more Ethernet NICs, but I have 3 with 3 ones
(in one case provided by an official expansion board), all RK3588 with
two onboard PCIe adapters. There is another PCIe bus, but commonly used
for an M.2 socket, not sure whether it could theoretically provide a 4th
Ethernet adapter. I don't know the background about why the Ethernet
driver/firmware is not able to read/assign the hardware MAC, or why
there is no hardware MAC, as I understand that this is an IEEE
requirement. So what U-Boot does seems a workaround, and I agree that,
if there is no generic approach, it has limits.
> I don't know how far we want to go to avoid defining unused ethXaddr
> variables in the environment? We could use of_alias_get_highest_id for
> example and generate enough environment variables based on that info?
This sounds reasonable. But are ethXaddr variables not generated before
boot scripts are called, when the number of alias IDs cannot be known
yet, and MAC addresses assigned afterwards, when the OS device tree was
loaded? When generating the variables afterwards, all good, but then
existing values assigned by boot script/env should not be overwritten,
of course. Then a generic approach would be possible, incrementing the
bit mask by one each loop, to assign up to a quite large number of MAC
addresses to ethernet aliases.
Best regards,
Micha (aka MichaIng)
DietPi project lead
More information about the U-Boot
mailing list