| 186 | } |
| 187 | |
| 188 | static inline bool |
| 189 | pkt_burst_prepare(struct rte_mbuf *pkt, struct rte_mempool *mbp, |
| 190 | struct rte_ether_hdr *eth_hdr, const uint16_t vlan_tci, |
| 191 | const uint16_t vlan_tci_outer, const uint64_t ol_flags, |
| 192 | const uint16_t idx, struct fwd_stream *fs) |
| 193 | { |
| 194 | struct rte_mbuf *pkt_segs[RTE_MAX_SEGS_PER_PKT]; |
| 195 | struct rte_mbuf *pkt_seg; |
| 196 | uint32_t nb_segs, pkt_len; |
| 197 | uint8_t i; |
| 198 | |
| 199 | if (unlikely(tx_pkt_split == TX_PKT_SPLIT_RND)) |
| 200 | nb_segs = rte_rand() % tx_pkt_nb_segs + 1; |
| 201 | else |
| 202 | nb_segs = tx_pkt_nb_segs; |
| 203 | |
| 204 | if (nb_segs > 1) { |
| 205 | if (rte_mempool_get_bulk(mbp, (void **)pkt_segs, nb_segs - 1)) |
| 206 | return false; |
| 207 | } |
| 208 | |
| 209 | rte_pktmbuf_reset_headroom(pkt); |
| 210 | pkt->data_len = tx_pkt_seg_lengths[0]; |
| 211 | pkt->ol_flags &= RTE_MBUF_F_EXTERNAL; |
| 212 | pkt->ol_flags |= ol_flags; |
| 213 | pkt->vlan_tci = vlan_tci; |
| 214 | pkt->vlan_tci_outer = vlan_tci_outer; |
| 215 | pkt->l2_len = sizeof(struct rte_ether_hdr); |
| 216 | pkt->l3_len = sizeof(struct rte_ipv4_hdr); |
| 217 | |
| 218 | pkt_len = pkt->data_len; |
| 219 | pkt_seg = pkt; |
| 220 | for (i = 1; i < nb_segs; i++) { |
| 221 | pkt_seg->next = pkt_segs[i - 1]; |
| 222 | pkt_seg = pkt_seg->next; |
| 223 | pkt_seg->data_len = tx_pkt_seg_lengths[i]; |
| 224 | pkt_len += pkt_seg->data_len; |
| 225 | } |
| 226 | pkt_seg->next = NULL; /* Last segment of packet. */ |
| 227 | /* |
| 228 | * Copy headers in first packet segment(s). |
| 229 | */ |
| 230 | copy_buf_to_pkt(eth_hdr, sizeof(*eth_hdr), pkt, 0); |
| 231 | copy_buf_to_pkt(&pkt_ip_hdr, sizeof(pkt_ip_hdr), pkt, |
| 232 | sizeof(struct rte_ether_hdr)); |
| 233 | copy_buf_to_pkt(&pkt_udp_hdr, sizeof(pkt_udp_hdr), pkt, |
| 234 | sizeof(struct rte_ether_hdr) + |
| 235 | sizeof(struct rte_ipv4_hdr)); |
| 236 | if (txonly_multi_flow) { |
| 237 | uint16_t src_var = RTE_PER_LCORE(_src_port_var); |
| 238 | struct rte_udp_hdr *udp_hdr; |
| 239 | uint16_t src_port; |
| 240 | |
| 241 | udp_hdr = rte_pktmbuf_mtod_offset(pkt, |
| 242 | struct rte_udp_hdr *, |
| 243 | sizeof(struct rte_ether_hdr) + |
| 244 | sizeof(struct rte_ipv4_hdr)); |
| 245 | /* |
no test coverage detected