The issue has to do with odp_packet_reset().  If I say:

pkt  = odp_packet_alloc(pool, 1500);

I can then subsequently call:

odp_packet_reset(pkt, n);

for any value of N <= 1500.  If I try to reset a packet to a length greater
than was initially allocated for it, that is an error.  If we followed that
definition then
allocating a packet of length 0 would be pointless since it could never be
grown to anything useful.

The purpose of the note regarding the use of 0 is to have a convenient
means of allocating a packet of implementation-default useful but unknown
length and then be able to build packets from there via
odp_packet_push_tail() calls.

On Fri, May 29, 2015 at 5:06 AM, Savolainen, Petri (Nokia - FI/Espoo) <
[email protected]> wrote:

> The API does not specify "default length". Pool pkt parameters guide pool
> size (number of packet with min len) and segmentation (min bytes in the
> first segment). Implementation decides on segmentation and actual  segment
> sizes.
>
> pkt = odp_packet_alloc(pool, default_len);
> odp_packet_reset(pkt, 0);
>
> So, the example above does not actually specify anything. Any value of
> "default_len" is handled the same way. Implementation uses 'len' to
> allocate enough segments and initialize data pointers/lengths accordingly.
>
> // Allocated packet can hold at least 0 data bytes
> // odp_packet_data() points to the first byte of data. Valid start
> pointer, although no data follows.
> // odp_packet_len() returns 0
> pkt1 = odp_packet_alloc(pool, 0);
>
>
> // Allocated packet can hold at least 1 data bytes
> // odp_packet_data() points to the first byte of data
> // odp_packet_len() returns 1
> pkt2 = odp_packet_alloc(pool, 1);
>
> ...
>
>
> Which API definition was source of the confusion? It should be enough to
> highlight that either zero is legal or illegal value of 'len'.
>
>
> -Petri
>
>
> > -----Original Message-----
> > From: ext Zoltan Kiss [mailto:[email protected]]
> > Sent: Thursday, May 28, 2015 4:59 PM
> > To: Savolainen, Petri (Nokia - FI/Espoo); ext Bill Fischofer
> > Cc: [email protected]
> > Subject: Re: [lng-odp] [API-NEXT PATCH 2/2] api-next: packet: clarify use
> > of 0 len on odp_packet_alloc()
> >
> >
> >
> > On 28/05/15 13:58, Savolainen, Petri (Nokia - FI/Espoo) wrote:
> > > How people think 0 is special or different from e.g. value 1?
> >
> > Well, 0 is a special number in many ways, not just in mathematics and
> > computer science:
> >
> > http://en.wikipedia.org/wiki/0_%28number%29
> >
> > It is special in this case as well, because it's defined to be equal to:
> >
> > pkt = odp_packet_alloc(pool, default_len);
> > odp_packet_reset(pkt, 0);
> >
> > Which is not necessarily what you would expect. Most people had
> > different ideas what 0 should mean.
> >
> > >
> > > We can change documentation wording, but not add lengthy documentation
> > for value 0 as a special case (which is not).
> > >
> > > -Petri
> > >
> > >
> > >> -----Original Message-----
> > >> From: ext Zoltan Kiss [mailto:[email protected]]
> > >> Sent: Thursday, May 28, 2015 3:51 PM
> > >> To: Savolainen, Petri (Nokia - FI/Espoo); ext Bill Fischofer
> > >> Cc: [email protected]
> > >> Subject: Re: [lng-odp] [API-NEXT PATCH 2/2] api-next: packet: clarify
> > use
> > >> of 0 len on odp_packet_alloc()
> > >>
> > >> I don't think so. There was a lengthy discussion on the arch meeting
> > how
> > >> should you interpret that, I think that proves it's worth to clarify
> > >> what's the expected behaviour.
> > >>
> > >> On 28/05/15 13:45, Savolainen, Petri (Nokia - FI/Espoo) wrote:
> > >>> I think it should be enough to note that len can be 0. There’s no
> > >>> special handling for value zero.
> > >>>
> > >>> -Petri
> > >>>
> > >>> *From:*ext Bill Fischofer [mailto:[email protected]]
> > >>> *Sent:* Thursday, May 28, 2015 2:48 PM
> > >>> *To:* Savolainen, Petri (Nokia - FI/Espoo)
> > >>> *Cc:* [email protected]
> > >>> *Subject:* Re: [lng-odp] [API-NEXT PATCH 2/2] api-next: packet:
> > clarify
> > >>> use of 0 len on odp_packet_alloc()
> > >>>
> > >>> The purpose of the note was to expand on the case of len = 0.  Are
> you
> > >>> saying this is not needed?  The consensus on the Wednesday arch call
> > was
> > >>> that it was, hence this patch.
> > >>>
> > >>> On Thu, May 28, 2015 at 5:40 AM, Savolainen, Petri (Nokia - FI/Espoo)
> > >>> <[email protected] <mailto:[email protected]>>
> > wrote:
> > >>>
> > >>>
> > >>>    * ... The
> > >>>    * packet is initialized with data pointers and lengths set
> > according
> > >>> to the
> > >>>    * specified len, ...
> > >>>
> > >>> The current documentation covers functionality also when len is 0. We
> > >>> should minimize @note content over all the APIs, otherwise the actual
> > >>> API spec gets fragmented. API documentation and functionality is the
> > >>> same for len == 0, len == 1, ... In all the cases, implementation
> > >>> decides on packet segmentation in limits of pool parameters.
> > >>>
> > >>> If needed, we could add:
> > >>>
> > >>> @note Zero is a valid 'len' value
> > >>>
> > >>>
> > >>> -Petri
> > >>>
> > >>>
> > >>>
> > >>>   > -----Original Message-----
> > >>>   > From: lng-odp [mailto:[email protected]
> > >>> <mailto:[email protected]>] On Behalf Of ext
> > >>>   > Bill Fischofer
> > >>>   > Sent: Wednesday, May 27, 2015 6:51 PM
> > >>>   > To: [email protected] <mailto:[email protected]>
> > >>>   > Subject: [lng-odp] [API-NEXT PATCH 2/2] api-next: packet: clarify
> > use
> > >>> of 0
> > >>>   > len on odp_packet_alloc()
> > >>>   >
> > >>>   > Signed-off-by: Bill Fischofer <[email protected]
> > >>> <mailto:[email protected]>>
> > >>>   > ---
> > >>>   >  include/odp/api/packet.h | 10 ++++++++++
> > >>>   >  1 file changed, 10 insertions(+)
> > >>>   >
> > >>>   > diff --git a/include/odp/api/packet.h b/include/odp/api/packet.h
> > >>>   > index 3a454b5..ea124df 100644
> > >>>   > --- a/include/odp/api/packet.h
> > >>>   > +++ b/include/odp/api/packet.h
> > >>>   > @@ -73,6 +73,16 @@ extern "C" {
> > >>>   >   * @note The default headroom and tailroom used for packets is
> > >> specified
> > >>>   > by
> > >>>   >   * the ODP_CONFIG_PACKET_HEADROOM and ODP_CONFIG_PACKET_TAILROOM
> > >> defines
> > >>>   > in
> > >>>   >   * odp_config.h.
> > >>>   > + *
> > >>>   > + * @note The len parameter sets the initial length of the
> > allocated
> > >>>   > packet.
> > >>>   > + * If specified as 0, the implementation will allocate a packet
> > of a
> > >>>   > default
> > >>>   > + * length chosen by the implementation based on the pool create
> > >>>   > parameters
> > >>>   > + * and will then set the actual length of the packet to 0. The
> > >> result is
> > >>>   > + * the same as if the following sequence had been called by the
> > >>>   > application:
> > >>>   > + * @code
> > >>>   > + * pkt = odp_packet_alloc(pool, default_len);
> > >>>   > + * odp_packet_reset(pkt, 0);
> > >>>   > + * @endcode
> > >>>   >   */
> > >>>   >  odp_packet_t odp_packet_alloc(odp_pool_t pool, uint32_t len);
> > >>>   >
> > >>>   > --
> > >>>   > 2.1.0
> > >>>   >
> > >>>
> > >>>   > _______________________________________________
> > >>>   > lng-odp mailing list
> > >>>   > [email protected] <mailto:[email protected]>
> > >>>   > https://lists.linaro.org/mailman/listinfo/lng-odp
> > >>>
> > >>>
> > >>>
> > >>> _______________________________________________
> > >>> lng-odp mailing list
> > >>> [email protected]
> > >>> https://lists.linaro.org/mailman/listinfo/lng-odp
> > >>>
>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to