aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/pktio/tap.c
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2019-11-19 16:57:46 +0200
committerPetri Savolainen <petri.savolainen@nokia.com>2019-11-26 15:26:38 +0200
commit576f69f97fa5ba1ef93bf3fbc14076760991bdb6 (patch)
treef5484fc5e64ff070ba83ec2a642ed7443446fb88 /platform/linux-generic/pktio/tap.c
parentc978c1ed62901815ab4abd484a820665157f85d6 (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.c12
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