> ## Content Index
> Fetch the complete content index at: https://articles.akadata.co.uk/llms.txt
> Use this file to discover other available public pages before exploring further.

# Banana Pi BPI-R4: Real-World Wi-Fi 7 Performance
- URL: https://articles.akadata.co.uk/banana-pi-bpi-r4-real-world-wi-fi-7-performance/
- Published: 2025-07-17T05:52:24.000Z
- Updated: 2025-07-17T06:20:04.000Z
- Author: AKADATA

### Introduction

The Banana Pi BPI-R4 is marketed as a next-generation single-board router with support for Wi-Fi 7, dual 10GbE SFP ports and Quad Port Switch, 1GbE/2.5GbE(when supported) per port with Switch fabric, and a quad-core ARM architecture and 8GB Ram. But can it really deliver the speeds modern networks demand? We tested it using OpenWrt and standard tools like `iperf3` to see what this little powerhouse can actually do.

---

### Setup Overview

- **Device**: Banana Pi BPI-R4
- **Firmware**: OpenWrt
- **Wireless Config**: Dual-band AP (2.4GHz and 5GHz enabled)
- **Client**: Intel AX211 on a system powered by i9-13900K (Homer)
- **Distance**: <2 meters line of sight (for peak throughput test)
- **Heat Dissipation**: Custom heatsink with fan and Peltier module (for thermals under load)

---

### 5GHz Performance – Fast Enough to Raise Eyebrows

At 160MHz channel width on 5GHz, using HE-MCS 11 (Wi-Fi 6E / 7 standard), the link showed:

```
SSID: OpenWrt-5g
freq: 5180 MHz (Channel 36)
rx bitrate: 2401.9 MBit/s
signal: -33 dBm

```

Using `iperf3`, the real-world throughput reached:

```
1.14 Gbits/sec (TX)
1.06 Gbits/sec (RX)

```

This wasn't just theoretical. The data flow was consistent and stable:

```homer
director@homer:/srv/tftp$ iperf3 -c 192.168.1.1
Connecting to host 192.168.1.1, port 5201
[  5] local 192.168.1.229 port 46952 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   136 MBytes  1.14 Gbits/sec    0   2.61 MBytes
[  5]   1.00-2.00   sec   132 MBytes  1.11 Gbits/sec    0   2.05 MBytes
[  5]   2.00-3.00   sec   125 MBytes  1.05 Gbits/sec    0   2.34 MBytes
[  5]   3.00-4.00   sec   126 MBytes  1.06 Gbits/sec    0   2.20 MBytes
[  5]   4.00-5.00   sec   131 MBytes  1.10 Gbits/sec    0   2.52 MBytes
[  5]   5.00-6.00   sec   127 MBytes  1.06 Gbits/sec    0   1.97 MBytes
[  5]   6.00-7.00   sec   123 MBytes  1.03 Gbits/sec    0   2.80 MBytes
[  5]   7.00-8.00   sec   134 MBytes  1.13 Gbits/sec    0   1.94 MBytes
[  5]   8.00-9.00   sec   123 MBytes  1.03 Gbits/sec    0   1.55 MBytes
[  5]   9.00-10.00  sec   127 MBytes  1.06 Gbits/sec    0   2.88 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.25 GBytes  1.08 Gbits/sec    0            sender
[  5]   0.00-10.01  sec  1.23 GBytes  1.06 Gbits/sec                  receiver
```

> ⚡️ **“Oh my, this is fast.”** These speeds outperformed the Eero Max 7 tested in the same environment.

