An earlier email described the a template for the short description: (linux-generic|api|doc|validation|example): file/func: short desc.
This is the long description! Signed-off-by: ... "---" say whatever you like down here that shouldn't be in the commit message. Cheers, Anders On 16 December 2014 at 23:50, Bill Fischofer <[email protected]> wrote: > Signed-off-by: Bill Fischofer <[email protected]> > --- > v2 Ensures that parser metadata is copied if we're not reparsing > > platform/linux-generic/include/odp_packet_internal.h | 20 > ++++++++++++++++++++ > platform/linux-generic/odp_packet.c | 12 ++++++++++-- > 2 files changed, 30 insertions(+), 2 deletions(-) > > diff --git a/platform/linux-generic/include/odp_packet_internal.h > b/platform/linux-generic/include/odp_packet_internal.h > index 068f969..54a12b5 100644 > --- a/platform/linux-generic/include/odp_packet_internal.h > +++ b/platform/linux-generic/include/odp_packet_internal.h > @@ -187,6 +187,26 @@ static inline void packet_init(pool_entry_t *pool, > (pool->s.headroom + size); > } > > +static inline void copy_packet_parser_metadata(odp_packet_hdr_t *src_hdr, > + odp_packet_hdr_t *dst_hdr) > +{ > + dst_hdr->input_flags = src_hdr->input_flags; > + dst_hdr->error_flags = src_hdr->error_flags; > + dst_hdr->output_flags = src_hdr->output_flags; > + > + dst_hdr->l2_offset = src_hdr->l2_offset; > + dst_hdr->l3_offset = src_hdr->l3_offset; > + dst_hdr->l4_offset = src_hdr->l4_offset; > + dst_hdr->payload_offset = src_hdr->payload_offset; > + > + dst_hdr->vlan_s_tag = src_hdr->vlan_s_tag; > + dst_hdr->vlan_c_tag = src_hdr->vlan_c_tag; > + dst_hdr->l3_protocol = src_hdr->l3_protocol; > + dst_hdr->l3_len = src_hdr->l3_len; > + dst_hdr->l4_protocol = src_hdr->l4_protocol; > + dst_hdr->l4_len = src_hdr->l4_len; > +} > + > static inline void *packet_map(odp_packet_hdr_t *pkt_hdr, > uint32_t offset, uint32_t *seglen) > { > diff --git a/platform/linux-generic/odp_packet.c > b/platform/linux-generic/odp_packet.c > index 65e6288..43a9419 100644 > --- a/platform/linux-generic/odp_packet.c > +++ b/platform/linux-generic/odp_packet.c > @@ -396,12 +396,16 @@ odp_packet_t odp_packet_add_data(odp_packet_t pkt, > uint32_t offset, > newpkt = ODP_PACKET_INVALID; > } else { > odp_packet_hdr_t *new_hdr = odp_packet_hdr(newpkt); > + new_hdr->input = pkt_hdr->input; > new_hdr->buf_hdr.buf_u64 = pkt_hdr->buf_hdr.buf_u64; > odp_atomic_store_u32( > &new_hdr->buf_hdr.ref_count, > odp_atomic_load_u32( > &pkt_hdr->buf_hdr.ref_count)); > - _odp_packet_parse(newpkt); > + if (offset < pkt_hdr->payload_offset) > + _odp_packet_parse(newpkt); > + else > + copy_packet_parser_metadata(pkt_hdr, new_hdr); > odp_packet_free(pkt); > } > } > @@ -431,12 +435,16 @@ odp_packet_t odp_packet_rem_data(odp_packet_t pkt, > uint32_t offset, > newpkt = ODP_PACKET_INVALID; > } else { > odp_packet_hdr_t *new_hdr = odp_packet_hdr(newpkt); > + new_hdr->input = pkt_hdr->input; > new_hdr->buf_hdr.buf_u64 = pkt_hdr->buf_hdr.buf_u64; > odp_atomic_store_u32( > &new_hdr->buf_hdr.ref_count, > odp_atomic_load_u32( > &pkt_hdr->buf_hdr.ref_count)); > - _odp_packet_parse(newpkt); > + if (offset < pkt_hdr->payload_offset) > + _odp_packet_parse(newpkt); > + else > + copy_packet_parser_metadata(pkt_hdr, new_hdr); > odp_packet_free(pkt); > } > } > -- > 1.8.3.2 > > > _______________________________________________ > lng-odp mailing list > [email protected] > http://lists.linaro.org/mailman/listinfo/lng-odp _______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
