# TCP ROCCET :rocket: (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](https://opendl.ifip-tc6.org/db/conf/wons/wons2026/1571217211.pdf) 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 -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