* filled in in TSO mbuf. Use zero IPID if there is no IPv4 flag.
* If the packet is still IPv4, HW will simply start from zero IPID.
*/
- if (first_m_seg->ol_flags & PKT_TX_IPV4) {
- const struct ipv4_hdr *iphe4;
-
- iphe4 = (const struct ipv4_hdr *)(hdr_addr + iph_off);
- rte_memcpy(&packet_id, &iphe4->packet_id, sizeof(uint16_t));
- packet_id = rte_be_to_cpu_16(packet_id);
- }
+ if (first_m_seg->ol_flags & PKT_TX_IPV4)
+ packet_id = sfc_tso_ip4_get_ipid(hdr_addr, iph_off);
th = (const struct tcp_hdr *)(hdr_addr + tcph_off);
rte_memcpy(&sent_seq, &th->sent_seq, sizeof(uint32_t));
* IPv4 flag. If the packet is still IPv4, HW will simply start from
* zero IPID.
*/
- if (m->ol_flags & PKT_TX_IPV4) {
- const struct ipv4_hdr *iphe4;
-
- iphe4 = (const struct ipv4_hdr *)(tsoh + nh_off);
- rte_memcpy(&packet_id, &iphe4->packet_id, sizeof(uint16_t));
- packet_id = rte_be_to_cpu_16(packet_id);
- }
+ if (m->ol_flags & PKT_TX_IPV4)
+ packet_id = sfc_tso_ip4_get_ipid(tsoh, nh_off);
/* Handle TCP header */
th = (const struct tcp_hdr *)(tsoh + tcph_off);
*/
#define SFC_EF10_TSO_HDR_DESCS_NUM 1
+static inline uint16_t
+sfc_tso_ip4_get_ipid(const uint8_t *pkt_hdrp, size_t ip_hdr_off)
+{
+ const struct ipv4_hdr *ip_hdrp;
+ uint16_t ipid;
+
+ ip_hdrp = (const struct ipv4_hdr *)(pkt_hdrp + ip_hdr_off);
+ rte_memcpy(&ipid, &ip_hdrp->packet_id, sizeof(ipid));
+
+ return rte_be_to_cpu_16(ipid);
+}
+
unsigned int sfc_tso_prepare_header(uint8_t *tsoh, size_t header_len,
struct rte_mbuf **in_seg, size_t *in_off);