[CCID3]: Move ccid3_hc_rx_detect_loss to packet_history.c

Renaming it to dccp_rx_hist_detect_loss.

Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Arnaldo Carvalho de Melo and committed by
David S. Miller
29e4f8b3 072ab6c6

+89 -79
+4 -79
net/dccp/ccids/ccid3.c
··· 927 927 { 928 928 struct dccp_sock *dp = dccp_sk(sk); 929 929 struct ccid3_hc_rx_sock *hcrx = dp->dccps_hc_rx_ccid_private; 930 - struct dccp_rx_hist_entry *entry, *next, *packet; 931 - struct dccp_rx_hist_entry *a_loss = NULL; 932 - struct dccp_rx_hist_entry *b_loss = NULL; 933 - u64 seq_loss = DCCP_MAX_SEQNO + 1; 934 - u8 win_loss = 0; 935 - u8 num_later = TFRC_RECV_NUM_LATE_LOSS; 930 + u8 win_loss; 931 + const u64 seq_loss = dccp_rx_hist_detect_loss(&hcrx->ccid3hcrx_hist, 932 + &hcrx->ccid3hcrx_li_hist, 933 + &win_loss); 936 934 937 - list_for_each_entry_safe(entry, next, &hcrx->ccid3hcrx_hist, 938 - dccphrx_node) { 939 - if (num_later == 0) { 940 - b_loss = entry; 941 - break; 942 - } else if (dccp_rx_hist_entry_data_packet(entry)) 943 - --num_later; 944 - } 945 - 946 - if (b_loss == NULL) 947 - goto out_update_li; 948 - 949 - num_later = 1; 950 - 951 - list_for_each_entry_safe_continue(entry, next, &hcrx->ccid3hcrx_hist, 952 - dccphrx_node) { 953 - if (num_later == 0) { 954 - a_loss = entry; 955 - break; 956 - } else if (dccp_rx_hist_entry_data_packet(entry)) 957 - --num_later; 958 - } 959 - 960 - if (a_loss == NULL) { 961 - if (list_empty(&hcrx->ccid3hcrx_li_hist)) { 962 - /* no loss event have occured yet */ 963 - LIMIT_NETDEBUG("%s: TODO: find a lost data packet by " 964 - "comparing to initial seqno\n", 965 - dccp_role(sk)); 966 - goto out_update_li; 967 - } else { 968 - pr_info("%s: %s, sk=%p, ERROR! Less than 4 data " 969 - "packets in history", 970 - __FUNCTION__, dccp_role(sk), sk); 971 - return; 972 - } 973 - } 974 - 975 - /* Locate a lost data packet */ 976 - entry = packet = b_loss; 977 - list_for_each_entry_safe_continue(entry, next, &hcrx->ccid3hcrx_hist, 978 - dccphrx_node) { 979 - u64 delta = dccp_delta_seqno(entry->dccphrx_seqno, 980 - packet->dccphrx_seqno); 981 - 982 - if (delta != 0) { 983 - if (dccp_rx_hist_entry_data_packet(packet)) 984 - --delta; 985 - /* 986 - * FIXME: check this, probably this % usage is because 987 - * in earlier drafts the ndp count was just 8 bits 988 - * long, but now it cam be up to 24 bits long. 989 - */ 990 - #if 0 991 - if (delta % DCCP_NDP_LIMIT != 992 - (packet->dccphrx_ndp - 993 - entry->dccphrx_ndp) % DCCP_NDP_LIMIT) 994 - #endif 995 - if (delta != 996 - packet->dccphrx_ndp - entry->dccphrx_ndp) { 997 - seq_loss = entry->dccphrx_seqno; 998 - dccp_inc_seqno(&seq_loss); 999 - } 1000 - } 1001 - packet = entry; 1002 - if (packet == a_loss) 1003 - break; 1004 - } 1005 - 1006 - if (seq_loss != DCCP_MAX_SEQNO + 1) 1007 - win_loss = a_loss->dccphrx_ccval; 1008 - 1009 - out_update_li: 1010 935 ccid3_hc_rx_update_li(sk, seq_loss, win_loss); 1011 936 } 1012 937
+82
net/dccp/ccids/lib/packet_history.c
··· 224 224 225 225 EXPORT_SYMBOL_GPL(dccp_rx_hist_add_packet); 226 226 227 + u64 dccp_rx_hist_detect_loss(struct list_head *rx_list, 228 + struct list_head *li_list, u8 *win_loss) 229 + { 230 + struct dccp_rx_hist_entry *entry, *next, *packet; 231 + struct dccp_rx_hist_entry *a_loss = NULL; 232 + struct dccp_rx_hist_entry *b_loss = NULL; 233 + u64 seq_loss = DCCP_MAX_SEQNO + 1; 234 + u8 num_later = TFRC_RECV_NUM_LATE_LOSS; 235 + 236 + list_for_each_entry_safe(entry, next, rx_list, dccphrx_node) { 237 + if (num_later == 0) { 238 + b_loss = entry; 239 + break; 240 + } else if (dccp_rx_hist_entry_data_packet(entry)) 241 + --num_later; 242 + } 243 + 244 + if (b_loss == NULL) 245 + goto out; 246 + 247 + num_later = 1; 248 + list_for_each_entry_safe_continue(entry, next, rx_list, dccphrx_node) { 249 + if (num_later == 0) { 250 + a_loss = entry; 251 + break; 252 + } else if (dccp_rx_hist_entry_data_packet(entry)) 253 + --num_later; 254 + } 255 + 256 + if (a_loss == NULL) { 257 + if (list_empty(li_list)) { 258 + /* no loss event have occured yet */ 259 + LIMIT_NETDEBUG("%s: TODO: find a lost data packet by " 260 + "comparing to initial seqno\n", 261 + __FUNCTION__); 262 + goto out; 263 + } else { 264 + LIMIT_NETDEBUG("%s: Less than 4 data pkts in history!", 265 + __FUNCTION__); 266 + goto out; 267 + } 268 + } 269 + 270 + /* Locate a lost data packet */ 271 + entry = packet = b_loss; 272 + list_for_each_entry_safe_continue(entry, next, rx_list, dccphrx_node) { 273 + u64 delta = dccp_delta_seqno(entry->dccphrx_seqno, 274 + packet->dccphrx_seqno); 275 + 276 + if (delta != 0) { 277 + if (dccp_rx_hist_entry_data_packet(packet)) 278 + --delta; 279 + /* 280 + * FIXME: check this, probably this % usage is because 281 + * in earlier drafts the ndp count was just 8 bits 282 + * long, but now it cam be up to 24 bits long. 283 + */ 284 + #if 0 285 + if (delta % DCCP_NDP_LIMIT != 286 + (packet->dccphrx_ndp - 287 + entry->dccphrx_ndp) % DCCP_NDP_LIMIT) 288 + #endif 289 + if (delta != packet->dccphrx_ndp - entry->dccphrx_ndp) { 290 + seq_loss = entry->dccphrx_seqno; 291 + dccp_inc_seqno(&seq_loss); 292 + } 293 + } 294 + packet = entry; 295 + if (packet == a_loss) 296 + break; 297 + } 298 + out: 299 + if (seq_loss != DCCP_MAX_SEQNO + 1) 300 + *win_loss = a_loss->dccphrx_ccval; 301 + else 302 + *win_loss = 0; /* Paranoia */ 303 + 304 + return seq_loss; 305 + } 306 + 307 + EXPORT_SYMBOL_GPL(dccp_rx_hist_detect_loss); 308 + 227 309 struct dccp_tx_hist *dccp_tx_hist_new(const char *name) 228 310 { 229 311 struct dccp_tx_hist *hist = kmalloc(sizeof(*hist), GFP_ATOMIC);
+3
net/dccp/ccids/lib/packet_history.h
··· 193 193 struct list_head *li_list, 194 194 struct dccp_rx_hist_entry *packet); 195 195 196 + extern u64 dccp_rx_hist_detect_loss(struct list_head *rx_list, 197 + struct list_head *li_list, u8 *win_loss); 198 + 196 199 #endif /* _DCCP_PKT_HIST_ */