[CCID]: Interface CCID3 code with newer TFRC LI database

This hooks up the TFRC Loss Interval database with CCID 3 packet reception.

Signed-off-by: Gerrit Renker <[EMAIL PROTECTED]>
---
 net/dccp/ccids/ccid3.c |   26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -795,12 +795,11 @@ static void ccid3_hc_rx_packet_recv(stru
        /*
         *      Handle pending losses and otherwise check for new loss
         */
-       if (tfrc_rx_loss_pending(&hcrx->ccid3hcrx_hist)) {
-               /*
-                * Loss Handling
-                *
-                * XXX: part of subsequent patch
-                */
+       if (tfrc_rx_loss_pending(&hcrx->ccid3hcrx_hist) &&
+           tfrc_rx_handle_loss(&hcrx->ccid3hcrx_hist,
+                               &hcrx->ccid3hcrx_li_hist,
+                               skb, ndp, ccid3_first_li, sk) ) {
+               do_feedback = 1;
                goto done_receiving;
        }
 
@@ -813,14 +812,23 @@ static void ccid3_hc_rx_packet_recv(stru
        if (unlikely(!is_data_packet))
                goto update_records;
 
-       if (list_empty(&hcrx->ccid3hcrx_li_hist)) {  /* no loss so far: p = 0 */
-
+       if (! tfrc_lh_is_initialised(&hcrx->ccid3hcrx_li_hist)) {
+               /*
+                * Empty loss history: no loss so far, hence p stays 0.
+                * Sample RTT values, since an RTT estimate is required for the
+                * computation of p when the first loss occurs; RFC 3448, 6.3.1.
+                */
                sample = tfrc_rx_sample_rtt(&hcrx->ccid3hcrx_hist, skb);
                if (sample != 0)
                        hcrx->ccid3hcrx_rtt =
                                tfrc_ewma(hcrx->ccid3hcrx_rtt, sample, 9);
 
-       }
+       } else if (tfrc_lh_update_i_mean(&hcrx->ccid3hcrx_li_hist, skb))
+               /*
+                * Step (3) of [RFC 3448, 6.1]: Recompute I_mean and, if I_mean
+                * has decreased (resp. p has increased), send feedback now.
+                */
+               do_feedback = 1;
 
        /* check if the periodic once-per-RTT feedback is due; RFC 4342, 10.3 */
        if (SUB16(dccp_hdr(skb)->dccph_ccval, hcrx->ccid3hcrx_last_counter) > 3)
-
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

Reply via email to