DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::dpdklibs::ifaceutils Namespace Reference

Functions

int get_num_available_ifaces ()
 
void iface_conf_rss_mode (struct rte_eth_conf &iface_conf, bool mode=false, bool offload=false)
 
int iface_promiscuous_mode (std::uint16_t iface, bool mode=false)
 
bool iface_valid (uint16_t iface)
 
void hex_digits_to_stream (std::ostringstream &ostrs, int value, char separator=' ', char fill='0', int digits=2)
 
std::string get_iface_mac_str (uint16_t iface)
 
std::string get_iface_pci_str (uint16_t iface)
 
int iface_reset (uint16_t iface)
 

Variables

static volatile uint8_t dpdk_quit_signal
 
static const struct rte_eth_conf iface_conf_default
 

Function Documentation

◆ get_iface_mac_str()

std::string dunedaq::dpdklibs::ifaceutils::get_iface_mac_str ( uint16_t iface)
inline

Definition at line 107 of file RTEIfaceSetup.hpp.

108{
109 int retval = -1;
110 struct rte_ether_addr mac_addr;
111 retval = rte_eth_macaddr_get(iface, &mac_addr);
112 if (retval != 0) {
113 TLOG() << "Failed to get MAC address of interface! Err id: " << retval;
114 return std::string("");
115 } else {
116 std::ostringstream ostrs;
117 hex_digits_to_stream(ostrs, (int)mac_addr.addr_bytes[0], ':');
118 hex_digits_to_stream(ostrs, (int)mac_addr.addr_bytes[1], ':');
119 hex_digits_to_stream(ostrs, (int)mac_addr.addr_bytes[2], ':');
120 hex_digits_to_stream(ostrs, (int)mac_addr.addr_bytes[3], ':');
121 hex_digits_to_stream(ostrs, (int)mac_addr.addr_bytes[4], ':');
122 hex_digits_to_stream(ostrs, (int)mac_addr.addr_bytes[5]);
123 std::string mac_str = ostrs.str();
124 mac_str.erase(std::remove(mac_str.begin(), mac_str.end(), ' '), mac_str.end());
125 return mac_str;
126 }
127}
#define TLOG(...)
Definition macro.hpp:22

◆ get_iface_pci_str()

std::string dunedaq::dpdklibs::ifaceutils::get_iface_pci_str ( uint16_t iface)
inline

Definition at line 130 of file RTEIfaceSetup.hpp.

131{
132 std::string iface_pci_addr_str;
133 int retval = -1;
134 struct rte_eth_dev_info dev_info;
135 // Get interface info
136 retval = rte_eth_dev_info_get(iface, &dev_info);
137 if (retval != 0) {
138 TLOG() << "Error during getting device (iface " << iface << ") retval: " << retval;
139 } else if (dev_info.device) {
140 auto dev_name = rte_dev_name(dev_info.device);
141 iface_pci_addr_str = dev_name;
142 //TLOG() << "Dev name: " << dev_name;
143 //const auto bus = rte_dev_bus(dev_info.device);
144 //const auto bus_info = rte_dev_bus_info(dev_info.device);
145 //const auto dev_driver = rte_dev_driver(dev_info.device);
146 }
147 return iface_pci_addr_str;
148}

◆ get_num_available_ifaces()

int dunedaq::dpdklibs::ifaceutils::get_num_available_ifaces ( )
inline

Definition at line 53 of file RTEIfaceSetup.hpp.

53 {
54 unsigned nb_ifaces = rte_eth_dev_count_avail();
55 TLOG() << "Available interfaces: " << nb_ifaces;
56 return nb_ifaces;
57}

◆ hex_digits_to_stream()

void dunedaq::dpdklibs::ifaceutils::hex_digits_to_stream ( std::ostringstream & ostrs,
int value,
char separator = ' ',
char fill = '0',
int digits = 2 )
inline

Definition at line 101 of file RTEIfaceSetup.hpp.

