MCPcopy Create free account
hub / github.com/F-Stack/f-stack / tcp_lro_queue_mbuf

Function tcp_lro_queue_mbuf

freebsd/netinet/tcp_lro.c:1411–1452  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1409}
1410
1411void
1412tcp_lro_queue_mbuf(struct lro_ctrl *lc, struct mbuf *mb)
1413{
1414 struct timespec arrv;
1415
1416 /* sanity checks */
1417 if (__predict_false(lc->ifp == NULL || lc->lro_mbuf_data == NULL ||
1418 lc->lro_mbuf_max == 0)) {
1419 /* packet drop */
1420 m_freem(mb);
1421 return;
1422 }
1423
1424 /* check if packet is not LRO capable */
1425 if (__predict_false(mb->m_pkthdr.csum_flags == 0 ||
1426 (lc->ifp->if_capenable & IFCAP_LRO) == 0)) {
1427 /* input packet to network layer */
1428 (*lc->ifp->if_input) (lc->ifp, mb);
1429 return;
1430 }
1431 /* Arrival Stamp the packet */
1432
1433 if ((mb->m_flags & M_TSTMP) == 0) {
1434 /* If no hardware or arrival stamp on the packet add arrival */
1435 nanouptime(&arrv);
1436 mb->m_pkthdr.rcv_tstmp = ((arrv.tv_sec * 1000000000) +
1437 arrv.tv_nsec);
1438 mb->m_flags |= M_TSTMP_LRO;
1439 }
1440 /* create sequence number */
1441 lc->lro_mbuf_data[lc->lro_mbuf_count].seq =
1442 (((uint64_t)M_HASHTYPE_GET(mb)) << 56) |
1443 (((uint64_t)mb->m_pkthdr.flowid) << 24) |
1444 ((uint64_t)lc->lro_mbuf_count);
1445
1446 /* enter mbuf */
1447 lc->lro_mbuf_data[lc->lro_mbuf_count].mb = mb;
1448
1449 /* flush if array is full */
1450 if (__predict_false(++lc->lro_mbuf_count == lc->lro_mbuf_max))
1451 tcp_lro_flush_all(lc);
1452}
1453
1454/* end */

Callers

nothing calls this directly

Calls 3

nanouptimeFunction · 0.85
tcp_lro_flush_allFunction · 0.85
m_freemFunction · 0.50

Tested by

no test coverage detected