2007/12/3, Gerrit Renker <[EMAIL PROTECTED]>:
> I have just backported the latest changes that Arnaldo put in the 2.6.25
> tree to the test tree. While it seems correct, I have not run exhaustive
> tests, but will run a few.
>
> I have also updated the CCID4/Faster Restart branches with regard to
> these changes and would like to know if people are actually using these
> branches, as it takes time to keep track of what is going on.
>
> The interdiff for the CCID4 tree is below (there was just one hunk which
> failed in the interdiff; if in doubt please check out the code). The
> updates to CCID3 are analogous.
>
> --- b/net/dccp/ccids/ccid4.c
> +++ b/net/dccp/ccids/ccid4.c
> @@ -56,8 +56,6 @@
> #define ccid4_pr_debug(format, a...)
> #endif
>
> -DECLARE_TFRC_TX_CACHE(ccid4_tx_hist);
> -
> static void ccid4_hc_tx_set_state(struct sock *sk,
> enum tfrc_hc_tx_states state)
> {
> @@ -355,7 +353,7 @@
> {
> struct tfrc_hc_tx_sock *hctx = tfrc_hc_tx_sk(sk);
> struct tfrc_options_received *opt_recv;
> - ktime_t t_send, now;
> + ktime_t now;
> unsigned long t_nfb;
> u32 pinv, r_sample;
>
> @@ -363,24 +361,26 @@
> if (!(DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_ACK ||
> DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_DATAACK))
> return;
> -
> /* ... and only in the established state */
> - switch (hctx->tfrchctx_state) {
> - case TFRC_SSTATE_NO_FBACK: /* fall through */
> - case TFRC_SSTATE_FBACK: break;
> - default: return;
> - }
> + if (hctx->tfrchctx_state != TFRC_SSTATE_FBACK &&
> + hctx->tfrchctx_state != TFRC_SSTATE_NO_FBACK)
> + return;
>
> - /* estimate RTT from history if ACK number is valid */
> - if (! tfrc_tx_hist_when(&t_send, &hctx->tfrchctx_hist,
> - DCCP_SKB_CB(skb)->dccpd_ack_seq)) {
> + opt_recv = &hctx->tfrchctx_options_received;
> + now = ktime_get_real();
> +
> + /* Estimate RTT from history if ACK number is valid */
> + r_sample = tfrc_tx_hist_rtt(hctx->tfrchctx_hist,
> + DCCP_SKB_CB(skb)->dccpd_ack_seq, now);
> + if (r_sample == 0) {
> DCCP_WARN("%s(%p): %s with bogus ACK-%llu
> ", dccp_role(sk), sk,
> dccp_packet_name(DCCP_SKB_CB(skb)->dccpd_type),
> (unsigned long
> long)DCCP_SKB_CB(skb)->dccpd_ack_seq);
> return;
> }
> -
> - opt_recv = &hctx->tfrchctx_options_received;
> + /* Validate new RTT sample and update moving average */
> + r_sample = dccp_sample_rtt(sk, r_sample);
> + hctx->tfrchctx_rtt = tfrc_ewma(hctx->tfrchctx_rtt, r_sample, 9);
>
> /* Update receive rate in units of 64 * bytes/second */
> hctx->tfrchctx_x_recv = opt_recv->tfrcor_receive_rate;
> @@ -394,13 +394,6 @@
> hctx->tfrchctx_p = scaled_div(1, pinv);
>
> /*
> - * Calculate new RTT sample and update moving average
> - */
> - now = ktime_get_real();
> - r_sample = dccp_sample_rtt(sk, ktime_us_delta(now, t_send));
> - hctx->tfrchctx_rtt = tfrc_ewma(hctx->tfrchctx_rtt, r_sample, 9);
> -
> - /*
> * Update allowed sending rate X as per draft rfc3448bis-00,
> 4.2/3
> */
> if (hctx->tfrchctx_state == TFRC_SSTATE_NO_FBACK) {
> @@ -440,7 +433,7 @@
> (unsigned)(hctx->tfrchctx_x_recv >> 6),
> (unsigned)(hctx->tfrchctx_x >> 6));
>
> - /* unschedule no feedback timer */
> + /* unschedule nofeedback timer */
> sk_stop_timer(sk, &hctx->tfrchctx_no_feedback_timer);
>
> /*
> @@ -541,7 +534,7 @@
> struct tfrc_hc_tx_sock *hctx = ccid_priv(ccid);
>
> hctx->tfrchctx_state = TFRC_SSTATE_NO_SENT;
> - tfrc_tx_hist_init(&hctx->tfrchctx_hist, ccid4_tx_hist);
> + hctx->tfrchctx_hist = NULL;
> setup_timer(&hctx->tfrchctx_no_feedback_timer,
> ccid4_hc_tx_no_feedback_timer, (unsigned long)sk);
>
> @@ -555,8 +548,7 @@
> ccid4_hc_tx_set_state(sk, TFRC_SSTATE_TERM);
> sk_stop_timer(sk, &hctx->tfrchctx_no_feedback_timer);
>
> - /* Empty packet history */
> - tfrc_tx_hist_cleanup(&hctx->tfrchctx_hist);
> + tfrc_tx_hist_purge(&hctx->tfrchctx_hist);
> }
>
> static void ccid4_hc_tx_get_info(struct sock *sk, struct tcp_info *info)
> @@ -884,25 +876,13 @@
>
> static __init int ccid4_module_init(void)
> {
> - int rc = -ENOBUFS;
> -
> - if (tfrc_tx_cache_init(&ccid4_tx_hist, "ccid4"))
> - goto out;
> -
> - rc = ccid_register(&ccid4);
> - if (rc != 0)
> - tfrc_tx_cache_cleanup(ccid4_tx_hist);
> -out:
> - return rc;
> + return ccid_register(&ccid4);
> }
> module_init(ccid4_module_init);
>
> static __exit void ccid4_module_exit(void)
> {
> ccid_unregister(&ccid4);
> -
> - if (ccid4_tx_hist != NULL)
> - tfrc_tx_cache_cleanup(ccid4_tx_hist);
> }
> module_exit(ccid4_module_exit);
>
> --- b/net/dccp/ccids/lib/tfrc_ccids.h
> +++ b/net/dccp/ccids/lib/tfrc_ccids.h
> @@ -111,7 +111,7 @@
> ktime_t tfrchctx_t_ld;
> ktime_t tfrchctx_t_nom;
> u32 tfrchctx_delta;
> - struct tfrc_tx_hist_head tfrchctx_hist;
> + struct tfrc_tx_hist_entry *tfrchctx_hist;
> struct tfrc_options_received tfrchctx_options_received;
> };
> -
> To unsubscribe from this list: send the line "unsubscribe dccp" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Hi Gerrit,
thank you for the announcement. I'm using the ccid4 branch and I
suppose that Tommi is also using the tree. I plan to submit new
patches for these days...
Leandro.
-
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html