Lines Matching defs:mbuf
37 #include <sys/mbuf.h>
351 struct mbuf **m_head, struct mana_tx_package *tp,
356 struct mbuf *m = *m_head;
362 struct mbuf *m_new;
374 "Too many segs in orig mbuf, m_collapse called\n");
387 tx_info->mbuf = *m_head;
403 if (tx_info->mbuf) {
404 m_freem(tx_info->mbuf);
405 tx_info->mbuf = NULL;
414 struct mbuf *mbuf;
419 mbuf = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, rxq->datasize);
420 if (unlikely(mbuf == NULL)) {
421 mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
422 if (unlikely(mbuf == NULL)) {
430 mbuf->m_pkthdr.len = mbuf->m_len = mlen;
432 if (rx_oob->mbuf) {
433 mbuf = rx_oob->mbuf;
434 mlen = rx_oob->mbuf->m_pkthdr.len;
441 mbuf, segs, &nsegs, BUS_DMA_NOWAIT);
444 mana_warn(NULL, "Failed to map mbuf, error: %d, "
453 rx_oob->mbuf = mbuf;
462 m_freem(mbuf);
474 if (free_mbuf && rx_oob->mbuf) {
475 m_freem(rx_oob->mbuf);
476 rx_oob->mbuf = NULL;
481 /* Use couple mbuf PH_loc spaces for l3 and l4 protocal type */
493 struct mbuf *mbuf;
514 while ((mbuf = drbr_peek(ndev, txq->txq_br)) != NULL) {
517 drbr_putback(ndev, txq->txq_br, mbuf);
536 drbr_putback(ndev, txq->txq_br, mbuf);
547 err = mana_tx_map_mbuf(apc, tx_info, &mbuf, &pkg, tx_stats);
550 "Failed to map tx mbuf, err %d\n", err);
554 /* The mbuf is still there. Free it */
555 m_freem(mbuf);
583 if (mbuf->m_pkthdr.csum_flags & CSUM_TSO) {
586 if (MANA_L3_PROTO(mbuf) == ETHERTYPE_IP)
593 pkg.tx_oob.s_oob.trans_off = mbuf->m_pkthdr.l3hlen;
595 pkg.wqe_req.client_data_unit = mbuf->m_pkthdr.tso_segsz;
597 } else if (mbuf->m_pkthdr.csum_flags &
599 if (MANA_L3_PROTO(mbuf) == ETHERTYPE_IP) {
606 if (MANA_L4_PROTO(mbuf) == IPPROTO_TCP) {
609 mbuf->m_pkthdr.l3hlen;
613 } else if (mbuf->m_pkthdr.csum_flags & CSUM_IP) {
617 if (MANA_L3_PROTO(mbuf) == ETHERTYPE_IP)
619 else if (MANA_L3_PROTO(mbuf) == ETHERTYPE_IPV6)
623 len = mbuf->m_pkthdr.len;
690 * If this function failed, the mbuf would be freed.
692 static inline struct mbuf *
693 mana_tso_fixup(struct mbuf *mbuf)
695 struct ether_vlan_header *eh = mtod(mbuf, struct ether_vlan_header *);
712 PULLUP_HDR(mbuf, ehlen + sizeof(*ip));
713 ip = mtodo(mbuf, ehlen);
715 mbuf->m_pkthdr.l3hlen = ehlen + iphlen;
717 PULLUP_HDR(mbuf, ehlen + iphlen + sizeof(*th));
718 th = mtodo(mbuf, ehlen + iphlen);
727 PULLUP_HDR(mbuf, ehlen + sizeof(*ip6) + sizeof(*th));
728 ip6 = mtodo(mbuf, ehlen);
731 mana_dbg(NULL, "TSO mbuf not TCP, freed.\n");
732 m_freem(mbuf);
735 mbuf->m_pkthdr.l3hlen = ehlen + sizeof(*ip6);
737 th = mtodo(mbuf, ehlen + sizeof(*ip6));
743 mana_warn(NULL, "TSO mbuf not right, freed.\n");
744 m_freem(mbuf);
748 MANA_L3_PROTO(mbuf) = etype;
750 return (mbuf);
754 * If this function failed, the mbuf would be freed.
756 static inline struct mbuf *
757 mana_mbuf_csum_check(struct mbuf *mbuf)
759 struct ether_vlan_header *eh = mtod(mbuf, struct ether_vlan_header *);
760 struct mbuf *mbuf_next;
773 mbuf_next = m_getptr(mbuf, ehlen, &offset);
775 MANA_L4_PROTO(mbuf) = 0;
782 mbuf->m_pkthdr.l3hlen = ehlen + iphlen;
784 MANA_L4_PROTO(mbuf) = ip->ip_p;
789 mbuf->m_pkthdr.l3hlen = ehlen + sizeof(*ip6);
791 MANA_L4_PROTO(mbuf) = ip6->ip6_nxt;
793 MANA_L4_PROTO(mbuf) = 0;
796 MANA_L3_PROTO(mbuf) = etype;
798 return (mbuf);
802 mana_start_xmit(if_t ifp, struct mbuf *m)
1489 * and still free the mbuf, etc.
1506 if (!tx_info->mbuf) {
1508 "WARNING: txq %d Empty mbuf on tx_info: %u, "
1616 mana_rx_mbuf(struct mbuf *mbuf, struct mana_rxcomp_oob *cqe,
1630 if (!mbuf) {
1634 mbuf->m_flags |= M_PKTHDR;
1635 mbuf->m_pkthdr.len = pkt_len;
1636 mbuf->m_len = pkt_len;
1637 mbuf->m_pkthdr.rcvif = ndev;
1642 mbuf->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
1643 mbuf->m_pkthdr.csum_flags |= CSUM_IP_VALID;
1645 mbuf->m_pkthdr.csum_flags |=
1647 mbuf->m_pkthdr.csum_data = 0xffff;
1655 mbuf->m_pkthdr.flowid = cqe->ppi[0].pkt_hash;
1662 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_TCP_IPV4);
1665 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_UDP_IPV4);
1668 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_IPV4);
1674 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_TCP_IPV6);
1677 M_HASHTYPE_SET(mbuf,
1681 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_UDP_IPV6);
1684 M_HASHTYPE_SET(mbuf,
1688 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_IPV6);
1691 M_HASHTYPE_SET(mbuf, M_HASHTYPE_OPAQUE_HASH);
1694 mbuf->m_pkthdr.flowid = rxq_idx;
1695 M_HASHTYPE_SET(mbuf, M_HASHTYPE_NONE);
1702 tcp_lro_rx(&rxq->lro, mbuf, 0) == 0)
1708 if_input(ndev, mbuf);
1727 struct mbuf *old_mbuf;
1778 old_mbuf = rxbuf_oob->mbuf;
1780 /* Unload DMA map for the old mbuf */
1783 /* Load a new mbuf to replace the old one */
1787 "failed to load rx mbuf, err = %d, packet dropped.\n",
1791 * Failed to load new mbuf, rxbuf_oob->mbuf is still
1795 /* Reload the existing mbuf */
1981 if (txbuf_info->mbuf) {
2222 if (rx_oob->mbuf)
2332 * Minimum size is MCLBYTES(2048) bytes for a mbuf cluster.