OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [net/] [ipv4/] [tcp_scalable.c] - Blame information for rev 63

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/* Tom Kelly's Scalable TCP
2
 *
3
 * See htt://www-lce.eng.cam.ac.uk/~ctk21/scalable/
4
 *
5
 * John Heffner <jheffner@sc.edu>
6
 */
7
 
8
#include <linux/module.h>
9
#include <net/tcp.h>
10
 
11
/* These factors derived from the recommended values in the aer:
12
 * .01 and and 7/8. We use 50 instead of 100 to account for
13
 * delayed ack.
14
 */
15
#define TCP_SCALABLE_AI_CNT     50U
16
#define TCP_SCALABLE_MD_SCALE   3
17
 
18
static void tcp_scalable_cong_avoid(struct sock *sk, u32 ack,
19
                                    u32 in_flight, int flag)
20
{
21
        struct tcp_sock *tp = tcp_sk(sk);
22
 
23
        if (!tcp_is_cwnd_limited(sk, in_flight))
24
                return;
25
 
26
        if (tp->snd_cwnd <= tp->snd_ssthresh)
27
                tcp_slow_start(tp);
28
        else {
29
                tp->snd_cwnd_cnt++;
30
                if (tp->snd_cwnd_cnt > min(tp->snd_cwnd, TCP_SCALABLE_AI_CNT)){
31
                        if (tp->snd_cwnd < tp->snd_cwnd_clamp)
32
                                tp->snd_cwnd++;
33
                        tp->snd_cwnd_cnt = 0;
34
                }
35
        }
36
}
37
 
38
static u32 tcp_scalable_ssthresh(struct sock *sk)
39
{
40
        const struct tcp_sock *tp = tcp_sk(sk);
41
        return max(tp->snd_cwnd - (tp->snd_cwnd>>TCP_SCALABLE_MD_SCALE), 2U);
42
}
43
 
44
 
45
static struct tcp_congestion_ops tcp_scalable = {
46
        .ssthresh       = tcp_scalable_ssthresh,
47
        .cong_avoid     = tcp_scalable_cong_avoid,
48
        .min_cwnd       = tcp_reno_min_cwnd,
49
 
50
        .owner          = THIS_MODULE,
51
        .name           = "scalable",
52
};
53
 
54
static int __init tcp_scalable_register(void)
55
{
56
        return tcp_register_congestion_control(&tcp_scalable);
57
}
58
 
59
static void __exit tcp_scalable_unregister(void)
60
{
61
        tcp_unregister_congestion_control(&tcp_scalable);
62
}
63
 
64
module_init(tcp_scalable_register);
65
module_exit(tcp_scalable_unregister);
66
 
67
MODULE_AUTHOR("John Heffner");
68
MODULE_LICENSE("GPL");
69
MODULE_DESCRIPTION("Scalable TCP");

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.