Loading...
Searching...
No Matches
structs.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2017 HAW Hamburg
3 * Copyright (C) 2015–2018 Cenk Gündoğan <cenk.guendogan@haw-hamburg.de>
4 * Copyright (C) 2013 INRIA.
5 *
6 * This file is subject to the terms and conditions of the GNU Lesser
7 * General Public License v2.1. See the file LICENSE in the top level
8 * directory for more details.
9 */
10
24#ifndef NET_GNRC_RPL_STRUCTS_H
25#define NET_GNRC_RPL_STRUCTS_H
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31#include "byteorder.h"
32#include "net/ipv6/addr.h"
33#include "evtimer.h"
34#include "evtimer_msg.h"
35#include "trickle.h"
36
41#define GNRC_RPL_OPT_DODAG_CONF_LEN (14)
42#define GNRC_RPL_OPT_PREFIX_INFO_LEN (30)
43#define GNRC_RPL_OPT_TARGET_LEN (18)
44#define GNRC_RPL_OPT_TRANSIT_INFO_LEN (4)
51#define GNRC_RPL_DAO_D_BIT (1 << 6)
52#define GNRC_RPL_DAO_K_BIT (1 << 7)
59#define GNRC_RPL_DAO_ACK_D_BIT (1 << 7)
67#define GNRC_RPL_REQ_DIO_OPT_DODAG_CONF_SHIFT (0)
68#define GNRC_RPL_REQ_DIO_OPT_DODAG_CONF (1 << GNRC_RPL_REQ_DIO_OPT_DODAG_CONF_SHIFT)
69#define GNRC_RPL_REQ_DIO_OPT_PREFIX_INFO_SHIFT (1)
70#define GNRC_RPL_REQ_DIO_OPT_PREFIX_INFO (1 << GNRC_RPL_REQ_DIO_OPT_PREFIX_INFO_SHIFT)
79typedef struct __attribute__((packed)) {
80 uint8_t type;
81 uint8_t length;
83
90typedef struct __attribute__((packed)) {
91 uint8_t instance_id;
94 uint8_t g_mop_prf;
95 uint8_t dtsn;
96 uint8_t flags;
97 uint8_t reserved;
100
121
128typedef struct __attribute__((packed)) {
129 uint8_t flags;
130 uint8_t reserved;
132
139typedef struct __attribute__((packed)) {
140 uint8_t type;
141 uint8_t length;
142 uint8_t instance_id;
143 uint8_t VID_flags;
147
154typedef struct __attribute__((packed)) {
155 uint8_t instance_id;
156 uint8_t k_d_flags;
157 uint8_t reserved;
158 uint8_t dao_sequence;
160
167typedef struct __attribute__((packed)) {
168 uint8_t instance_id;
169 uint8_t d_reserved;
170 uint8_t dao_sequence;
171 uint8_t status;
173
180typedef struct __attribute__((packed)) {
181 uint8_t type;
182 uint8_t length;
183 uint8_t flags;
187
194typedef struct __attribute__((packed)) {
195 uint8_t type;
196 uint8_t length;
197 uint8_t e_flags;
198 uint8_t path_control;
202
221
225typedef struct gnrc_rpl_dodag gnrc_rpl_dodag_t;
226
230typedef struct gnrc_rpl_parent gnrc_rpl_parent_t;
231
235typedef struct gnrc_rpl_instance gnrc_rpl_instance_t;
236
239struct gnrc_rpl_parent {
240 gnrc_rpl_parent_t *next;
241 uint8_t state;
242 ipv6_addr_t addr;
243 uint8_t dtsn;
244 uint16_t rank;
245 gnrc_rpl_dodag_t *dodag;
246 double link_metric;
247 uint8_t link_metric_type;
251 evtimer_msg_event_t timeout_event;
252};
260typedef struct {
261 uint16_t ocp;
272 uint16_t (*calc_rank)(gnrc_rpl_dodag_t *dodag, uint16_t base_rank);
273
289 int (*parent_cmp)(gnrc_rpl_parent_t *parent1, gnrc_rpl_parent_t *parent2);
297 void (*reset)(gnrc_rpl_dodag_t *dodag);
298 void (*parent_state_callback)(gnrc_rpl_parent_t *, int, int);
305 void (*init)(gnrc_rpl_dodag_t *dodag);
306 void (*process_dio)(void);
308
312struct gnrc_rpl_dodag {
313 ipv6_addr_t dodag_id;
314 gnrc_rpl_parent_t *parents;
315 gnrc_rpl_instance_t *instance;
316 uint8_t dtsn;
317 uint8_t prf;
318 uint8_t dio_interval_doubl;
319 uint8_t dio_min;
320 uint8_t dio_redun;
321 uint8_t default_lifetime;
322 uint16_t lifetime_unit;
323 kernel_pid_t iface;
324 uint8_t version;
325 uint8_t grounded;
326 uint16_t my_rank;
327 uint8_t node_status;
328 uint8_t dao_seq;
329 uint8_t dao_counter;
330 bool dao_ack_received;
331 uint8_t dio_opts;
333 evtimer_msg_event_t dao_event;
334 trickle_t trickle;
335};
336
337struct gnrc_rpl_instance {
338 uint8_t id;
339 uint8_t state;
340 gnrc_rpl_dodag_t dodag;
341 uint8_t mop;
342 gnrc_rpl_of_t *of;
343 uint16_t min_hop_rank_inc;
344 uint16_t max_rank_inc;
348 evtimer_msg_event_t cleanup_event;
349};
357typedef struct {
358 uint8_t type;
359 uint8_t length;
361
373
374#ifdef __cplusplus
375}
376#endif
377
378#endif /* NET_GNRC_RPL_STRUCTS_H */
Functions to work with different byte orders.
evtimer API definitions
IPC-based evtimer definitions.
int16_t kernel_pid_t
Unique process identifier.
Definition sched.h:139
Definitions for IPv6 addresses.
IPC-message event.
Definition evtimer_msg.h:40
Destination Advertisement Object Acknowledgement.
Definition structs.h:167
uint8_t dao_sequence
sequence must be equal to the sequence from the DAO object
Definition structs.h:170
uint8_t d_reserved
if set, indicates that the DODAG id should be included
Definition structs.h:169
uint8_t instance_id
id of the instance
Definition structs.h:168
uint8_t status
indicates completion
Definition structs.h:171
Destination Advertisement Object.
Definition structs.h:154
uint8_t instance_id
id of the instance
Definition structs.h:155
uint8_t reserved
reserved
Definition structs.h:157
uint8_t k_d_flags
K and D flags.
Definition structs.h:156
uint8_t dao_sequence
sequence of the DAO, needs to be used for DAO-ACK
Definition structs.h:158
DIO Base Object.
Definition structs.h:90
uint8_t version_number
version number of the DODAG
Definition structs.h:92
uint8_t dtsn
Destination Advertisement Trigger Sequence Number.
Definition structs.h:95
uint8_t g_mop_prf
grounded, MOP, preferred flags
Definition structs.h:94
uint8_t flags
unused
Definition structs.h:96
uint8_t reserved
reserved
Definition structs.h:97
network_uint16_t rank
rank of the parent emitting the DIO
Definition structs.h:93
ipv6_addr_t dodag_id
id of the dodag
Definition structs.h:98
uint8_t instance_id
id of the instance
Definition structs.h:91
DODAG Information Solicitation.
Definition structs.h:128
uint8_t flags
unused
Definition structs.h:129
uint8_t reserved
reserved
Definition structs.h:130
internal unpacked struct type for DIS solicited option insertion
Definition structs.h:365
uint8_t type
Option Type: 0x07.
Definition structs.h:366
uint8_t version_number
version number of the DODAG
Definition structs.h:371
ipv6_addr_t dodag_id
DODAG ID predicate.
Definition structs.h:370
uint8_t VID_flags
V|I|D predicate options followed by 5 bit unused flags.
Definition structs.h:369
uint8_t length
Option Length: 19 bytes.
Definition structs.h:367
uint8_t instance_id
id of the instance
Definition structs.h:368
internal unpacked struct type for option insertion
Definition structs.h:357
uint8_t length
Option Length, does not include the first two byte.
Definition structs.h:359
uint8_t type
Option Type.
Definition structs.h:358
Objective function representation.
Definition structs.h:260
uint16_t ocp
objective code point
Definition structs.h:261
DIS Solicited Information option.
Definition structs.h:139
uint8_t VID_flags
V|I|D predicate options followed by 5 bit unused flags.
Definition structs.h:143
uint8_t type
Option Type: 0x07.
Definition structs.h:140
uint8_t length
Option Length: 19 bytes.
Definition structs.h:141
uint8_t version_number
version number of the DODAG
Definition structs.h:145
ipv6_addr_t dodag_id
DODAG ID predicate.
Definition structs.h:144
uint8_t instance_id
id of the instance
Definition structs.h:142
DODAG Configuration Option.
Definition structs.h:107
uint8_t length
length of option, not including first two bytes
Definition structs.h:109
uint8_t dio_int_min
trickle Imin parameter
Definition structs.h:112
uint8_t type
Option Type: 0x04.
Definition structs.h:108
network_uint16_t lifetime_unit
unit in seconds
Definition structs.h:119
uint8_t reserved
reserved
Definition structs.h:117
uint8_t dio_redun
trickle k parameter
Definition structs.h:113
network_uint16_t ocp
Objective Code Point.
Definition structs.h:116
uint8_t default_lifetime
lifetime of RPL routes (lifetime * lifetime_unit)
Definition structs.h:118
network_uint16_t max_rank_inc
allowable increase in rank
Definition structs.h:114
network_uint16_t min_hop_rank_inc
DAGRank(rank) = floor(rank/MinHopRankIncrease)
Definition structs.h:115
uint8_t dio_int_doubl
trickle Imax parameter
Definition structs.h:111
uint8_t flags_a_pcs
flags
Definition structs.h:110
Prefix Information Option.
Definition structs.h:209
uint8_t length
option length without the first two bytes
Definition structs.h:211
ipv6_addr_t prefix
prefix used for Stateless Address Autoconfiguration
Definition structs.h:218
uint8_t type
option type
Definition structs.h:210
uint32_t reserved
reserved
Definition structs.h:217
network_uint32_t valid_lifetime
valid lifetime
Definition structs.h:215
uint8_t LAR_flags
flags and resereved
Definition structs.h:214
uint8_t prefix_len
prefix length
Definition structs.h:213
network_uint32_t pref_lifetime
preferred lifetime
Definition structs.h:216
RPL-Option Generic Format.
Definition structs.h:79
uint8_t type
Option Type.
Definition structs.h:80
uint8_t length
Option Length, does not include the first two byte.
Definition structs.h:81
Target Option.
Definition structs.h:180
ipv6_addr_t target
IPv6 prefix, address or multicast group.
Definition structs.h:185
uint8_t type
option type
Definition structs.h:181
uint8_t prefix_length
number of valid leading bits in the IPv6 prefix
Definition structs.h:184
uint8_t flags
unused
Definition structs.h:183
uint8_t length
option length without the first two bytes
Definition structs.h:182
Transit Option.
Definition structs.h:194
uint8_t length
option length without the first two bytes
Definition structs.h:196
uint8_t path_control
limits the number of DAO parents
Definition structs.h:198
uint8_t path_lifetime
lifetime of routes
Definition structs.h:200
uint8_t path_sequence
increased value for route updates
Definition structs.h:199
uint8_t type
option type
Definition structs.h:195
uint8_t e_flags
external flag indicates external routes
Definition structs.h:197
struct gnrc_rpl_instance gnrc_rpl_instance_t
Instance representation.
Definition structs.h:235
struct gnrc_rpl_parent gnrc_rpl_parent_t
Parent representation.
Definition structs.h:230
struct gnrc_rpl_dodag gnrc_rpl_dodag_t
DODAG representation.
Definition structs.h:225
all state variables of a trickle timer
Definition trickle.h:49
Trickle timer interface definition.
A 16 bit integer in big endian aka network byte order.
Definition byteorder.h:74
A 32 bit integer in big endian aka network byte order.
Definition byteorder.h:84
Data type to represent an IPv6 address.
Definition addr.h:72