802.11s BATMAN 5GHz mesh: Stuck at MCS 2 after getting into range again

Hi,

while testing my BATMAN Mesh setup with serveral TP-Link EAP225-Outdoor v3 nodes (QCA988x 5GHz, band 36, 40MHz, ath10k driver (not ath10k_ct), OpenWRT 24.10.2), I found that the throughput went down after being out of range of a station and then getting in range again in a mobile setup.

To pinpoint the issue I set up a lab setup with 2 Vaunix attenuators (another 30 dB passive attenuator is in front of them) and TP-Link EAP225-Outdoor v3 in 2 separate Rohde & Schwarz umbrella boxes. I applied an triangle function as an attenuation course for the Vaunix attenuators. At the same time I ran an iperf3 UDP throughput test sending 50 Mbit/s from Host 1 (192.168.1.1) to Host 2 (192.168.1.1). I got the station dumps every 0.5s via ssh (connected to both via LAN). Here are the dmesg of both hosts:

dmesg of Host 1 (192.168.1.1)
dmesg of Host 2 (192.168.1.2)

[ 0.000000] Linux version 6.6.93 (builder@buildhost) (mips-openwrt-linux-musl-gcc (OpenWrt GCC 13.3.0 r28739-d9340319c6) 13.3.0, GNU ld (GNU Binutils) 2.42) #0 Mon Jun 23 20:40:36 2025
[ 0.000000] printk: bootconsole [early0] enabled
[ 0.000000] CPU0 revision is: 00019750 (MIPS 74Kc)
[ 0.000000] MIPS: machine is TP-Link EAP225-Outdoor v3
[ 0.000000] SoC: Qualcomm Atheros QCA956X ver 1 rev 0
[ 0.000000] Initrd not found or empty - disabling initrd
[ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[ 0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x0000000000000000-0x0000000007ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x0000000007ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=132768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Kernel command line: console=ttyS0,115200n8 rootfstype=squashfs,jffs2
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[ 0.000000] Writing ErrCtl register=00000000
[ 0.000000] Readback ErrCtl register=00000000
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32480
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 119972K/131072K available (6826K kernel code, 605K rwdata, 900K rodata, 1196K init, 233K bss, 11100K reserved, 0K cma-reserved)
[ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] NR_IRQS: 51
[ 0.000000] CPU clock: 775.000 MHz
[ 0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 4932285024 ns
[ 0.000002] sched_clock: 32 bits at 388MHz, resolution 2ns, wraps every 5541893118ns
[ 0.008310] Calibrating delay loop... 385.84 BogoMIPS (lpj=1929216)
[ 0.074808] pid_max: default: 32768 minimum: 301
[ 0.089083] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.096816] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.113311] RCU Tasks Trace: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=1.
[ 0.127653] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.138073] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[ 0.147743] pinctrl core: initialized pinctrl subsystem
[ 0.155997] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.162863] thermal_sys: Registered thermal governor 'step_wise'
[ 0.164738] /ahb/apb: Fixed dependency cycle(s) with /ahb/apb/interrupt-controller@18060010
[ 0.191451] clocksource: Switched to clocksource MIPS
[ 0.207007] NET: Registered PF_INET protocol family
[ 0.212432] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[ 0.221424] tcp_listen_portaddr_hash hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.230404] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 0.238592] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.246690] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[ 0.254165] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.261602] MPTCP token hash table entries: 512 (order: 0, 6144 bytes, linear)
[ 0.269459] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 0.276400] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 0.284665] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 0.290715] PCI: CLS 0 bytes, default 32
[ 0.299807] workingset: timestamp_bits=14 max_order=15 bucket_order=1
[ 0.308243] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.314446] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[ 0.331956] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[ 0.343111] pinctrl-single 1804002c.pinmux: 544 pins, size 68
[ 0.350533] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[ 0.362568] printk: console [ttyS0] disabled
[ 0.367494] 18020000.uart: ttyS0 at MMIO 0x18020000 (irq = 11, base_baud = 1562500) is a 16550A
[ 0.376764] printk: console [ttyS0] enabled
[ 0.385835] printk: bootconsole [early0] disabled
[ 0.429693] spi-nor spi0.0: en25qh128 (16384 Kbytes)
[ 0.434998] 7 fixed-partitions partitions found on MTD device spi0.0
[ 0.441623] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 0.448478] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 0.455574] Creating 7 MTD partitions on "spi0.0":
[ 0.460539] 0x000000000000-0x000000020000 : "u-boot"
[ 0.468914] 0x000000020000-0x000000030000 : "partition-table"
[ 0.476886] 0x000000030000-0x000000040000 : "info"
[ 0.483959] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 0.491158] 0x000000040000-0x000000dc0000 : "firmware"
[ 0.498874] 2 elf-loader-fw partitions found on MTD device firmware
[ 0.505417] Creating 2 MTD partitions on "firmware":
[ 0.510552] 0x000000000000-0x000000281340 : "kernel"
[ 0.515692] mtd: partition "kernel" doesn't end on an erase/write block -- force read-only
[ 0.526166] 0x000000281340-0x000000d80000 : "rootfs"
[ 0.531317] mtd: partition "rootfs" doesn't start on an erase/write block boundary -- force read-only
[ 0.542853] mtd: setting mtd5 (rootfs) as root device
[ 0.548159] 1 squashfs-split partitions found on MTD device rootfs
[ 0.554592] 0x0000009b0000-0x000000d80000 : "rootfs_data"
[ 0.562150] 0x000000dc0000-0x000000df0000 : "config"
[ 0.569386] 0x000000f30000-0x000000ff0000 : "log"
[ 0.576414] 0x000000ff0000-0x000001000000 : "art"
[ 0.583423] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 1.621464] ag71xx-legacy 19000000.eth: connected to PHY at mdio.0:06 [uid=001cc916, driver=RTL8211F Gigabit Ethernet]
[ 1.633201] eth0: Atheros AG71xx at 0xb9000000, irq 4, mode: sgmii
[ 1.640217] i2c_dev: i2c /dev entries driver
[ 1.647604] NET: Registered PF_INET6 protocol family
[ 1.662958] Segment Routing with IPv6
[ 1.666833] In-situ OAM (IOAM) with IPv6
[ 1.671037] NET: Registered PF_PACKET protocol family
[ 1.676359] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 1.690036] 8021q: 802.1Q VLAN Support v1.8
[ 1.714836] PCI host bridge to bus 0000:00
[ 1.719087] pci_bus 0000:00: root bus resource [mem 0x12000000-0x13ffffff]
[ 1.726318] pci_bus 0000:00: root bus resource [io 0x0000]
[ 1.732107] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
[ 1.740329] pci 0000:00:00.0: [168c:0056] type 00 class 0x028000
[ 1.746584] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x001fffff 64bit]
[ 1.753741] pci 0000:00:00.0: PME# supported from D0 D3hot
[ 1.760405] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
[ 1.767307] pci 0000:00:00.0: BAR 0: assigned [mem 0x12000000-0x121fffff 64bit]
[ 1.791294] clk: Disabling unused clocks
[ 1.804778] VFS: Mounted root (squashfs filesystem) readonly on device 31:5.
[ 1.818637] Freeing unused kernel image (initmem) memory: 1196K
[ 1.824796] This architecture does not have kernel memory protection.
[ 1.831467] Run /sbin/init as init process
[ 1.835693] with arguments:
[ 1.835698] /sbin/init
[ 1.835703] with environment:
[ 1.835708] HOME=/
[ 1.835712] TERM=linux
[ 2.562960] init: Console is alive
[ 2.566870] init: - watchdog -
[ 4.215791] kmodloader: loading kernel modules from /etc/modules-boot.d/