```bpi-4
'
root@OpenWrt:/usr/local/src/openwrt# iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.229, port 35168
[  5] local 192.168.1.1 port 5201 connected to 192.168.1.229 port 35172
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  24.1 MBytes   202 Mbits/sec
[  5]   1.00-2.00   sec  25.2 MBytes   212 Mbits/sec
[  5]   2.00-3.00   sec  24.7 MBytes   207 Mbits/sec
[  5]   3.00-4.00   sec  25.5 MBytes   214 Mbits/sec
[  5]   4.00-5.00   sec  25.9 MBytes   217 Mbits/sec
[  5]   5.00-6.00   sec  25.6 MBytes   214 Mbits/sec
[  5]   6.00-7.00   sec  23.8 MBytes   200 Mbits/sec
[  5]   7.00-8.00   sec  25.9 MBytes   217 Mbits/sec
[  5]   8.00-9.00   sec  25.7 MBytes   216 Mbits/sec
[  5]   9.00-10.00  sec  24.5 MBytes   205 Mbits/sec
[  5]  10.00-10.00  sec   174 KBytes   372 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   251 MBytes   211 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------
Accepted connection from 192.168.1.229, port 60652
[  5] local 192.168.1.1 port 5201 connected to 192.168.1.229 port 60662
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  24.0 MBytes   201 Mbits/sec
[  5]   1.00-2.00   sec  23.4 MBytes   197 Mbits/sec
[  5]   2.00-3.00   sec  24.8 MBytes   208 Mbits/sec
[  5]   3.00-4.00   sec  25.1 MBytes   210 Mbits/sec
[  5]   4.00-5.00   sec  25.3 MBytes   212 Mbits/sec
[  5]   5.00-6.00   sec  25.6 MBytes   215 Mbits/sec
[  5]   6.00-7.00   sec  24.4 MBytes   205 Mbits/sec
[  5]   7.00-8.00   sec  25.4 MBytes   213 Mbits/sec
[  5]   8.00-9.00   sec  25.2 MBytes   211 Mbits/sec
[  5]   9.00-10.00  sec  25.6 MBytes   215 Mbits/sec
[  5]  10.00-10.01  sec   223 KBytes   198 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec   249 MBytes   209 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #3)
-----------------------------------------------------------
Accepted connection from 192.168.1.229, port 46950
[  5] local 192.168.1.1 port 5201 connected to 192.168.1.229 port 46952
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   117 MBytes   984 Mbits/sec
[  5]   1.00-2.00   sec   129 MBytes  1.08 Gbits/sec
[  5]   2.00-3.00   sec   122 MBytes  1.02 Gbits/sec
[  5]   3.00-4.00   sec   128 MBytes  1.08 Gbits/sec
[  5]   4.00-5.00   sec   129 MBytes  1.08 Gbits/sec
[  5]   5.00-6.00   sec   131 MBytes  1.09 Gbits/sec
[  5]   6.00-7.00   sec   124 MBytes  1.04 Gbits/sec
[  5]   7.00-8.00   sec   129 MBytes  1.08 Gbits/sec
[  5]   8.00-9.00   sec   125 MBytes  1.05 Gbits/sec
[  5]   9.00-10.00  sec   127 MBytes  1.06 Gbits/sec
[  5]  10.00-10.01  sec   788 KBytes  1.20 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec  1.23 GBytes  1.06 Gbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #4)
-----------------------------------------------------------

```

---

### Local same host bandwidth 

```
root@OpenWrt:~# iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 3.51 MByte (default)
------------------------------------------------------------
[  3] local 192.168.1.1 port 32950 connected with 192.168.1.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  19.5 GBytes  16.8 Gbits/sec
root@OpenWrt:~# iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 3.51 MByte (default)
------------------------------------------------------------
[  3] local 192.168.1.1 port 53624 connected with 192.168.1.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  19.8 GBytes  17.0 Gbits/sec
```

### 2.4GHz: Functional, but Not Spectacular

While not the headline act, 2.4GHz performance stayed stable. The focus, however, remains on modern 5GHz and future 6GHz connectivity.

```ax211
director@homer:~$ iperf3 -c 192.168.1.1
Connecting to host 192.168.1.1, port 5201
[  5] local 192.168.1.229 port 27880 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  31.5 MBytes   264 Mbits/sec    0    865 KBytes
[  5]   1.00-2.00   sec  25.1 MBytes   211 Mbits/sec    0    820 KBytes
[  5]   2.00-3.00   sec  25.8 MBytes   216 Mbits/sec    0    732 KBytes
[  5]   3.00-4.00   sec  25.5 MBytes   214 Mbits/sec    0    738 KBytes
[  5]   4.00-5.00   sec  24.9 MBytes   209 Mbits/sec    0    549 KBytes
[  5]   5.00-6.00   sec  25.5 MBytes   214 Mbits/sec    0    614 KBytes
[  5]   6.00-7.00   sec  24.5 MBytes   206 Mbits/sec    0    865 KBytes
[  5]   7.00-8.00   sec  29.2 MBytes   245 Mbits/sec    0    848 KBytes
[  5]   8.00-9.00   sec  23.0 MBytes   193 Mbits/sec    0    611 KBytes
[  5]   9.00-10.00  sec  26.6 MBytes   223 Mbits/sec    0    925 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   262 MBytes   219 Mbits/sec    0            sender
[  5]   0.00-10.01  sec   254 MBytes   213 Mbits/sec                  receiver

iperf Done.
```

