Bridge loop: "received packet with own address as source address" during roaming


Setup:

  • Main Router: Raspberry Pi 4 (OpenWrt) with AdGuard Home (AGH) as primary DNS.
    • WiFi: 5GHz only.
  • Switch: TP-Link Unmanaged Switch.
  • Access Point: TP-Link Archer C80 (AP Mode).
    • WiFi: 2.4GHz and 5GHz.
  • Extender: Mi Router in Wireless Extender mode (extending the Archer C80's 2.4GHz band).
    • WiFi: 2.4GHz.
  • SSID: All nodes share the same SSID and password.

Topology:
ISP-> RPi4 (eth1: WAN) | RPi4 (eth0: LAN) Switch Archer C80 (LAN port) (Wireless 2.4G) Mi Extender

Description:
I am experiencing a roaming failure when a Samsung phone moves from the Archer C80 WiFi to the RPi4 WiFi. Instead of a seamless connection, the phone loses internet and disconnects. This only affects the roaming phone; LAN devices remain stable.

I cannot use 802.11r (Fast Transition) bcz the TP-Link stock firmware does not support it. I tried enabling 802.11r on the RPi4 alone, but the phone then refuses to connect to the RPi4 entirely when roaming from the TP-Link. Hence, this workaround has been discarded.

During the failed roam, I get this error:
br-lan: received packet on phy0-ap0 with own address as source address (addr:dc:xx:xx:xx:xx:66, vlan:0)

Relevant RPi4 logs:

[8:36:06 PM] daemon.info: dnsmasq-dhcp[1]: DHCPREQUEST(br-lan) 192.168.1.101 d4:xx:xx:xx:xx:4b
[8:36:06 PM] daemon.info: dnsmasq-dhcp[1]: DHCPACK(br-lan) 192.168.1.101 d4:xx:xx:xx:xx:4b SamsungPhone
[8:36:08 PM] user.notice: AdGuardHome[1]: 2026/01/14 15:06:08.906375 [error] dnsproxy: unpacking udp packet err="dns: buffer size too small"
[8:36:11 PM] user.notice: AdGuardHome[1]: 2026/01/14 15:06:11.917259 [error] dnsproxy: unpacking udp packet err="dns: buffer size too small"
[8:36:29 PM] daemon.info: hostapd: phy0-ap0: STA d4:xx:xx:xx:xx:4b IEEE 802.11: associated
[8:36:29 PM] daemon.notice: hostapd: phy0-ap0: AP-STA-CONNECTED d4:xx:xx:xx:xx:4b auth_alg=open
[8:36:29 PM] daemon.info: hostapd: phy0-ap0: STA d4:xx:xx:xx:xx:4b WPA: pairwise key handshake completed (RSN)
[8:36:29 PM] daemon.notice: hostapd: phy0-ap0: EAPOL-4WAY-HS-COMPLETED d4:xx:xx:xx:xx:4b
=>[8:36:29 PM] kern.warn: [46629.473489] br-lan: received packet on phy0-ap0 with own address as source address (addr:dc:xx:xx:xx:xx:66, vlan:0)
[8:36:31 PM] user.notice: AdGuardHome[1]: 2026/01/14 15:06:31.921659 [error] dnsproxy: unpacking udp packet err="dns: buffer size too small"
[8:36:34 PM] user.notice: AdGuardHome[1]: 2026/01/14 15:06:34.945616 [error] dnsproxy: unpacking udp packet err="dns: buffer size too small"

Things I’ve tried so far:

  • Matched Security: Forced WPA2-PSK (AES/CCMP) on all nodes.
  • Frequency Plan: Archer C80 (Ch 36), RPi4 (Ch 149), Mi Extender (Ch 1).
  • Verified Archer C80 is in AP Mode with DHCP disabled.
  • Checked MTU: LAN 1500, WAN 1492 (PPPoE) with MSS Clamping.

Other logs:

root@OpenWrt:~# brctl show
bridge name     bridge id               STP enabled     interfaces
br-lan          7fff.dca632955b64       no              eth0
                                                        phy0-ap0
root@OpenWrt:~# arp
IP address       HW type     Flags       HW address            Mask     Device
192.168.1.104    0x1         0x2         64:xx:xx:xx:xx:7a     *        br-lan
192.168.1.101    0x1         0x2         d4:xx:xx:xx:xx:4b     *        br-lan
192.168.1.100    0x1         0x2         60:xx:xx:xx:xx:86     *        br-lan
192.168.1.103    0x1         0x2         f4:xx:xx:xx:xx:44     *        br-lan
192.168.1.108    0x1         0x2         7a:xx:xx:xx:xx:46     *        br-lan
192.168.1.2      0x1         0x2         28:xx:xx:xx:xx:7f     *        br-lan
root@OpenWrt:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-lan state UP mode DEFAULT group default qlen 1000
    link/ether dc:xx:xx:xx:xx:64 brd ff:ff:ff:ff:ff:ff
3: teql0: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 100
    link/void
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether d0:XX:XX:XX:XX:93 brd ff:ff:ff:ff:ff:ff
5: phy0-ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br-lan state UP mode DEFAULT group default qlen 1000
    link/ether dc:xx:xx:xx:xx:66 brd ff:ff:ff:ff:ff:ff
7: pppoe-wan: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 3
    link/ppp
9: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether dc:xx:xx:xx:xx:64 brd ff:ff:ff:ff:ff:ff
root@OpenWrt:~# brctl showmacs br-lan
port no mac addr                is local?       ageing timer
  1     28:xx:xx:xx:xx:7f       no                 0.63
  1     60:xx:xx:xx:xx:86       no                 0.00
  1     64:xx:xx:xx:xx:7a       no                 1.40
  1     7a:xx:xx:xx:xx:46       no                 1.07
  2     d4:xx:xx:xx:xx:4b       no                 0.11
  1     dc:xx:xx:xx:xx:64       yes                0.00
  1     dc:xx:xx:xx:xx:64       yes                0.00
  2     dc:xx:xx:xx:xx:66       yes                0.00
  2     dc:xx:xx:xx:xx:66       yes                0.00
  1     f4:xx:xx:xx:xx:44       no               215.59
root@OpenWrt:~# iwinfo
phy0-ap0 ESSID: "RPi4"
         Access Point: dc:xx:xx:xx:xx:66
         Mode: Master  Channel: 149 (5.745 GHz)  HT Mode: VHT80
         Center Channel 1: 155 2: unknown
         Tx-Power: 31 dBm  Link Quality: 70/70
         Signal: 0 dBm  Noise: -100 dBm
         Bit Rate: 325.0 MBit/s
         Encryption: WPA-PSK (CCMP)
         Type: nl80211  HW Mode(s): 802.11ac/n
         Hardware: nl80211 [Generic MAC80211]
         TX power offset: none
         Channel offset: none
         Supports VAPs: no  PHY name: phy0

wireless:


config wifi-device 'radio0'
	option type 'mac80211'
	option path 'platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'
	option band '5g'
	option channel '149'
	option htmode 'VHT80'
	option country 'IN'
	option cell_density '0'

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid 'RPi4'
	option encryption 'psk2+ccmp'
	option key 'password'
	option bridge_isolate '1'

network:


config interface 'loopback'
	option device 'lo'
	option proto 'static'
	list ipaddr '127.0.0.1/8'

config globals 'globals'
	option dhcp_default_duid '000438c1764ad8814b08bb298f45d08659f8'
	option ula_prefix 'fd10:2245:c904::/48'
	option packet_steering '0'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth0'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	list ipaddr '192.168.1.1/24'
	option ip6assign '60'

config interface 'wan'
	option proto 'pppoe'
	option device 'eth1'
	option username ''
	option password ''
	option ipv6 'auto'
	option norelease '1'
	option peerdns '0'

config device
	option name 'phy0-ap0'

dhcp:

config dnsmasq
	option domainneeded '1'
	option localise_queries '1'
	option rebind_protection '1'
	option rebind_localhost '1'
	option local '/lan/'
	option domain 'lan'
	option expandhosts '1'
	option cachesize '0'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option localservice '1'
	option ednspacket_max '1232'
	option allservers '1'
	option sequential_ip '1'
	option port '54'
	option noresolv '1'

config dhcp 'lan'
	option interface 'lan'
	option start '100'
	option limit '150'
	option leasetime '12h'
	option dhcpv4 'server'
	option dhcpv6 'server'
	option ra 'server'
	option ra_slaac '1'
	list ra_flags 'managed-config'
	list ra_flags 'other-config'
	list dhcp_option '3,192.168.1.1'
	list dhcp_option '6,192.168.1.1'
	list dhcp_option '15,lan'
	list dns 'fd10:2245:c904::1'

config dhcp 'wan'
	option interface 'wan'
	option ignore '1'

config odhcpd 'odhcpd'
	option leasefile '/tmp/odhcpd.leases'
	option leasetrigger '/usr/sbin/odhcpd-update'
	option loglevel '4'
	option piodir '/tmp/odhcpd-piodir'
	option hostsdir '/tmp/hosts'

config host
	option name 'TPLink-Router'
	option dns '1'
	option mac '28:XX:XX:XX:XX:7F'
	option ip '192.168.1.2'

config host
	option name 'MiRouter'
	option dns '1'
	option mac '7A:XX:XX:XX:XX:46'
	option ip '192.168.1.3'

config host
	option name 'SamsungPhone'
	option dns '1'
	option ip '192.168.1.101'
	option mac 'D4:XX:XX:XX:XX:4B'

When your phone moves from the C80 to the RPi4, its MAC address needs to move from br-lan port 1 to br-lan port 2.

There is a possibility that this change will not be applied immediately due to aging time.

Run brctl setageing br-lan 0 to see if it makes a difference.

1 Like

This worked but is this a solution or a workaround? Enabling option "Isolate Bridge Port" on RPi4 wifi keeps the connection seamless despite the log errors. So, what to do?

Update: Found 802.11r (Fast Transition) option working when aging is set to 0