[ 4.295425] gpio_button_hotplug: loading out-of-tree module taints kernel.
[ 4.306600] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[ 4.324664] init: - preinit -
[ 8.561479] random: crng init done
[ 14.033293] eth0: link up (1000Mbps/Full duplex)
[ 14.258968] jffs2: notice: (521) jffs2_build_xattr_subsystem: complete building xattr subsystem, 48 of xdatum (13 unchecked, 35 orphan) and 50 of xref (35 dead, 0 orphan) found.
[ 14.277117] mount_root: switching to jffs2 overlay
[ 14.284230] overlayfs: upper fs does not support tmpfile.
[ 14.298968] urandom-seed: Seeding with /etc/urandom.seed
[ 14.442831] eth0: link down
[ 14.460758] procd: - early -
[ 14.464203] procd: - watchdog -
[ 15.221679] procd: - watchdog -
[ 15.226404] procd: - ubus -
[ 15.638434] procd: - init -
[ 17.492735] kmodloader: loading kernel modules from /etc/modules.d/*
[ 18.750006] GACT probability on
[ 18.772664] Mirror/redirect action on
[ 18.812997] u32 classifier
[ 18.815819] input device check on
[ 18.819596] Actions configured
[ 18.898345] Loading modules backported from Linux version v6.12.6-0-ge9d65b48ce1a
[ 18.906135] Backport generated by backports.git v6.1.110-1-35-g410656ef04d2
[ 18.988048] urngd: v1.0.2 started.
[ 19.878746] PPP generic driver version 2.4.2
[ 19.902576] NET: Registered PF_PPPOX protocol family
[ 20.004860] ath10k 6.10 driver, optimized for CT firmware, probing pci device: 0x56.
[ 20.062381] ath10k_pci 0000:00:00.0: enabling device (0000 -> 0002)
[ 20.069172] ath10k_pci 0000:00:00.0: pci irq legacy oper_irq_mode 1 irq_mode 0 reset_mode 0
[ 23.361594] ath10k_pci 0000:00:00.0: qca9888 hw2.0 target 0x01000000 chip_id 0x00000000 sub 0000:0000
[ 23.371147] ath10k_pci 0000:00:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 0
[ 23.385706] ath10k_pci 0000:00:00.0: firmware ver 10.4b-ct-9888-fW-13-5ae337bb1 api 5 features mfp,peer-flow-ctrl,txstatus-noack,wmi-10.x-CT,ratemask-CT,regdump-CT,txrate-CT,flush-all-CT,pingpong-CT,ch-regs-CT,nop-CT,set-special-CT,tx-rc-CT,cust-stats-CT,txrate2-CT,beacon-cb-CT,wmi-block-ack-CT,wmi-bcn-rc-CT crc32 59e741e7
[ 23.751993] ath10k_pci 0000:00:00.0: board_file api 2 bmi_id 0:24 crc32 5968d47d
[ 25.524538] ath10k_pci 0000:00:00.0: 10.4 wmi init: vdevs: 16 peers: 48 tid: 96
[ 25.532348] ath10k_pci 0000:00:00.0: msdu-desc: 2500 skid: 32
[ 25.582321] ath10k_pci 0000:00:00.0: wmi print 'P 48/48 V 16 K 144 PH 176 T 186 msdu-desc: 2500 sw-crypt: 0 ct-sta: 0'
[ 25.593638] ath10k_pci 0000:00:00.0: wmi print 'free: 114572 iram: 12644 sram: 29508'
[ 25.829720] ath10k_pci 0000:00:00.0: htt-ver 2.2 wmi-op 6 htt-op 4 cal pre-cal-nvmem max-sta 32 raw 0 hwcrypto 1
[ 25.935062] ath: EEPROM regdomain: 0x0
[ 25.935086] ath: EEPROM indicates default country code should be used
[ 25.935092] ath: doing EEPROM country->regdmn map search
[ 25.935107] ath: country maps to regdmn code: 0x3a
[ 25.935114] ath: Country alpha2 being used: US
[ 25.935121] ath: Regpair used: 0x3a
[ 26.011657] batman_adv: B.A.T.M.A.N. advanced 2024.3-openwrt-6 (compatibility version 15) loaded
[ 26.069301] ath: EEPROM regdomain: 0x0
[ 26.069327] ath: EEPROM indicates default country code should be used
[ 26.069333] ath: doing EEPROM country->regdmn map search
[ 26.069348] ath: country maps to regdmn code: 0x3a
[ 26.069354] ath: Country alpha2 being used: US
[ 26.069362] ath: Regpair used: 0x3a
[ 26.080460] ieee80211 phy1: Selected rate control algorithm 'minstrel_ht'
[ 26.081431] ieee80211 phy1: Atheros AR9561 Rev:0 mem=0xa585bc26, irq=2
[ 26.110581] kmodloader: done loading kernel modules from /etc/modules.d/*
[ 48.693388] br-lan: port 1(eth0) entered blocking state
[ 48.698818] br-lan: port 1(eth0) entered disabled state
[ 48.704314] ag71xx-legacy 19000000.eth eth0: entered allmulticast mode
[ 48.711320] ag71xx-legacy 19000000.eth eth0: entered promiscuous mode
[ 49.996312] 8021q: adding VLAN 0 to HW filter on device bat0
[ 50.136312] br-lan: port 2(bat0) entered blocking state
[ 50.141782] br-lan: port 2(bat0) entered disabled state
[ 50.147217] bat0: entered allmulticast mode
[ 50.151843] bat0: entered promiscuous mode
[ 50.156222] br-lan: port 2(bat0) entered blocking state
[ 50.161686] br-lan: port 2(bat0) entered forwarding state
[ 50.501533] batman_adv: bat0: No IGMP Querier present - multicast optimizations disabled
[ 50.509919] batman_adv: bat0: No MLD Querier present - multicast optimizations disabled
[ 50.755330] eth0: link up (1000Mbps/Full duplex)
[ 50.760183] br-lan: port 1(eth0) entered blocking state
[ 50.765641] br-lan: port 1(eth0) entered forwarding state
[ 52.998069] ath: EEPROM regdomain: 0x8114
[ 52.998098] ath: EEPROM indicates we should expect a country code
[ 52.998106] ath: doing EEPROM country->regdmn map search
[ 52.998112] ath: country maps to regdmn code: 0x37
[ 52.998119] ath: Country alpha2 being used: DE
[ 52.998126] ath: Regpair used: 0x37
[ 52.998132] ath: regdomain 0x8114 dynamically updated by user
[ 52.998221] ath: EEPROM regdomain: 0x8114
[ 52.998228] ath: EEPROM indicates we should expect a country code
[ 52.998234] ath: doing EEPROM country->regdmn map search
[ 52.998239] ath: country maps to regdmn code: 0x37
[ 52.998245] ath: Country alpha2 being used: DE
[ 52.998251] ath: Regpair used: 0x37
[ 52.998257] ath: regdomain 0x8114 dynamically updated by user
[ 59.173732] ath10k_pci 0000:00:00.0: 10.4 wmi init: vdevs: 16 peers: 48 tid: 96
[ 59.181541] ath10k_pci 0000:00:00.0: msdu-desc: 2500 skid: 32
[ 59.231516] ath10k_pci 0000:00:00.0: wmi print 'P 48/48 V 16 K 144 PH 176 T 186 msdu-desc: 2500 sw-crypt: 0 ct-sta: 0'
[ 59.242849] ath10k_pci 0000:00:00.0: wmi print 'free: 114572 iram: 12644 sram: 29508'
[ 59.557430] ath10k_pci 0000:00:00.0: rts threshold -1
[ 59.563089] ath10k_pci 0000:00:00.0: Firmware lacks feature flag indicating a retry limit of > 2 is OK, requested limit: 4
[ 60.171824] ath10k_pci 0000:00:00.0: NOTE: Firmware DBGLOG output disabled in debug_mask: 0x10000000
[ 67.139977] batman_adv: bat0: Adding interface: phy0-mesh0
[ 67.145735] batman_adv: bat0: Interface activated: phy0-mesh0
[ 67.292421] ------------[ cut here ]------------
[ 67.297317] WARNING: CPU: 0 PID: 21 at backports-6.12.6/net/mac80211/main.c:408 0x82802a50 [mac80211@0c49faf7+0x8a000]
[ 67.308478] Modules linked in: ath9k(O) ath9k_common(O) pppoe ppp_async nft_fib_inet nf_flow_table_inet batman_adv(O) ath9k_hw(O) ath10k_pci(O) ath10k_core(O) ath(O) pppox ppp_generic nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject nft_redir nft_quota nft_numgen nft_nat nft_masq nft_log nft_limit nft_hash nft_flow_offload nft_fib_ipv6 nft_fib_ipv4 nft_fib nft_ct nft_chain_nat nf_tables nf_nat nf_flow_table nf_conntrack mac80211(O) lzo cfg80211(O) slhc nfnetlink nf_reject_ipv6 nf_reject_ipv4 nf_log_syslog nf_defrag_ipv6 nf_defrag_ipv4 lzo_rle lzo_decompress lzo_compress libcrc32c hwmon crc_ccitt compat(O) sch_tbf sch_ingress sch_htb sch_hfsc em_u32 cls_u32 cls_route cls_matchall cls_fw cls_flow cls_basic act_skbedit act_mirred act_gact sha512_generic seqiv sha3_generic jitterentropy_rng drbg md5 hmac geniv rng cmac crypto_acompress gpio_button_hotplug(O) crc16 crc32c_generic
[ 67.389975] CPU: 0 PID: 21 Comm: kworker/u2:1 Tainted: G O 6.6.93 #0
[ 67.397995] Workqueue: events_unbound 0x81f80338 [cfg80211@3b2f6897+0x46000]
[ 67.405330] Stack : 00000000 8075a464 81921d2c 829901f0 00000000 00000000 00000000 00000000
[ 67.413984] 00000000 00000000 00000000 00000000 00000000 00000001 81921ce8 2800fd0e
[ 67.422641] 81921d80 00000000 00000000 81921c10 00000038 80702fe4 00000000 ffffffea
[ 67.431295] 000000d7 81921c1c 000000d7 807fb720 8071ca34 81921cc8 00000000 82802a50
[ 67.439950] 00000009 829901f0 81916750 61c88647 00000018 803d16cc 00000000 809b0000
[ 67.448607] ...
[ 67.451133] Call Trace:
[ 67.451187] [<80702fe4>] 0x80702fe4
[ 67.457327] [<82802a50>] 0x82802a50 [mac80211@0c49faf7+0x8a000]
[ 67.463508] [<803d16cc>] 0x803d16cc
[ 67.467109] [<800661e8>] 0x800661e8
[ 67.470711] [<800661f0>] 0x800661f0
[ 67.474313] [<806d99a4>] 0x806d99a4
[ 67.477956] [<800849b0>] 0x800849b0
[ 67.481636] [<82802a50>] 0x82802a50 [mac80211@0c49faf7+0x8a000]
[ 67.487795] [<80084a40>] 0x80084a40
[ 67.491618] [<82802a50>] 0x82802a50 [mac80211@0c49faf7+0x8a000]
[ 67.497776] [<8287d2e4>] 0x8287d2e4 [mac80211@0c49faf7+0x8a000]
[ 67.504264] [<81f803ec>] 0x81f803ec [cfg80211@3b2f6897+0x46000]
[ 67.510492] [<8009ed9c>] 0x8009ed9c
[ 67.514179] [<8009f35c>] 0x8009f35c
[ 67.517778] [<8009efc4>] 0x8009efc4
[ 67.521379] [<800a6738>] 0x800a6738
[ 67.524982] [<8009efc4>] 0x8009efc4
[ 67.528584] [<800a6738>] 0x800a6738
[ 67.532185] [<800a6834>] 0x800a6834
[ 67.535788] [<800a6738>] 0x800a6738
[ 67.539390] [<800a6738>] 0x800a6738
[ 67.542991] [<800619f8>] 0x800619f8
[ 67.546604]
[ 67.548528] ---[ end trace 0000000000000000 ]---
[ 136.658292] ath10k_pci 0000:00:00.0: htt tx: fixing invalid VHT TX rate code 0xff

This is the result:

On top you can see the applied attenuation of the Vaunix attenuators, which result in the RSSI course of the 2 hosts right below in graph 2. Below that in the 3rd graph is the “tx bitrate” of Host 1 and the “rx bitrate” of Host 2. In the 4th graph is the “tx bitrate” of Host 2 and the “rx bitrate” of Host 1. On the last graph is the iperf3 throughput on receiver side.

Findings:

  • Graph 2: The RSSI does not go below -78dBm, probably due to receiver sensitivity?
  • Graph 3 & 4: The bitrates are only properly updated before the first disconnect
  • Graph 3 & 4: The bitrates do not reach 0. Even at the first time they are stuck at 6 Mbit/s.
  • Graph 3 & 4: The TX & RX bitrates do not match when going out of range.
  • Graph 3 & 4: The bitrates are stuck at 45 Mbit/s after the first reconnect.
  • Graph 5: The throughput only reaches ~35 Mbit/s (instead of 50 Mbit/s) after the first reconnect. This is most likely due to the MCS 2 only allowing for 45 Mbit/s PHY rate.

Is this a known issue?

Thanks :slight_smile:

Simon

BTW: This also is really bad for the BATMAN V (and probably normal 802.11s) routing decisions, as it tries to choose a MCS 2 45Mbit/s connection even though it is dead (instead of hopping over another node), resulting in no connection…

I think over at https://battlemesh.org/ContactUs you will find more feedback and input.

Thank you for your reply.

You are probably right… I also consider writing to the kernel mailing list.

I don't think it's a driver problem but more a deployment and expectation thing.

The battlemeshers doing a yearly test bed and exchange real world deployment data... So I would say get in tough with the battlesh list first.

Edit: @bluewavenet also has good input on these topics.

1 Like

Do you mean you have a mobile EAP225 meshnode, or do you mean you have a mobile client device?

BATMAN, as far as I know, does not support meshnode mobility ie a scenario where meshnodes have a significant mutual relative velocity (aka the "Swarm of Drones" scenario). You will get away with relative velocities of a few centimetres per second if you are lucky, and even then probably see fairly major dropouts lasting seconds or even minutes as the routing tables update.

But you have other problems - amongst other things, dmesg is showing a crash as the mesh comes up.

Rather than pretty screenshots of plots of... whatever it is... it would be more useful to share your configuration. I really do not see the point of setting up a lab test with expensive microwave attenuators and shielding boxes, when looking at fundamentals like the mesh config and why is something crashing would be more sensible.

I am talking about mobile meshnodes using 802.11s + BATMAN that are all configured exactly the same except for the IP address.

But now I only have two of those nodes in my lab setup to be able to reproduce issues.

Here my network and wireless config (only the IP is changed for the second node):

network

config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config globals 'globals'
option ula_prefix 'fdaf:814a:9d5c::/48'
option packet_steering '1'

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

config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
list dns '8.8.8.8'
list dns '8.8.4.4'

config interface 'bat0'
option proto 'batadv'
option routing_algo 'BATMAN_V'
option bridge_loop_avoidance '1'
option gw_mode 'off'
option hop_penalty '30'

config interface 'batmesh'
option proto 'batadv_hardif'
option master 'bat0'

config device
option name 'phy0-mesh0'
option mtu '1532'
option mtu6 '1532'

config interface 'batmesh2'
option proto 'batadv_hardif'
option master 'bat0'

config device
option name 'phy1-mesh0'
option mtu '1532'
option mtu6 '1532'

wireless

config wifi-device 'radio0'
option type 'mac80211'
option path 'pci0000:00/0000:00:00.0'
option band '5g'
option channel '36'
option htmode 'VHT40'
option country 'DE'
option cell_density '0'

config wifi-iface 'default_radio0'
option device 'radio0'
option network 'batmesh'
option mode 'mesh'
option encryption 'sae'
option mesh_id '5ghz'
option mesh_fwding '0'
option mesh_rssi_threshold '0'
option key 'PASSWORD'

config wifi-device 'radio1'
option type 'mac80211'
option path 'platform/ahb/18100000.wmac'
option band '2g'
option channel '1'
option htmode 'HT20'
option country 'DE'
option cell_density '0'

config wifi-iface 'default_radio1'
option device 'radio1'
option network 'batmesh2'
option mode 'mesh'
option encryption 'sae'
option mesh_id '2.4ghz'
option mesh_fwding '0'
option mesh_rssi_threshold '0'
option key 'PASSWORD'
option disabled '1'

BTW: The same issue occurs when not using BATMAN but only 802.11s. This is the config for that:

network

config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config globals 'globals'
option ula_prefix 'fdaf:814a:9d5c::/48'
option packet_steering '1'

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

config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
list dns '8.8.8.8'
list dns '8.8.4.4'

config device
option name 'phy0-mesh0'
option mtu '1532'
option mtu6 '1532'

config device
option name 'phy1-mesh0'
option mtu '1532'
option mtu6 '1532'

wireless

config wifi-device 'radio0'
option type 'mac80211'
option path 'pci0000:00/0000:00:00.0'
option band '5g'
option channel '36'
option htmode 'VHT40'
option country 'DE'
option cell_density '0'

config wifi-iface 'default_radio0'
option device 'radio0'
option mode 'mesh'
option encryption 'sae'
option mesh_id '5ghz'
option mesh_fwding '0'
option mesh_rssi_threshold '0'
option key 'PASSWORD'

config wifi-device 'radio1'
option type 'mac80211'
option path 'platform/ahb/18100000.wmac'
option band '2g'
option channel '1'
option htmode 'HT20'
option country 'DE'
option cell_density '0'

config wifi-iface 'default_radio1'
option device 'radio1'
option mode 'mesh'
option encryption 'sae'
option mesh_id '2.4ghz'
option mesh_fwding '0'
option mesh_rssi_threshold '0'
option key 'PASSWORD'
option disabled '1'

Thanks!

Just as a general thought.

What about olsr2 or Babel and then use I e. Vxlan for layer2 functions?

I don't use BATMAN at all these days so cannot comment much on your config.

I don't recall exactly, but this might be the cause of your crash reported in dmesg.
You should maybe upgrade first, before anything else, to see if the crash has gone away.
I'm not seen this on any of my ath10k routers and they are all 24.10.4 or master/snapshot.
I am not seeing any stuck MCS either.

None of this changes the fact that neither BATMAN nor static/default 802.11s support meshnode mobility.
In addition you have not explained what you are trying to do with your active attenuators and shielding boxes.

If you have used jiggery-pokery microwave attenuation and shielding to emulate a node going out and in range, you are, quite simply breaking the backhaul and expecting it to come back instantaneously. That is not going to happen - bitrates will be all over the place and can take a long time to stabilise and come back to normal. This is dependent on the Airtime Link Metric as calculated by the kernel and both Batman and static/default 802.11s have no means of optimising this.

In your diagrams, it looks like the signal strength goes from low to high and back again in 120 seconds? With the kernel defaults, this means the "moving average" ALM will never get to the level achievable with a constant signal.

I can try it, but I think that it is not related to the routing algorithm.

I mean there is just the direct connection or no connection at all :smiley:

But still it might be worth a shot.

I ran new measurements with both nodes on 24.10.4 with ath10k (and also ath10k_ct but I will now concentrate on ath10k) using 802.11s only.

This dmesg error I had before

disappeared (for both ath10k and ath10k_ct). But there are many “ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats” errors in dmesg (I had to shorten it due to character limit):

dmesg of node 1

[ 0.000000] Linux version 6.6.110 (builder@buildhost) (mips-openwrt-linux-musl-gcc (OpenWrt GCC 13.3.0 r28959-29397011cc) 13.3.0, GNU ld (GNU Binutils) 2.42) #0 Sun Oct 19 16:37:45 2025
[ 0.000000] printk: bootconsole [early0] enabled
[ 0.000000] CPU0 revision is: 00019750 (MIPS 74Kc)
[ 0.000000] MIPS: machine is TP-Link EAP225-Outdoor v3
[ 0.000000] SoC: Qualcomm Atheros QCA956X ver 1 rev 0
[ 0.000000] Initrd not found or empty - disabling initrd
[ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[ 0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x0000000000000000-0x0000000007ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x0000000007ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=132768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Kernel command line: console=ttyS0,115200n8 rootfstype=squashfs,jffs2
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[ 0.000000] Writing ErrCtl register=00000000
[ 0.000000] Readback ErrCtl register=00000000
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32480
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 119972K/131072K available (6833K kernel code, 606K rwdata, 900K rodata, 1188K init, 233K bss, 11100K reserved, 0K cma-reserved)
[ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] NR_IRQS: 51
[ 0.000000] CPU clock: 775.000 MHz
[ 0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 4932285024 ns
[ 0.000001] sched_clock: 32 bits at 388MHz, resolution 2ns, wraps every 5541893118ns
[ 0.008307] Calibrating delay loop... 385.84 BogoMIPS (lpj=1929216)
[ 0.074807] pid_max: default: 32768 minimum: 301
[ 0.089181] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.096926] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.113550] RCU Tasks Trace: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=1.
[ 0.127962] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.138391] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[ 0.148089] pinctrl core: initialized pinctrl subsystem
[ 0.156370] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.163236] thermal_sys: Registered thermal governor 'step_wise'
[ 0.165110] /ahb/apb: Fixed dependency cycle(s) with /ahb/apb/interrupt-controller@18060010
[ 0.191882] clocksource: Switched to clocksource MIPS
[ 0.207516] NET: Registered PF_INET protocol family
[ 0.212922] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[ 0.221990] tcp_listen_portaddr_hash hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.230927] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 0.239127] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.247220] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[ 0.254697] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.262141] MPTCP token hash table entries: 512 (order: 0, 6144 bytes, linear)
[ 0.270019] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 0.276967] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 0.285251] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 0.291274] PCI: CLS 0 bytes, default 32
[ 0.300422] workingset: timestamp_bits=14 max_order=15 bucket_order=1
[ 0.308872] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.315070] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[ 0.332696] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[ 0.343877] pinctrl-single 1804002c.pinmux: 544 pins, size 68
[ 0.351332] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[ 0.363374] printk: console [ttyS0] disabled
[ 0.368306] 18020000.uart: ttyS0 at MMIO 0x18020000 (irq = 11, base_baud = 1562500) is a 16550A
[ 0.377581] printk: console [ttyS0] enabled
[ 0.386654] printk: bootconsole [early0] disabled
[ 0.430478] spi-nor spi0.0: en25qh128 (16384 Kbytes)
[ 0.435788] 7 fixed-partitions partitions found on MTD device spi0.0
[ 0.442421] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 0.449273] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 0.456382] Creating 7 MTD partitions on "spi0.0":
[ 0.461343] 0x000000000000-0x000000020000 : "u-boot"
[ 0.469763] 0x000000020000-0x000000030000 : "partition-table"
[ 0.477745] 0x000000030000-0x000000040000 : "info"
[ 0.484817] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 0.492071] 0x000000040000-0x000000dc0000 : "firmware"
[ 0.499773] 2 elf-loader-fw partitions found on MTD device firmware
[ 0.506314] Creating 2 MTD partitions on "firmware":
[ 0.511447] 0x000000000000-0x000000281b5c : "kernel"
[ 0.516588] mtd: partition "kernel" doesn't end on an erase/write block -- force read-only
[ 0.527026] 0x000000281b5c-0x000000d80000 : "rootfs"
[ 0.532225] mtd: partition "rootfs" doesn't start on an erase/write block boundary -- force read-only
[ 0.543743] mtd: setting mtd5 (rootfs) as root device
[ 0.549054] 1 squashfs-split partitions found on MTD device rootfs
[ 0.555506] 0x0000006d0000-0x000000d80000 : "rootfs_data"
[ 0.563071] 0x000000dc0000-0x000000df0000 : "config"
[ 0.570333] 0x000000f30000-0x000000ff0000 : "log"
[ 0.577344] 0x000000ff0000-0x000001000000 : "art"
[ 0.584385] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions
[ 1.621897] ag71xx-legacy 19000000.eth: connected to PHY at mdio.0:06 [uid=001cc916, driver=RTL8211F Gigabit Ethernet]
[ 1.633669] eth0: Atheros AG71xx at 0xb9000000, irq 4, mode: sgmii
[ 1.640676] i2c_dev: i2c /dev entries driver
[ 1.648048] NET: Registered PF_INET6 protocol family
[ 1.663609] Segment Routing with IPv6
[ 1.667492] In-situ OAM (IOAM) with IPv6
[ 1.671696] NET: Registered PF_PACKET protocol family
[ 1.677021] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 1.690679] 8021q: 802.1Q VLAN Support v1.8
[ 1.724597] PCI host bridge to bus 0000:00
[ 1.728853] pci_bus 0000:00: root bus resource [mem 0x12000000-0x13ffffff]
[ 1.736099] pci_bus 0000:00: root bus resource [io 0x0000]
[ 1.741864] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
[ 1.750113] pci 0000:00:00.0: [168c:0056] type 00 class 0x028000
[ 1.756363] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x001fffff 64bit]
[ 1.763518] pci 0000:00:00.0: PME# supported from D0 D3hot
[ 1.770221] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
[ 1.777127] pci 0000:00:00.0: BAR 0: assigned [mem 0x12000000-0x121fffff 64bit]
[ 1.792511] clk: Disabling unused clocks
[ 1.805698] VFS: Mounted root (squashfs filesystem) readonly on device 31:5.
[ 1.819520] Freeing unused kernel image (initmem) memory: 1188K
[ 1.825683] This architecture does not have kernel memory protection.
[ 1.832351] Run /sbin/init as init process
[ 1.836578] with arguments:
[ 1.836583] /sbin/init
[ 1.836588] with environment:
[ 1.836592] HOME=/
[ 1.836597] TERM=linux
[ 2.553239] init: Console is alive
[ 2.557142] init: - watchdog -
[ 3.965992] kmodloader: loading kernel modules from /etc/modules-boot.d/

[ 4.042292] gpio_button_hotplug: loading out-of-tree module taints kernel.
[ 4.053501] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[ 4.071552] init: - preinit -
[ 7.991908] random: crng init done
[ 12.033775] eth0: link up (1000Mbps/Full duplex)
[ 13.327187] jffs2: notice: (520) jffs2_build_xattr_subsystem: complete building xattr subsystem, 61 of xdatum (44 unchecked, 17 orphan) and 78 of xref (16 dead, 1 orphan) found.
[ 13.349139] mount_root: switching to jffs2 overlay
[ 13.356480] overlayfs: upper fs does not support tmpfile.
[ 13.373888] urandom-seed: Seeding with /etc/urandom.seed
[ 13.518612] eth0: link down
[ 13.541307] procd: - early -
[ 13.544737] procd: - watchdog -
[ 14.937188] procd: - watchdog -
[ 14.941340] procd: - ubus -
[ 15.104192] procd: - init -
[ 18.774374] urngd: v1.0.2 started.
[ 19.256120] kmodloader: loading kernel modules from /etc/modules.d/*
[ 20.512768] GACT probability on
[ 20.517522] Mirror/redirect action on
[ 20.539100] u32 classifier
[ 20.541962] input device check on
[ 20.545739] Actions configured
[ 20.594863] Loading modules backported from Linux version v6.12.52-0-g2b2cbdcede38
[ 20.602749] Backport generated by backports.git v6.1.110-1-35-g410656ef
[ 20.907183] PPP generic driver version 2.4.2
[ 20.915149] NET: Registered PF_PPPOX protocol family
[ 21.230458] ath10k_pci 0000:00:00.0: enabling device (0000 -> 0002)
[ 21.237305] ath10k_pci 0000:00:00.0: pci irq legacy oper_irq_mode 1 irq_mode 0 reset_mode 0
[ 23.270754] ath10k_pci 0000:00:00.0: Unknown FW IE: 30
[ 23.276157] ath10k_pci 0000:00:00.0: qca9888 hw2.0 target 0x01000000 chip_id 0x00000000 sub 0000:0000
[ 23.285702] ath10k_pci 0000:00:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 0
[ 23.300224] ath10k_pci 0000:00:00.0: firmware ver 10.4b-ct-9888-fW-13-5ae337bb1 api 5 features mfp,peer-flow-ctrl crc32 59e741e7
[ 23.637231] ath10k_pci 0000:00:00.0: board_file api 2 bmi_id 0:24 crc32 5968d47d
[ 25.501432] ath10k_pci 0000:00:00.0: htt-ver 2.2 wmi-op 6 htt-op 4 cal pre-cal-nvmem max-sta 32 raw 0 hwcrypto 1
[ 25.605453] ath: EEPROM regdomain: 0x0
[ 25.605480] ath: EEPROM indicates default country code should be used
[ 25.605486] ath: doing EEPROM country->regdmn map search
[ 25.605500] ath: country maps to regdmn code: 0x3a
[ 25.605507] ath: Country alpha2 being used: US
[ 25.605514] ath: Regpair used: 0x3a
[ 25.904209] batman_adv: B.A.T.M.A.N. advanced 2024.3-openwrt-7 (compatibility version 15) loaded
[ 25.959971] ath: EEPROM regdomain: 0x0
[ 25.959997] ath: EEPROM indicates default country code should be used
[ 25.960003] ath: doing EEPROM country->regdmn map search
[ 25.960018] ath: country maps to regdmn code: 0x3a
[ 25.960025] ath: Country alpha2 being used: US
[ 25.960032] ath: Regpair used: 0x3a
[ 25.971097] ieee80211 phy1: Selected rate control algorithm 'minstrel_ht'
[ 25.972134] ieee80211 phy1: Atheros AR9561 Rev:0 mem=0xfa906b8f, irq=2
[ 25.992342] kmodloader: done loading kernel modules from /etc/modules.d/*
[ 46.329998] br-lan: port 1(eth0) entered blocking state
[ 46.335467] br-lan: port 1(eth0) entered disabled state
[ 46.340907] ag71xx-legacy 19000000.eth eth0: entered allmulticast mode
[ 46.347949] ag71xx-legacy 19000000.eth eth0: entered promiscuous mode
[ 48.442343] eth0: link up (1000Mbps/Full duplex)
[ 48.447248] br-lan: port 1(eth0) entered blocking state
[ 48.452676] br-lan: port 1(eth0) entered forwarding state
[ 50.079592] ath: EEPROM regdomain: 0x8114
[ 50.079621] ath: EEPROM indicates we should expect a country code
[ 50.079628] ath: doing EEPROM country->regdmn map search
[ 50.079634] ath: country maps to regdmn code: 0x37
[ 50.079641] ath: Country alpha2 being used: DE
[ 50.079648] ath: Regpair used: 0x37
[ 50.079653] ath: regdomain 0x8114 dynamically updated by user
[ 50.079743] ath: EEPROM regdomain: 0x8114
[ 50.079750] ath: EEPROM indicates we should expect a country code
[ 50.079756] ath: doing EEPROM country->regdmn map search
[ 50.079761] ath: country maps to regdmn code: 0x37
[ 50.079767] ath: Country alpha2 being used: DE
[ 50.079773] ath: Regpair used: 0x37
[ 50.079778] ath: regdomain 0x8114 dynamically updated by user
[ 57.363578] br-lan: port 2(phy0-mesh0) entered blocking state
[ 57.369545] br-lan: port 2(phy0-mesh0) entered disabled state
[ 57.375589] ath10k_pci 0000:00:00.0 phy0-mesh0: entered allmulticast mode
[ 57.382911] ath10k_pci 0000:00:00.0 phy0-mesh0: entered promiscuous mode
[ 63.759005] br-lan: port 2(phy0-mesh0) entered blocking state
[ 63.765014] br-lan: port 2(phy0-mesh0) entered forwarding state
[ 75.060530] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 75.469491] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 75.674950] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 77.722184] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 79.258352] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 79.770811] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 79.974155] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 80.282723] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 80.793374] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 81.306558] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 81.512411] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 82.227704] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 85.608508] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 85.914677] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 89.395867] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 91.239012] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 91.445330] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 91.750983] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 93.798285] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 93.901273] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 95.335844] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 95.847869] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 96.154924] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 96.871283] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 97.178406] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 99.532735] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 100.454270] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 101.275515] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 101.481173] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 101.786303] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 101.891373] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 102.503608] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 102.810321] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 103.321535] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 104.551777] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 105.474395] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 105.784930] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 105.885940] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 106.092147] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 106.495913] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 106.909969] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 107.013804] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 107.417581] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 107.524447] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 107.624698] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 108.031977] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 108.134369] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 108.650330] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 108.955788] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 109.160609] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 113.055643] ath10k_warn: 7 callbacks suppressed
[ 113.055667] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 160.051406] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 160.870607] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 160.972927] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 161.081274] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 161.485133] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 161.587212] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 161.896798] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 161.997105] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 162.105357] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 162.205848] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 165.071418] ath10k_warn: 9 callbacks suppressed
[ 165.071444] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 165.171536] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 165.279688] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 165.478523] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 165.788316] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 165.890683] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 166.095502] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 166.197926] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 166.402649] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 167.321834] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 170.189114] ath10k_warn: 7 callbacks suppressed
[ 170.189138] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 170.294524] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 170.701021] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 171.213005] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 171.419876] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 171.932756] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 172.239670] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 173.773001] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 173.980363] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 174.594149] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 175.925402] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 176.029693] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 176.233735] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 176.538916] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 176.743807] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 176.846013] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 176.948556] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 177.155224] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 177.358731] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 177.561944] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 182.581816] ath10k_warn: 5 callbacks suppressed
[ 182.581840] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 183.093021] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 183.502884] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 183.705848] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 184.934686] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 185.141909] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 185.959758] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 188.213776] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 188.416277] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 189.237758] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 189.544771] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 189.645949] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 189.749755] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 190.260372] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 190.567978] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 192.821355] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 193.843638] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 194.355655] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 195.074724] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 195.381099] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 195.789964] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 196.608437] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 198.964967] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 199.475668] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 199.988453] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 200.910786] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 201.216314] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 201.423156] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 202.037666] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 205.313727] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 206.645642] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 207.360357] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 209.920551] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 210.945739] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 211.764566] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 212.481788] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 213.402985] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 213.506666] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 214.324775] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 215.759705] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 218.216739] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 219.344092] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 219.443665] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 219.958209] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 220.470224] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 220.572361] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 220.675056] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 220.776911] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 220.981384] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 221.187300] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 223.232629] ath10k_warn: 4 callbacks suppressed
[ 223.232653] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 223.440467] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 223.642232] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 223.744608] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 223.850345] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 224.054538] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 224.563682] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 224.669661] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 225.077579] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 225.382999] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 228.352621] ath10k_warn: 12 callbacks suppressed
[ 228.352646] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 228.766274] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 228.866778] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 229.071574] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 229.792180] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 229.996851] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 230.097427] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 230.304157] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 230.406465] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 230.507144] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 278.329901] ath10k_warn: 5 callbacks suppressed
[ 278.329926] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 278.940759] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 280.376231] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 280.582705] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 282.010500] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 282.217576] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 282.424237] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 282.630755] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 282.835540] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 282.934418] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 284.058462] ath10k_warn: 1 callbacks suppressed
[ 284.058488] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 284.265590] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 284.672886] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 284.880047] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 285.395625] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 285.594542] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 285.801597] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 287.644801] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 288.461730] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 288.668887] ath10k_pci 0000:00:00.0: Invalid VHT mcs 15 peer stats
[ 289.280828] ath10k_warn: 1 callbacks suppressed

And the issue still persists:

Here after getting into range again for the first time, it actually worked as it should, chooses a better MCS and therefore is able to transmit the 50Mbit/s load!

But at the second time it does not work anymore..

I must disagree, it is Better Approach to Mobile Ad-hoc Networking for a reason. There are multiple scientific papers dealing with that, for example:

It should emulate a moving mesh node that is going away/towards another mesh node. It does not emulate any doppler effects or any other channel characteristics just plain simple attenuation.

I mean I saw the same throughput degradation in real-life tests. The effect is just easier and more consistently reproducable in this setup. And in the measurement above it actually worked fine once..

This is correct.

Yes, but this value is only used for the routing decision. And since there is only one other node this decision is always the same.

Thanks :slight_smile:

I could be wrong, but this looks like a bridge loop - or at least that is what I have seen when developing mesh bridge loop mitigation.

Have you actually read that paper? It confirms that Batman does not support intra-mesh mobility of nodes. They propose a potential enhancement with some simulations/experiments to support their proposal. So I agree with the paper - not supported.

You will, and I indicated the reason.

Yes, ALM is used in the routing decision - at least in HWMP, but the calculation of ALM also involves the calculated throughput which in turn is used to set MCS, all within the same moving time window.

Your simulated test is not allowing a return to the stable state.