Re: Getting a stable MAC address for a RPI CM3+ with ue0 interface

From: Ronald Klop <ronald_at_FreeBSD.org>
Date: Mon, 25 Sep 2023 20:26:12 UTC
On 9/25/23 19:10, Patrick M. Hausen wrote:
> Hi all
> 
>> Am 24.09.2023 um 23:05 schrieb Patrick M. Hausen <pmh@hausen.com>:
>>
>> Hi all
>>
>>> Am 23.09.2023 um 21:28 schrieb Ronald Klop <ronald@FreeBSD.org>:
>>>
>>> Would this work?
>>>
>>> diff --git a/sys/dev/usb/net/if_smsc.c b/sys/dev/usb/net/if_smsc.c
>>> index 0a0268bfa1a2..4a7983a20717 100644
>>> --- a/sys/dev/usb/net/if_smsc.c
>>> +++ b/sys/dev/usb/net/if_smsc.c
>>> [...]
>>
>> After building and installing the kernel with this patch and reboot I
>> lost access to the node I used. I will try to set up console access
>> somehow ...
> 
> The development board I use for flashing etc. has got a serial port
> connector and even a USB to serial converter so you can just plug in
> USB to your laptop - I did not get any console output, though.
> 
> https://www.waveshare.com/wiki/Compute_Module_PoE_Board#Serial_port
> 
> I did get console output via HDMI, but my Apple keyboard seems not
> to work when plugged in to USB so I could not really examine what
> is wrong or boot into kernel.old - only diagonistic I can provide:
> 
> The new kernel prints the "No MAC address found" message, then panics.
> 
> I'm reflashing the module now ...
> 
>  From reading your source code, what are you really trying to achieve?
> More diagnostic messages are a good thing, but from where are you
> trying to read that MAC address?


The method ether_gen_addr() generates a MAC address bases on hostuuid and interface name. Maybe not ideal, bu a lot better then a random MAC.

sys/net/if_ethersubr.c:
/*
  * Allocate an address from the FreeBSD Foundation OUI.  This uses a
  * cryptographic hash function on the containing jail's name, UUID and the
  * interface name to attempt to provide a unique but stable address.
  * Pseudo-interfaces which require a MAC address should use this function to
  * allocate non-locally-administered addresses.
  */
void
ether_gen_addr(struct ifnet *ifp, struct ether_addr *hwaddr)


It would be nice to see more information from the panic. Can you make a picture or movie of the screen while this happens?
Or does the system make a kernel crashdump? See "dumpdev" in /etc/defaults/rc.conf. A crashdump is written to the swap partition and on reboot a summary is written in /var/crash from what is in the swap partition. This is all assuming the system has a large enough swap partition.

Regards,
Ronald.


> As far as I understand for the Pi you are supposed to use the RPi
> foundation OUI B8:27:EB plus the lower three octets of the Pi's
> serial number - regardless of the Ethernet adapter plugged in.
> 
> All Pis running Linux do this.
> 
> Kind regards,
> Patrick