net/pcap: switch Rx timestamp to dynamic mbuf field
[dpdk.git] / drivers / net / pcap / rte_eth_pcap.c
index 34e8231..4e6d493 100644 (file)
@@ -51,6 +51,9 @@ static uint64_t start_cycles;
 static uint64_t hz;
 static uint8_t iface_idx;
 
+static uint64_t timestamp_rx_dynflag;
+static int timestamp_dynfield_offset = -1;
+
 struct queue_stat {
        volatile unsigned long pkts;
        volatile unsigned long bytes;
@@ -265,9 +268,11 @@ eth_pcap_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                }
 
                mbuf->pkt_len = (uint16_t)header.caplen;
-               mbuf->timestamp = (uint64_t)header.ts.tv_sec * 1000000
-                                                       + header.ts.tv_usec;
-               mbuf->ol_flags |= PKT_RX_TIMESTAMP;
+               *RTE_MBUF_DYNFIELD(mbuf, timestamp_dynfield_offset,
+                       rte_mbuf_timestamp_t *) =
+                               (uint64_t)header.ts.tv_sec * 1000000 +
+                               header.ts.tv_usec;
+               mbuf->ol_flags |= timestamp_rx_dynflag;
                mbuf->port = pcap_q->port_id;
                bufs[num_rx] = mbuf;
                num_rx++;
@@ -656,6 +661,15 @@ status_down:
 static int
 eth_dev_configure(struct rte_eth_dev *dev __rte_unused)
 {
+       int ret;
+
+       ret = rte_mbuf_dyn_rx_timestamp_register(&timestamp_dynfield_offset,
+                       &timestamp_rx_dynflag);
+       if (ret != 0) {
+               PMD_LOG(ERR, "Failed to register Rx timestamp field/flag");
+               return -rte_errno;
+       }
+
        return 0;
 }