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 through innovative congestion control algorithms and marking techniques.
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 environment and build:
KERNEL=kernel_2712_l4s make bcm2712_defconfig make menuconfig # Set Prague CCA & dual queue kernel flags CONFIG_LOCALVERSION="-l4s-kernel" make -j6 Image.gz modules dtbs make -j6 modules_install
cd /usr/local/src su git clone https://github.com/google/bbr.git cd bbr git checkout l4s-testing-2023-02-23-v3
Download bcm2711_defconfig from this site and:
cp bcm2711_defconfig .config cp bcm2711_defconfig arch/arm64/configs/bcm2711_defconfig # optional make menuconfig # check platform as Broadcom BCM2835 family # Verify Networking support > Networking options > TCP: advanced congestion control make -j4 Image modules # wait approximately 87 minutes make modules_install make install
Edit the boot configuration:
emacs /boot/config.txt # Add: kernel=vmlinuz-5.15.72-v8+
Reboot and verify installation:
uname -r # Should show 5.15.72-v8+ sudo 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