@@ -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[];
@@ -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,
@@ -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;
@@ -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);
@@ -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++;
}
@@ -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 {
_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(-)