20#ifndef NET_GNRC_SIXLOWPAN_FRAG_RB_H
21#define NET_GNRC_SIXLOWPAN_FRAG_RB_H
30#ifdef MODULE_GNRC_SIXLOWPAN_FRAG_SFR
42#define GNRC_SIXLOWPAN_FRAG_RB_GC_MSG (0x0226)
104#if IS_USED(MODULE_GNRC_SIXLOWPAN_FRAG_SFR) || defined(DOXYGEN)
136 size_t offset,
unsigned page);
210 return (rbuf->
pkt == NULL);
213#if defined(TEST_SUITES) || defined(DOXYGEN)
265#if defined(MODULE_GNRC_SIXLOWPAN_FRAG_RB) || defined(DOXYGEN)
294#if defined(TEST_SUITES) || defined(DOXYGEN)
Platform-independent access to architecture details.
#define assert(cond)
abort the program if assertion is false
gnrc_sixlowpan_frag_rb_t * gnrc_sixlowpan_frag_rb_add(gnrc_netif_hdr_t *netif_hdr, gnrc_pktsnip_t *frag, size_t offset, unsigned page)
Adds a new fragment to the reassembly buffer.
void gnrc_sixlowpan_frag_rb_reset(void)
Resets the packet buffer to a clean state.
static bool gnrc_sixlowpan_frag_rb_entry_empty(const gnrc_sixlowpan_frag_rb_t *rbuf)
Checks if a reassembly buffer entry is unset.
int gnrc_sixlowpan_frag_rb_dispatch_when_complete(gnrc_sixlowpan_frag_rb_t *rbuf, gnrc_netif_hdr_t *netif)
Checks if a reassembly buffer entry is complete and dispatches it to the next layer if that is the ca...
gnrc_sixlowpan_frag_rb_t * gnrc_sixlowpan_frag_rb_get_by_datagram(const gnrc_netif_hdr_t *netif_hdr, uint16_t tag)
Gets a reassembly buffer entry with a given link-layer address pair and tag.
bool gnrc_sixlowpan_frag_rb_ints_empty(void)
Check if pool of fragment intervals is empty.
static void gnrc_sixlowpan_frag_rb_remove(gnrc_sixlowpan_frag_rb_t *rbuf)
Unsets a reassembly buffer entry (but does not free rbuf_t::super::pkt)
void gnrc_sixlowpan_frag_rb_gc(void)
Garbage collect reassembly buffer.
const gnrc_sixlowpan_frag_rb_t * gnrc_sixlowpan_frag_rb_array(void)
Returns a pointer to the array representing the reassembly buffer.
void gnrc_sixlowpan_frag_rb_rm_by_datagram(const gnrc_netif_hdr_t *netif_hdr, uint16_t tag)
Removes a reassembly buffer entry with a given link-layer address pair and tag.
bool gnrc_sixlowpan_frag_rb_exists(const gnrc_netif_hdr_t *netif_hdr, uint16_t tag)
Checks if a reassembly buffer entry with a given link-layer address pair and tag exists.
void gnrc_sixlowpan_frag_rb_base_rm(gnrc_sixlowpan_frag_rb_base_t *entry)
Remove base entry.
struct gnrc_sixlowpan_frag_rb_int gnrc_sixlowpan_frag_rb_int_t
Fragment intervals to identify limits of fragments and duplicates.
#define SIXLOWPAN_SFR_ACK_BITMAP_SIZE
Acknowledgment bitmap size in bits.
Generic network interface header.
General definitions for network packets and their helper functions.
6LoWPAN selective fragment recovery dispatch type and helper function definitions.
Generic network interface header.
Type to represent parts (either headers or payload) of a packet, called snips.
Base class for both reassembly buffer and virtual reassembly buffer.
gnrc_sixlowpan_frag_rb_int_t * ints
intervals of already received fragments
uint16_t datagram_size
the datagram's size
uint16_t tag
the datagram's tag
uint8_t src_len
length of gnrc_sixlowpan_frag_rb_t::src
uint32_t arrival
time in microseconds of arrival of last received fragment
uint8_t dst_len
length of gnrc_sixlowpan_frag_rb_t::dst
uint16_t current_size
The number of bytes currently received of the complete datagram.
Fragment intervals to identify limits of fragments and duplicates.
struct gnrc_sixlowpan_frag_rb_int * next
next element in fragment interval list
uint16_t start
start byte of the fragment interval
uint16_t end
end byte of the fragment interval
An entry in the 6LoWPAN reassembly buffer.
gnrc_sixlowpan_frag_rb_base_t super
base class
gnrc_pktsnip_t * pkt
The reassembled packet in the packet buffer.
int8_t offset_diff
offset change due to recompression
BITFIELD(received, SIXLOWPAN_SFR_ACK_BITMAP_SIZE)
Bitmap for received fragments.
Configuration macros for 6LoWPAN.
Bitmap type to simplify comparisons.