@@ -185,6 +185,7 @@ typedef struct pktio_if_ops {
int (*stats)(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats);
int (*stats_reset)(pktio_entry_t *pktio_entry);
uint64_t (*pktin_ts_res)(pktio_entry_t *pktio_entry);
+ odp_time_t (*pktin_ts_from_ns)(pktio_entry_t *pktio_entry, uint64_t ns);
int (*recv)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[],
unsigned len);
int (*send)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[],
@@ -948,6 +948,23 @@ uint64_t odp_pktin_ts_res(odp_pktio_t id)
return odp_time_global_res();
}
+odp_time_t odp_pktin_ts_from_ns(odp_pktio_t id, uint64_t ns)
+{
+ pktio_entry_t *entry;
+
+ entry = get_pktio_entry(id);
+
+ if (entry == NULL) {
+ ODP_DBG("pktio entry %d does not exist\n", id);
+ return ODP_TIME_NULL;
+ }
+
+ if (entry->s.ops->pktin_ts_from_ns)
+ return entry->s.ops->pktin_ts_from_ns(entry, ns);
+
+ return odp_time_global_from_ns(ns);
+}
+
void odp_pktio_print(odp_pktio_t id)
{
pktio_entry_t *entry;
@@ -928,6 +928,7 @@ const pktio_if_ops_t dpdk_pktio_ops = {
.mac_get = dpdk_mac_addr_get,
.capability = dpdk_capability,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
.input_queues_config = dpdk_input_queues_config,
.output_queues_config = dpdk_output_queues_config
};
@@ -727,4 +727,5 @@ const pktio_if_ops_t ipc_pktio_ops = {
.promisc_mode_get = NULL,
.mac_get = ipc_mac_addr_get,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
};
@@ -185,6 +185,7 @@ const pktio_if_ops_t loopback_pktio_ops = {
.link_status = loopback_link_status,
.capability = NULL,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
.input_queues_config = NULL,
.output_queues_config = NULL,
.recv_queue = NULL,
@@ -862,6 +862,7 @@ const pktio_if_ops_t netmap_pktio_ops = {
.mac_get = netmap_mac_addr_get,
.capability = netmap_capability,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
.input_queues_config = netmap_input_queues_config,
.output_queues_config = netmap_output_queues_config,
.recv_queue = netmap_recv_queue,
@@ -408,6 +408,7 @@ const pktio_if_ops_t pcap_pktio_ops = {
.mac_get = pcapif_mac_addr_get,
.capability = NULL,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
.input_queues_config = NULL,
.output_queues_config = NULL,
.recv_queue = NULL,
@@ -857,6 +857,7 @@ const pktio_if_ops_t sock_mmsg_pktio_ops = {
.link_status = sock_link_status,
.capability = NULL,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
.input_queues_config = NULL,
.output_queues_config = NULL,
.recv_queue = NULL,
@@ -626,6 +626,7 @@ const pktio_if_ops_t sock_mmap_pktio_ops = {
.link_status = sock_mmap_link_status,
.capability = NULL,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
.input_queues_config = NULL,
.output_queues_config = NULL,
.recv_queue = NULL,
@@ -325,4 +325,5 @@ const pktio_if_ops_t tap_pktio_ops = {
.promisc_mode_get = tap_promisc_mode_get,
.mac_get = tap_mac_addr_get,
.pktin_ts_res = NULL,
+ .pktin_ts_from_ns = NULL,
};