On Tue, Oct 07, 2014 at 09:33:06AM +0000, Pattan, Reshma wrote:
> Hi All,
> 
> I am planning  to implement packet reorder library. Details are as below, 
> please go through them and provide the comments.
> 
> Requirement:
>                To reorder out of ordered packets that are received from 
> different cores.
> 
> Usage:
> To be used along with distributor library. Next version of distributor are 
> planned to distribute incoming packets to all worker cores irrespective of 
> the flow type.
> In this case to ensure in order delivery of the packets at output side 
> reorder library will used by the tx end.
> 
> Assumption:
> All input packets will be marked with sequence number in seqn field of mbuf, 
> this will be the reference for reordering at the tx end.
> Sequence number will be of type uint32_t. New sequence number field seqn will 
> be added to mbuf structure.
> 
> Design:
> a)There will be reorder buffer(circular buffer) structure maintained in 
> reorder library to store reordered packets and other details of buffer like 
> head to drain the packet from, min sequence number and other details.
>                b)Library will provide insert and drain functions to reorder 
> and fetch out the reordered packets respectively.
> c)Users of library should pass the packets to insert functions for reordering.
> 
> Insertion logic:
> Sequence number of current packet will be used to calculate offset in reorder 
> buffer and write packet to the location  in the reorder buffer corresponding 
> to offset.
>                              Offset is calculated as difference of current 
> packet  sequence number and sequence number associated with  reorder buffer.
> 
> During sequence number wrapping or wrapping over of reorder buffer size, 
> before inserting the new packet we should move offset number of packets to 
> other buffer called overflow buffer and advance the head of reorder buffer by 
> "offset-reorder buffer size" and insert the new packet.
> 
> Insert function:
> int rte_reorder_insert(struct rte_reorder_buffer *buffer, struct rte_mbuf 
> *mbuf);
> Note: Other insert function is also under plan to insert burst of packets.
> 
>                Reorder buffer:
> struct rte_reorder_buffer {
>         unsigned int size;      /* The size (number of entries) of the 
> buffer. */
>         unsigned int mask;      /* Mask (size - 1) of the buffer */
>         unsigned int head;      /* Current head of buffer */
>         uint32_t min_seqn;      /* latest sequence number associated with 
> buffer */
>         struct rte_mbuf *entries[MAX_REORDER_BUFFER_SIZE]; /* buffer to hold 
> reordered mbufs */
> };
> 
> d)Users can fetch out the reordered packets by drain function provided by 
> library. Users must pass the mbuf array , drain function should fill  passed 
> mbuff array  with the reordered buffer packets.
> During drain operation, overflow buffer  packets will be fetched out first 
> and then reorder buffer.
> 
> Drain function:
>                int rte_reorder_drain(struct rte_reorder_buffer *buffer, 
> struct rte_mbuf **mbufs)
> 
> Thanks,
> Reshma
> 

This seems reasonable, but why not integrate it with the distributor library
rather than create a separate library for it?  It seems as though the
distributor library is a pre-requisite for this libraries use anyway, as
otherwise there will not be anything to reorder
Neil

> --------------------------------------------------------------
> Intel Shannon Limited
> Registered in Ireland
> Registered Office: Collinstown Industrial Park, Leixlip, County Kildare
> Registered Number: 308263
> Business address: Dromore House, East Park, Shannon, Co. Clare
> 
> This e-mail and any attachments may contain confidential material for the 
> sole use of the intended recipient(s). Any review or distribution by others 
> is strictly prohibited. If you are not the intended recipient, please contact 
> the sender and delete all copies.
> 
> 

Reply via email to