Ok, so I am working on a project which is based around the architecture of the Pi B+. It's a proprietary designed board. On that board is a BCM43143 WiFi module - the same chip that's in the Broadcom "triangle" adapter.
Individually these all work perfectly fine. However, once you have two of them there are MAC address conflicts. The same happens with two triangles, or a module and a triangle.
The issue here is that the MAC address is hard coded in the firmware file brcm/brcmfmac43143.bin as 00:90:4C:0E:81:23
Now, I can temporarily change the mac address, either as
ifconfig wlan0 hw ether ... or in the NetworkManager as
cloned-mac-address=..., or even with
macchanger, but this doesn't actually change the MAC address of the interface, but just creates a secondary "alias" MAC address on the interface. You still have the same underlying MAC address in the interface.
And that's where the problems happen. With two modules both enabled nearby it all goes belly up. The modules start fighting and causing each other to panic and reset. Running a
ping gets about 3 packets through before it locks up and the interface resets. About a minute later another three packets get through.
Either that or these chips just really don't like having their MAC address changed.
I have manually edited the firmware file on one test module to give it a different hard coded MAC address (it's in the binary file as a string, which is helpful) and the problem instantly goes away. And that's fine for me, since I know how to do these things. Not good for an average user though, editing a binary file like that.
So. Has anyone else come across this problem of conflicting underlying MAC addresses on these triangles / modules? If so, how do you tackle it? Am I going to have to resort to writing a custom "MAC editing" utility to modify the firmware files myself, or is there some way of setting a parameter to override the MAC that's in there?
Update: I have written a small utility to change the MAC address in the .bin file. Not perfect, but may be the way to go...