diff options
Diffstat (limited to 'platform/linux-generic/odp_packet.c')
-rw-r--r-- | platform/linux-generic/odp_packet.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index 726e086b..8a941cec 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -21,6 +21,28 @@ static inline uint8_t parse_ipv4(odp_packet_hdr_t *pkt_hdr, static inline uint8_t parse_ipv6(odp_packet_hdr_t *pkt_hdr, odph_ipv6hdr_t *ipv6, size_t *offset_out); +odp_packet_t odp_packet_alloc(odp_buffer_pool_t pool_id) +{ + odp_packet_t pkt; + odp_buffer_t buf; + + buf = odp_buffer_alloc(pool_id); + if (odp_unlikely(!odp_buffer_is_valid(buf))) + return ODP_PACKET_INVALID; + + pkt = odp_packet_from_buffer(buf); + odp_packet_init(pkt); + + return pkt; +} + +void odp_packet_free(odp_packet_t pkt) +{ + odp_buffer_t buf = odp_packet_to_buffer(pkt); + + odp_buffer_free(buf); +} + void odp_packet_init(odp_packet_t pkt) { odp_packet_hdr_t *const pkt_hdr = odp_packet_hdr(pkt); @@ -368,3 +390,17 @@ void *odp_packet_get_ctx(odp_packet_t pkt) { return (void *)(intptr_t)odp_packet_hdr(pkt)->user_ctx; } + +int odp_packet_is_valid(odp_packet_t pkt) +{ + odp_buffer_t buf = odp_packet_to_buffer(pkt); + + return odp_buffer_is_valid(buf); +} + +size_t odp_packet_buf_size(odp_packet_t pkt) +{ + odp_buffer_t buf = odp_packet_to_buffer(pkt); + + return odp_buffer_size(buf); +} |