diff options
Diffstat (limited to 'net/dccp/ccids/ccid3.c')
-rw-r--r-- | net/dccp/ccids/ccid3.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index d654264c5108..d77d3e664b7e 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
@@ -136,17 +136,18 @@ static void ccid3_hc_tx_update_x(struct sock *sk, ktime_t *stamp) | |||
136 | } | 136 | } |
137 | 137 | ||
138 | /* | 138 | /* |
139 | * Track the mean packet size `s' (cf. RFC 4342, 5.3 and RFC 3448, 4.1) | 139 | * ccid3_hc_tx_measure_packet_size - Measuring the packet size `s' (sec 4.1) |
140 | * @len: DCCP packet payload size in bytes | 140 | * @new_len: DCCP payload size in bytes (not used by all methods) |
141 | */ | 141 | */ |
142 | static inline void ccid3_hc_tx_update_s(struct ccid3_hc_tx_sock *hctx, int len) | 142 | static u32 ccid3_hc_tx_measure_packet_size(struct sock *sk, const u16 new_len) |
143 | { | 143 | { |
144 | const u16 old_s = hctx->s; | 144 | #if defined(CONFIG_IP_DCCP_CCID3_MEASURE_S_AS_AVG) |
145 | 145 | return tfrc_ewma(ccid3_hc_tx_sk(sk)->s, new_len, 9); | |
146 | hctx->s = tfrc_ewma(hctx->s, len, 9); | 146 | #elif defined(CONFIG_IP_DCCP_CCID3_MEASURE_S_AS_MAX) |
147 | 147 | return max(ccid3_hc_tx_sk(sk)->s, new_len); | |
148 | if (hctx->s != old_s) | 148 | #else /* CONFIG_IP_DCCP_CCID3_MEASURE_S_AS_MPS */ |
149 | ccid3_update_send_interval(hctx); | 149 | return dccp_sk(sk)->dccps_mss_cache; |
150 | #endif | ||
150 | } | 151 | } |
151 | 152 | ||
152 | /* | 153 | /* |
@@ -271,8 +272,6 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
271 | /* Set t_0 for initial packet */ | 272 | /* Set t_0 for initial packet */ |
272 | hctx->t_nom = now; | 273 | hctx->t_nom = now; |
273 | 274 | ||
274 | hctx->s = skb->len; | ||
275 | |||
276 | /* | 275 | /* |
277 | * Use initial RTT sample when available: recommended by erratum | 276 | * Use initial RTT sample when available: recommended by erratum |
278 | * to RFC 4342. This implements the initialisation procedure of | 277 | * to RFC 4342. This implements the initialisation procedure of |
@@ -294,6 +293,9 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
294 | hctx->x = dp->dccps_mss_cache; | 293 | hctx->x = dp->dccps_mss_cache; |
295 | hctx->x <<= 6; | 294 | hctx->x <<= 6; |
296 | } | 295 | } |
296 | |||
297 | /* Compute t_ipi = s / X */ | ||
298 | hctx->s = ccid3_hc_tx_measure_packet_size(sk, skb->len); | ||
297 | ccid3_update_send_interval(hctx); | 299 | ccid3_update_send_interval(hctx); |
298 | 300 | ||
299 | } else { | 301 | } else { |
@@ -326,7 +328,8 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, unsigned int len) | |||
326 | { | 328 | { |
327 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); | 329 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); |
328 | 330 | ||
329 | ccid3_hc_tx_update_s(hctx, len); | 331 | /* Changes to s will become effective the next time X is computed */ |
332 | hctx->s = ccid3_hc_tx_measure_packet_size(sk, len); | ||
330 | 333 | ||
331 | if (tfrc_tx_hist_add(&hctx->hist, dccp_sk(sk)->dccps_gss)) | 334 | if (tfrc_tx_hist_add(&hctx->hist, dccp_sk(sk)->dccps_gss)) |
332 | DCCP_CRIT("packet history - out of memory!"); | 335 | DCCP_CRIT("packet history - out of memory!"); |