brcmfmac: AP+STA on one PHY reassigns STA MAC to AP MAC and breaks concurrent operation

Stephen C Goodman <[email protected]> Mon, 3 Aug 2026 17:26:49 +0000
Newsgroups dev.linux.lists.brcm80211,org.kernel.vger.linux-wireless
Message-ID <GVYP280MB1056154BB4A4DE3D4555EA0C9DD52@GVYP280MB1056.SWEP280.PROD.OUTLOOK.COM>
Hi,=0A=
=0A=
I am seeing a reproducible AP+STA concurrency failure with `brcmfmac` on a =
single PHY.=0A=
=0A=
The PHY advertises a valid interface combination containing both a managed =
interface and an AP interface, so one STA and one AP should be able to oper=
ate concurrently.=0A=
=0A=
The relevant `iw phy` interface-combination output is:=0A=
=0A=
```=0A=
[paste the exact =93valid interface combinations=94 block here]=0A=
```=0A=
=0A=
## Environment=0A=
=0A=
```=0A=
=0A=
Broadcom chipset:   BCM4366C0=0A=
=0A=
```=0A=
=0A=
## Summary=0A=
=0A=
STA-only and AP-only operation both work correctly.=0A=
=0A=
Concurrent AP+STA operation fails because the STA interface is reassigned t=
o the MAC address of the AP interface. The visible failure depends on which=
 interface is started first, but concurrent operation never works.=0A=
=0A=
The STA MAC also follows the most recently enabled AP interface. If another=
 AP is enabled, the STA changes again and takes that AP=92s MAC address.=0A=
=0A=
## Expected behavior=0A=
=0A=
One STA and one AP should operate concurrently on the same PHY, using disti=
nct interface MAC addresses.=0A=
=0A=
Starting or stopping another supported AP interface should not reassign the=
 STA MAC or corrupt the state of existing virtual interfaces.=0A=
=0A=
## Actual behavior=0A=
=0A=
### Test 1: STA only=0A=
=0A=
1. Enable the STA.=0A=
2. The STA associates with the upstream AP and works normally.=0A=
3. The STA initially uses the radio=92s normal/default MAC address.=0A=
=0A=
Result: works.=0A=
=0A=
### Test 2: AP only=0A=
=0A=
1. Enable one AP.=0A=
2. The AP starts and broadcasts normally.=0A=
=0A=
Result: works.=0A=
=0A=
### Test 3: STA first, AP second=0A=
=0A=
1. Enable the STA.=0A=
2. The STA associates and works.=0A=
3. Enable the AP.=0A=
4. The STA changes to the AP interface=92s MAC address.=0A=
5. The STA and AP now have the same MAC address.=0A=
6. Both interfaces fail.=0A=
=0A=
Result: both STA and AP fail.=0A=
=0A=
### Test 4: AP first, STA second=0A=
=0A=
1. Enable the AP.=0A=
2. The AP starts and broadcasts normally.=0A=
3. Enable the STA.=0A=
4. The STA changes to the AP interface=92s MAC address.=0A=
5. The STA successfully associates with the upstream AP.=0A=
6. The local AP then stops broadcasting/disappears.=0A=
=0A=
Result: the STA associates, but the AP fails.=0A=
=0A=
### Test 5: Explicit STA MAC=0A=
=0A=
Setting `option macaddr` on the STA does not resolve the problem.=0A=
=0A=
The STA does not retain the configured MAC during concurrent AP+STA operati=
on. It still changes to the AP interface=92s MAC address.=0A=
=0A=
### Test 6: Explicit AP MAC=0A=
=0A=
Changing the AP=92s configured `option macaddr` also does not resolve the p=
roblem.=0A=
=0A=
Whatever MAC address is assigned to the AP, the STA changes to that address=
 when AP+STA operation is attempted.=0A=
