The friendly Operating System for the Internet of Things
rpl.h File Reference

RPL header. More...

Detailed Description

Declaration of global variables and functions needed for core functionality of RPL.

Header which includes all core RPL-functions.

Author
Eric Engel eric..nosp@m.enge.nosp@m.l@fu-.nosp@m.berl.nosp@m.in.de
Fabian Brandt fabia.nosp@m.nbr@.nosp@m.zedat.nosp@m..fu-.nosp@m.berli.nosp@m.n.de
Martine Lenders mlend.nosp@m.ers@.nosp@m.inf.f.nosp@m.u-be.nosp@m.rlin..nosp@m.de
Cenk Gündoğan cnkgn.nosp@m.dgn@.nosp@m.gmail.nosp@m..com

Definition in file rpl.h.

#include <string.h>
#include <stdint.h>
#include "net/gnrc.h"
#include "net/gnrc/ipv6.h"
#include "net/ipv6/addr.h"
#include "net/gnrc/nettype.h"
#include "net/gnrc/rpl/structs.h"
#include "net/gnrc/rpl/dodag.h"
#include "net/gnrc/rpl/of_manager.h"
#include "net/fib.h"
#include "xtimer.h"
#include "trickle.h"
+ Include dependency graph for rpl.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define GNRC_RPL_STACK_SIZE   (THREAD_STACKSIZE_DEFAULT)
 Default stack size to use for the RPL thread.
 
#define GNRC_RPL_PRIO   (GNRC_IPV6_PRIO + 1)
 Default priority for the RPL thread.
 
#define GNRC_RPL_MSG_QUEUE_SIZE   (8U)
 Default message queue size to use for the RPL thread.
 
#define GNRC_RPL_ALL_NODES_ADDR   {{ 0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1a }}
 Static initializer for the all-RPL-nodes multicast IPv6 address (ff02::1a) More...
 
#define GNRC_RPL_MSG_TYPE_LIFETIME_UPDATE   (0x0900)
 Message type for lifetime updates.
 
#define GNRC_RPL_MSG_TYPE_TRICKLE_INTERVAL   (0x0901)
 Message type for trickle intervals.
 
#define GNRC_RPL_MSG_TYPE_TRICKLE_CALLBACK   (0x0902)
 Message type for trickle callbacks.
 
#define GNRC_RPL_MSG_TYPE_DAO_HANDLE   (0x0903)
 Message type for handling DAO sending.
 
#define GNRC_RPL_INFINITE_RANK   (0xFFFF)
 Infinite rank. More...
 
#define GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE   (256)
 Default minimum hop rank increase. More...
 
#define GNRC_RPL_DEFAULT_MAX_RANK_INCREASE   (0)
 Maximum rank increase.
 
#define GNRC_RPL_IMPLEMENTED_OFS_NUMOF   (1)
 Number of implemented Objective Functions.
 
#define GNRC_RPL_DEFAULT_OCP   (0)
 Default Objective Code Point (OF0)
 
#define GNRC_RPL_DEFAULT_INSTANCE   (0)
 Default Instance ID.
 
#define GNRC_RPL_DEFAULT_PREFIX_LEN   (64)
 Default prefix length for the DODAG id.
 
#define GNRC_RPL_DEFAULT_PREFIX_LIFETIME   (0xFFFFFFFF)
 Default prefix valid and preferred time for the DODAG id. More...
 
#define GNRC_RPL_GROUNDED   (1)
 A DODAG can be grounded or floating. More...
 
#define GNRC_RPL_CLEANUP_TIME   (5)
 Cleanup timeout in seconds.
 
#define GNRC_RPL_ROOT_RANK   (GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE)
 Rank of the root node.
 
#define GNRC_RPL_ICMPV6_CODE_DIS   (0x00)
 DIS ICMPv6 code. More...
 
#define GNRC_RPL_ICMPV6_CODE_DIO   (0x01)
 DIO ICMPv6 code. More...
 
#define GNRC_RPL_ICMPV6_CODE_DAO   (0x02)
 DAO ICMPv6 code. More...
 
#define GNRC_RPL_ICMPV6_CODE_DAO_ACK   (0x03)
 DAO ACK ICMPv6 code. More...
 
#define GNRC_RPL_LIFETIME_UPDATE_STEP   (2)
 Update interval of the lifetime update function.
 
#define DAGRANK(rank, mhri)   (rank/mhri)
 Rank part of the DODAG. More...
 
RPL Mode of Operations
#define GNRC_RPL_MOP_NO_DOWNWARD_ROUTES   (0x00)
 
#define GNRC_RPL_MOP_NON_STORING_MODE   (0x01)
 
#define GNRC_RPL_MOP_STORING_MODE_NO_MC   (0x02)
 
#define GNRC_RPL_MOP_STORING_MODE_MC   (0x03)
 
#define GNRC_RPL_DEFAULT_MOP   GNRC_RPL_MOP_STORING_MODE_NO_MC
 default MOP set on compile time
 
Trickle parameters
#define GNRC_RPL_DEFAULT_DIO_INTERVAL_DOUBLINGS   (20)
 
#define GNRC_RPL_DEFAULT_DIO_INTERVAL_MIN   (3)
 
#define GNRC_RPL_DEFAULT_DIO_REDUNDANCY_CONSTANT   (10)
 
Default parent and route entry lifetime

default lifetime will be multiplied by the lifetime unit to obtain the resulting lifetime

See also
DODAG Configuration
#define GNRC_RPL_DEFAULT_LIFETIME   (5)
 
#define GNRC_RPL_LIFETIME_UNIT   (60)
 
Parameters used for DAO handling
#define GNRC_RPL_DAO_SEND_RETRIES   (4)
 
#define GNRC_RPL_DEFAULT_WAIT_FOR_DAO_ACK   (3)
 
