DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
DpdkTxBackend.cpp
Go to the documentation of this file.
1
9
10#include <rte_ethdev.h>
11#include <rte_ether.h>
12#include <rte_ip.h>
13#include <rte_mbuf.h>
14#include <rte_udp.h>
15
16#include <cstddef>
17#include <cstdint>
18
20
21void*
23{
24 return rte_pktmbuf_alloc(pool);
25}
26
27std::uint8_t* // NOLINT(build/unsigned)
28DpdkTxBackend::prepare(void* buf, std::size_t bytes)
29{
30 auto* mbuf = static_cast<rte_mbuf*>(buf);
31 char* dst = rte_pktmbuf_append(mbuf, static_cast<std::uint16_t>(bytes)); // NOLINT(build/unsigned)
32 if (dst == nullptr) {
33 return nullptr;
34 }
35 mbuf->l2_len = static_cast<std::uint16_t>(sizeof(rte_ether_hdr)); // NOLINT(build/unsigned)
36 mbuf->l3_len = static_cast<std::uint16_t>(sizeof(rte_ipv4_hdr)); // NOLINT(build/unsigned)
37 mbuf->l4_len = static_cast<std::uint16_t>(sizeof(rte_udp_hdr)); // NOLINT(build/unsigned)
38 return reinterpret_cast<std::uint8_t*>(dst); // NOLINT
39}
40
41bool
43{
44 auto* mbuf = static_cast<rte_mbuf*>(buf);
45 rte_mbuf* one_packet = mbuf;
46 return rte_eth_tx_burst(port, queue, &one_packet, 1) == 1;
47}
48
49void
51{
52 rte_pktmbuf_free(static_cast<rte_mbuf*>(buf));
53}
54
55} // namespace dunedaq::dpdklibs::sender
std::uint8_t * prepare(void *buf, std::size_t bytes)