```bpi-4

-----------------------------------------------------------
Server listening on 5201 (test #7)
-----------------------------------------------------------
Accepted connection from 192.168.1.229, port 46836
[  5] local 192.168.1.1 port 5201 connected to 192.168.1.229 port 46848
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  18.7 MBytes   157 Mbits/sec
[  5]   1.00-2.00   sec  21.3 MBytes   179 Mbits/sec
[  5]   2.00-3.00   sec  22.2 MBytes   186 Mbits/sec
[  5]   3.00-4.00   sec  22.1 MBytes   186 Mbits/sec
[  5]   4.00-5.00   sec  24.9 MBytes   209 Mbits/sec
[  5]   5.00-6.00   sec  25.4 MBytes   213 Mbits/sec
[  5]   6.00-7.00   sec  25.8 MBytes   217 Mbits/sec
[  5]   7.00-8.00   sec  25.9 MBytes   218 Mbits/sec
[  5]   8.00-9.00   sec  24.4 MBytes   205 Mbits/sec
[  5]   9.00-10.00  sec  25.1 MBytes   210 Mbits/sec
[  5]  10.00-10.06  sec  1.48 MBytes   210 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.06  sec   237 MBytes   198 Mbits/sec                  receiver
-----------------------------------------------------------
```

---

Some of the readings below are simply not correct, using the MediaTek OpenWRT 22.02 firmware the speed amazing the drivers slowly getting there.

