1
- #ifdef USE_DPDK
2
-
3
1
// GCOVR_EXCL_START
4
2
5
- # define LOG_MODULE PcapLogModuleDpdkDevice
6
-
7
- # define __STDC_LIMIT_MACROS
8
- # define __STDC_FORMAT_MACROS
9
-
10
- # include " DpdkDevice.h"
11
- # include " DpdkDeviceList.h"
12
- # include " Logger.h"
13
- # include " rte_version.h"
14
- # if (RTE_VER_YEAR > 17) || (RTE_VER_YEAR == 17 && RTE_VER_MONTH >= 11)
15
- # include " rte_bus_pci.h"
16
- # endif
17
- # include " rte_pci.h"
18
- # include " rte_config.h"
19
- # include " rte_ethdev.h"
20
- # include " rte_errno.h"
21
- # include " rte_malloc.h"
22
- # include " rte_cycles.h"
23
- # include < string>
24
- # include < stdint.h>
25
- # include < unistd.h>
26
-
27
- # define MAX_BURST_SIZE 64
28
-
29
- # define MEMPOOL_CACHE_SIZE 256
30
-
31
- # if (RTE_VER_YEAR < 21) || (RTE_VER_YEAR == 21 && RTE_VER_MONTH < 11)
32
- # define GET_MASTER_CORE rte_get_master_lcore
33
- # else
34
- # define GET_MASTER_CORE rte_get_main_lcore
35
- # endif
3
+ #define LOG_MODULE PcapLogModuleDpdkDevice
4
+
5
+ #define __STDC_LIMIT_MACROS
6
+ #define __STDC_FORMAT_MACROS
7
+
8
+ #include " DpdkDevice.h"
9
+ #include " DpdkDeviceList.h"
10
+ #include " Logger.h"
11
+ #include " rte_version.h"
12
+ #if (RTE_VER_YEAR > 17) || (RTE_VER_YEAR == 17 && RTE_VER_MONTH >= 11)
13
+ # include " rte_bus_pci.h"
14
+ #endif
15
+ #include " rte_pci.h"
16
+ #include " rte_config.h"
17
+ #include " rte_ethdev.h"
18
+ #include " rte_errno.h"
19
+ #include " rte_malloc.h"
20
+ #include " rte_cycles.h"
21
+ #include < string>
22
+ #include < stdint.h>
23
+ #include < unistd.h>
24
+
25
+ #define MAX_BURST_SIZE 64
26
+
27
+ #define MEMPOOL_CACHE_SIZE 256
28
+
29
+ #if (RTE_VER_YEAR < 21) || (RTE_VER_YEAR == 21 && RTE_VER_MONTH < 11)
30
+ # define GET_MASTER_CORE rte_get_master_lcore
31
+ #else
32
+ # define GET_MASTER_CORE rte_get_main_lcore
33
+ #endif
36
34
37
35
namespace pcpp
38
36
{
@@ -43,65 +41,65 @@ namespace pcpp
43
41
* ================
44
42
*/
45
43
46
- # define DPDK_CONFIG_HEADER_SPLIT 0 /* *< Header Split disabled */
47
- # define DPDK_CONFIG_SPLIT_HEADER_SIZE 0
48
- # define DPDK_CONFIG_HW_IP_CHECKSUM 0 /* *< IP checksum offload disabled */
49
- # define DPDK_CONFIG_HW_VLAN_FILTER 0 /* *< VLAN filtering disabled */
50
- # define DPDK_CONFIG_JUMBO_FRAME 0 /* *< Jumbo Frame Support disabled */
51
- # define DPDK_CONFIG_HW_STRIP_CRC 0 /* *< CRC stripped by hardware disabled */
52
- # if (RTE_VER_YEAR < 21) || (RTE_VER_YEAR == 21 && RTE_VER_MONTH < 11)
53
- # define DPDK_CONFIG_ETH_LINK_FULL_DUPLEX ETH_LINK_FULL_DUPLEX
54
- # define DPDK_CONFIG_MQ_RSS ETH_RSS
55
- # define DPDK_CONFIG_MQ_NO_RSS ETH_MQ_RX_NONE
56
- # else
57
- # define DPDK_CONFIG_ETH_LINK_FULL_DUPLEX RTE_ETH_LINK_FULL_DUPLEX
58
- # define DPDK_CONFIG_MQ_RSS RTE_ETH_MQ_RX_RSS
59
- # define DPDK_CONFIG_MQ_NO_RSS RTE_ETH_MQ_RX_NONE
60
- # endif
61
-
62
- # if (RTE_VER_YEAR < 22) || (RTE_VER_YEAR == 22 && RTE_VER_MONTH < 11)
63
- # define DPDK_CONFIG_ETH_RSS_IPV4 ETH_RSS_IPV4
64
- # define DPDK_CONFIG_ETH_RSS_FRAG_IPV4 ETH_RSS_FRAG_IPV4
65
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_TCP ETH_RSS_NONFRAG_IPV4_TCP
66
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_UDP ETH_RSS_NONFRAG_IPV4_UDP
67
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_SCTP ETH_RSS_NONFRAG_IPV4_SCTP
68
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_OTHER ETH_RSS_NONFRAG_IPV4_OTHER
69
- # define DPDK_CONFIG_ETH_RSS_IPV6 ETH_RSS_IPV6
70
- # define DPDK_CONFIG_ETH_RSS_FRAG_IPV6 ETH_RSS_FRAG_IPV6
71
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_TCP ETH_RSS_NONFRAG_IPV6_TCP
72
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_UDP ETH_RSS_NONFRAG_IPV6_UDP
73
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_SCTP ETH_RSS_NONFRAG_IPV6_SCTP
74
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_OTHER ETH_RSS_NONFRAG_IPV6_OTHER
75
- # define DPDK_CONFIG_ETH_RSS_L2_PAYLOAD ETH_RSS_L2_PAYLOAD
76
- # define DPDK_CONFIG_ETH_RSS_IPV6_EX ETH_RSS_IPV6_EX
77
- # define DPDK_CONFIG_ETH_RSS_IPV6_TCP_EX ETH_RSS_IPV6_TCP_EX
78
- # define DPDK_CONFIG_ETH_RSS_IPV6_UDP_EX ETH_RSS_IPV6_UDP_EX
79
- # define DPDK_CONFIG_ETH_RSS_PORT ETH_RSS_PORT
80
- # define DPDK_CONFIG_ETH_RSS_VXLAN ETH_RSS_VXLAN
81
- # define DPDK_CONFIG_ETH_RSS_GENEVE ETH_RSS_GENEVE
82
- # define DPDK_CONFIG_ETH_RSS_NVGRE ETH_RSS_NVGRE
83
- # else
84
- # define DPDK_CONFIG_ETH_RSS_IPV4 RTE_ETH_RSS_IPV4
85
- # define DPDK_CONFIG_ETH_RSS_FRAG_IPV4 RTE_ETH_RSS_FRAG_IPV4
86
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_TCP RTE_ETH_RSS_NONFRAG_IPV4_TCP
87
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_UDP RTE_ETH_RSS_NONFRAG_IPV4_UDP
88
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_SCTP RTE_ETH_RSS_NONFRAG_IPV4_SCTP
89
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_OTHER RTE_ETH_RSS_NONFRAG_IPV4_OTHER
90
- # define DPDK_CONFIG_ETH_RSS_IPV6 RTE_ETH_RSS_IPV6
91
- # define DPDK_CONFIG_ETH_RSS_FRAG_IPV6 RTE_ETH_RSS_FRAG_IPV6
92
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_TCP RTE_ETH_RSS_NONFRAG_IPV6_TCP
93
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_UDP RTE_ETH_RSS_NONFRAG_IPV6_UDP
94
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_SCTP RTE_ETH_RSS_NONFRAG_IPV6_SCTP
95
- # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_OTHER RTE_ETH_RSS_NONFRAG_IPV6_OTHER
96
- # define DPDK_CONFIG_ETH_RSS_L2_PAYLOAD RTE_ETH_RSS_L2_PAYLOAD
97
- # define DPDK_CONFIG_ETH_RSS_IPV6_EX RTE_ETH_RSS_IPV6_EX
98
- # define DPDK_CONFIG_ETH_RSS_IPV6_TCP_EX RTE_ETH_RSS_IPV6_TCP_EX
99
- # define DPDK_CONFIG_ETH_RSS_IPV6_UDP_EX RTE_ETH_RSS_IPV6_UDP_EX
100
- # define DPDK_CONFIG_ETH_RSS_PORT RTE_ETH_RSS_PORT
101
- # define DPDK_CONFIG_ETH_RSS_VXLAN RTE_ETH_RSS_VXLAN
102
- # define DPDK_CONFIG_ETH_RSS_GENEVE RTE_ETH_RSS_GENEVE
103
- # define DPDK_CONFIG_ETH_RSS_NVGRE RTE_ETH_RSS_NVGRE
104
- # endif
44
+ #define DPDK_CONFIG_HEADER_SPLIT 0 /* *< Header Split disabled */
45
+ #define DPDK_CONFIG_SPLIT_HEADER_SIZE 0
46
+ #define DPDK_CONFIG_HW_IP_CHECKSUM 0 /* *< IP checksum offload disabled */
47
+ #define DPDK_CONFIG_HW_VLAN_FILTER 0 /* *< VLAN filtering disabled */
48
+ #define DPDK_CONFIG_JUMBO_FRAME 0 /* *< Jumbo Frame Support disabled */
49
+ #define DPDK_CONFIG_HW_STRIP_CRC 0 /* *< CRC stripped by hardware disabled */
50
+ #if (RTE_VER_YEAR < 21) || (RTE_VER_YEAR == 21 && RTE_VER_MONTH < 11)
51
+ # define DPDK_CONFIG_ETH_LINK_FULL_DUPLEX ETH_LINK_FULL_DUPLEX
52
+ # define DPDK_CONFIG_MQ_RSS ETH_RSS
53
+ # define DPDK_CONFIG_MQ_NO_RSS ETH_MQ_RX_NONE
54
+ #else
55
+ # define DPDK_CONFIG_ETH_LINK_FULL_DUPLEX RTE_ETH_LINK_FULL_DUPLEX
56
+ # define DPDK_CONFIG_MQ_RSS RTE_ETH_MQ_RX_RSS
57
+ # define DPDK_CONFIG_MQ_NO_RSS RTE_ETH_MQ_RX_NONE
58
+ #endif
59
+
60
+ #if (RTE_VER_YEAR < 22) || (RTE_VER_YEAR == 22 && RTE_VER_MONTH < 11)
61
+ # define DPDK_CONFIG_ETH_RSS_IPV4 ETH_RSS_IPV4
62
+ # define DPDK_CONFIG_ETH_RSS_FRAG_IPV4 ETH_RSS_FRAG_IPV4
63
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_TCP ETH_RSS_NONFRAG_IPV4_TCP
64
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_UDP ETH_RSS_NONFRAG_IPV4_UDP
65
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_SCTP ETH_RSS_NONFRAG_IPV4_SCTP
66
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_OTHER ETH_RSS_NONFRAG_IPV4_OTHER
67
+ # define DPDK_CONFIG_ETH_RSS_IPV6 ETH_RSS_IPV6
68
+ # define DPDK_CONFIG_ETH_RSS_FRAG_IPV6 ETH_RSS_FRAG_IPV6
69
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_TCP ETH_RSS_NONFRAG_IPV6_TCP
70
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_UDP ETH_RSS_NONFRAG_IPV6_UDP
71
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_SCTP ETH_RSS_NONFRAG_IPV6_SCTP
72
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_OTHER ETH_RSS_NONFRAG_IPV6_OTHER
73
+ # define DPDK_CONFIG_ETH_RSS_L2_PAYLOAD ETH_RSS_L2_PAYLOAD
74
+ # define DPDK_CONFIG_ETH_RSS_IPV6_EX ETH_RSS_IPV6_EX
75
+ # define DPDK_CONFIG_ETH_RSS_IPV6_TCP_EX ETH_RSS_IPV6_TCP_EX
76
+ # define DPDK_CONFIG_ETH_RSS_IPV6_UDP_EX ETH_RSS_IPV6_UDP_EX
77
+ # define DPDK_CONFIG_ETH_RSS_PORT ETH_RSS_PORT
78
+ # define DPDK_CONFIG_ETH_RSS_VXLAN ETH_RSS_VXLAN
79
+ # define DPDK_CONFIG_ETH_RSS_GENEVE ETH_RSS_GENEVE
80
+ # define DPDK_CONFIG_ETH_RSS_NVGRE ETH_RSS_NVGRE
81
+ #else
82
+ # define DPDK_CONFIG_ETH_RSS_IPV4 RTE_ETH_RSS_IPV4
83
+ # define DPDK_CONFIG_ETH_RSS_FRAG_IPV4 RTE_ETH_RSS_FRAG_IPV4
84
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_TCP RTE_ETH_RSS_NONFRAG_IPV4_TCP
85
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_UDP RTE_ETH_RSS_NONFRAG_IPV4_UDP
86
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_SCTP RTE_ETH_RSS_NONFRAG_IPV4_SCTP
87
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV4_OTHER RTE_ETH_RSS_NONFRAG_IPV4_OTHER
88
+ # define DPDK_CONFIG_ETH_RSS_IPV6 RTE_ETH_RSS_IPV6
89
+ # define DPDK_CONFIG_ETH_RSS_FRAG_IPV6 RTE_ETH_RSS_FRAG_IPV6
90
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_TCP RTE_ETH_RSS_NONFRAG_IPV6_TCP
91
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_UDP RTE_ETH_RSS_NONFRAG_IPV6_UDP
92
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_SCTP RTE_ETH_RSS_NONFRAG_IPV6_SCTP
93
+ # define DPDK_CONFIG_ETH_RSS_NONFRAG_IPV6_OTHER RTE_ETH_RSS_NONFRAG_IPV6_OTHER
94
+ # define DPDK_CONFIG_ETH_RSS_L2_PAYLOAD RTE_ETH_RSS_L2_PAYLOAD
95
+ # define DPDK_CONFIG_ETH_RSS_IPV6_EX RTE_ETH_RSS_IPV6_EX
96
+ # define DPDK_CONFIG_ETH_RSS_IPV6_TCP_EX RTE_ETH_RSS_IPV6_TCP_EX
97
+ # define DPDK_CONFIG_ETH_RSS_IPV6_UDP_EX RTE_ETH_RSS_IPV6_UDP_EX
98
+ # define DPDK_CONFIG_ETH_RSS_PORT RTE_ETH_RSS_PORT
99
+ # define DPDK_CONFIG_ETH_RSS_VXLAN RTE_ETH_RSS_VXLAN
100
+ # define DPDK_CONFIG_ETH_RSS_GENEVE RTE_ETH_RSS_GENEVE
101
+ # define DPDK_CONFIG_ETH_RSS_NVGRE RTE_ETH_RSS_NVGRE
102
+ #endif
105
103
106
104
// RSS random key:
107
105
uint8_t DpdkDevice::m_RSSKey[40 ] = {
@@ -119,11 +117,11 @@ namespace pcpp
119
117
m_DeviceName = deviceNameStream.str ();
120
118
m_DeviceSocketId = rte_eth_dev_socket_id (m_Id);
121
119
122
- # if (RTE_VER_YEAR > 19) || (RTE_VER_YEAR == 19 && RTE_VER_MONTH >= 8)
120
+ #if (RTE_VER_YEAR > 19) || (RTE_VER_YEAR == 19 && RTE_VER_MONTH >= 8)
123
121
struct rte_ether_addr etherAddr;
124
- # else
122
+ #else
125
123
struct ether_addr etherAddr;
126
- # endif
124
+ #endif
127
125
rte_eth_macaddr_get ((uint8_t )m_Id, ðerAddr);
128
126
m_MacAddress = MacAddress (etherAddr.addr_bytes [0 ], etherAddr.addr_bytes [1 ], etherAddr.addr_bytes [2 ],
129
127
etherAddr.addr_bytes [3 ], etherAddr.addr_bytes [4 ], etherAddr.addr_bytes [5 ]);
@@ -309,16 +307,16 @@ namespace pcpp
309
307
310
308
struct rte_eth_conf portConf;
311
309
memset (&portConf, 0 , sizeof (rte_eth_conf));
312
- # if (RTE_VER_YEAR < 22) || (RTE_VER_YEAR == 22 && RTE_VER_MONTH < 11)
310
+ #if (RTE_VER_YEAR < 22) || (RTE_VER_YEAR == 22 && RTE_VER_MONTH < 11)
313
311
portConf.rxmode .split_hdr_size = DPDK_CONFIG_SPLIT_HEADER_SIZE;
314
- # endif
315
- # if (RTE_VER_YEAR < 18) || (RTE_VER_YEAR == 18 && RTE_VER_MONTH < 8)
312
+ #endif
313
+ #if (RTE_VER_YEAR < 18) || (RTE_VER_YEAR == 18 && RTE_VER_MONTH < 8)
316
314
portConf.rxmode .header_split = DPDK_CONFIG_HEADER_SPLIT;
317
315
portConf.rxmode .hw_ip_checksum = DPDK_CONFIG_HW_IP_CHECKSUM;
318
316
portConf.rxmode .hw_vlan_filter = DPDK_CONFIG_HW_VLAN_FILTER;
319
317
portConf.rxmode .jumbo_frame = DPDK_CONFIG_JUMBO_FRAME;
320
318
portConf.rxmode .hw_strip_crc = DPDK_CONFIG_HW_STRIP_CRC;
321
- # endif
319
+ #endif
322
320
// Enable RSS only if hardware supports it and the user wants to use it
323
321
if (m_Config.rssHashFunction == RSS_NONE)
324
322
{
@@ -545,19 +543,19 @@ namespace pcpp
545
543
else
546
544
m_PMDType = PMD_UNKNOWN;
547
545
548
- # if (RTE_VER_YEAR < 18) || (RTE_VER_YEAR == 18 && RTE_VER_MONTH < 5) // before 18.05
546
+ #if (RTE_VER_YEAR < 18) || (RTE_VER_YEAR == 18 && RTE_VER_MONTH < 5) // before 18.05
549
547
char pciName[30 ];
550
- # if (RTE_VER_YEAR > 17) || (RTE_VER_YEAR == 17 && RTE_VER_MONTH >= 11) // 17.11 - 18.02
548
+ # if (RTE_VER_YEAR > 17) || (RTE_VER_YEAR == 17 && RTE_VER_MONTH >= 11) // 17.11 - 18.02
551
549
rte_pci_device_name (&(portInfo.pci_dev ->addr ), pciName, 30 );
552
- # else // 16.11 - 17.11
550
+ # else // 16.11 - 17.11
553
551
rte_eal_pci_device_name (&(portInfo.pci_dev ->addr ), pciName, 30 );
554
- # endif
552
+ # endif
555
553
m_PciAddress = std::string (pciName);
556
- # elif (RTE_VER_YEAR < 22) || (RTE_VER_YEAR == 22 && RTE_VER_MONTH < 11) // before 22.11
554
+ #elif (RTE_VER_YEAR < 22) || (RTE_VER_YEAR == 22 && RTE_VER_MONTH < 11) // before 22.11
557
555
m_PciAddress = std::string (portInfo.device ->name );
558
- # else // 22.11 forward
556
+ #else // 22.11 forward
559
557
m_PciAddress = std::string (rte_dev_name (portInfo.device ));
560
- # endif
558
+ #endif
561
559
562
560
PCPP_LOG_DEBUG (" Device [" << m_DeviceName << " ] has " << portInfo.max_rx_queues << " RX queues" );
563
561
PCPP_LOG_DEBUG (" Device [" << m_DeviceName << " ] has " << portInfo.max_tx_queues << " TX queues" );
@@ -788,7 +786,7 @@ namespace pcpp
788
786
return 0 ;
789
787
}
790
788
791
- # define nanosec_gap (begin, end ) ((end.tv_sec - begin.tv_sec) * 1000000000.0 + (end.tv_nsec - begin.tv_nsec))
789
+ #define nanosec_gap (begin, end ) ((end.tv_sec - begin.tv_sec) * 1000000000.0 + (end.tv_nsec - begin.tv_nsec))
792
790
793
791
void DpdkDevice::getStatistics (DpdkDeviceStats& stats) const
794
792
{
@@ -1066,7 +1064,7 @@ namespace pcpp
1066
1064
uint16_t packetsSent = 0 ;
1067
1065
int lastSleep = 0 ;
1068
1066
1069
- # define PACKET_TRANSMISSION_THRESHOLD 0.8
1067
+ #define PACKET_TRANSMISSION_THRESHOLD 0.8
1070
1068
int packetTxThreshold = m_Config.transmitDescriptorsNumber * PACKET_TRANSMISSION_THRESHOLD;
1071
1069
1072
1070
while (packetIndex < arrLength)
@@ -1541,5 +1539,3 @@ namespace pcpp
1541
1539
} // namespace pcpp
1542
1540
1543
1541
// GCOVR_EXCL_STOP
1544
-
1545
- #endif /* USE_DPDK */
0 commit comments