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 */
30 /** The network-layer protocol
32 * This is the network-layer protocol expressed as an
33 * ETH_P_XXX constant, in network-byte order.
38 * Filled in only on outgoing packets. Value is the
39 * bitwise-OR of zero or more PKB_FL_XXX constants.
42 /** Network-layer address length
44 * Filled in only on outgoing packets.
47 /** Network-layer address
49 * Filled in only on outgoing packets.
54 /** Packet is a broadcast packet */
55 #define PKB_FL_BROADCAST 0x01
57 /** Packet is a multicast packet */
58 #define PKB_FL_MULTICAST 0x02
60 /** Network-layer address is a raw hardware address */
61 #define PKB_FL_RAW_NET_ADDR 0x04
64 * Add data to start of packet buffer
66 * @v pkb Packet buffer
67 * @v len Length to add
68 * @ret data Pointer to new start of buffer
70 static inline void * pkb_push ( struct pk_buff *pkb, size_t len ) {
72 assert ( pkb->data >= pkb->head );
77 * Remove data from start of packet buffer
79 * @v pkb Packet buffer
80 * @v len Length to remove
81 * @ret data Pointer to new start of buffer
83 static inline void * pkb_pull ( struct pk_buff *pkb, size_t len ) {
85 assert ( pkb->data >= pkb->tail );
90 * Add data to end of packet buffer
92 * @v pkb Packet buffer
93 * @v len Length to add
94 * @ret data Pointer to newly added space
96 static inline void * pkb_put ( struct pk_buff *pkb, size_t len ) {
97 void *old_tail = pkb->tail;
99 assert ( pkb->tail <= pkb->end );
104 * Remove data from end of packet buffer
106 * @v pkb Packet buffer
107 * @v len Length to remove
109 static inline void pkb_unput ( struct pk_buff *pkb, size_t len ) {
111 assert ( pkb->tail >= pkb->data );
115 * Empty a packet buffer
117 * @v pkb Packet buffer
119 static inline void pkb_empty ( struct pk_buff *pkb ) {
120 pkb->tail = pkb->data;
124 * Calculate length of data in a packet buffer
126 * @v pkb Packet buffer
127 * @ret len Length of data in buffer
129 static inline size_t pkb_len ( struct pk_buff *pkb ) {
130 return ( pkb->tail - pkb->data );
133 #endif /* _PKBUFF_H */