Hi all,
I want to build a mesh network that uses both wired and wireless backhaul with
Batman-adv like this:
```
Router A Router B Router C
_____________ ___________________ ________________
| br-lan | | br-lan | | br-lan |
|____________| |__________________| |________________|
|AP| bat0 | |AP| bat0 | |AP| bat0 |
|___|________| |___|_______________| |___|____________|
|lan|BHAP| |STA| lan | BHAP| |STA| BHAP |
|___|______| |____|_____|______| |____|_______|
^ ^----WiFi--^ ^ ^-----WiFi---^
|______Eth_Cable_____|
```
Router A and Router B are connected together by both wireless link (upstream
router runs an AP mode interface while the downstream router runs an STA
associating to the AP) and an ethernet cable. Router B and Router C are only
connected by Wi-Fi.
According to the document
(https://www.open-mesh.org/projects/batman-adv/wiki/Quick-start-guide#Mixing-non-BATMAN-systems-with-batman-adv)
and figures in
(https://www.open-mesh.org/projects/batman-adv/wiki/Wiki#Layer-2-), I think
this would be a common configuration, however it doesn't work correctly in my
setup.
-----------------------------------
Problem description:
Router A (192.168.6.1) and Router B (192.168.6.2) can ping each other. The
client (192.168.6.192) associating with Router B cannot ping Router A and its
associating client.
I also wrote some simple rules to trace the data frames in each router, below
is the output for a ping from client associating with Router B (192.168.6.2) to
Router A (192.168.6.1):
```
# Trace info on Router B (192.168.6.2)
root@ImmortalWrt:~# dmesg -c
[ 8633.614104] PREROUTING_ICMP: IN=ra1 OUT=
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3060 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=1
[ 8633.632366] FORWARD_ICMP: IN=ra1 OUT=bat0
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3060 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=1
[ 8633.650709] POSTROUTING_ICMP: IN= OUT=bat0 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3060 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=1
[ 8633.729794] PREROUTING_ICMP: IN=bat0 OUT=
MAC=90:de:80:07:24:7b:90:15:64:00:0b:ff:08:00 SRC=192.168.6.1 DST=192.168.6.192
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39290 PROTO=ICMP TYPE=0 CODE=0 ID=58728
SEQ=1
##============= HERE the problem happens, not forwarding the ICMP reply to ra1
[ 8634.644973] PREROUTING_ICMP: IN=ra1 OUT=
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3171 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=2
[ 8634.663238] FORWARD_ICMP: IN=ra1 OUT=bat0
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3171 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=2
[ 8634.681573] POSTROUTING_ICMP: IN= OUT=bat0 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3171 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=2
[ 8634.760652] PREROUTING_ICMP: IN=bat0 OUT=
MAC=90:de:80:07:24:7b:90:15:64:00:0b:ff:08:00 SRC=192.168.6.1 DST=192.168.6.192
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39376 PROTO=ICMP TYPE=0 CODE=0 ID=58728
SEQ=2
===================================
# Trace info on Router A (192.168.6.1)
root@ImmortalWrt:~# dmesg -c
[ 8636.392669] PREROUTING_ICMP: IN=bat0 OUT=
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3060 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=1
[ 8636.411042] INPUT_ICMP: IN=bat0 OUT=
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3060 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=1
[ 8636.429048] OUTPUT_ICMP: IN= OUT=bat0 SRC=192.168.6.1 DST=192.168.6.192
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39290 PROTO=ICMP TYPE=0 CODE=0 ID=58728
SEQ=1
[ 8636.442859] POSTROUTING_ICMP: IN= OUT=bat0 SRC=192.168.6.1 DST=192.168.6.192
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39290 PROTO=ICMP TYPE=0 CODE=0 ID=58728
SEQ=1
[ 8637.423525] PREROUTING_ICMP: IN=bat0 OUT=
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3171 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=2
[ 8637.441904] INPUT_ICMP: IN=bat0 OUT=
MAC=90:15:64:00:0b:ff:90:de:80:07:24:7b:08:00 SRC=192.168.6.192 DST=192.168.6.1
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=3171 DF PROTO=ICMP TYPE=8 CODE=0 ID=58728
SEQ=2
[ 8637.459891] OUTPUT_ICMP: IN= OUT=bat0 SRC=192.168.6.1 DST=192.168.6.192
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39376 PROTO=ICMP TYPE=0 CODE=0 ID=58728
SEQ=2
[ 8637.473708] POSTROUTING_ICMP: IN= OUT=bat0 SRC=192.168.6.1 DST=192.168.6.192
LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39376 PROTO=ICMP TYPE=0 CODE=0 ID=58728
SEQ=2
```
-----------------------------------
Other related information:
On Router A:
```
root@ImmortalWrt:~# ./batctl n
[B.A.T.M.A.N. adv 2025.0-dirty, MainIF/MAC: rax0/90:15:64:00:0b:ee
(bat0/22:b8:04:c2:f2:f8 BATMAN_V)]
IF Neighbor last-seen
90:15:64:00:0b:f7 0.140s ( 1000.0) [ lan4]
9a:15:64:00:0b:f8 0.172s ( 1.0) [ rax0]
root@ImmortalWrt:~# ip neigh
192.168.6.2 dev br-lan lladdr 90:15:64:00:0b:f1 ref 1 used 0/0/0 probes 1
REACHABLE
192.168.6.3 dev br-lan lladdr 90:15:64:00:0b:b8 used 0/0/0 probes 4 STALE
192.168.6.4 dev br-lan lladdr 90:15:64:00:0b:f6 used 0/0/0 probes 1 STALE
192.168.6.112 dev br-lan used 0/0/0 probes 3 FAILED
192.168.6.193 dev br-lan used 0/0/0 probes 6 FAILED
192.168.6.192 dev br-lan lladdr 90:de:80:07:24:7b ref 1 used 0/0/0 probes 1
DELAY
root@ImmortalWrt:~# brctl showstp br-lan
br-lan
bridge id 7fff.901564000bff
designated root 7fff.901564000bff
root port 0 path cost 0
max age 10.00 bridge max age 10.00
hello time 1.00 bridge hello time 1.00
forward delay 8.00 bridge forward delay 8.00
ageing time 300.00
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 55.93
flags
bat0 (7)
port id 8007 state forwarding
designated root 7fff.901564000bff path cost 100
designated bridge 7fff.901564000bff message age timer 0.00
designated port 8007 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
rax2 (5)
port id 8005 state forwarding
designated root 7fff.901564000bff path cost 100
designated bridge 7fff.901564000bff message age timer 0.00
designated port 8005 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
hairpin mode 1
lan2 (2)
port id 8002 state disabled
designated root 7fff.901564000bff path cost 100
designated bridge 7fff.901564000bff message age timer 0.00
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
rax1 (4)
port id 8004 state forwarding
designated root 7fff.901564000bff path cost 100
designated bridge 7fff.901564000bff message age timer 0.00
designated port 8004 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
hairpin mode 1
ra0 (3)
port id 8003 state forwarding
designated root 7fff.901564000bff path cost 100
designated bridge 7fff.901564000bff message age timer 0.00
designated port 8003 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
hairpin mode 1
lan3 (6)
port id 8006 state disabled
designated root 7fff.901564000bff path cost 100
designated bridge 7fff.901564000bff message age timer 0.00
designated port 8006 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
lan1 (1)
port id 8001 state forwarding
designated root 7fff.901564000bff path cost 4
designated bridge 7fff.901564000bff message age timer 0.00
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
```
On Router B:
```
root@ImmortalWrt:~# ./batctl n
[B.A.T.M.A.N. adv 2025.0-dirty, MainIF/MAC: apclix0/9a:15:64:00:0b:f8
(bat0/be:45:5c:1c:71:8f BATMAN_V)]
IF Neighbor last-seen
90:15:64:a0:0b:ec 0.424s ( 1000.0) [ lan3]
9a:15:64:00:0b:b9 0.272s ( 1.0) [ rax0]
90:15:64:00:0b:ee 0.456s ( 1.0) [ apclix0]
root@ImmortalWrt:~# ip neigh
192.168.6.3 dev br-lan used 0/0/0 probes 6 FAILED
192.168.6.4 dev br-lan lladdr 90:15:64:00:0b:f6 used 0/0/0 probes 1 STALE
192.168.6.1 dev br-lan lladdr 90:15:64:00:0b:ff used 0/0/0 probes 1 STALE
192.168.6.193 dev br-lan used 0/0/0 probes 6 FAILED
192.168.6.192 dev br-lan lladdr 90:de:80:07:24:7b ref 1 used 0/0/0 probes 1
DELAY
root@ImmortalWrt:~# brctl showstp br-lan
br-lan
bridge id 7fff.901564000bf1
designated root 7fff.901564000bf1
root port 0 path cost 0
max age 10.00 bridge max age 10.00
hello time 1.00 bridge hello time 1.00
forward delay 8.00 bridge forward delay 8.00
ageing time 300.00
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 54.47
flags
bat0 (4)
port id 8004 state forwarding
designated root 7fff.901564000bf1 path cost 100
designated bridge 7fff.901564000bf1 message age timer 0.00
designated port 8004 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
rax2 (8)
port id 8008 state forwarding
designated root 7fff.901564000bf1 path cost 100
designated bridge 7fff.901564000bf1 message age timer 0.00
designated port 8008 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
hairpin mode 1
ra1 (6)
port id 8006 state forwarding
designated root 7fff.901564000bf1 path cost 100
designated bridge 7fff.901564000bf1 message age timer 0.00
designated port 8006 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
hairpin mode 1
lan2 (2)
port id 8002 state disabled
designated root 7fff.901564000bf1 path cost 100
designated bridge 7fff.901564000bf1 message age timer 0.00
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
rax1 (7)
port id 8007 state forwarding
designated root 7fff.901564000bf1 path cost 100
designated bridge 7fff.901564000bf1 message age timer 0.00
designated port 8007 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
hairpin mode 1
ra0 (5)
port id 8005 state forwarding
designated root 7fff.901564000bf1 path cost 100
designated bridge 7fff.901564000bf1 message age timer 0.00
designated port 8005 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
hairpin mode 1
lan1 (1)
port id 8001 state disabled
designated root 7fff.901564000bf1 path cost 100
designated bridge 7fff.901564000bf1 message age timer 0.00
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
```
Thank you so much in advance!
Best regards,
Jingwei