diff options
author | Petri Savolainen <petri.savolainen@nokia.com> | 2019-11-19 16:57:46 +0200 |
---|---|---|
committer | Petri Savolainen <petri.savolainen@nokia.com> | 2019-11-26 15:26:38 +0200 |
commit | 576f69f97fa5ba1ef93bf3fbc14076760991bdb6 (patch) | |
tree | f5484fc5e64ff070ba83ec2a642ed7443446fb88 /platform/linux-generic/pktio/tap.c | |
parent | c978c1ed62901815ab4abd484a820665157f85d6 (diff) |
linux-gen: tap: implement frame offset config
Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com>
Reviewed-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'platform/linux-generic/pktio/tap.c')
-rw-r--r-- | platform/linux-generic/pktio/tap.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/platform/linux-generic/pktio/tap.c b/platform/linux-generic/pktio/tap.c index 638edec94..db5c701b2 100644 --- a/platform/linux-generic/pktio/tap.c +++ b/platform/linux-generic/pktio/tap.c @@ -276,6 +276,7 @@ static odp_packet_t pack_odp_pkt(pktio_entry_t *pktio_entry, const void *data, odp_packet_hdr_t *pkt_hdr; odp_packet_hdr_t parsed_hdr; int num; + uint16_t frame_offset = pktio_entry->s.pktin_frame_offset; if (pktio_cls_enabled(pktio_entry)) { if (cls_classify_packet(pktio_entry, data, len, len, @@ -285,19 +286,22 @@ static odp_packet_t pack_odp_pkt(pktio_entry_t *pktio_entry, const void *data, } } - num = packet_alloc_multi(pkt_priv(pktio_entry)->pool, len, &pkt, 1); - + num = packet_alloc_multi(pkt_priv(pktio_entry)->pool, + len + frame_offset, &pkt, 1); if (num != 1) return ODP_PACKET_INVALID; + pkt_hdr = packet_hdr(pkt); + + if (frame_offset) + pull_head(pkt_hdr, frame_offset); + if (odp_packet_copy_from_mem(pkt, 0, len, data) < 0) { ODP_ERR("failed to copy packet data\n"); odp_packet_free(pkt); return ODP_PACKET_INVALID; } - pkt_hdr = packet_hdr(pkt); - if (pktio_cls_enabled(pktio_entry)) copy_packet_cls_metadata(&parsed_hdr, pkt_hdr); else |