=0A=
### Test 7: Enable another AP=0A=
=0A=
This test makes the cross-interface reassignment especially visible:=0A=
=0A=
1. Enable AP0.=0A=
2. Enable the STA.=0A=
3. The STA takes AP0=92s MAC address.=0A=
4. Enable AP1, which has a different valid MAC address.=0A=
5. The STA changes again and takes AP1=92s MAC address.=0A=
=0A=
Therefore, the STA is not merely receiving one incorrect static address. It=
s MAC follows the most recently enabled AP interface.=0A=
=0A=
If AP1 is then disabled, AP0 and the STA once again show different MAC addr=
esses in Linux. However, concurrent operation does not recover correctly:=
=0A=
=0A=
* OpenWrt/hostapd may briefly report AP0 as enabled.=0A=
* The AP is not visible over the air.=0A=
* The STA repeatedly connects and disconnects.=0A=
* `phy0-ap0` repeatedly enters forwarding state and is then disabled.=0A=
* `brcmfmac` repeatedly reports `WLC_DISASSOC failed (-52)`.=0A=
=0A=
## Representative log=0A=
=0A=
The STA initially associates and completes WPA key negotiation:=0A=
=0A=
```=0A=
wpa_supplicant: phy0-sta0: Associated with aa:bb:cc:00:11:22=0A=
wpa_supplicant: phy0-sta0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=3D0=0A=
wpa_supplicant: phy0-sta0: WPA: Key negotiation completed with aa:bb:cc:00:=
11:22 [PTK=3DCCMP GTK=3DCCMP]=0A=
wpa_supplicant: phy0-sta0: CTRL-EVENT-CONNECTED - Connection to aa:bb:cc:00=
:11:22 completed=0A=
```=0A=
=0A=
The local driver then fails to disconnect cleanly:=0A=
=0A=
```=0A=
ieee80211 phy0: brcmf_link_down: WLC_DISASSOC failed (-52)=0A=
```=0A=
=0A=
The STA is disconnected locally:=0A=
=0A=
```=0A=
wpa_supplicant: phy0-sta0: CTRL-EVENT-DISCONNECTED bssid=3Daa:bb:cc:00:11:2=
2 reason=3D0 locally_generated=3D1=0A=
```=0A=
=0A=
The AP bridge port then repeatedly transitions through forwarding and disab=
led states:=0A=
=0A=
```=0A=
br-lan: port 10(phy0-ap0) entered blocking state=0A=
br-lan: port 10(phy0-ap0) entered forwarding state=0A=
br-lan: port 10(phy0-ap0) entered disabled state=0A=
```=0A=
=0A=
This loop repeats:=0A=
=0A=
```=0A=
ieee80211 phy0: brcmf_link_down: WLC_DISASSOC failed (-52)=0A=
br-lan: port 10(phy0-ap0) entered blocking state=0A=
br-lan: port 10(phy0-ap0) entered forwarding state=0A=
br-lan: port 10(phy0-ap0) entered disabled state=0A=
```=0A=
=0A=
## Channel and security tests=0A=
=0A=
The AP+STA failure is reproducible with the channel set to automatic and wi=
th the AP explicitly configured to use the upstream AP=92s channel.=0A=
=0A=
The same MAC reassignment and concurrent-operation failure was observed wit=
h:=0A=
=0A=
* open authentication=0A=
* WEP=0A=
* WPA=0A=
* WPA2=0A=
=0A=
Therefore, the failure does not appear to be caused by WPA key negotiation =
or by a particular security mode.=0A=
=0A=
## Recovery=0A=
=0A=
On a fresh boot, disabling the STA allows the AP configuration to work agai=
n. A full reboot is not consistently required.=0A=
=0A=
During one earlier extended test session, a Wi-Fi restart was required befo=
re all APs returned, but I have not reproduced a consistent reboot requirem=
ent and am not treating that as part of the main bug.=0A=
=0A=
## Related observation=0A=
=0A=
The same hardware also has a separate multi-BSS MAC-assignment issue. Multi=
ple APs work only when explicit addresses are configured with the first fiv=
e octets identical and only the last octet different.=0A=
=0A=
I am treating that as a separate issue. However, it may indicate that virtu=
al-interface MAC allocation or firmware interface-address handling is relev=
ant to both failures.=0A=
=0A=
## Conclusion=0A=
=0A=
The main reproducible problem is:=0A=
=0A=
* AP-only works.=0A=
* STA-only works.=0A=
* Concurrent AP+STA is advertised as supported.=0A=
* The STA is reassigned to the AP interface=92s MAC.=0A=
* The STA MAC follows the most recently enabled AP.=0A=
* Bring-up order changes the visible outcome, but concurrent operation alwa=
ys fails.=0A=
* Removing the visible duplicate MAC afterwards does not immediately restor=
e valid AP+STA operation.=0A=
* The driver enters a repeated `WLC_DISASSOC failed (-52)` and interface-fl=
apping loop.=0A=
=0A=
This appears to be a `brcmfmac`/firmware virtual-interface MAC assignment o=
r interface-state handling bug.=0A=
=0A=
=0A=
Best regards,=0A=
Stephen=0A=