1,5 → 1,5 |
/* |
* Copyright (c) 2008 Lukas Mejdrech |
* Copyright (c) 2009 Lukas Mejdrech |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
26,36 → 26,104 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
|
/** @addtogroup net |
/** @addtogroup packet |
* @{ |
*/ |
|
/** @file |
* Packet map and queue. |
*/ |
|
#ifndef __NET_PACKET_H__ |
#define __NET_PACKET_H__ |
|
/** Packet identifier type. |
* Value zero (0) is used as an invalid identifier. |
*/ |
typedef unsigned int packet_id_t; |
|
/** Type definition of the packet. |
* @see packet |
*/ |
typedef struct packet * packet_t; |
typedef packet_t * packet_ref; |
|
/** Type definition of the packet pointer. |
* @see packet |
*/ |
typedef packet_t * packet_ref; |
|
/** Packet operation mode type. |
*/ |
typedef enum packet_mode packet_mode_t; |
|
/** Packet operation mode. |
*/ |
enum packet_mode{ |
PM_ONEWAY, |
/** The packet is processed in one direction and can be released at any time. |
*/ |
PM_ONE_WAY, |
/** The packet should be returned at the end of the processing back to its initiator. |
*/ |
PM_RETURN |
}; |
|
packet_t pm_find( packet_id_t packet_id ); |
int pm_add( packet_t packet ); |
int pm_init( void ); |
void pm_destroy( void ); |
/** Finds the packet mapping. |
* @param packet_id The packet identifier to be found. Input parameter. |
* @returns The found packet reference. |
* @returns NULL if the mapping does not exist. |
*/ |
packet_t pm_find( packet_id_t packet_id ); |
|
/** Adds the packet mapping. |
* @param packet The packet to be remembered. Input parameter. |
* @returns EOK on success. |
* @returns EINVAL if the packet is not valid. |
* @returns EINVAL if the packet map is not initialized. |
* @returns ENOMEM if there is not enough memory left. |
*/ |
int pm_add( packet_t packet ); |
|
/** Initializes the packet map. |
* @returns EOK on success. |
* @returns ENOMEM if there is not enough memory left. |
*/ |
int pm_init( void ); |
|
/** Releases the packet map. |
*/ |
void pm_destroy( void ); |
|
/** Add packet to the sorted queue. |
* The queue is sorted in the ascending order. |
* The packet is inserted right before the packets of the same order value. |
* @param first The first packet of the queue. May be NULL. Input parameter. |
* @param packet The packet to be added. Input parameter. |
* @param order The packet order value. Input parameter. |
* @param metric The metric value of the packet. Input parameter. |
* @returns The first packet of the queue. The original first packet may be shifted by the new packet. |
* @returns NULL if the packet is not valid. |
*/ |
packet_t pq_add( packet_t first, packet_t packet, int order, size_t metric ); |
packet_t pq_detach( packet_t packet ); |
|
/** Detach the packet from the queue. |
* @param packet The packet to be detached. Input parameter. |
* @returns The next packet in the queue. If the packet is the first one of the queue, this becomes the new first one. |
* @returns NULL if the packet is not valid. |
*/ |
packet_t pq_detach( packet_t packet ); |
|
/** Sets the packet order and metric attributes. |
* @param packet The packet to be set. Input parameter. |
* @param order The packet order value. Input parameter. |
* @param metric The metric value of the packet. Input parameter. |
*/ |
int pq_set( packet_t packet, int order, size_t metric ); |
|
/** Releases the whole queue. |
* Detaches all packets of the queue and calls the packet_release() for each of them. |
* @param first The first packet of the queue. Input parameter. |
* @param packet_release The releasing function called for each of the packets after its detachment. Input parameter. |
*/ |
void pq_destroy( packet_t first, void ( * packet_release )( packet_t packet )); |
|
#endif |