diff mbox

[API-NEXT,v5,10/11] linux-generic: pktio: add pktin timestamp argument to _odp_packet_cls_enq()

Message ID 1461225572-18238-11-git-send-email-matias.elo@nokia.com
State Accepted
Commit a6f6996df59645baba8eeb45550b5a78b28fe6a0
Headers show

Commit Message

Elo, Matias (Nokia - FI/Espoo) April 21, 2016, 7:59 a.m. UTC
_odp_packet_cls_enq() allocates new odp packets internally.
Add new packet timestamp argument to enable adding input
timestamps to these packets.

Signed-off-by: Matias Elo <matias.elo@nokia.com>
---
 .../linux-generic/include/odp_packet_io_internal.h     |  3 ++-
 platform/linux-generic/pktio/dpdk.c                    |  2 +-
 platform/linux-generic/pktio/netmap.c                  |  2 +-
 platform/linux-generic/pktio/pktio_common.c            | 18 +++++++++++-------
 platform/linux-generic/pktio/socket.c                  |  3 ++-
 platform/linux-generic/pktio/socket_mmap.c             |  3 ++-
 6 files changed, 19 insertions(+), 12 deletions(-)
diff mbox

Patch

diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h
index a807d13..9fc13a9 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -211,7 +211,8 @@  typedef struct pktio_if_ops {
 } pktio_if_ops_t;
 
 int _odp_packet_cls_enq(pktio_entry_t *pktio_entry, const uint8_t *base,
-			uint16_t buf_len, odp_packet_t *pkt_ret);
+			uint16_t buf_len, odp_time_t *ts,
+			odp_packet_t *pkt_ret);
 
 extern void *pktio_entry_ptr[];
 
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c
index 83fb1ba..3845448 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -677,7 +677,7 @@  static inline int mbuf_to_pkt(pktio_entry_t *pktio_entry,
 		if (pktio_cls_enabled(pktio_entry)) {
 			if (_odp_packet_cls_enq(pktio_entry,
 						(const uint8_t *)buf, pkt_len,
-						&pkt_table[nb_pkts]))
+						NULL, &pkt_table[nb_pkts]))
 				nb_pkts++;
 		} else {
 			pkt = packet_alloc(pktio_entry->s.pkt_dpdk.pool,
diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c
index 0b794a0..9112ba3 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -586,7 +586,7 @@  static inline int netmap_pkt_to_odp(pktio_entry_t *pktio_entry,
 
 	if (pktio_cls_enabled(pktio_entry)) {
 		ret = _odp_packet_cls_enq(pktio_entry, (const uint8_t *)buf,
-					  len, pkt_out);
+					  len, NULL, pkt_out);
 		if (ret)
 			return 0;
 		return -1;
diff --git a/platform/linux-generic/pktio/pktio_common.c b/platform/linux-generic/pktio/pktio_common.c
index c568da3..e7bb3d8 100644
--- a/platform/linux-generic/pktio/pktio_common.c
+++ b/platform/linux-generic/pktio/pktio_common.c
@@ -10,18 +10,19 @@ 
 
 int _odp_packet_cls_enq(pktio_entry_t *pktio_entry,
 			const uint8_t *base, uint16_t buf_len,
-			odp_packet_t *pkt_ret)
+			odp_time_t *ts, odp_packet_t *pkt_ret)
 {
 	cos_t *cos;
 	odp_packet_t pkt;
-	odp_packet_hdr_t pkt_hdr;
+	odp_packet_hdr_t *pkt_hdr;
+	odp_packet_hdr_t src_pkt_hdr;
 	int ret;
 	odp_pool_t pool;
 
-	packet_parse_reset(&pkt_hdr);
+	packet_parse_reset(&src_pkt_hdr);
 
-	_odp_cls_parse(&pkt_hdr, base);
-	cos = pktio_select_cos(pktio_entry, base, &pkt_hdr);
+	_odp_cls_parse(&src_pkt_hdr, base);
+	cos = pktio_select_cos(pktio_entry, base, &src_pkt_hdr);
 
 	/* if No CoS found then drop the packet */
 	if (cos == NULL || cos->s.queue == NULL || cos->s.pool == NULL)
@@ -32,15 +33,18 @@  int _odp_packet_cls_enq(pktio_entry_t *pktio_entry,
 	pkt = odp_packet_alloc(pool, buf_len);
 	if (odp_unlikely(pkt == ODP_PACKET_INVALID))
 		return 0;
+	pkt_hdr = odp_packet_hdr(pkt);
 
-	copy_packet_parser_metadata(&pkt_hdr, odp_packet_hdr(pkt));
-	odp_packet_hdr(pkt)->input = pktio_entry->s.handle;
+	copy_packet_parser_metadata(&src_pkt_hdr, pkt_hdr);
+	pkt_hdr->input = pktio_entry->s.handle;
 
 	if (odp_packet_copydata_in(pkt, 0, buf_len, base) != 0) {
 		odp_packet_free(pkt);
 		return 0;
 	}
 
+	packet_set_ts(pkt_hdr, ts);
+
 	/* Parse and set packet header data */
 	odp_packet_pull_tail(pkt, odp_packet_len(pkt) - buf_len);
 	ret = queue_enq(cos->s.queue, odp_buf_to_hdr((odp_buffer_t)pkt), 0);
diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c
index 44f18c2..e28fd07 100644
--- a/platform/linux-generic/pktio/socket.c
+++ b/platform/linux-generic/pktio/socket.c
@@ -650,7 +650,8 @@  static int sock_mmsg_recv(pktio_entry_t *pktio_entry,
 				continue;
 
 			ret = _odp_packet_cls_enq(pktio_entry, base,
-						  pkt_len, &pkt_table[nb_rx]);
+						  pkt_len, NULL,
+						  &pkt_table[nb_rx]);
 			if (ret)
 				nb_rx++;
 		}
diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c
index da0f7b7..5cd1ad6 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -149,7 +149,8 @@  static inline unsigned pkt_mmap_v2_rx(pktio_entry_t *pktio_entry,
 
 		if (pktio_cls_enabled(pktio_entry)) {
 			ret = _odp_packet_cls_enq(pktio_entry, pkt_buf,
-						  pkt_len, &pkt_table[nb_rx]);
+						  pkt_len, NULL,
+						  &pkt_table[nb_rx]);
 			if (ret)
 				nb_rx++;
 		} else {