- /* fill the L4 header */
- raw_pkt = (uint8_t *)buff;
- switch (input->flow_type) {
- case RTE_ETH_FLOW_NONFRAG_IPV4_UDP:
- udp = (struct udp_hdr *)(raw_pkt + len);
- udp->dst_port = input->flow.udp4_flow.dst_port;
- udp->src_port = input->flow.udp4_flow.src_port;
- udp->dgram_len = sizeof(struct udp_hdr);
- len += sizeof(struct udp_hdr);
- /* adjust ip total_length */
- ip->total_length += sizeof(struct udp_hdr);
- params->udp = true;
- break;
- case RTE_ETH_FLOW_NONFRAG_IPV4_TCP:
- tcp = (struct tcp_hdr *)(raw_pkt + len);
- tcp->src_port = input->flow.tcp4_flow.src_port;
- tcp->dst_port = input->flow.tcp4_flow.dst_port;
- tcp->data_off = QEDE_FDIR_TCP_DEFAULT_DATAOFF;
- len += sizeof(struct tcp_hdr);
- /* adjust ip total_length */
- ip->total_length += sizeof(struct tcp_hdr);
- params->tcp = true;
- break;
- case RTE_ETH_FLOW_NONFRAG_IPV6_TCP:
- tcp = (struct tcp_hdr *)(raw_pkt + len);
- tcp->data_off = QEDE_FDIR_TCP_DEFAULT_DATAOFF;
- tcp->src_port = input->flow.udp6_flow.src_port;
- tcp->dst_port = input->flow.udp6_flow.dst_port;
- /* adjust ip total_length */
- len += sizeof(struct tcp_hdr);
- params->tcp = true;
- break;
- case RTE_ETH_FLOW_NONFRAG_IPV6_UDP:
- udp = (struct udp_hdr *)(raw_pkt + len);
- udp->src_port = input->flow.udp6_flow.dst_port;
- udp->dst_port = input->flow.udp6_flow.src_port;
- /* adjust ip total_length */
- len += sizeof(struct udp_hdr);
- params->udp = true;
- break;
- default:
- DP_ERR(edev, "Unsupported flow_type %d\n", input->flow_type);
- return 0;
- }