![](https://articles.akadata.co.uk/content/images/2025/07/image-30.png)

### Connecting Across Subnets – Worker vs Router

Even when crossing from AP → router → upstream system (worker), performance remained solid:

```
iperf3 between Homer and Worker (via AP):
TX: 1.08 GBytes @ 929 Mbit/sec
RX: 1.07 GBytes @ 915 Mbit/sec

```

This confirms that even in routed, non-bridged configurations, the BPI-R4 maintains near-gigabit throughput.

```

BusyBox v1.33.2 (2023-11-01 06:15:09 UTC) built-in shell (ash)

_______                     ________        __
|       |.-----.-----.-----.|  |  |  |.----.|  |_
|   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
|_______||   __|_____|__|__||________||__|  |____|
|__| W I R E L E S S   F R E E D O M
-----------------------------------------------------
OpenWrt 21.02-SNAPSHOT, unknown
-----------------------------------------------------
root@OpenWrt:~# iw dev phy2-ap0 info
Interface phy2-ap0
        ifindex 27
        wdev 0x200000003
        addr 00:02:55:66:83:d4
        ssid OpenWrt-6g
        type AP
        wiphy 2
        channel 37 (6135 MHz), width: 320 MHz, center1: 6265 MHz
        txpower 12.00 dBm
        multicast TXQ:
                qsz-byt qsz-pkt flows   drops   marks   overlmt hashcol tx-bytes        tx-packets
                0       0       455     0       0       0       0       77059           460
root@OpenWrt:~# iw dev phy1-ap0 info
Interface phy1-ap0
        ifindex 26
        wdev 0x100000003
        addr 00:01:55:66:83:d4
        ssid OpenWrt-5g
        type AP
        wiphy 1
        channel 36 (5180 MHz), width: 160 MHz, center1: 5250 MHz
        txpower 23.00 dBm
        multicast TXQ:
                qsz-byt qsz-pkt flows   drops   marks   overlmt hashcol tx-bytes        tx-packets
                0       0       72      0       0       0       0       14113           73
root@OpenWrt:~# iw dev phy0-ap0 info
Interface phy0-ap0
        ifindex 25
        wdev 0x3
        addr 00:00:55:66:83:d4
        ssid OpenWrt-2g
        type AP
        wiphy 0
        channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
        txpower 27.00 dBm
        multicast TXQ:
                qsz-byt qsz-pkt flows   drops   marks   overlmt hashcol tx-bytes        tx-packets
                0       0       404     0       0       0       0       72229           407
root@OpenWrt:~#
```

---

### 📱 6GHz Test: Smartphone Surges Ahead

While the 5GHz results on a desktop were already impressive, testing with a modern smartphone brought shocking performance: (S25 ULTRA)

### Mobile 6GHz Test – Peak Wireless at Home

Testing from a modern Android handset over 6GHz at \~8-10 meters:

📱 **iperf3 (Phone → BPI-R4)**

```
Max: 4.51 Gbps
Avg: 1.95 Gbps
Min: 0.94 Gbps
```

This shows the AX-ready client ramping up beyond 4 Gbps before settling around 2 Gbps with real-world distance. No trickery—this was sustained upload throughput with distance attenuation and thermal load.

![](https://articles.akadata.co.uk/content/images/2025/07/image-27.png)

- **Initial Upload Speed (at \~2m)**: **Over 4 Gbit/sec** burst
- **Distance (\~8–10m)**: Speed reduced to around **300 Mbit/sec**

![](https://articles.akadata.co.uk/content/images/2025/07/image-28.png)

This massive dropoff highlights the physics of 6GHz — ultra-fast at close range, but highly sensitive to obstacles and distance. Yet the fact remains: 

**4Gbps is achievable** with a client that supports it.

> 📊 *This outperformed not just the Banana Pi's own 5GHz numbers, but also left the Eero Max 7 in the dust in the same room.*

These figures were achieved without tuning, there was however a pelter heat sink sitting on the upside down BPI-4 over the BE1400 Radios, and without firmware patches for 6GHz.

![](https://articles.akadata.co.uk/content/images/2025/07/image-29.png)

```

root@OpenWrt:~# iw reg get
global
country GB: DFS-ETSI
(2400 - 2483 @ 40), (N/A, 20), (N/A)
(5150 - 5250 @ 80), (N/A, 23), (N/A), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (N/A, 20), (0 ms), NO-OUTDOOR, DFS, AUTO-BW
(5470 - 5730 @ 160), (N/A, 26), (0 ms), DFS
(5725 - 5850 @ 80), (N/A, 23), (N/A), NO-OUTDOOR
(5925 - 6425 @ 160), (N/A, 23), (N/A), NO-OUTDOOR
(57000 - 71000 @ 2160), (N/A, 40), (N/A)

root@OpenWrt:~# iw reg set US
root@OpenWrt:~# iw reg get
global
country US: DFS-FCC
(902 - 904 @ 2), (N/A, 30), (N/A)
(904 - 920 @ 16), (N/A, 30), (N/A)
(920 - 928 @ 8), (N/A, 30), (N/A)
(2400 - 2472 @ 40), (N/A, 30), (N/A)
(5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
(5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
(5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
(5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
(5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW
(5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR
(57240 - 71000 @ 2160), (N/A, 40), (N/A)
```

### Next Steps: 6GHz and Mesh Expansion

The BPI-R4 supports Wi-Fi 7 including 6GHz. While current firmware requires tweaking, the hardware is ready.

Planned:

- Tune and enable 6GHz AP mode reliably - works a treat on the phone, not so with Arch
- Deploy mesh networking using BATMAN-adv
- Add second and third nodes for full-site mesh testing

---

## ⚠️ Regional Limitations – The GB Regdom Trap

As testing progressed, one obstacle surfaced: regulatory domain enforcement.

When operating under the **default US regulatory domain**, all was well—160MHz channels on 5GHz and full 6GHz access. But the moment we issued:

```
iw reg set GB
```

...everything collapsed. Speeds dropped, channels vanished, and the 6GHz band became unusable. Not just 6GHz—**2.4GHz and 5GHz also vanished**.

This isn’t the fault of the hardware. It's a known limitation with **`wireless-regdb`** and **OpenWrt’s regdb signature enforcement**, which disables 6GHz in most countries unless the firmware and regdb are properly signed and recognised.

> ✍️ A custom kernel will be compiled that bypasses this restriction—not to cheat, but to restore *lawful* access to bands that are available under GB regulations but poorly represented in upstream databases.

📚 Related: [When the Kernel Turns Against You](https://articles.akadata.co.uk/when-the-kernel-turns-against-you-linux-freedom-of-choice/)

```
root@OpenWrt:~# iw reg get
global
country GB: DFS-ETSI
    (2400 - 2483 @ 40), (N/A, 20), (N/A)
    (5150 - 5250 @ 80), (N/A, 23), (N/A), NO-OUTDOOR, AUTO-BW
    (5250 - 5350 @ 80), (N/A, 20), (0 ms), NO-OUTDOOR, DFS, AUTO-BW
    (5470 - 5730 @ 160), (N/A, 26), (0 ms), DFS
    (5725 - 5850 @ 80), (N/A, 23), (N/A), NO-OUTDOOR
    (5925 - 6425 @ 160), (N/A, 23), (N/A), NO-OUTDOOR
    (57000 - 71000 @ 2160), (N/A, 40), (N/A)

root@OpenWrt:~# iw reg set US
root@OpenWrt:~# iw reg get
global
country US: DFS-FCC
    (902 - 904 @ 2), (N/A, 30), (N/A)
    (904 - 920 @ 16), (N/A, 30), (N/A)
    (920 - 928 @ 8), (N/A, 30), (N/A)
    (2400 - 2472 @ 40), (N/A, 30), (N/A)
    (5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
    (5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
    (5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
    (5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
    (5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW
    (5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR
    (57240 - 71000 @ 2160), (N/A, 40), (N/A)

```

### Verdict So Far

The Banana Pi BPI-R4 BE1400 does very much impress. With OpenWrt, it becomes a flexible and performant wireless access point, exceeding expectations. Real throughput of over **1 Gbps** via wireless is no longer reserved for enterprise gear.

> When a £100 radio coupled with the BPI-4 outpaces proprietary Wi-Fi 7 mesh units—something’s changing.

Stay tuned as we push it harder, test mesh performance, and unleash 6GHz.

---

📍 Article maintained by [AKADATA LIMITED](https://articles.akadata.co.uk/)