sfr.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2019 Freie Universität Berlin
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
34 #ifndef NET_GNRC_SIXLOWPAN_FRAG_SFR_H
35 #define NET_GNRC_SIXLOWPAN_FRAG_SFR_H
36 
37 #include "assert.h"
38 #include "bitfield.h"
39 #include "net/gnrc/pkt.h"
40 #include "net/gnrc/netif.h"
45 #include "net/sixlowpan/sfr.h"
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
54 #define GNRC_SIXLOWPAN_FRAG_SFR_ARQ_TIMEOUT_MSG (0x0227)
55 
59 #define GNRC_SIXLOWPAN_FRAG_SFR_INTER_FRAG_GAP_MSG (0x0228)
60 
64 typedef struct {
65  uint32_t datagram_resends;
66  struct {
67  uint32_t usual;
68  uint32_t aborts;
69  uint32_t forwarded;
70  } fragments_sent;
71  struct {
72  uint32_t by_nack;
73  uint32_t by_timeout;
74  } fragment_resends;
75  struct {
76  uint32_t full;
77  uint32_t partly;
78  uint32_t aborts;
79  uint32_t forwarded;
80  } acks;
82 
87 
96 {
97  if (IS_USED(MODULE_GNRC_SIXLOWPAN_FRAG_SFR) &&
98  gnrc_netif_is_6lo(netif)) {
99 #if IS_USED(MODULE_GNRC_NETIF_6LO)
101  netif->sixlo.max_frag_size =
104  : netif->sixlo.max_frag_size;
106 #endif
107  }
108 }
109 
121 static inline bool gnrc_sixlowpan_frag_sfr_netif(gnrc_netif_t *netif)
122 {
123 #if IS_USED(MODULE_GNRC_NETIF_6LO)
124  return IS_USED(MODULE_GNRC_SIXLOWPAN_FRAG_SFR) &&
125  gnrc_netif_is_6lo(netif) &&
127 #else
128  (void)netif;
129  return false;
130 #endif
131 }
132 
147  unsigned page);
148 
156 void gnrc_sixlowpan_frag_sfr_recv(gnrc_pktsnip_t *pkt, void *ctx, unsigned page);
157 
173  sixlowpan_sfr_rfrag_t *rfrag,
175  unsigned page);
176 
184 
192 
193 #if IS_USED(MODULE_GNRC_SIXLOWPAN_FRAG_SFR_STATS)
199 void gnrc_sixlowpan_frag_sfr_stats_get(gnrc_sixlowpan_frag_sfr_stats_t *stats);
200 #endif /* IS_USED(MODULE_GNRC_SIXLOWPAN_FRAG_SFR_STATS) */
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 
206 #endif /* NET_GNRC_SIXLOWPAN_FRAG_SFR_H */
#define GNRC_NETIF_6LO_LOCAL_FLAGS_SFR
Selective Fragment Recovery enabled.
Definition: 6lo.h:46
POSIX.1-2008 compliant version of the assert macro.
#define assert(cond)
abort the program if assertion is false
Definition: assert.h:136
bitfields operations on bitfields of arbitrary length
Fragmentation buffer definitions.
Definition for GNRC's network interfaces.
#define CONFIG_GNRC_SIXLOWPAN_SFR_OPT_FRAG_SIZE
Default value for fragment size that the sender should use to start with (OptFragmentSize)
Definition: config.h:206
#define CONFIG_GNRC_SIXLOWPAN_SFR_MIN_FRAG_SIZE
Default minimum value for fragment size (MinFragmentSize)
Definition: config.h:183
int gnrc_sixlowpan_frag_sfr_forward(gnrc_pktsnip_t *pkt, sixlowpan_sfr_rfrag_t *rfrag, gnrc_sixlowpan_frag_vrb_t *vrbe, unsigned page)
Forward a fragment via selective fragment recovery.
void gnrc_sixlowpan_frag_sfr_arq_timeout(gnrc_sixlowpan_frag_fb_t *fbuf)
Handles an Acknowledgment request timeout.
void gnrc_sixlowpan_frag_sfr_recv(gnrc_pktsnip_t *pkt, void *ctx, unsigned page)
Handles a packet containing a selective fragment recovery header.
void gnrc_sixlowpan_frag_sfr_send(gnrc_pktsnip_t *pkt, void *ctx, unsigned page)
Sends a packet via selective fragment recovery.
void gnrc_sixlowpan_frag_sfr_init(void)
Initialize selective fragment recovery.
static bool gnrc_sixlowpan_frag_sfr_netif(gnrc_netif_t *netif)
Checks if a network interface is configured for selective fragment recovery.
Definition: sfr.h:121
void gnrc_sixlowpan_frag_sfr_inter_frame_gap(gnrc_sixlowpan_frag_fb_t *fbuf)
Handles inter frame gap.
static void gnrc_sixlowpan_frag_sfr_init_iface(gnrc_netif_t *netif)
Initialize a network interface for selective fragment recovery.
Definition: sfr.h:95
#define IS_USED(module)
Checks whether a module is being used or not.
Definition: modules.h:71
General definitions for network packets and their helper functions.
6LoWPAN selective fragment recovery type definitions for GNRC
6LoWPAN selective fragment recovery dispatch type and helper function definitions.
uint16_t max_frag_size
Maximum fragment size for 6Lo fragmentation.
Definition: 6lo.h:59
uint8_t local_flags
6LoWPAN capability flags beyond the ones advertised in 6LoWPAN Capability Indication Option (6CIO)
Definition: 6lo.h:68
Representation of a network interface.
Definition: netif.h:135
gnrc_netif_6lo_t sixlo
6Lo component
Definition: netif.h:210
Type to represent parts (either headers or payload) of a packet, called snips.
Definition: pkt.h:108
6LoWPAN fragmentation buffer entry.
Definition: fb.h:47
Stats on selective fragment recovery.
Definition: sfr.h:64
uint32_t usual
non-abort fragments sent
Definition: sfr.h:67
uint32_t full
full RFRAGs ACKs sent
Definition: sfr.h:76
uint32_t forwarded
forwarded fragments
Definition: sfr.h:69
uint32_t by_timeout
fragments resent due to an ARQ timeout
Definition: sfr.h:73
uint32_t datagram_resends
datagrams resent
Definition: sfr.h:65
uint32_t by_nack
fragments resent due to a 0 in ACK's bitmap
Definition: sfr.h:72
uint32_t partly
partly ACKing RFRAGs sent
Definition: sfr.h:77
uint32_t aborts
abort pseudo-fragments sent
Definition: sfr.h:68
Representation of the virtual reassembly buffer entry.
Definition: vrb.h:47
Recoverable fragment header.
Definition: sfr.h:96
Configuration macros for 6LoWPAN.
Virtual reassembly buffer definitions.