3 Commits

Author SHA1 Message Date
Lukas Prause 64d0e54f87 Update repository to the state of the latest kernel patch. 2026-09-16 15:22:54 +02:00
Lukas Prause b355d1eb50 Update Readme and add new performance report. 2026-07-22 13:35:32 +02:00
Lukas Prause b651be77b3 Adjusts sruct size and refactor of code. 2026-07-20 15:00:23 +02:00
4 changed files with 780 additions and 482 deletions
+20 -1
View File
@@ -5,9 +5,11 @@ 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.
A new performance report for the latest version of TCP ROCCET can be found under "doc/measurements/2026-07-21_performance-report.pdf".
### Versions
- latest on master branch
- latest on master branch (requires kernel version 7.1 or higher)
- Improved min RTT probing
- Packet pacing
- Code refactor
@@ -16,6 +18,23 @@ A peer-reviewed [paper on TCP ROCCET](https://opendl.ifip-tc6.org/db/conf/wons/w
- release-2026-06-12-v1
- Adds minimum RTT probing
## Install with apt (requires kernel version 6.10 or higher)
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
Binary file not shown.
+601 -334
View File
File diff suppressed because it is too large Load Diff
+31 -19
View File
@@ -7,23 +7,16 @@
#include <linux/math64.h>
/* State in which roccet currently opperates */
/* State in which roccet currently operates */
enum roccet_state {
LAUNCH,
ORBITER,
RTT_PROBE_ENTER,
RTT_PROBE,
RTT_PROBE_REFILL,
DRAIN
};
/* TCP ROCCET helper type, storing data related to ack counting */
struct ack_rate {
u32 last_rate; /* Last ACK-rate */
u32 last_rate_time; /* Timestamp of the last ACK-rate */
u32 curr_rate; /* Current ACK-rate */
u32 cnt; /* Used for counting acks */
};
/* TCP ROCCET struct based on the original BICTCP struct with
* additions specific to the ROCCET-Algorithm.
*/
@@ -42,24 +35,43 @@ struct roccettcp {
u32 tcp_cwnd; /* estimated tcp cwnd */
u32 curr_rtt; /* last sample rtt of current round */
u32 roccet_last_event_time_us; /* The last time ROCCET was
* triggered
*/
bool ece_received; /* Set to true if an ECE bit was received */
u32 roccet_last_event_time_us; /* The last time ROCCET was triggered */
u32 curr_min_rtt; /* The current observed minRTT */
u32 next_min_rtt_probe; /* Next time to probe the minRTT */
u32 probe_min_rtt_until; /* End of minRTT probing period */
u32 refill_until; /* End of pipe refill after minRTT probe */
u32 cwnd_before_min_rtt_probe; /* cwnd before min RTT probeing */
u32 probe_min_rtt_until; /* End of minRTT probing period.
* Set while in RTT_PROBE states
*/
u32 refill_until; /* End of pipe refill after minRTT probe.
* Set while in RTT_PROBE states
*/
u32 cwnd_before_min_rtt_probe; /* cwnd before min RTT probing. */
u32 curr_srrtt; /* srRTT calculated based on the latest ACK */
u32 next_srrtt_check; /* Next check for srRTT */
struct ack_rate ack_rate; /* The last and the current ACK rate */
u32 next_srrtt_check_ts; /* Next check for srRTT */
u32 last_rtt; /* sample rtt of previous round.
* Used for jitter calculation
*/
enum roccet_state state; /* State in which roccet currently opperates */
u32 interval_snd_seq_start;
u32 interval_una_seq_start;
u32 ack_rate_last_rate_time; /* Timestamp of the last ACK-rate */
u16 ack_rate_last_rate; /* Last ACK-rate */
u16 ack_rate_curr_rate; /* Current ACK-rate */
u16 ack_rate_cnt; /* Used for counting acks */
enum roccet_state state : 3; /* Current operating state of roccet */
bool was_idle : 1; /* Tracks whether the connection was idle
* (had no in-flight packets)
*/
bool initial_limit_reached: 1; /* Set to true after the connection
* initially gets cwnd-limited
*/
bool is_in_initial_launch: 1; /* true if the connection is in
* the initial launch phase.
*/
u32 ack_carry_over; /* Used to carry over leftover acks from
* LAUNCH to ORBITER
*/
};
#endif /* __TCP_ROCCET_H */