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)