| 652 | } |
| 653 | |
| 654 | static void |
| 655 | tcp_push_and_replace(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le, struct mbuf *m, int locked) |
| 656 | { |
| 657 | /* |
| 658 | * Push up the stack the current le and replace |
| 659 | * it with m. |
| 660 | */ |
| 661 | struct mbuf *msave; |
| 662 | |
| 663 | /* Grab off the next and save it */ |
| 664 | msave = le->m_head->m_nextpkt; |
| 665 | le->m_head->m_nextpkt = NULL; |
| 666 | /* Now push out the old le entry */ |
| 667 | tcp_flush_out_le(tp, lc, le, locked); |
| 668 | /* |
| 669 | * Now to replace the data properly in the le |
| 670 | * we have to reset the tcp header and |
| 671 | * other fields. |
| 672 | */ |
| 673 | tcp_set_le_to_m(lc, le, m); |
| 674 | /* Restore the next list */ |
| 675 | m->m_nextpkt = msave; |
| 676 | } |
| 677 | |
| 678 | static void |
| 679 | tcp_lro_condense(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le, int locked) |
no test coverage detected