8 * Packet buffers are used to contain network packets. Methods are
9 * provided for appending, prepending, etc. data.
18 * This structure is used to represent a network packet within gPXE.
21 /** Head of the buffer */
27 /** End of the buffer */
32 * Add data to start of packet buffer
34 * @v pkb Packet buffer
35 * @v len Length to add
36 * @ret data Pointer to new start of buffer
38 static inline void * pkb_push ( struct pk_buff *pkb, size_t len ) {
40 assert ( pkb->data >= pkb->head );
45 * Remove data from start of packet buffer
47 * @v pkb Packet buffer
48 * @v len Length to remove
49 * @ret data Pointer to new start of buffer
51 static inline void * pkb_pull ( struct pk_buff *pkb, size_t len ) {
53 assert ( pkb->data >= pkb->tail );
58 * Add data to end of packet buffer
60 * @v pkb Packet buffer
61 * @v len Length to add
62 * @ret data Pointer to newly added space
64 static inline void * pkb_put ( struct pk_buff *pkb, size_t len ) {
65 void *old_tail = pkb->tail;
67 assert ( pkb->tail <= pkb->end );
72 * Remove data from end of packet buffer
74 * @v pkb Packet buffer
75 * @v len Length to remove
77 static inline void pkb_unput ( struct pk_buff *pkb, size_t len ) {
79 assert ( pkb->tail >= pkb->data );
83 * Empty a packet buffer
85 * @v pkb Packet buffer
87 static inline void pkb_empty ( struct pk_buff *pkb ) {
88 pkb->tail = pkb->data;
92 * Calculate length of data in a packet buffer
94 * @v pkb Packet buffer
95 * @ret len Length of data in buffer
97 static inline size_t pkb_len ( struct pk_buff *pkb ) {
98 return ( pkb->tail - pkb->data );
101 #endif /* _PKBUFF_H */