app/testpmd: switch Rx timestamp to dynamic mbuf field

The mbuf timestamp is moved to a dynamic field
in order to allow removal of the deprecated static field.
The related mbuf flag is also replaced.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: David Marchand <david.marchand@redhat.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
Thomas Monjalon 2020-10-29 09:10:33 +01:00
parent d23d73d088
commit 7a0c64910c

View File

@ -5,6 +5,7 @@
#include <stdio.h>
#include <rte_bitops.h>
#include <rte_net.h>
#include <rte_mbuf.h>
#include <rte_ether.h>
@ -22,6 +23,39 @@ print_ether_addr(const char *what, const struct rte_ether_addr *eth_addr)
printf("%s%s", what, buf);
}
static inline bool
is_timestamp_enabled(const struct rte_mbuf *mbuf)
{
static uint64_t timestamp_rx_dynflag;
int timestamp_rx_dynflag_offset;
if (timestamp_rx_dynflag == 0) {
timestamp_rx_dynflag_offset = rte_mbuf_dynflag_lookup(
RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME, NULL);
if (timestamp_rx_dynflag_offset < 0)
return false;
timestamp_rx_dynflag = RTE_BIT64(timestamp_rx_dynflag_offset);
}
return (mbuf->ol_flags & timestamp_rx_dynflag) != 0;
}
static inline rte_mbuf_timestamp_t
get_timestamp(const struct rte_mbuf *mbuf)
{
static int timestamp_dynfield_offset = -1;
if (timestamp_dynfield_offset < 0) {
timestamp_dynfield_offset = rte_mbuf_dynfield_lookup(
RTE_MBUF_DYNFIELD_TIMESTAMP_NAME, NULL);
if (timestamp_dynfield_offset < 0)
return 0;
}
return *RTE_MBUF_DYNFIELD(mbuf,
timestamp_dynfield_offset, rte_mbuf_timestamp_t *);
}
static inline void
dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
uint16_t nb_pkts, int is_rx)
@ -107,8 +141,8 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
printf("hash=0x%x ID=0x%x ",
mb->hash.fdir.hash, mb->hash.fdir.id);
}
if (ol_flags & PKT_RX_TIMESTAMP)
printf(" - timestamp %"PRIu64" ", mb->timestamp);
if (is_timestamp_enabled(mb))
printf(" - timestamp %"PRIu64" ", get_timestamp(mb));
if (ol_flags & PKT_RX_QINQ)
printf(" - QinQ VLAN tci=0x%x, VLAN tci outer=0x%x",
mb->vlan_tci, mb->vlan_tci_outer);