diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2009-01-05 00:45:33 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-01-05 00:45:33 -0500 |
commit | 129fa44785a399248ae2466b6cb5c655e96668f7 (patch) | |
tree | c2440b83e752c6cf3e6ec6f60492b85ddb8932a9 /net/dccp | |
parent | e5fd56ca4eb3a130882bbef69d6952ef6aca5c8d (diff) |
dccp: Integrate the TFRC library with DCCP
This patch integrates the TFRC library, which is a dependency of CCID-3 (and
CCID-4), with the new use of CCIDs in the DCCP module.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp')
-rw-r--r-- | net/dccp/Makefile | 6 | ||||
-rw-r--r-- | net/dccp/ccid.c | 8 | ||||
-rw-r--r-- | net/dccp/ccids/Kconfig | 9 | ||||
-rw-r--r-- | net/dccp/ccids/Makefile | 1 | ||||
-rw-r--r-- | net/dccp/ccids/lib/Makefile | 3 | ||||
-rw-r--r-- | net/dccp/ccids/lib/loss_interval.c | 3 | ||||
-rw-r--r-- | net/dccp/ccids/lib/packet_history.c | 9 | ||||
-rw-r--r-- | net/dccp/ccids/lib/tfrc.c | 19 | ||||
-rw-r--r-- | net/dccp/ccids/lib/tfrc.h | 11 | ||||
-rw-r--r-- | net/dccp/ccids/lib/tfrc_equation.c | 4 | ||||
-rw-r--r-- | net/dccp/feat.c | 4 | ||||
-rw-r--r-- | net/dccp/input.c | 2 |
12 files changed, 27 insertions, 52 deletions
diff --git a/net/dccp/Makefile b/net/dccp/Makefile index 5ff2e7b35690..2991efcc8dea 100644 --- a/net/dccp/Makefile +++ b/net/dccp/Makefile | |||
@@ -8,6 +8,10 @@ dccp-y := ccid.o feat.o input.o minisocks.o options.o output.o proto.o timer.o | |||
8 | # CCID-2 is default (RFC 4340, p. 77) and has Ack Vectors as dependency | 8 | # CCID-2 is default (RFC 4340, p. 77) and has Ack Vectors as dependency |
9 | dccp-y += ccids/ccid2.o ackvec.o | 9 | dccp-y += ccids/ccid2.o ackvec.o |
10 | dccp-$(CONFIG_IP_DCCP_CCID3) += ccids/ccid3.o | 10 | dccp-$(CONFIG_IP_DCCP_CCID3) += ccids/ccid3.o |
11 | dccp-$(CONFIG_IP_DCCP_TFRC_LIB) += ccids/lib/tfrc.o \ | ||
12 | ccids/lib/tfrc_equation.o \ | ||
13 | ccids/lib/packet_history.o \ | ||
14 | ccids/lib/loss_interval.o | ||
11 | 15 | ||
12 | dccp_ipv4-y := ipv4.o | 16 | dccp_ipv4-y := ipv4.o |
13 | 17 | ||
@@ -22,5 +26,3 @@ dccp-$(CONFIG_SYSCTL) += sysctl.o | |||
22 | 26 | ||
23 | dccp_diag-y := diag.o | 27 | dccp_diag-y := diag.o |
24 | dccp_probe-y := probe.o | 28 | dccp_probe-y := probe.o |
25 | |||
26 | obj-y += ccids/ | ||
diff --git a/net/dccp/ccid.c b/net/dccp/ccid.c index 19b214ad5e06..f3e9ba1cfd01 100644 --- a/net/dccp/ccid.c +++ b/net/dccp/ccid.c | |||
@@ -12,6 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include "ccid.h" | 14 | #include "ccid.h" |
15 | #include "ccids/lib/tfrc.h" | ||
15 | 16 | ||
16 | static struct ccid_operations *ccids[] = { | 17 | static struct ccid_operations *ccids[] = { |
17 | &ccid2_ops, | 18 | &ccid2_ops, |
@@ -199,7 +200,10 @@ void ccid_hc_tx_delete(struct ccid *ccid, struct sock *sk) | |||
199 | 200 | ||
200 | int __init ccid_initialize_builtins(void) | 201 | int __init ccid_initialize_builtins(void) |
201 | { | 202 | { |
202 | int i, err; | 203 | int i, err = tfrc_lib_init(); |
204 | |||
205 | if (err) | ||
206 | return err; | ||
203 | 207 | ||
204 | for (i = 0; i < ARRAY_SIZE(ccids); i++) { | 208 | for (i = 0; i < ARRAY_SIZE(ccids); i++) { |
205 | err = ccid_activate(ccids[i]); | 209 | err = ccid_activate(ccids[i]); |
@@ -211,6 +215,7 @@ int __init ccid_initialize_builtins(void) | |||
211 | unwind_registrations: | 215 | unwind_registrations: |
212 | while(--i >= 0) | 216 | while(--i >= 0) |
213 | ccid_deactivate(ccids[i]); | 217 | ccid_deactivate(ccids[i]); |
218 | tfrc_lib_exit(); | ||
214 | return err; | 219 | return err; |
215 | } | 220 | } |
216 | 221 | ||
@@ -220,4 +225,5 @@ void ccid_cleanup_builtins(void) | |||
220 | 225 | ||
221 | for (i = 0; i < ARRAY_SIZE(ccids); i++) | 226 | for (i = 0; i < ARRAY_SIZE(ccids); i++) |
222 | ccid_deactivate(ccids[i]); | 227 | ccid_deactivate(ccids[i]); |
228 | tfrc_lib_exit(); | ||
223 | } | 229 | } |
diff --git a/net/dccp/ccids/Kconfig b/net/dccp/ccids/Kconfig index b30f049cf1d3..b28bf962edc3 100644 --- a/net/dccp/ccids/Kconfig +++ b/net/dccp/ccids/Kconfig | |||
@@ -14,7 +14,6 @@ config IP_DCCP_CCID2_DEBUG | |||
14 | config IP_DCCP_CCID3 | 14 | config IP_DCCP_CCID3 |
15 | bool "CCID-3 (TCP-Friendly) (EXPERIMENTAL)" | 15 | bool "CCID-3 (TCP-Friendly) (EXPERIMENTAL)" |
16 | def_bool y if (IP_DCCP = y || IP_DCCP = m) | 16 | def_bool y if (IP_DCCP = y || IP_DCCP = m) |
17 | select IP_DCCP_TFRC_LIB | ||
18 | ---help--- | 17 | ---help--- |
19 | CCID-3 denotes TCP-Friendly Rate Control (TFRC), an equation-based | 18 | CCID-3 denotes TCP-Friendly Rate Control (TFRC), an equation-based |
20 | rate-controlled congestion control mechanism. TFRC is designed to | 19 | rate-controlled congestion control mechanism. TFRC is designed to |
@@ -80,12 +79,8 @@ config IP_DCCP_CCID3_RTO | |||
80 | therefore not be performed on WANs. | 79 | therefore not be performed on WANs. |
81 | 80 | ||
82 | config IP_DCCP_TFRC_LIB | 81 | config IP_DCCP_TFRC_LIB |
83 | tristate | 82 | def_bool y if IP_DCCP_CCID3 |
84 | default n | ||
85 | 83 | ||
86 | config IP_DCCP_TFRC_DEBUG | 84 | config IP_DCCP_TFRC_DEBUG |
87 | bool | 85 | def_bool y if IP_DCCP_CCID3_DEBUG |
88 | depends on IP_DCCP_TFRC_LIB | ||
89 | default y if IP_DCCP_CCID3_DEBUG | ||
90 | |||
91 | endmenu | 86 | endmenu |
diff --git a/net/dccp/ccids/Makefile b/net/dccp/ccids/Makefile deleted file mode 100644 index cdaefffbb777..000000000000 --- a/net/dccp/ccids/Makefile +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | obj-y += lib/ | ||
diff --git a/net/dccp/ccids/lib/Makefile b/net/dccp/ccids/lib/Makefile deleted file mode 100644 index 68c93e3d89dc..000000000000 --- a/net/dccp/ccids/lib/Makefile +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | obj-$(CONFIG_IP_DCCP_TFRC_LIB) += dccp_tfrc_lib.o | ||
2 | |||
3 | dccp_tfrc_lib-y := tfrc.o tfrc_equation.o packet_history.o loss_interval.o | ||
diff --git a/net/dccp/ccids/lib/loss_interval.c b/net/dccp/ccids/lib/loss_interval.c index 5b3ce0688c5c..4d1e40127264 100644 --- a/net/dccp/ccids/lib/loss_interval.c +++ b/net/dccp/ccids/lib/loss_interval.c | |||
@@ -60,7 +60,6 @@ void tfrc_lh_cleanup(struct tfrc_loss_hist *lh) | |||
60 | lh->ring[LIH_INDEX(lh->counter)] = NULL; | 60 | lh->ring[LIH_INDEX(lh->counter)] = NULL; |
61 | } | 61 | } |
62 | } | 62 | } |
63 | EXPORT_SYMBOL_GPL(tfrc_lh_cleanup); | ||
64 | 63 | ||
65 | static void tfrc_lh_calc_i_mean(struct tfrc_loss_hist *lh) | 64 | static void tfrc_lh_calc_i_mean(struct tfrc_loss_hist *lh) |
66 | { | 65 | { |
@@ -121,7 +120,6 @@ u8 tfrc_lh_update_i_mean(struct tfrc_loss_hist *lh, struct sk_buff *skb) | |||
121 | 120 | ||
122 | return (lh->i_mean < old_i_mean); | 121 | return (lh->i_mean < old_i_mean); |
123 | } | 122 | } |
124 | EXPORT_SYMBOL_GPL(tfrc_lh_update_i_mean); | ||
125 | 123 | ||
126 | /* Determine if `new_loss' does begin a new loss interval [RFC 4342, 10.2] */ | 124 | /* Determine if `new_loss' does begin a new loss interval [RFC 4342, 10.2] */ |
127 | static inline u8 tfrc_lh_is_new_loss(struct tfrc_loss_interval *cur, | 125 | static inline u8 tfrc_lh_is_new_loss(struct tfrc_loss_interval *cur, |
@@ -169,7 +167,6 @@ int tfrc_lh_interval_add(struct tfrc_loss_hist *lh, struct tfrc_rx_hist *rh, | |||
169 | } | 167 | } |
170 | return 1; | 168 | return 1; |
171 | } | 169 | } |
172 | EXPORT_SYMBOL_GPL(tfrc_lh_interval_add); | ||
173 | 170 | ||
174 | int __init tfrc_li_init(void) | 171 | int __init tfrc_li_init(void) |
175 | { | 172 | { |
diff --git a/net/dccp/ccids/lib/packet_history.c b/net/dccp/ccids/lib/packet_history.c index 6cc108afdc3b..b7785b3581ec 100644 --- a/net/dccp/ccids/lib/packet_history.c +++ b/net/dccp/ccids/lib/packet_history.c | |||
@@ -94,7 +94,6 @@ int tfrc_tx_hist_add(struct tfrc_tx_hist_entry **headp, u64 seqno) | |||
94 | *headp = entry; | 94 | *headp = entry; |
95 | return 0; | 95 | return 0; |
96 | } | 96 | } |
97 | EXPORT_SYMBOL_GPL(tfrc_tx_hist_add); | ||
98 | 97 | ||
99 | void tfrc_tx_hist_purge(struct tfrc_tx_hist_entry **headp) | 98 | void tfrc_tx_hist_purge(struct tfrc_tx_hist_entry **headp) |
100 | { | 99 | { |
@@ -109,7 +108,6 @@ void tfrc_tx_hist_purge(struct tfrc_tx_hist_entry **headp) | |||
109 | 108 | ||
110 | *headp = NULL; | 109 | *headp = NULL; |
111 | } | 110 | } |
112 | EXPORT_SYMBOL_GPL(tfrc_tx_hist_purge); | ||
113 | 111 | ||
114 | u32 tfrc_tx_hist_rtt(struct tfrc_tx_hist_entry *head, const u64 seqno, | 112 | u32 tfrc_tx_hist_rtt(struct tfrc_tx_hist_entry *head, const u64 seqno, |
115 | const ktime_t now) | 113 | const ktime_t now) |
@@ -127,7 +125,6 @@ u32 tfrc_tx_hist_rtt(struct tfrc_tx_hist_entry *head, const u64 seqno, | |||
127 | 125 | ||
128 | return rtt; | 126 | return rtt; |
129 | } | 127 | } |
130 | EXPORT_SYMBOL_GPL(tfrc_tx_hist_rtt); | ||
131 | 128 | ||
132 | 129 | ||
133 | /* | 130 | /* |
@@ -172,7 +169,6 @@ void tfrc_rx_hist_add_packet(struct tfrc_rx_hist *h, | |||
172 | 169 | ||
173 | tfrc_rx_hist_entry_from_skb(entry, skb, ndp); | 170 | tfrc_rx_hist_entry_from_skb(entry, skb, ndp); |
174 | } | 171 | } |
175 | EXPORT_SYMBOL_GPL(tfrc_rx_hist_add_packet); | ||
176 | 172 | ||
177 | /* has the packet contained in skb been seen before? */ | 173 | /* has the packet contained in skb been seen before? */ |
178 | int tfrc_rx_hist_duplicate(struct tfrc_rx_hist *h, struct sk_buff *skb) | 174 | int tfrc_rx_hist_duplicate(struct tfrc_rx_hist *h, struct sk_buff *skb) |
@@ -189,7 +185,6 @@ int tfrc_rx_hist_duplicate(struct tfrc_rx_hist *h, struct sk_buff *skb) | |||
189 | 185 | ||
190 | return 0; | 186 | return 0; |
191 | } | 187 | } |
192 | EXPORT_SYMBOL_GPL(tfrc_rx_hist_duplicate); | ||
193 | 188 | ||
194 | static void tfrc_rx_hist_swap(struct tfrc_rx_hist *h, const u8 a, const u8 b) | 189 | static void tfrc_rx_hist_swap(struct tfrc_rx_hist *h, const u8 a, const u8 b) |
195 | { | 190 | { |
@@ -390,7 +385,6 @@ int tfrc_rx_handle_loss(struct tfrc_rx_hist *h, | |||
390 | } | 385 | } |
391 | return is_new_loss; | 386 | return is_new_loss; |
392 | } | 387 | } |
393 | EXPORT_SYMBOL_GPL(tfrc_rx_handle_loss); | ||
394 | 388 | ||
395 | int tfrc_rx_hist_alloc(struct tfrc_rx_hist *h) | 389 | int tfrc_rx_hist_alloc(struct tfrc_rx_hist *h) |
396 | { | 390 | { |
@@ -412,7 +406,6 @@ out_free: | |||
412 | } | 406 | } |
413 | return -ENOBUFS; | 407 | return -ENOBUFS; |
414 | } | 408 | } |
415 | EXPORT_SYMBOL_GPL(tfrc_rx_hist_alloc); | ||
416 | 409 | ||
417 | void tfrc_rx_hist_purge(struct tfrc_rx_hist *h) | 410 | void tfrc_rx_hist_purge(struct tfrc_rx_hist *h) |
418 | { | 411 | { |
@@ -424,7 +417,6 @@ void tfrc_rx_hist_purge(struct tfrc_rx_hist *h) | |||
424 | h->ring[i] = NULL; | 417 | h->ring[i] = NULL; |
425 | } | 418 | } |
426 | } | 419 | } |
427 | EXPORT_SYMBOL_GPL(tfrc_rx_hist_purge); | ||
428 | 420 | ||
429 | /** | 421 | /** |
430 | * tfrc_rx_hist_rtt_last_s - reference entry to compute RTT samples against | 422 | * tfrc_rx_hist_rtt_last_s - reference entry to compute RTT samples against |
@@ -495,4 +487,3 @@ keep_ref_for_next_time: | |||
495 | 487 | ||
496 | return sample; | 488 | return sample; |
497 | } | 489 | } |
498 | EXPORT_SYMBOL_GPL(tfrc_rx_hist_sample_rtt); | ||
diff --git a/net/dccp/ccids/lib/tfrc.c b/net/dccp/ccids/lib/tfrc.c index 185916218e07..60c412ccfeef 100644 --- a/net/dccp/ccids/lib/tfrc.c +++ b/net/dccp/ccids/lib/tfrc.c | |||
@@ -1,20 +1,18 @@ | |||
1 | /* | 1 | /* |
2 | * TFRC: main module holding the pieces of the TFRC library together | 2 | * TFRC library initialisation |
3 | * | 3 | * |
4 | * Copyright (c) 2007 The University of Aberdeen, Scotland, UK | 4 | * Copyright (c) 2007 The University of Aberdeen, Scotland, UK |
5 | * Copyright (c) 2007 Arnaldo Carvalho de Melo <acme@redhat.com> | 5 | * Copyright (c) 2007 Arnaldo Carvalho de Melo <acme@redhat.com> |
6 | */ | 6 | */ |
7 | #include <linux/module.h> | ||
8 | #include <linux/moduleparam.h> | ||
9 | #include "tfrc.h" | 7 | #include "tfrc.h" |
10 | 8 | ||
11 | #ifdef CONFIG_IP_DCCP_TFRC_DEBUG | 9 | #ifdef CONFIG_IP_DCCP_TFRC_DEBUG |
12 | int tfrc_debug; | 10 | int tfrc_debug; |
13 | module_param(tfrc_debug, bool, 0644); | 11 | module_param(tfrc_debug, bool, 0644); |
14 | MODULE_PARM_DESC(tfrc_debug, "Enable debug messages"); | 12 | MODULE_PARM_DESC(tfrc_debug, "Enable TFRC debug messages"); |
15 | #endif | 13 | #endif |
16 | 14 | ||
17 | static int __init tfrc_module_init(void) | 15 | int __init tfrc_lib_init(void) |
18 | { | 16 | { |
19 | int rc = tfrc_li_init(); | 17 | int rc = tfrc_li_init(); |
20 | 18 | ||
@@ -38,18 +36,9 @@ out: | |||
38 | return rc; | 36 | return rc; |
39 | } | 37 | } |
40 | 38 | ||
41 | static void __exit tfrc_module_exit(void) | 39 | void __exit tfrc_lib_exit(void) |
42 | { | 40 | { |
43 | tfrc_rx_packet_history_exit(); | 41 | tfrc_rx_packet_history_exit(); |
44 | tfrc_tx_packet_history_exit(); | 42 | tfrc_tx_packet_history_exit(); |
45 | tfrc_li_exit(); | 43 | tfrc_li_exit(); |
46 | } | 44 | } |
47 | |||
48 | module_init(tfrc_module_init); | ||
49 | module_exit(tfrc_module_exit); | ||
50 | |||
51 | MODULE_AUTHOR("Gerrit Renker <gerrit@erg.abdn.ac.uk>, " | ||
52 | "Ian McDonald <ian.mcdonald@jandi.co.nz>, " | ||
53 | "Arnaldo Carvalho de Melo <acme@redhat.com>"); | ||
54 | MODULE_DESCRIPTION("DCCP TFRC library"); | ||
55 | MODULE_LICENSE("GPL"); | ||
diff --git a/net/dccp/ccids/lib/tfrc.h b/net/dccp/ccids/lib/tfrc.h index ed9857527acf..e9720b143275 100644 --- a/net/dccp/ccids/lib/tfrc.h +++ b/net/dccp/ccids/lib/tfrc.h | |||
@@ -17,7 +17,8 @@ | |||
17 | #include <linux/types.h> | 17 | #include <linux/types.h> |
18 | #include <linux/math64.h> | 18 | #include <linux/math64.h> |
19 | #include "../../dccp.h" | 19 | #include "../../dccp.h" |
20 | /* internal includes that this module exports: */ | 20 | |
21 | /* internal includes that this library exports: */ | ||
21 | #include "loss_interval.h" | 22 | #include "loss_interval.h" |
22 | #include "packet_history.h" | 23 | #include "packet_history.h" |
23 | 24 | ||
@@ -66,4 +67,12 @@ extern void tfrc_rx_packet_history_exit(void); | |||
66 | 67 | ||
67 | extern int tfrc_li_init(void); | 68 | extern int tfrc_li_init(void); |
68 | extern void tfrc_li_exit(void); | 69 | extern void tfrc_li_exit(void); |
70 | |||
71 | #ifdef CONFIG_IP_DCCP_TFRC_LIB | ||
72 | extern int tfrc_lib_init(void); | ||
73 | extern void tfrc_lib_exit(void); | ||
74 | #else | ||
75 | #define tfrc_lib_init() (0) | ||
76 | #define tfrc_lib_exit() | ||
77 | #endif | ||
69 | #endif /* _TFRC_H_ */ | 78 | #endif /* _TFRC_H_ */ |
diff --git a/net/dccp/ccids/lib/tfrc_equation.c b/net/dccp/ccids/lib/tfrc_equation.c index 2f20a29cffe4..c5d3a9e5a5a4 100644 --- a/net/dccp/ccids/lib/tfrc_equation.c +++ b/net/dccp/ccids/lib/tfrc_equation.c | |||
@@ -659,8 +659,6 @@ u32 tfrc_calc_x(u16 s, u32 R, u32 p) | |||
659 | return scaled_div32(result, f); | 659 | return scaled_div32(result, f); |
660 | } | 660 | } |
661 | 661 | ||
662 | EXPORT_SYMBOL_GPL(tfrc_calc_x); | ||
663 | |||
664 | /** | 662 | /** |
665 | * tfrc_calc_x_reverse_lookup - try to find p given f(p) | 663 | * tfrc_calc_x_reverse_lookup - try to find p given f(p) |
666 | * | 664 | * |
@@ -693,5 +691,3 @@ u32 tfrc_calc_x_reverse_lookup(u32 fvalue) | |||
693 | index = tfrc_binsearch(fvalue, 0); | 691 | index = tfrc_binsearch(fvalue, 0); |
694 | return (index + 1) * 1000000 / TFRC_CALC_X_ARRSIZE; | 692 | return (index + 1) * 1000000 / TFRC_CALC_X_ARRSIZE; |
695 | } | 693 | } |
696 | |||
697 | EXPORT_SYMBOL_GPL(tfrc_calc_x_reverse_lookup); | ||
diff --git a/net/dccp/feat.c b/net/dccp/feat.c index 741b2db24735..4152308958ab 100644 --- a/net/dccp/feat.c +++ b/net/dccp/feat.c | |||
@@ -1214,8 +1214,6 @@ const char *dccp_feat_typename(const u8 type) | |||
1214 | return NULL; | 1214 | return NULL; |
1215 | } | 1215 | } |
1216 | 1216 | ||
1217 | EXPORT_SYMBOL_GPL(dccp_feat_typename); | ||
1218 | |||
1219 | const char *dccp_feat_name(const u8 feat) | 1217 | const char *dccp_feat_name(const u8 feat) |
1220 | { | 1218 | { |
1221 | static const char *feature_names[] = { | 1219 | static const char *feature_names[] = { |
@@ -1240,6 +1238,4 @@ const char *dccp_feat_name(const u8 feat) | |||
1240 | 1238 | ||
1241 | return feature_names[feat]; | 1239 | return feature_names[feat]; |
1242 | } | 1240 | } |
1243 | |||
1244 | EXPORT_SYMBOL_GPL(dccp_feat_name); | ||
1245 | #endif /* CONFIG_IP_DCCP_DEBUG */ | 1241 | #endif /* CONFIG_IP_DCCP_DEBUG */ |
diff --git a/net/dccp/input.c b/net/dccp/input.c index 5eb443f656c1..7648f316310f 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c | |||
@@ -741,5 +741,3 @@ u32 dccp_sample_rtt(struct sock *sk, long delta) | |||
741 | 741 | ||
742 | return delta; | 742 | return delta; |
743 | } | 743 | } |
744 | |||
745 | EXPORT_SYMBOL_GPL(dccp_sample_rtt); | ||