Lines Matching refs:m_head

743  * NOTE: If this function failed, the m_head would be freed.
746 hn_tso_fixup(struct mbuf *m_head)
752 KASSERT(M_WRITABLE(m_head), ("TSO mbuf not writable"));
754 PULLUP_HDR(m_head, sizeof(*evl));
755 evl = mtod(m_head, struct ether_vlan_header *);
760 m_head->m_pkthdr.l2hlen = ehlen;
763 if (m_head->m_pkthdr.csum_flags & CSUM_IP_TSO) {
767 PULLUP_HDR(m_head, ehlen + sizeof(*ip));
768 ip = mtodo(m_head, ehlen);
770 m_head->m_pkthdr.l3hlen = iphlen;
772 PULLUP_HDR(m_head, ehlen + iphlen + sizeof(*th));
773 th = mtodo(m_head, ehlen + iphlen);
788 PULLUP_HDR(m_head, ehlen + sizeof(*ip6));
789 ip6 = mtodo(m_head, ehlen);
791 m_freem(m_head);
794 m_head->m_pkthdr.l3hlen = sizeof(*ip6);
796 PULLUP_HDR(m_head, ehlen + sizeof(*ip6) + sizeof(*th));
797 th = mtodo(m_head, ehlen + sizeof(*ip6));
803 return (m_head);
807 * NOTE: If this function failed, the m_head would be freed.
810 hn_set_hlen(struct mbuf *m_head)
815 PULLUP_HDR(m_head, sizeof(*evl));
816 evl = mtod(m_head, const struct ether_vlan_header *);
821 m_head->m_pkthdr.l2hlen = ehlen;
824 if (m_head->m_pkthdr.csum_flags & (CSUM_IP_TCP | CSUM_IP_UDP)) {
828 PULLUP_HDR(m_head, ehlen + sizeof(*ip));
829 ip = mtodo(m_head, ehlen);
831 m_head->m_pkthdr.l3hlen = iphlen;
841 if ((m_head->m_pkthdr.csum_flags & CSUM_IP_UDP) &&
842 m_head->m_pkthdr.len > hn_udpcs_fixup_mtu + ehlen &&
847 PULLUP_HDR(m_head, off + sizeof(struct udphdr));
848 *(uint16_t *)(m_head->m_data + off +
849 m_head->m_pkthdr.csum_data) = in_cksum_skip(
850 m_head, m_head->m_pkthdr.len, off);
851 m_head->m_pkthdr.csum_flags &= ~CSUM_IP_UDP;
862 PULLUP_HDR(m_head, ehlen + sizeof(*ip6));
863 ip6 = mtodo(m_head, ehlen);
866 m_freem(m_head);
869 m_head->m_pkthdr.l3hlen = sizeof(*ip6);
872 return (m_head);
876 * NOTE: If this function failed, the m_head would be freed.
879 hn_check_tcpsyn(struct mbuf *m_head, int *tcpsyn)
885 ehlen = m_head->m_pkthdr.l2hlen;
886 iphlen = m_head->m_pkthdr.l3hlen;
888 PULLUP_HDR(m_head, ehlen + iphlen + sizeof(*th));
889 th = mtodo(m_head, ehlen + iphlen);
892 return (m_head);
2645 struct mbuf **m_head, bus_dma_segment_t *segs, int *nsegs)
2647 struct mbuf *m = *m_head;
2661 *m_head = m = m_new;
3040 struct mbuf *m_head = *m_head0;
3047 pkt_size = HN_PKTSIZE(m_head, txr->hn_agg_align);
3058 pkt->rm_len = m_head->m_pkthdr.len;
3060 pkt->rm_datalen = m_head->m_pkthdr.len;
3080 if (m_head->m_flags & M_VLANTAG) {
3084 EVL_VLANOFTAG(m_head->m_pkthdr.ether_vtag),
3085 EVL_PRIOFTAG(m_head->m_pkthdr.ether_vtag),
3086 EVL_CFIOFTAG(m_head->m_pkthdr.ether_vtag));
3089 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
3094 if (m_head->m_pkthdr.csum_flags & CSUM_IP_TSO) {
3096 m_head->m_pkthdr.l2hlen + m_head->m_pkthdr.l3hlen,
3097 m_head->m_pkthdr.tso_segsz);
3106 m_head->m_pkthdr.l2hlen + m_head->m_pkthdr.l3hlen,
3107 m_head->m_pkthdr.tso_segsz);
3111 } else if (m_head->m_pkthdr.csum_flags & txr->hn_csum_assist) {
3114 if (m_head->m_pkthdr.csum_flags &
3119 if (m_head->m_pkthdr.csum_flags & CSUM_IP)
3123 if (m_head->m_pkthdr.csum_flags &
3126 m_head->m_pkthdr.l2hlen + m_head->m_pkthdr.l3hlen);
3127 } else if (m_head->m_pkthdr.csum_flags &
3130 m_head->m_pkthdr.l2hlen + m_head->m_pkthdr.l3hlen);
3160 m_copydata(m_head, 0, m_head->m_pkthdr.len,
3173 error = hn_txdesc_dmamap_load(txr, txd, &m_head, segs, &nsegs);
3180 m_freem(m_head);
3191 *m_head0 = m_head;
3217 txd->m = m_head;
3224 txr->hn_stat_size += m_head->m_pkthdr.len;
3225 if (m_head->m_flags & M_MCAST)
5684 struct mbuf *m_head;
5687 IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
5688 if (m_head == NULL)
5691 if (len > 0 && m_head->m_pkthdr.len > len) {
5697 IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
5703 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
5704 m_head = hn_tso_fixup(m_head);
5705 if (__predict_false(m_head == NULL)) {
5709 } else if (m_head->m_pkthdr.csum_flags &
5711 m_head = hn_set_hlen(m_head);
5712 if (__predict_false(m_head == NULL)) {
5722 IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
5727 error = hn_encap(ifp, txr, txd, &m_head);
5729 /* Both txd and m_head are freed */
5737 KASSERT(m_head == NULL,
5746 KASSERT(m_head != NULL, ("mbuf was freed"));
5749 /* txd is freed, but m_head is not */
5750 IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
5761 KASSERT(m_head == NULL,
5846 struct mbuf *m_head;
5862 while ((m_head = drbr_peek(ifp, txr->hn_mbuf_br)) != NULL) {
5866 if (len > 0 && m_head->m_pkthdr.len > len) {
5872 drbr_putback(ifp, txr->hn_mbuf_br, m_head);
5880 drbr_putback(ifp, txr->hn_mbuf_br, m_head);
5885 error = hn_encap(ifp, txr, txd, &m_head);
5887 /* Both txd and m_head are freed; discard */
5896 KASSERT(m_head == NULL,
5904 KASSERT(m_head != NULL, ("mbuf was freed"));
5907 /* txd is freed, but m_head is not */
5909 m_head);
5919 KASSERT(m_head == NULL,