// Copyright 2015 by Thorsten von Eicken, see LICENSE.txt #ifndef PKTBUF_H #define PKTBUF_H typedef struct PktBuf { struct PktBuf *next; // next buffer in chain uint16_t filled; // number of bytes filled in buffer uint8_t data[0]; // data in buffer } PktBuf; // Allocate a new packet buffer of given length PktBuf *PktBuf_New(uint16_t length); // Append a buffer to the end of a packet buffer queue, returns new head PktBuf *PktBuf_Push(PktBuf *headBuf, PktBuf *buf); // Prepend a buffer to the beginning of a packet buffer queue, return new head PktBuf * PktBuf_Unshift(PktBuf *headBuf, PktBuf *buf); // Shift first buffer off queue, returns new head (not shifted buffer!) PktBuf *PktBuf_Shift(PktBuf *headBuf); // Shift first buffer off queue, free it, return new head PktBuf *PktBuf_ShiftFree(PktBuf *headBuf); #endif