Build and test L4S-capable systems with Raspberry Pi for experimental, wired & wireless testing purposes.
Get StartedL4S provides consistently low latency, even when the network is congested, making it ideal for real-time applications.
L4S minimizes packet loss by informing senders when they need to slow down to avoid queue overflow.
L4S achieves high throughput while maintaining low latency across varying network conditions and scales.
Disclaimer: This is not an endorsement of L4S but provides resources for technical evaluations. These devices are intended for experimental, wired & wireless testing purposes and not for production networks.
Create a full Debian Bullseye system with 64-bit support using a 64G micro SD card:
sudo passwd
.sudo apt-get install firefox-esr
.systemctl start ssh
& systemctl enable ssh
.sudo apt install raspberrypi-kernel-headers build-essential bc git wget bison flex libssl-dev make libncurses-dev sudo apt install emacs automake
Get the source code and build the kernel:
git clone https://github.com/minuscat/rpi-6.6.y.git cd rpi-6.6.y/
Review the guide on building RPi kernels.
Set up the RPI environment:
KERNEL=kernel_2712_l4s rpi4: cp arch/arm64/configs/bcm2711_defconfig .config (rpi4) rpi5: cp arch/arm64/configs/bcm2712_defconfig .config (rpi5)
use make menuconfig, navigate to the following path:
Networking support ---> Networking options ---> TCP: advanced congestion control ---> [*] TCP: advanced congestion control <M> or <*> BBR TCP congestion control <M> or <*> BBR2 TCP congestion control <M> or <*> Prague TCP congestion control
Specific options to enable:
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=m
(or =y
)CONFIG_TCP_CONG_BBR2=m
(or =y
)CONFIG_TCP_CONG_PRAGUE=m
(or =y
)use make menuconfig, navigate to the following path:
Networking support ---> Networking options ---> QoS and/or fair queueing ---> [*] QoS and/or fair queueing <M> or <*> PIE packet scheduler <M> or <*> Dual Queue PIE packet scheduler (DualPI2)
Specific options to enable:
CONFIG_NET_SCH_PIE=m
(or =y
)CONFIG_NET_SCH_DUALPI2=m
(or =y
)You may also want to enable related options:
CONFIG_NET_SCH_FQ_PIE=m
- Flow Queue PIE packet schedulerContinue with the build:
CONFIG_LOCALVERSION="-l4s-kernel" make -j6 Image.gz modules dtbs make -j6 modules_installsudo sysctl -a | grep avail # Should show prague in available congestion control
sysctl net.ipv4.tcp_ecn=3
sysctl net.ipv4.tcp_ecn=3 net.ipv4.tcp_congestion_control=bbr2
sysctl net.ipv4.tcp_ecn=3 net.ipv4.tcp_congestion_control=prague
sysctl net.ipv4.tcp_ecn=3 net.ipv4.tcp_congestion_control=cubic
sysctl net.ipv4.tcp_ecn=0 net.ipv4.tcp_congestion_control=cubic
cd /usr/local/src git clone https://git.code.sf.net/p/iperf2/code iperf2-code cd iperf2-code optionally: git checkout udp-l4s ./configure --enable-udp-l4s make -j make install
wget https://go.dev/dl/go1.20.6.linux-arm64.tar.gz tar -C /usr/local -xzf go1.20.6.linux-arm64.tar.gz export PATH=$PATH:/usr/local/go/bin go version # Verify installation
cd goresponsiveness/ go mod download go build networkQuality.go
To help you get the most out of your L4S testing setup, we provide specialized scripts for network tuning and traffic shaping. These scripts can help you achieve optimal performance and accurate test results with your Raspberry Pi L4S testbed.
Optimize your network settings for high throughput by adjusting system buffer sizes and configuring network interfaces for optimal performance.
Shape network traffic with asymmetric rate support and optional dual PI² queuing for improved latency under load.
For detailed usage instructions and advanced configuration options for our network optimization scripts, visit our Network Scripts page. This resource includes:
For questions, support, or to contribute to the L4S project, please reach out to us.
Email Us