Skip to content

Commit 3515fe2

Browse files
authored
Merge pull request #148 from CESNET/dpdk-version
Dpdk - support nfb driver hw timestamp, update dpdk constants
2 parents 0868e0a + 13f70e4 commit 3515fe2

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

input/dpdk.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,11 @@ struct rte_eth_conf DpdkCore::createPortConfig()
178178
#endif
179179

180180
if (m_supportedRSS) {
181+
#if RTE_VERSION >= RTE_VERSION_NUM(21, 11, 0, 0)
182+
portConfig.rxmode.mq_mode = RTE_ETH_MQ_RX_RSS;
183+
#else
181184
portConfig.rxmode.mq_mode = ETH_MQ_RX_RSS;
185+
#endif
182186
} else {
183187
portConfig.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
184188
}
@@ -215,7 +219,11 @@ void DpdkCore::configureRSS()
215219
struct rte_eth_rss_conf rssConfig = {
216220
.rss_key = rssKey,
217221
.rss_key_len = RSS_KEY_LEN,
222+
#if RTE_VERSION >= RTE_VERSION_NUM(21, 11, 0, 0)
223+
.rss_hf = RTE_ETH_RSS_IP,
224+
#else
218225
.rss_hf = ETH_RSS_IP,
226+
#endif
219227
};
220228

221229
if (rte_eth_dev_rss_hash_update(m_portId, &rssConfig)) {
@@ -344,6 +352,11 @@ int DpdkCore::getRxTimestampOffset()
344352
return m_rxTimestampOffset;
345353
}
346354

355+
int DpdkCore::getRxTimestampDynflag()
356+
{
357+
return RTE_BIT64(rte_mbuf_dynflag_lookup(RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME, NULL));
358+
}
359+
347360
DpdkReader::DpdkReader()
348361
: m_dpdkCore(DpdkCore::getInstance())
349362
{
@@ -362,6 +375,7 @@ void DpdkReader::init(const char* params)
362375
m_rxQueueId = m_dpdkCore.getRxQueueId();
363376
m_portId = m_dpdkCore.parser.port_num();
364377
m_rxTimestampOffset = m_dpdkCore.getRxTimestampOffset();
378+
m_rxTimestampDynflag = m_dpdkCore.getRxTimestampDynflag();
365379
m_useHwRxTimestamp = m_dpdkCore.isNfbDpdkDriver();
366380

367381
createRteMempool(m_dpdkCore.parser.pkt_mempool_size());
@@ -412,7 +426,7 @@ void DpdkReader::setupRxQueue()
412426
struct timeval DpdkReader::getTimestamp(rte_mbuf* mbuf)
413427
{
414428
struct timeval tv;
415-
if (m_useHwRxTimestamp) {
429+
if (m_useHwRxTimestamp && (mbuf->ol_flags & m_rxTimestampDynflag)) {
416430
static constexpr time_t nanosecInSec = 1000000000;
417431
static constexpr time_t nsecInUsec = 1000;
418432

input/dpdk.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,13 @@ class DpdkCore {
136136

137137
int getRxTimestampOffset();
138138

139+
/**
140+
* @brief Get the Rx Timestamp mbuf Dynflag for RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME
141+
*
142+
* @return int RTE_BIT64 value
143+
*/
144+
int getRxTimestampDynflag();
145+
139146
bool isNfbDpdkDriver();
140147

141148
/**
@@ -214,6 +221,7 @@ class DpdkReader : public InputPlugin {
214221
uint16_t m_rxQueueId;
215222
uint16_t m_portId;
216223
int m_rxTimestampOffset;
224+
uint64_t m_rxTimestampDynflag;
217225

218226
bool m_useHwRxTimestamp;
219227

0 commit comments

Comments
 (0)