pktbuf.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2014 Martine Lenders <mlenders@inf.fu-berlin.de>
3  * SPDX-FileCopyrightText: 2015 Freie Universität Berlin
4  * SPDX-License-Identifier: LGPL-2.1-only
5  */
6 
7 #pragma once
8 
30 #include <stdbool.h>
31 #include <stdlib.h>
32 #include <string.h>
33 
34 #include "cpu_conf.h"
35 #include "mutex.h"
36 #include "net/gnrc/pkt.h"
37 #include "net/gnrc/neterr.h"
38 #include "net/gnrc/nettype.h"
39 #include "utlist.h"
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
60 #ifndef CONFIG_GNRC_PKTBUF_SIZE
61 #define CONFIG_GNRC_PKTBUF_SIZE (6144)
62 #endif
68 #ifndef CONFIG_GNRC_PKTBUF_CHECK_USE_AFTER_FREE
69 #define CONFIG_GNRC_PKTBUF_CHECK_USE_AFTER_FREE (0)
70 #endif
71 
80 #define GNRC_PKTBUF_CANARY (0x55)
81 
85 void gnrc_pktbuf_init(void);
86 
108 gnrc_pktsnip_t *gnrc_pktbuf_add(gnrc_pktsnip_t *next, const void *data, size_t size,
109  gnrc_nettype_t type);
110 
145 
166 
173 void gnrc_pktbuf_hold(gnrc_pktsnip_t *pkt, unsigned int num);
174 
185 void gnrc_pktbuf_release_error(gnrc_pktsnip_t *pkt, uint32_t err);
186 
193 static inline void gnrc_pktbuf_release(gnrc_pktsnip_t *pkt)
194 {
196 }
197 
213 
223 
241 
295 
296 #ifdef DEVELHELP
304 void gnrc_pktbuf_stats(void);
305 #endif
306 
307 /* for testing */
308 #ifdef TEST_SUITES
316 
324 #endif
325 
326 #ifdef __cplusplus
327 }
328 #endif
329 
#define GNRC_NETERR_SUCCESS
Error code to signalise success (no error occurred) to an gnrc_neterr subscriber.
Definition: neterr.h:39
gnrc_nettype_t
Definition of protocol types in the network stack.
Definition: nettype.h:48
bool gnrc_pktbuf_is_sane(void)
Checks if the implementation's internal invariants still uphold.
void gnrc_pktbuf_release_error(gnrc_pktsnip_t *pkt, uint32_t err)
Decreases gnrc_pktsnip_t::users of pkt atomically and removes it if it reaches 0 and reports a possib...
bool gnrc_pktbuf_is_empty(void)
Checks if packet buffer is empty.
gnrc_pktsnip_t * gnrc_pktbuf_mark(gnrc_pktsnip_t *pkt, size_t size, gnrc_nettype_t type)
Marks the first size bytes in a received packet with a new packet snip that is appended to the packet...
int gnrc_pktbuf_realloc_data(gnrc_pktsnip_t *pkt, size_t size)
Reallocates gnrc_pktsnip_t::data of pkt in the packet buffer, without changing the content.
gnrc_pktsnip_t * gnrc_pktbuf_start_write(gnrc_pktsnip_t *pkt)
Must be called once before there is a write operation on a packet snip in a thread.
gnrc_pktsnip_t * gnrc_pktbuf_add(gnrc_pktsnip_t *next, const void *data, size_t size, gnrc_nettype_t type)
Adds a new gnrc_pktsnip_t and its packet to the packet buffer.
gnrc_pktsnip_t * gnrc_pktbuf_reverse_snips(gnrc_pktsnip_t *pkt)
Reverses snip order of a packet in a write-protected manner.
void gnrc_pktbuf_init(void)
Initializes packet buffer module.
void gnrc_pktbuf_hold(gnrc_pktsnip_t *pkt, unsigned int num)
Increases gnrc_pktsnip_t::users of pkt atomically.
int gnrc_pktbuf_merge(gnrc_pktsnip_t *pkt)
Merge pktsnip chain to single pktsnip.
static void gnrc_pktbuf_release(gnrc_pktsnip_t *pkt)
Decreases gnrc_pktsnip_t::users of pkt atomically and removes it if it reaches 0 and reports GNRC_NET...
Definition: pktbuf.h:193
void gnrc_pktbuf_stats(void)
Prints some statistics about the packet buffer to stdout.
gnrc_pktsnip_t * gnrc_pktbuf_remove_snip(gnrc_pktsnip_t *pkt, gnrc_pktsnip_t *snip)
Deletes a snip from a packet and the packet buffer.
Mutex for thread synchronization.
General definitions for network packets and their helper functions.
Error reporting definitions.
Protocol type definitions.
Type to represent parts (either headers or payload) of a packet, called snips.
Definition: pkt.h:105
Macros for basic linked list operations.