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

Function virtqueue_xmit_offload

dpdk/drivers/net/virtio/virtqueue.h:574–617  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

572} while (0)
573
574static inline void
575virtqueue_xmit_offload(struct virtio_net_hdr *hdr, struct rte_mbuf *cookie)
576{
577 uint64_t csum_l4 = cookie->ol_flags & RTE_MBUF_F_TX_L4_MASK;
578 uint16_t o_l23_len = (cookie->ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK) ?
579 cookie->outer_l2_len + cookie->outer_l3_len : 0;
580
581 if (cookie->ol_flags & RTE_MBUF_F_TX_TCP_SEG)
582 csum_l4 |= RTE_MBUF_F_TX_TCP_CKSUM;
583
584 switch (csum_l4) {
585 case RTE_MBUF_F_TX_UDP_CKSUM:
586 hdr->csum_start = o_l23_len + cookie->l2_len + cookie->l3_len;
587 hdr->csum_offset = offsetof(struct rte_udp_hdr, dgram_cksum);
588 hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
589 break;
590
591 case RTE_MBUF_F_TX_TCP_CKSUM:
592 hdr->csum_start = o_l23_len + cookie->l2_len + cookie->l3_len;
593 hdr->csum_offset = offsetof(struct rte_tcp_hdr, cksum);
594 hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
595 break;
596
597 default:
598 ASSIGN_UNLESS_EQUAL(hdr->csum_start, 0);
599 ASSIGN_UNLESS_EQUAL(hdr->csum_offset, 0);
600 ASSIGN_UNLESS_EQUAL(hdr->flags, 0);
601 break;
602 }
603
604 /* TCP Segmentation Offload */
605 if (cookie->ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
606 hdr->gso_type = (cookie->ol_flags & RTE_MBUF_F_TX_IPV6) ?
607 VIRTIO_NET_HDR_GSO_TCPV6 :
608 VIRTIO_NET_HDR_GSO_TCPV4;
609 hdr->gso_size = cookie->tso_segsz;
610 hdr->hdr_len = o_l23_len + cookie->l2_len + cookie->l3_len +
611 cookie->l4_len;
612 } else {
613 ASSIGN_UNLESS_EQUAL(hdr->gso_type, 0);
614 ASSIGN_UNLESS_EQUAL(hdr->gso_size, 0);
615 ASSIGN_UNLESS_EQUAL(hdr->hdr_len, 0);
616 }
617}
618
619static inline void
620virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,

Calls

no outgoing calls

Tested by

no test coverage detected