101 {
102 ostrs << std::setfill(fill) << std::setw(digits) << std::hex << value << std::dec << separator;
103}
static void fill(const ResourceSet &rs, std::vector< const ResourceSetOR * > &rs_or, std::vector< const ResourceSetAND * > &rs_and, TestCircularDependency &cd_fuse)

◆ iface_conf_rss_mode()

void dunedaq::dpdklibs::ifaceutils::iface_conf_rss_mode ( struct rte_eth_conf & iface_conf,
bool mode = false,
bool offload = false )
inline

Definition at line 61 of file RTEIfaceSetup.hpp.

62{
63 if (mode) {
64 iface_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_RSS;
65 if (offload) {
66 iface_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
67 }
68 } else {
69 iface_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
70 }
71}

◆ iface_promiscuous_mode()

int dunedaq::dpdklibs::ifaceutils::iface_promiscuous_mode ( std::uint16_t iface,
bool mode = false )
inline

Definition at line 75 of file RTEIfaceSetup.hpp.

76{
77 int retval = -1;
78 retval = rte_eth_promiscuous_get(iface);
79 TLOG() << "Before modification attempt, promiscuous mode is: " << retval;
80 if (mode) {
81 retval = rte_eth_promiscuous_enable(iface);
82 } else {
83 retval = rte_eth_promiscuous_disable(iface);
84 }
85 if (retval != 0) {
86 TLOG() << "Couldn't modify promiscuous mode of iface[" << iface << "]! Error code: " << retval;
87 }
88 retval = rte_eth_promiscuous_get(iface);
89 TLOG() << "New promiscuous mode of iface[" << iface << "] is: " << retval;
90 return retval;
91}

◆ iface_reset()

int dunedaq::dpdklibs::ifaceutils::iface_reset ( uint16_t iface)
inline

Definition at line 151 of file RTEIfaceSetup.hpp.

152{
153 int retval = -1;
154 struct rte_eth_dev_info dev_info;
155
156 // Get interface validity
157 if (!rte_eth_dev_is_valid_port(iface)) {
158 TLOG() << "Specified interface " << iface << " is not valid in EAL!";
159 return retval;
160 }
161
162 // Carry out a reset of the interface
163 retval = rte_eth_dev_reset(iface);
164 if (retval != 0) {
165 TLOG() << "Error during resetting device (iface " << iface << ") retval: " << retval;
166 return retval;
167 }
168
169 return retval;
170}

◆ iface_valid()

bool dunedaq::dpdklibs::ifaceutils::iface_valid ( uint16_t iface)
inline

Definition at line 95 of file RTEIfaceSetup.hpp.

96{
97 return rte_eth_dev_is_valid_port(iface);
98}

Variable Documentation

◆ dpdk_quit_signal

volatile uint8_t dunedaq::dpdklibs::ifaceutils::dpdk_quit_signal
static

Definition at line 34 of file RTEIfaceSetup.hpp.

◆ iface_conf_default

const struct rte_eth_conf dunedaq::dpdklibs::ifaceutils::iface_conf_default
static
Initial value:
= {
.rxmode = {
.mtu = 9000,
.max_lro_pkt_size = 9000,
.offloads = (RTE_ETH_RX_OFFLOAD_TIMESTAMP
| RTE_ETH_RX_OFFLOAD_IPV4_CKSUM
| RTE_ETH_RX_OFFLOAD_UDP_CKSUM),
},
.txmode = {
.offloads = (RTE_ETH_TX_OFFLOAD_MULTI_SEGS),
},
}

Definition at line 36 of file RTEIfaceSetup.hpp.

36 {
37 .rxmode = {
38 .mtu = 9000,
39 .max_lro_pkt_size = 9000,
40 //.split_hdr_size = 0, // Deprecated in dpdk@22.11
41 .offloads = (RTE_ETH_RX_OFFLOAD_TIMESTAMP
42 | RTE_ETH_RX_OFFLOAD_IPV4_CKSUM
43 | RTE_ETH_RX_OFFLOAD_UDP_CKSUM),
44 },
45
46 .txmode = {
47 .offloads = (RTE_ETH_TX_OFFLOAD_MULTI_SEGS),
48 },
49};