Initial commit for TCP ROCCET source code.

This commit is contained in:
Lukas Prause
2025-10-29 12:03:06 +01:00
parent 78b80502d2
commit ac93bf86dc
7 changed files with 933 additions and 0 deletions

66
roccet_kprobe.c Normal file
View File

@@ -0,0 +1,66 @@
#include "linux/kprobes.h"
#include <linux/inet_diag.h>
#include <net/tcp.h>
/* Include the struct of the ROCCET congestion control algorithm. */
#include "tcp_roccet.h"
// Handler for the pre-call probe
static int handler_pre(struct kprobe *p, struct pt_regs *regs)
{
/* System V ABI for x86_64 Linux:
* arg0: di,
* arg1: si,
* arg2: dx,
* ...
*/
/* Get the first argument of the probed function */
struct sock *sk = (struct sock *)regs->di;
struct roccettcp *ca = inet_csk_ca(sk);
u32 ack = (u32)regs->si;
u32 acked = (u32)regs->dx;
/* Use `trace_printk` to print debug information to the
* `/sys/kernel/tracing/trace buffer`.
* This buffer can be read using the debug trace interface of the kernel.
*/
trace_printk(
"roccettcp_cong_avoid: sk=%p ca=%p cnt=%u last_max_cwnd=%u, "
"last_congestion_event=%u\n",
sk, ca, ca->cnt, ca->last_max_cwnd,
ca->roccet_last_event_time_us);
trace_printk("ack: %u acked: %u\n", ack, acked);
return 0;
}
static struct kprobe kp = {
/* Define which function to probe. */
.symbol_name = "roccettcp_cong_avoid",
.pre_handler = handler_pre, /* Runs before the probed function. */
.post_handler = NULL, /* Runs after the probed function. */
};
static int __init kprobe_init(void)
{
return register_kprobe(&kp);
}
static void __exit kprobe_exit(void)
{
unregister_kprobe(&kp);
}
module_init(kprobe_init);
module_exit(kprobe_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Makes it possible to probe the ROCCET Congestion "
"Control Algrithm with kprobes. This enabled Debugging via a "
"loadable kernel module.");
MODULE_AUTHOR("Tim Füchsel");
MODULE_VERSION("0.1");