[CCID3]: Move ccid3_hc_rx_detect_loss to packet_history.c
[deliverable/linux.git] / net / dccp / ccids / ccid3.c
index 849f5580efbd2b6dd4d586a6d34f8aaa9ca68d6f..4ff6ede0f07d048e72dacc187198eacfac81402b 100644 (file)
@@ -927,86 +927,11 @@ static void ccid3_hc_rx_detect_loss(struct sock *sk)
 {
        struct dccp_sock *dp = dccp_sk(sk);
        struct ccid3_hc_rx_sock *hcrx = dp->dccps_hc_rx_ccid_private;
-       struct dccp_rx_hist_entry *entry, *next, *packet;
-       struct dccp_rx_hist_entry *a_loss = NULL;
-       struct dccp_rx_hist_entry *b_loss = NULL;
-       u64 seq_loss = DCCP_MAX_SEQNO + 1;
-       u8 win_loss = 0;
-       u8 num_later = TFRC_RECV_NUM_LATE_LOSS;
+       u8 win_loss;
+       const u64 seq_loss = dccp_rx_hist_detect_loss(&hcrx->ccid3hcrx_hist,
+                                                     &hcrx->ccid3hcrx_li_hist,
+                                                     &win_loss);
 
-       list_for_each_entry_safe(entry, next, &hcrx->ccid3hcrx_hist,
-                                dccphrx_node) {
-               if (num_later == 0) {
-                       b_loss = entry;
-                       break;
-               } else if (dccp_rx_hist_entry_data_packet(entry))
-                       --num_later;
-       }
-
-       if (b_loss == NULL)
-               goto out_update_li;
-
-       num_later = 1;
-
-       list_for_each_entry_safe_continue(entry, next, &hcrx->ccid3hcrx_hist,
-                                         dccphrx_node) {
-               if (num_later == 0) {
-                       a_loss = entry;
-                       break;
-               } else if (dccp_rx_hist_entry_data_packet(entry))
-                       --num_later;
-       }
-
-       if (a_loss == NULL) {
-               if (list_empty(&hcrx->ccid3hcrx_li_hist)) {
-                       /* no loss event have occured yet */
-                       LIMIT_NETDEBUG("%s: TODO: find a lost data packet by "
-                                      "comparing to initial seqno\n",
-                                      dccp_role(sk));
-                       goto out_update_li;
-               } else {
-                       pr_info("%s: %s, sk=%p, ERROR! Less than 4 data "
-                               "packets in history",
-                               __FUNCTION__, dccp_role(sk), sk);
-                       return;
-               }
-       }
-
-       /* Locate a lost data packet */
-       entry = packet = b_loss;
-       list_for_each_entry_safe_continue(entry, next, &hcrx->ccid3hcrx_hist,
-                                         dccphrx_node) {
-               u64 delta = dccp_delta_seqno(entry->dccphrx_seqno,
-                                            packet->dccphrx_seqno);
-
-               if (delta != 0) {
-                       if (dccp_rx_hist_entry_data_packet(packet))
-                               --delta;
-                       /*
-                        * FIXME: check this, probably this % usage is because
-                        * in earlier drafts the ndp count was just 8 bits
-                        * long, but now it cam be up to 24 bits long.
-                        */
-#if 0
-                       if (delta % DCCP_NDP_LIMIT !=
-                           (packet->dccphrx_ndp -
-                            entry->dccphrx_ndp) % DCCP_NDP_LIMIT)
-#endif
-                       if (delta !=
-                            packet->dccphrx_ndp - entry->dccphrx_ndp) {
-                               seq_loss = entry->dccphrx_seqno;
-                               dccp_inc_seqno(&seq_loss);
-                       }
-               }
-               packet = entry;
-               if (packet == a_loss)
-                       break;
-       }
-
-       if (seq_loss != DCCP_MAX_SEQNO + 1)
-               win_loss = a_loss->dccphrx_ccval;
-
-out_update_li:
        ccid3_hc_rx_update_li(sk, seq_loss, win_loss);
 }
 
This page took 0.027756 seconds and 5 git commands to generate.