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. > >