diff options
author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-04-24 01:28:23 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:29:46 -0400 |
commit | 7752237e9f07b316f81aebdc43f0d7c9a4ba0acf (patch) | |
tree | 6ec702ab8a81b123947cfcfae4b10cea0c27dc15 /net/ipv4/tcp_vegas.c | |
parent | 164891aadf1721fca4dce473bb0e0998181537c6 (diff) |
[TCP] TCP YEAH: Use vegas dont copy it.
Rather than using a copy of vegas code, the YEAH code should just have
it exported so there is common code.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_vegas.c')
-rw-r--r-- | net/ipv4/tcp_vegas.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/net/ipv4/tcp_vegas.c b/net/ipv4/tcp_vegas.c index f4104eeb5f26..0f0ee7f732c3 100644 --- a/net/ipv4/tcp_vegas.c +++ b/net/ipv4/tcp_vegas.c | |||
@@ -38,6 +38,8 @@ | |||
38 | 38 | ||
39 | #include <net/tcp.h> | 39 | #include <net/tcp.h> |
40 | 40 | ||
41 | #include "tcp_vegas.h" | ||
42 | |||
41 | /* Default values of the Vegas variables, in fixed-point representation | 43 | /* Default values of the Vegas variables, in fixed-point representation |
42 | * with V_PARAM_SHIFT bits to the right of the binary point. | 44 | * with V_PARAM_SHIFT bits to the right of the binary point. |
43 | */ | 45 | */ |
@@ -54,17 +56,6 @@ module_param(gamma, int, 0644); | |||
54 | MODULE_PARM_DESC(gamma, "limit on increase (scale by 2)"); | 56 | MODULE_PARM_DESC(gamma, "limit on increase (scale by 2)"); |
55 | 57 | ||
56 | 58 | ||
57 | /* Vegas variables */ | ||
58 | struct vegas { | ||
59 | u32 beg_snd_nxt; /* right edge during last RTT */ | ||
60 | u32 beg_snd_una; /* left edge during last RTT */ | ||
61 | u32 beg_snd_cwnd; /* saves the size of the cwnd */ | ||
62 | u8 doing_vegas_now;/* if true, do vegas for this RTT */ | ||
63 | u16 cntRTT; /* # of RTTs measured within last RTT */ | ||
64 | u32 minRTT; /* min of RTTs measured within last RTT (in usec) */ | ||
65 | u32 baseRTT; /* the min of all Vegas RTT measurements seen (in usec) */ | ||
66 | }; | ||
67 | |||
68 | /* There are several situations when we must "re-start" Vegas: | 59 | /* There are several situations when we must "re-start" Vegas: |
69 | * | 60 | * |
70 | * o when a connection is established | 61 | * o when a connection is established |
@@ -81,7 +72,7 @@ struct vegas { | |||
81 | * Instead we must wait until the completion of an RTT during | 72 | * Instead we must wait until the completion of an RTT during |
82 | * which we actually receive ACKs. | 73 | * which we actually receive ACKs. |
83 | */ | 74 | */ |
84 | static inline void vegas_enable(struct sock *sk) | 75 | static void vegas_enable(struct sock *sk) |
85 | { | 76 | { |
86 | const struct tcp_sock *tp = tcp_sk(sk); | 77 | const struct tcp_sock *tp = tcp_sk(sk); |
87 | struct vegas *vegas = inet_csk_ca(sk); | 78 | struct vegas *vegas = inet_csk_ca(sk); |
@@ -104,13 +95,14 @@ static inline void vegas_disable(struct sock *sk) | |||
104 | vegas->doing_vegas_now = 0; | 95 | vegas->doing_vegas_now = 0; |
105 | } | 96 | } |
106 | 97 | ||
107 | static void tcp_vegas_init(struct sock *sk) | 98 | void tcp_vegas_init(struct sock *sk) |
108 | { | 99 | { |
109 | struct vegas *vegas = inet_csk_ca(sk); | 100 | struct vegas *vegas = inet_csk_ca(sk); |
110 | 101 | ||
111 | vegas->baseRTT = 0x7fffffff; | 102 | vegas->baseRTT = 0x7fffffff; |
112 | vegas_enable(sk); | 103 | vegas_enable(sk); |
113 | } | 104 | } |
105 | EXPORT_SYMBOL_GPL(tcp_vegas_init); | ||
114 | 106 | ||
115 | /* Do RTT sampling needed for Vegas. | 107 | /* Do RTT sampling needed for Vegas. |
116 | * Basically we: | 108 | * Basically we: |
@@ -120,7 +112,7 @@ static void tcp_vegas_init(struct sock *sk) | |||
120 | * o min-filter RTT samples from a much longer window (forever for now) | 112 | * o min-filter RTT samples from a much longer window (forever for now) |
121 | * to find the propagation delay (baseRTT) | 113 | * to find the propagation delay (baseRTT) |
122 | */ | 114 | */ |
123 | static void tcp_vegas_pkts_acked(struct sock *sk, u32 cnt, ktime_t last) | 115 | void tcp_vegas_pkts_acked(struct sock *sk, u32 cnt, ktime_t last) |
124 | { | 116 | { |
125 | struct vegas *vegas = inet_csk_ca(sk); | 117 | struct vegas *vegas = inet_csk_ca(sk); |
126 | u32 vrtt; | 118 | u32 vrtt; |
@@ -138,8 +130,9 @@ static void tcp_vegas_pkts_acked(struct sock *sk, u32 cnt, ktime_t last) | |||
138 | vegas->minRTT = min(vegas->minRTT, vrtt); | 130 | vegas->minRTT = min(vegas->minRTT, vrtt); |
139 | vegas->cntRTT++; | 131 | vegas->cntRTT++; |
140 | } | 132 | } |
133 | EXPORT_SYMBOL_GPL(tcp_vegas_pkts_acked); | ||
141 | 134 | ||
142 | static void tcp_vegas_state(struct sock *sk, u8 ca_state) | 135 | void tcp_vegas_state(struct sock *sk, u8 ca_state) |
143 | { | 136 | { |
144 | 137 | ||
145 | if (ca_state == TCP_CA_Open) | 138 | if (ca_state == TCP_CA_Open) |
@@ -147,6 +140,7 @@ static void tcp_vegas_state(struct sock *sk, u8 ca_state) | |||
147 | else | 140 | else |
148 | vegas_disable(sk); | 141 | vegas_disable(sk); |
149 | } | 142 | } |
143 | EXPORT_SYMBOL_GPL(tcp_vegas_state); | ||
150 | 144 | ||
151 | /* | 145 | /* |
152 | * If the connection is idle and we are restarting, | 146 | * If the connection is idle and we are restarting, |
@@ -157,12 +151,13 @@ static void tcp_vegas_state(struct sock *sk, u8 ca_state) | |||
157 | * packets, _then_ we can make Vegas calculations | 151 | * packets, _then_ we can make Vegas calculations |
158 | * again. | 152 | * again. |
159 | */ | 153 | */ |
160 | static void tcp_vegas_cwnd_event(struct sock *sk, enum tcp_ca_event event) | 154 | void tcp_vegas_cwnd_event(struct sock *sk, enum tcp_ca_event event) |
161 | { | 155 | { |
162 | if (event == CA_EVENT_CWND_RESTART || | 156 | if (event == CA_EVENT_CWND_RESTART || |
163 | event == CA_EVENT_TX_START) | 157 | event == CA_EVENT_TX_START) |
164 | tcp_vegas_init(sk); | 158 | tcp_vegas_init(sk); |
165 | } | 159 | } |
160 | EXPORT_SYMBOL_GPL(tcp_vegas_cwnd_event); | ||
166 | 161 | ||
167 | static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, | 162 | static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, |
168 | u32 seq_rtt, u32 in_flight, int flag) | 163 | u32 seq_rtt, u32 in_flight, int flag) |
@@ -339,8 +334,7 @@ static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, | |||
339 | } | 334 | } |
340 | 335 | ||
341 | /* Extract info for Tcp socket info provided via netlink. */ | 336 | /* Extract info for Tcp socket info provided via netlink. */ |
342 | static void tcp_vegas_get_info(struct sock *sk, u32 ext, | 337 | void tcp_vegas_get_info(struct sock *sk, u32 ext, struct sk_buff *skb) |
343 | struct sk_buff *skb) | ||
344 | { | 338 | { |
345 | const struct vegas *ca = inet_csk_ca(sk); | 339 | const struct vegas *ca = inet_csk_ca(sk); |
346 | if (ext & (1 << (INET_DIAG_VEGASINFO - 1))) { | 340 | if (ext & (1 << (INET_DIAG_VEGASINFO - 1))) { |
@@ -354,6 +348,7 @@ static void tcp_vegas_get_info(struct sock *sk, u32 ext, | |||
354 | nla_put(skb, INET_DIAG_VEGASINFO, sizeof(info), &info); | 348 | nla_put(skb, INET_DIAG_VEGASINFO, sizeof(info), &info); |
355 | } | 349 | } |
356 | } | 350 | } |
351 | EXPORT_SYMBOL_GPL(tcp_vegas_get_info); | ||
357 | 352 | ||
358 | static struct tcp_congestion_ops tcp_vegas = { | 353 | static struct tcp_congestion_ops tcp_vegas = { |
359 | .flags = TCP_CONG_RTT_STAMP, | 354 | .flags = TCP_CONG_RTT_STAMP, |