#define GNRC_RPL_REGULAR_DAO_INTERVAL   (60)
 
#define GNRC_RPL_DEFAULT_DAO_DELAY   (1)
 
Node Status
#define GNRC_RPL_NORMAL_NODE   (0)
 
#define GNRC_RPL_ROOT_NODE   (1)
 
#define GNRC_RPL_LEAF_NODE   (2)
 
RPL Control Message Options
#define GNRC_RPL_OPT_PAD1   (0)
 
#define GNRC_RPL_OPT_PADN   (1)
 
#define GNRC_RPL_OPT_DAG_METRIC_CONTAINER   (2)
 
#define GNRC_RPL_OPT_ROUTE_INFO   (3)
 
#define GNRC_RPL_OPT_DODAG_CONF   (4)
 
#define GNRC_RPL_OPT_TARGET   (5)
 
#define GNRC_RPL_OPT_TRANSIT   (6)
 
#define GNRC_RPL_OPT_SOLICITED_INFO   (7)
 
#define GNRC_RPL_OPT_PREFIX_INFO   (8)
 
#define GNRC_RPL_OPT_TARGET_DESC   (9)
 
Global / Local instance id masks
#define GNRC_RPL_INSTANCE_ID_MSB   (1 << 7)
 
#define GNRC_RPL_GLOBAL_INSTANCE_MASK   (0x7F)
 
#define GNRC_RPL_LOCAL_INSTANCE_MASK   (0x3F)
 
#define GNRC_RPL_INSTANCE_D_FLAG_MASK   (1 << 6)
 

Functions

kernel_pid_t gnrc_rpl_init (kernel_pid_t if_pid)
 Initialization of the RPL thread. More...
 
gnrc_rpl_instance_tgnrc_rpl_root_init (uint8_t instance_id, ipv6_addr_t *dodag_id, bool gen_inst_id, bool local_inst_id)
 Initialization of a node as root. More...
 
void gnrc_rpl_send_DIO (gnrc_rpl_instance_t *instance, ipv6_addr_t *destination)
 Send a DIO of the instance to the destination. More...
 
void gnrc_rpl_send_DIS (gnrc_rpl_instance_t *instance, ipv6_addr_t *destination)
 Send a DIS of the instace to the destination. More...
 
void gnrc_rpl_send_DAO (gnrc_rpl_instance_t *instance, ipv6_addr_t *destination, uint8_t lifetime)
 Send a DAO of the dodag to the destination. More...
 
void gnrc_rpl_send_DAO_ACK (gnrc_rpl_instance_t *instance, ipv6_addr_t *destination, uint8_t seq)
 Send a DAO-ACK of the instance to the destination. More...
 
void gnrc_rpl_recv_DIS (gnrc_rpl_dis_t *dis, kernel_pid_t iface, ipv6_addr_t *src, ipv6_addr_t *dst, uint16_t len)
 Parse a DIS. More...
 
void gnrc_rpl_recv_DIO (gnrc_rpl_dio_t *dio, kernel_pid_t iface, ipv6_addr_t *src, ipv6_addr_t *dst, uint16_t len)
 Parse a DIO. More...
 
void gnrc_rpl_recv_DAO (gnrc_rpl_dao_t *dao, kernel_pid_t iface, ipv6_addr_t *src, ipv6_addr_t *dst, uint16_t len)
 Parse a DAO. More...
 
void gnrc_rpl_recv_DAO_ACK (gnrc_rpl_dao_ack_t *dao_ack, kernel_pid_t iface, ipv6_addr_t *src, ipv6_addr_t *dst, uint16_t len)
 Parse a DAO-ACK. More...
 
void gnrc_rpl_delay_dao (gnrc_rpl_dodag_t *dodag)
 Delay the DAO sending interval. More...
 
void gnrc_rpl_long_delay_dao (gnrc_rpl_dodag_t *dodag)
 Long delay the DAO sending interval. More...
 
gnrc_rpl_instance_tgnrc_rpl_root_instance_init (uint8_t instance_id, ipv6_addr_t *dodag_id, uint8_t mop)
 Create a new RPL instance and RPL DODAG. More...
 
void gnrc_rpl_send (gnrc_pktsnip_t *pkt, kernel_pid_t iface, ipv6_addr_t *src, ipv6_addr_t *dst, ipv6_addr_t *dodag_id)
 Send a control message. More...
 
uint8_t gnrc_rpl_gen_instance_id (bool local)
 Generate a local or global instance id. More...
 
static void gnrc_rpl_config_pio (gnrc_rpl_dodag_t *dodag, bool status)
 (De-)Activate the transmission of Prefix Information Options within DIOs for a particular DODAG More...
 

Variables

kernel_pid_t gnrc_rpl_pid
 PID of the RPL thread.
 
const ipv6_addr_t ipv6_addr_all_rpl_nodes
 

Sequence counter handling

See also
Sequence Counter Operation
#define GNRC_RPL_COUNTER_MAX   (255)
 
#define GNRC_RPL_COUNTER_LOWER_REGION   (127)
 
#define GNRC_RPL_COUNTER_SEQ_WINDOW   (16)
 
#define GNRC_RPL_COUNTER_INIT   (GNRC_RPL_COUNTER_MAX - GNRC_RPL_COUNTER_SEQ_WINDOW + 1)
 
static uint8_t GNRC_RPL_COUNTER_INCREMENT (uint8_t counter)
 
static bool GNRC_RPL_COUNTER_IS_INIT (uint8_t counter)
 
static bool GNRC_RPL_COUNTER_GREATER_THAN_LOCAL (uint8_t A, uint8_t B)
 
static bool GNRC_RPL_COUNTER_GREATER_THAN (uint8_t A, uint8_t B)