Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
net
ipv4
tcp_scalable.c
Go to the documentation of this file.
1
/* Tom Kelly's Scalable TCP
2
*
3
* See http://www.deneholme.net/tom/scalable/
4
*
5
* John Heffner <
[email protected]
>
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
,
u32
in_flight)
19
{
20
struct
tcp_sock
*tp = tcp_sk(sk);
21
22
if
(!
tcp_is_cwnd_limited
(sk, in_flight))
23
return
;
24
25
if
(tp->
snd_cwnd
<= tp->
snd_ssthresh
)
26
tcp_slow_start
(tp);
27
else
28
tcp_cong_avoid_ai
(tp,
min
(tp->
snd_cwnd
,
TCP_SCALABLE_AI_CNT
));
29
}
30
31
static
u32
tcp_scalable_ssthresh(
struct
sock
*
sk
)
32
{
33
const
struct
tcp_sock
*tp = tcp_sk(sk);
34
return
max
(tp->
snd_cwnd
- (tp->
snd_cwnd
>>
TCP_SCALABLE_MD_SCALE
), 2
U
);
35
}
36
37
38
static
struct
tcp_congestion_ops
tcp_scalable
__read_mostly
= {
39
.ssthresh = tcp_scalable_ssthresh,
40
.cong_avoid = tcp_scalable_cong_avoid,
41
.min_cwnd =
tcp_reno_min_cwnd
,
42
43
.owner =
THIS_MODULE
,
44
.name =
"scalable"
,
45
};
46
47
static
int
__init
tcp_scalable_register(
void
)
48
{
49
return
tcp_register_congestion_control
(&tcp_scalable);
50
}
51
52
static
void
__exit
tcp_scalable_unregister(
void
)
53
{
54
tcp_unregister_congestion_control
(&tcp_scalable);
55
}
56
57
module_init
(tcp_scalable_register);
58
module_exit
(tcp_scalable_unregister);
59
60
MODULE_AUTHOR
(
"John Heffner"
);
61
MODULE_LICENSE
(
"GPL"
);
62
MODULE_DESCRIPTION
(
"Scalable TCP"
);
Generated on Thu Jan 10 2013 14:58:59 for Linux Kernel by
1.8.2