ulpqueue.c (d49d91d79a8dc5e85108a5ae1c8eef23dec135c1) | ulpqueue.c (3ff50b7997fe06cd5d276b229967bb52d6b3b6c1) |
---|---|
1/* SCTP kernel reference Implementation 2 * (C) Copyright IBM Corp. 2001, 2004 3 * Copyright (c) 1999-2000 Cisco, Inc. 4 * Copyright (c) 1999-2001 Motorola, Inc. 5 * Copyright (c) 2001 Intel Corp. 6 * Copyright (c) 2001 Nokia, Inc. 7 * Copyright (c) 2001 La Monte H.P. Yarroll 8 * --- 377 unchanged lines hidden (view full) --- 386 /* Remove the fragment from the reassembly queue. */ 387 __skb_unlink(pos, queue); 388 389 /* Break if we have reached the last fragment. */ 390 if (pos == l_frag) 391 break; 392 pos->next = pnext; 393 pos = pnext; | 1/* SCTP kernel reference Implementation 2 * (C) Copyright IBM Corp. 2001, 2004 3 * Copyright (c) 1999-2000 Cisco, Inc. 4 * Copyright (c) 1999-2001 Motorola, Inc. 5 * Copyright (c) 2001 Intel Corp. 6 * Copyright (c) 2001 Nokia, Inc. 7 * Copyright (c) 2001 La Monte H.P. Yarroll 8 * --- 377 unchanged lines hidden (view full) --- 386 /* Remove the fragment from the reassembly queue. */ 387 __skb_unlink(pos, queue); 388 389 /* Break if we have reached the last fragment. */ 390 if (pos == l_frag) 391 break; 392 pos->next = pnext; 393 pos = pnext; |
394 }; | 394 } |
395 396 event = sctp_skb2event(f_frag); 397 SCTP_INC_STATS(SCTP_MIB_REASMUSRMSGS); 398 399 return event; 400} 401 402 --- 68 unchanged lines hidden (view full) --- 471 break; 472 473 case SCTP_DATA_LAST_FRAG: 474 if (first_frag && (ctsn == next_tsn)) 475 goto found; 476 else 477 first_frag = NULL; 478 break; | 395 396 event = sctp_skb2event(f_frag); 397 SCTP_INC_STATS(SCTP_MIB_REASMUSRMSGS); 398 399 return event; 400} 401 402 --- 68 unchanged lines hidden (view full) --- 471 break; 472 473 case SCTP_DATA_LAST_FRAG: 474 if (first_frag && (ctsn == next_tsn)) 475 goto found; 476 else 477 first_frag = NULL; 478 break; |
479 }; | 479 } |
480 } 481 482 asoc = ulpq->asoc; 483 if (pd_first) { 484 /* Make sure we can enter partial deliver. 485 * We can trigger partial delivery only if framgent 486 * interleave is set, or the socket is not already 487 * in partial delivery. --- 63 unchanged lines hidden (view full) --- 551 first_frag = pos; 552 else if (ctsn != next_tsn) 553 goto done; 554 last_frag = pos; 555 is_last = 1; 556 goto done; 557 default: 558 return NULL; | 480 } 481 482 asoc = ulpq->asoc; 483 if (pd_first) { 484 /* Make sure we can enter partial deliver. 485 * We can trigger partial delivery only if framgent 486 * interleave is set, or the socket is not already 487 * in partial delivery. --- 63 unchanged lines hidden (view full) --- 551 first_frag = pos; 552 else if (ctsn != next_tsn) 553 goto done; 554 last_frag = pos; 555 is_last = 1; 556 goto done; 557 default: 558 return NULL; |
559 }; | 559 } |
560 } 561 562 /* We have the reassembled event. There is no need to look 563 * further. 564 */ 565done: 566 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag); 567 if (retval && is_last) --- 75 unchanged lines hidden (view full) --- 643 if (ctsn == next_tsn) { 644 next_tsn++; 645 last_frag = pos; 646 } else 647 goto done; 648 break; 649 default: 650 return NULL; | 560 } 561 562 /* We have the reassembled event. There is no need to look 563 * further. 564 */ 565done: 566 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag); 567 if (retval && is_last) --- 75 unchanged lines hidden (view full) --- 643 if (ctsn == next_tsn) { 644 next_tsn++; 645 last_frag = pos; 646 } else 647 goto done; 648 break; 649 default: 650 return NULL; |
651 }; | 651 } |
652 } 653 654 /* We have the reassembled event. There is no need to look 655 * further. 656 */ 657done: 658 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag); 659 return retval; --- 350 unchanged lines hidden --- | 652 } 653 654 /* We have the reassembled event. There is no need to look 655 * further. 656 */ 657done: 658 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag); 659 return retval; --- 350 unchanged lines hidden --- |