TCP ROCCET 🚀 (RTT Oriented CUBIC Congestion control ExTension)

TCP ROCCET is a new TCP congestion control algorithm that reduces latency by detecting queuing. Additionally, it is specially suited for 4G/5G cellular networks.

A peer-reviewed paper on TCP ROCCET was presented at the WONS 2026 conference.

Install with apt

Add tcp-roccet-dkms to your source lists and install:

echo "deb [trusted=yes] https://apt.fury.io/timfuchs/ /" | sudo tee /etc/apt/sources.list.d/tcp-roccet.list
sudo apt update
sudo apt install tcp-roccet-dkms

Loading and using the congestion control

Note: This change is not persistent, the module will not be loaded at boot.

sudo modprobe tcp_roccet
sudo sysctl net.ipv4.tcp_congestion_control=roccet

Build from source

Setup

Kernel headers are required:

  • Debian: sudo apt install linux-headers-generic
  • Fedora: sudo dnf install kernel-devel (sudo reboot)

Build

make

Loading & Unloading the Module

1. Insert into Kernel: sudo insmod tcp_roccet.ko In case you get the "Invalid module Format" error, it can help to reinstall the kernel-headers.

2. Use the Algorithm:

  • Either via globally loading it: sudo sysctl net.ipv4.tcp_congestion_control=roccet
  • Or via using it in specific measurements: sudo iperf3 -c <Server-IP> -C roccet

3. Unload the Module: sudo rmmod tcp_roccet

Debugging (Using kprobe)

In order to debug the tcp_roccet congestion control algorithm, there exists a Kprobe module (roccet_kprobe.c). Using this, it is possible to inspect events generated by the algorithm.

In order to use the Kprobe module, the following steps are necessary:

1. Specify the event to inspect For this, head into the tcp_roccet.c source code and find the function the Kprobe should attach to.

For Example:

__bpf_kfunc static void roccettcp_cong_avoid(struct sock *sk, u32 ack, u32 acked);

Specify this function name in the field symbol_name of the kprobe struct in roccet_kprobe.c

Obtain the arguments in the kprobe using the regs field. (See the System V ABI for Linux under https://en.wikipedia.org/wiki/X86_calling_conventions#List_of_x86_calling_conventions)

2. Build Kprobe module Use the provided Makefile to build the roccet_kprobe.c module for the local machine. (make)

For this the adequate linux-headers are required

  • Debian: sudo apt install linux-headers-generic
  • Fedora: sudo dnf install kernel-devel

Required files for this are:

  • Makefile
  • roccet_kprobe.c
  • tcp_roccet.h
  • tcp_roccet.c (Optional; Need to remove corresponding entry in Makefile if missing)

3. Load Kprobe module To then load the module use sudo insmod roccet_kprobe.ko If you are seeing the error "Unknown symbol in module" you need to first load the roccet algorithm.

4. See the trace output To see the trace output use sudo cat /sys/kernel/tracing/trace_pipe

5. Unload Kprobe module To remove the module again, use sudo rmmod roccet_kprobe

See more info at https://docs.kernel.org/trace/kprobes.html and https://www.kernel.org/doc/Documentation/trace/kprobetrace.rst

Description
No description provided
Readme 208 KiB
Languages
C 99%
Makefile 1%