On 17 December 2014 at 12:51, Savolainen, Petri (NSN - FI/Espoo) <[email protected]> wrote: > The API says already: > > > > “Operation does not modify packet segmentation or move data. Handles and > > pointers remain valid. User is responsible to update packet meta-data > > offsets when needed.” But does the application get the proper tools for (simple and efficient) updating of the packet meta-data offsets?
Pull makes a relative change (subtract N). Set offset do not make relative changes. This forces the user to read the offsets, pull the header and then set the offsets(old_offset - N). The application needs to be aware of all meta-data fields that need to updated. What if we add more meta-data fields of the offset type? > > > > If application modifies packet headers (adds/removes/changes them), it must > update those offsets that it or some other block after it in the chain cares > about (reloads from the packet). It may leave some offsets unchanged because > it knows that those are not needed any more. > > > > Some more words can be added, if the current text is not clear enough. The > current implementation does not implement the spec. This patch fixes that > issue. I think we have the wrong spec. Pulling headers should not make the remaining packet Lx offsets invalid. > > > > > > -Petri > > > > > > > > > > From: ext Bill Fischofer [mailto:[email protected]] > Sent: Wednesday, December 17, 2014 1:33 PM > To: Petri Savolainen > Cc: lng-odp-forward > Subject: Re: [lng-odp] [PATCH] Remove packet l2/l3/l4 offset adjustments > > > > If we do this we really need a documentation note that says: > > > > Note: After doing a head push/pull, applications cannot use routines like > odp_packet_l3_ptr(), etc., until they make appropriate calls to > odp_packet_l3_offset_set(), etc., to reflect the previous operation. > Otherwise they will receive pointers to incorrect areas of the packet. > > > > On Wed, Dec 17, 2014 at 3:12 AM, Petri Savolainen > <[email protected]> wrote: > > Packet head push/pull calls do not automatically adjust > metadata offsets, only data pointer and headroom. > > Signed-off-by: Petri Savolainen <[email protected]> > --- > platform/linux-generic/include/odp_packet_internal.h | 8 -------- > 1 file changed, 8 deletions(-) > > diff --git a/platform/linux-generic/include/odp_packet_internal.h > b/platform/linux-generic/include/odp_packet_internal.h > index a0eff30..18e69b3 100644 > --- a/platform/linux-generic/include/odp_packet_internal.h > +++ b/platform/linux-generic/include/odp_packet_internal.h > @@ -192,24 +192,16 @@ static inline void *packet_map(odp_packet_hdr_t > *pkt_hdr, > pkt_hdr->headroom + pkt_hdr->frame_len); > } > > -#define pull_offset(x, len) (x = x < len ? 0 : x - len) > - > static inline void push_head(odp_packet_hdr_t *pkt_hdr, size_t len) > { > pkt_hdr->headroom -= len; > pkt_hdr->frame_len += len; > - pkt_hdr->l2_offset += len; > - pkt_hdr->l3_offset += len; > - pkt_hdr->l4_offset += len; > } > > static inline void pull_head(odp_packet_hdr_t *pkt_hdr, size_t len) > { > pkt_hdr->headroom += len; > pkt_hdr->frame_len -= len; > - pull_offset(pkt_hdr->l2_offset, len); > - pull_offset(pkt_hdr->l3_offset, len); > - pull_offset(pkt_hdr->l4_offset, len); > } > > static inline void push_tail(odp_packet_hdr_t *pkt_hdr, size_t len) > -- > 2.2.0 > > > _______________________________________________ > 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 > _______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
