pbuf API More...
Go to the source code of this file.
Data Structures | |
struct | pbuf |
Main packet buffer struct. More... | |
struct | pbuf_rom |
Helper struct for const-correctness only. More... | |
Macros | |
#define | LWIP_SUPPORT_CUSTOM_PBUF ((IP_FRAG && !LWIP_NETIF_TX_SINGLE_PBUF) || (LWIP_IPV6 && LWIP_IPV6_FRAG)) |
LWIP_SUPPORT_CUSTOM_PBUF==1: Custom pbufs behave much like their pbuf type but they are allocated by external code (initialised by calling pbuf_alloced_custom()) and when pbuf_free gives up their last reference, they are freed by calling pbuf_custom->custom_free_function(). More... | |
#define | PBUF_NEEDS_COPY(p) ((p)->type_internal & PBUF_TYPE_FLAG_DATA_VOLATILE) |
PBUF_NEEDS_COPY(p): return a boolean value indicating whether the given pbuf needs to be copied in order to be kept around beyond the current call stack without risking being corrupted. More... | |
#define | PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS 0x80 |
Indicates that the payload directly follows the struct pbuf. More... | |
#define | PBUF_TYPE_FLAG_DATA_VOLATILE 0x40 |
Indicates the data stored in this pbuf can change. More... | |
#define | PBUF_TYPE_ALLOC_SRC_MASK 0x0F |
4 bits are reserved for 16 allocation sources (e.g. More... | |
#define | PBUF_ALLOC_FLAG_RX 0x0100 |
Indicates this pbuf is used for RX (if not set, indicates use for TX). More... | |
#define | PBUF_ALLOC_FLAG_DATA_CONTIGUOUS 0x0200 |
Indicates the application needs the pbuf payload to be in one piece. More... | |
#define | PBUF_TYPE_ALLOC_SRC_MASK_APP_MIN 0x03 |
First pbuf allocation type for applications. More... | |
#define | PBUF_TYPE_ALLOC_SRC_MASK_APP_MAX PBUF_TYPE_ALLOC_SRC_MASK |
Last pbuf allocation type for applications. More... | |
#define | PBUF_FLAG_PUSH 0x01U |
indicates this packet's data should be immediately passed to the application More... | |
#define | PBUF_FLAG_IS_CUSTOM 0x02U |
indicates this is a custom pbuf: pbuf_free calls pbuf_custom->custom_free_function() when the last reference is released (plus custom PBUF_RAM cannot be trimmed) More... | |
#define | PBUF_FLAG_MCASTLOOP 0x04U |
indicates this pbuf is UDP multicast to be looped back More... | |
#define | PBUF_FLAG_LLBCAST 0x08U |
indicates this pbuf was received as link-level broadcast More... | |
#define | PBUF_FLAG_LLMCAST 0x10U |
indicates this pbuf was received as link-level multicast More... | |
#define | PBUF_FLAG_TCP_FIN 0x20U |
indicates this pbuf includes a TCP FIN flag More... | |
#define | PBUF_POOL_FREE_OOSEQ 1 |
Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty. More... | |
Enumerations |
pbuf API
Definition in file pbuf.h.
#define LWIP_SUPPORT_CUSTOM_PBUF ((IP_FRAG && !LWIP_NETIF_TX_SINGLE_PBUF) || (LWIP_IPV6 && LWIP_IPV6_FRAG)) |
LWIP_SUPPORT_CUSTOM_PBUF==1: Custom pbufs behave much like their pbuf type but they are allocated by external code (initialised by calling pbuf_alloced_custom()) and when pbuf_free gives up their last reference, they are freed by calling pbuf_custom->custom_free_function().
Currently, the pbuf_custom code is only needed for one specific configuration of IP_FRAG, unless required by external driver/application code.
#define PBUF_ALLOC_FLAG_DATA_CONTIGUOUS 0x0200 |
#define PBUF_ALLOC_FLAG_RX 0x0100 |
#define PBUF_FLAG_IS_CUSTOM 0x02U |
#define PBUF_FLAG_LLBCAST 0x08U |
#define PBUF_FLAG_LLMCAST 0x10U |
#define PBUF_FLAG_MCASTLOOP 0x04U |
#define PBUF_FLAG_PUSH 0x01U |
#define PBUF_FLAG_TCP_FIN 0x20U |
#define PBUF_NEEDS_COPY | ( | p | ) | ((p)->type_internal & PBUF_TYPE_FLAG_DATA_VOLATILE) |
PBUF_NEEDS_COPY(p): return a boolean value indicating whether the given pbuf needs to be copied in order to be kept around beyond the current call stack without risking being corrupted.
The default setting provides safety: it will make a copy iof any pbuf chain that does not consist entirely of PBUF_ROM type pbufs. For setups with zero-copy support, it may be redefined to evaluate to true in all cases, for example. However, doing so also has an effect on the application side: any buffers that are not copied must also not be reused by the application after passing them to lwIP. For example, when setting PBUF_NEEDS_COPY to (0), after using udp_send() with a PBUF_RAM pbuf, the application must free the pbuf immediately, rather than reusing it for other purposes. For more background information on this, see tasks #6735 and #7896, and bugs #11400 and #49914.
#define PBUF_POOL_FREE_OOSEQ 1 |
#define PBUF_TYPE_ALLOC_SRC_MASK 0x0F |
#define PBUF_TYPE_ALLOC_SRC_MASK_APP_MAX PBUF_TYPE_ALLOC_SRC_MASK |
#define PBUF_TYPE_ALLOC_SRC_MASK_APP_MIN 0x03 |
#define PBUF_TYPE_FLAG_DATA_VOLATILE 0x40 |
#define PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS 0x80 |
enum pbuf_layer |
Enumeration of pbuf layers.
Enumerator | |
---|---|
PBUF_TRANSPORT |
Includes spare room for transport layer header, e.g. UDP header. Use this if you intend to pass the pbuf to functions like udp_send(). |
PBUF_IP |
Includes spare room for IP header. Use this if you intend to pass the pbuf to functions like raw_send(). |
PBUF_LINK |
Includes spare room for link layer header (ethernet header). Use this if you intend to pass the pbuf to functions like ethernet_output().
|
PBUF_RAW_TX |
Includes spare room for additional encapsulation header before ethernet headers (e.g. 802.11). Use this if you intend to pass the pbuf to functions like netif->linkoutput().
|
PBUF_RAW |
Use this for input packets in a netif driver when calling netif->input() in the most common case - ethernet-layer netif driver. |
enum pbuf_type |
Enumeration of pbuf types.