pktbuf.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Martine Lenders <mlenders@inf.fu-berlin.de>
3  * 2015 Freie Universit├Ąt Berlin
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser
6  * General Public License v2.1. See the file LICENSE in the top level
7  * directory for more details.
8  */
9 
30 #ifndef NET_GNRC_PKTBUF_H
31 #define NET_GNRC_PKTBUF_H
32 
33 #include <stdbool.h>
34 #include <stdlib.h>
35 #include <string.h>
36 
37 #include "cpu_conf.h"
38 #include "net/gnrc/pkt.h"
39 #include "net/gnrc/neterr.h"
40 #include "net/gnrc/nettype.h"
41 #include "utlist.h"
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
57 #ifndef GNRC_PKTBUF_SIZE
58 #define GNRC_PKTBUF_SIZE (6144)
59 #endif /* GNRC_PKTBUF_SIZE */
60 
64 void gnrc_pktbuf_init(void);
65 
87 gnrc_pktsnip_t *gnrc_pktbuf_add(gnrc_pktsnip_t *next, const void *data, size_t size,
88  gnrc_nettype_t type);
89 
124 
144 int gnrc_pktbuf_realloc_data(gnrc_pktsnip_t *pkt, size_t size);
145 
152 void gnrc_pktbuf_hold(gnrc_pktsnip_t *pkt, unsigned int num);
153 
164 void gnrc_pktbuf_release_error(gnrc_pktsnip_t *pkt, uint32_t err);
165 
172 static inline void gnrc_pktbuf_release(gnrc_pktsnip_t *pkt)
173 {
175 }
176 
192 
202 
213 
231 
285 
286 #ifdef DEVELHELP
287 
294 void gnrc_pktbuf_stats(void);
295 #endif
296 
297 /* for testing */
298 #ifdef TEST_SUITES
299 
305 bool gnrc_pktbuf_is_empty(void);
306 
313 bool gnrc_pktbuf_is_sane(void);
314 #endif
315 
316 #ifdef __cplusplus
317 }
318 #endif
319 
320 #endif /* NET_GNRC_PKTBUF_H */
321 
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:172
gnrc_pktsnip_t * gnrc_pktbuf_reverse_snips(gnrc_pktsnip_t *pkt)
Reverses snip order of a packet in a write-protected manner.
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...
Error reporting definitions.
General definitions for network packets and their helper functions.
void gnrc_pktbuf_stats(void)
Prints some statistics about the packet buffer to stdout.
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...
bool gnrc_pktbuf_is_sane(void)
Checks if the implementation&#39;s internal invariants still uphold.
void gnrc_pktbuf_hold(gnrc_pktsnip_t *pkt, unsigned int num)
Increases gnrc_pktsnip_t::users of pkt atomically.
#define GNRC_NETERR_SUCCESS
Error code to signalise success (no error occured) to an gnrc_neterr subscriber.
Definition: neterr.h:43
Macros for basic linked list operations.
bool gnrc_pktbuf_is_empty(void)
Checks if packet buffer is empty.
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_remove_snip(gnrc_pktsnip_t *pkt, gnrc_pktsnip_t *snip)
Deletes a snip from a packet and the packet buffer.
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...
void gnrc_pktbuf_init(void)
Initializes packet buffer module.
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.
Type to represent parts (either headers or payload) of a packet, called snips.
Definition: pkt.h:107
gnrc_nettype_t
Definition of protocol types in the network stack.
Definition: nettype.h:42
stdlib.h wrapper for MSP430
int gnrc_pktbuf_merge(gnrc_pktsnip_t *pkt)
Merge pktsnip chain to single pktsnip.
gnrc_pktsnip_t * gnrc_pktbuf_replace_snip(gnrc_pktsnip_t *pkt, gnrc_pktsnip_t *old, gnrc_pktsnip_t *add)
Replace a snip from a packet and the packet buffer by another snip.
Protocol type definitions.