cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tcp_scalable.c (1468B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/* Tom Kelly's Scalable TCP
      3 *
      4 * See http://www.deneholme.net/tom/scalable/
      5 *
      6 * John Heffner <jheffner@sc.edu>
      7 */
      8
      9#include <linux/module.h>
     10#include <net/tcp.h>
     11
     12/* These factors derived from the recommended values in the aer:
     13 * .01 and 7/8.
     14 */
     15#define TCP_SCALABLE_AI_CNT	100U
     16#define TCP_SCALABLE_MD_SCALE	3
     17
     18static void tcp_scalable_cong_avoid(struct sock *sk, u32 ack, u32 acked)
     19{
     20	struct tcp_sock *tp = tcp_sk(sk);
     21
     22	if (!tcp_is_cwnd_limited(sk))
     23		return;
     24
     25	if (tcp_in_slow_start(tp)) {
     26		acked = tcp_slow_start(tp, acked);
     27		if (!acked)
     28			return;
     29	}
     30	tcp_cong_avoid_ai(tp, min(tcp_snd_cwnd(tp), TCP_SCALABLE_AI_CNT),
     31			  acked);
     32}
     33
     34static u32 tcp_scalable_ssthresh(struct sock *sk)
     35{
     36	const struct tcp_sock *tp = tcp_sk(sk);
     37
     38	return max(tcp_snd_cwnd(tp) - (tcp_snd_cwnd(tp)>>TCP_SCALABLE_MD_SCALE), 2U);
     39}
     40
     41static struct tcp_congestion_ops tcp_scalable __read_mostly = {
     42	.ssthresh	= tcp_scalable_ssthresh,
     43	.undo_cwnd	= tcp_reno_undo_cwnd,
     44	.cong_avoid	= tcp_scalable_cong_avoid,
     45
     46	.owner		= THIS_MODULE,
     47	.name		= "scalable",
     48};
     49
     50static int __init tcp_scalable_register(void)
     51{
     52	return tcp_register_congestion_control(&tcp_scalable);
     53}
     54
     55static void __exit tcp_scalable_unregister(void)
     56{
     57	tcp_unregister_congestion_control(&tcp_scalable);
     58}
     59
     60module_init(tcp_scalable_register);
     61module_exit(tcp_scalable_unregister);
     62
     63MODULE_AUTHOR("John Heffner");
     64MODULE_LICENSE("GPL");
     65MODULE_DESCRIPTION("Scalable TCP");