Index: sys/netinet/tcp_lro.c =================================================================== --- sys/netinet/tcp_lro.c +++ sys/netinet/tcp_lro.c @@ -1350,6 +1350,8 @@ &cmp, &mv_to, &should_wake, bpf_req ) == false) { /* Advance to next mbuf. */ pp = &(*pp)->m_nextpkt; + /* Forget any compressed ack packet we were filling */ + cmp = NULL; } else if (mv_to != NULL) { /* We are asked to move pp up */ pp = &mv_to->m_nextpkt; @@ -1948,7 +1950,13 @@ m_freem(mb); return; } - + /* Get a more accurate view of when the packet arrived if hdwr tstmp is lacking */ + if ((tcplro_stacks_wanting_mbufq != 0) && + ((mb->m_flags & (M_TSTMP_LRO | M_TSTMP)) == 0)) { + binuptime(&lc->lro_last_queue_time); + mb->m_pkthdr.rcv_tstmp = bintime2ns(&lc->lro_last_queue_time); + mb->m_flags |= M_TSTMP_LRO; + } /* check if packet is not LRO capable */ if (__predict_false((lc->ifp->if_capenable & IFCAP_LRO) == 0)) { /* input packet to network layer */