* Transmit a burst of multi-segments packets. */
| 330 | * Transmit a burst of multi-segments packets. |
| 331 | */ |
| 332 | static bool |
| 333 | pkt_burst_transmit(struct fwd_stream *fs) |
| 334 | { |
| 335 | struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; |
| 336 | struct rte_port *txp; |
| 337 | struct rte_mbuf *pkt; |
| 338 | struct rte_mempool *mbp; |
| 339 | struct rte_ether_hdr eth_hdr; |
| 340 | uint16_t nb_tx; |
| 341 | uint16_t nb_pkt; |
| 342 | uint16_t vlan_tci, vlan_tci_outer; |
| 343 | uint64_t ol_flags = 0; |
| 344 | uint64_t tx_offloads; |
| 345 | |
| 346 | mbp = current_fwd_lcore()->mbp; |
| 347 | txp = &ports[fs->tx_port]; |
| 348 | tx_offloads = txp->dev_conf.txmode.offloads; |
| 349 | vlan_tci = txp->tx_vlan_id; |
| 350 | vlan_tci_outer = txp->tx_vlan_id_outer; |
| 351 | if (tx_offloads & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) |
| 352 | ol_flags = RTE_MBUF_F_TX_VLAN; |
| 353 | if (tx_offloads & RTE_ETH_TX_OFFLOAD_QINQ_INSERT) |
| 354 | ol_flags |= RTE_MBUF_F_TX_QINQ; |
| 355 | if (tx_offloads & RTE_ETH_TX_OFFLOAD_MACSEC_INSERT) |
| 356 | ol_flags |= RTE_MBUF_F_TX_MACSEC; |
| 357 | |
| 358 | /* |
| 359 | * Initialize Ethernet header. |
| 360 | */ |
| 361 | rte_ether_addr_copy(&peer_eth_addrs[fs->peer_addr], ð_hdr.dst_addr); |
| 362 | rte_ether_addr_copy(&ports[fs->tx_port].eth_addr, ð_hdr.src_addr); |
| 363 | eth_hdr.ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); |
| 364 | |
| 365 | if (rte_mempool_get_bulk(mbp, (void **)pkts_burst, |
| 366 | nb_pkt_per_burst) == 0) { |
| 367 | for (nb_pkt = 0; nb_pkt < nb_pkt_per_burst; nb_pkt++) { |
| 368 | if (unlikely(!pkt_burst_prepare(pkts_burst[nb_pkt], mbp, |
| 369 | ð_hdr, vlan_tci, |
| 370 | vlan_tci_outer, |
| 371 | ol_flags, |
| 372 | nb_pkt, fs))) { |
| 373 | rte_mempool_put_bulk(mbp, |
| 374 | (void **)&pkts_burst[nb_pkt], |
| 375 | nb_pkt_per_burst - nb_pkt); |
| 376 | break; |
| 377 | } |
| 378 | } |
| 379 | } else { |
| 380 | for (nb_pkt = 0; nb_pkt < nb_pkt_per_burst; nb_pkt++) { |
| 381 | pkt = rte_mbuf_raw_alloc(mbp); |
| 382 | if (pkt == NULL) |
| 383 | break; |
| 384 | if (unlikely(!pkt_burst_prepare(pkt, mbp, ð_hdr, |
| 385 | vlan_tci, |
| 386 | vlan_tci_outer, |
| 387 | ol_flags, |
| 388 | nb_pkt, fs))) { |
| 389 | rte_pktmbuf_free(pkt); |
nothing calls this directly
no test coverage detected