/* SPDX-License-Identifier: GPL-2.0 */ /* * TCP ROCCET congestion control interface */ #ifndef __TCP_ROCCET_H #define __TCP_ROCCET_H 1 #include /* State in which roccet currently operates */ enum roccet_state { LAUNCH, ORBITER, RTT_PROBE_ENTER, RTT_PROBE, RTT_PROBE_REFILL, DRAIN }; /* TCP ROCCET struct based on the original BICTCP struct with * additions specific to the ROCCET-Algorithm. */ struct roccettcp { u32 cnt; /* increase cwnd by 1 after ACKs */ u32 last_max_cwnd; /* last maximum snd_cwnd */ u32 last_cwnd; /* the last snd_cwnd */ u32 last_time; /* time when updated last_cwnd */ u32 bic_origin_point; /* origin point of bic function */ u32 bic_K; /* time to origin point from the * beginning of the current epoch */ u32 delay_min; /* min delay (usec) */ u32 epoch_start; /* beginning of an epoch */ u32 ack_cnt; /* number of acks */ 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 */ 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. * 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_ts; /* Next check for srRTT */ u32 last_rtt; /* sample rtt of previous round. * Used for jitter calculation */ 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 */