Loading...
Searching...
No Matches
rpl.h File Reference

RPL header. More...

Detailed Description

RPL header.

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 cenk..nosp@m.guen.nosp@m.dogan.nosp@m.@haw.nosp@m.-hamb.nosp@m.urg..nosp@m.de

Definition in file rpl.h.

#include <string.h>
#include <stdint.h>
#include "modules.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 "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 CONFIG_GNRC_RPL_MSG_QUEUE_SIZE_EXP   (3U)
 Default message queue size to use for the RPL thread (as exponent of 2^n).
 
#define GNRC_RPL_MSG_QUEUE_SIZE   (1 << CONFIG_GNRC_RPL_MSG_QUEUE_SIZE_EXP)
 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)
 
#define GNRC_RPL_MSG_TYPE_LIFETIME_UPDATE   (0x0900)
 Message type for lifetime updates.
 
#define GNRC_RPL_MSG_TYPE_TRICKLE_MSG   (0x0901)
 Message type for trickle.
 
#define GNRC_RPL_MSG_TYPE_DAO_HANDLE   (0x0903)
 Message type for handling DAO sending.
 
#define GNRC_RPL_INFINITE_RANK   (0xFFFF)
 Infinite rank.
 
#define CONFIG_GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE   (256)
 Default minimum hop rank increase.
 
#define CONFIG_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 CONFIG_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.
 
#define GNRC_RPL_GROUNDED   (1)
 A DODAG can be grounded or floating.
 
#define CONFIG_GNRC_RPL_CLEANUP_TIME   (5 * MS_PER_SEC)
 Cleanup interval in milliseconds.
 
#define GNRC_RPL_ROOT_RANK   (CONFIG_GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE)
 Rank of the root node.
 
#define GNRC_RPL_ICMPV6_CODE_DIS   (0x00)
 DIS ICMPv6 code.
 
#define GNRC_RPL_ICMPV6_CODE_DIO   (0x01)
 DIO ICMPv6 code.
 
#define GNRC_RPL_ICMPV6_CODE_DAO   (0x02)
 DAO ICMPv6 code.
 
#define GNRC_RPL_ICMPV6_CODE_DAO_ACK   (0x03)
 DAO ACK ICMPv6 code.
 
#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.
 
#define CONFIG_GNRC_RPL_PARENT_TIMEOUT_DIS_RETRIES   (3)
 Number of DIS retries before parent times out.
 
#define CONFIG_GNRC_RPL_DEFAULT_NETIF   (KERNEL_PID_UNDEF)
 Default network interface for GNRC RPL.
 

Functions

kernel_pid_t gnrc_rpl_init (kernel_pid_t if_pid)
 Initialization of the RPL thread.
 
gnrc_rpl_instance_tgnrc_rpl_root_init (uint8_t instance_id, const ipv6_addr_t *dodag_id, bool gen_inst_id, bool local_inst_id)
 Initialization of a node as root.
 
void gnrc_rpl_send_DIO (gnrc_rpl_instance_t *instance, ipv6_addr_t *destination)
 Send a DIO of the instance to the destination.
 
void gnrc_rpl_send_DIS (gnrc_rpl_instance_t *instance, ipv6_addr_t *destination, gnrc_rpl_internal_opt_t **options, size_t num_opts)
 Send a DIS of the instance to the destination.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
void gnrc_rpl_delay_dao (gnrc_rpl_dodag_t *dodag)
 Delay the DAO sending interval.
 
void gnrc_rpl_long_delay_dao (gnrc_rpl_dodag_t *dodag)
 Long delay the DAO sending interval.
 
gnrc_rpl_instance_tgnrc_rpl_root_instance_init (uint8_t instance_id, const ipv6_addr_t *dodag_id, uint8_t mop)
 Create a new RPL instance and RPL DODAG.
 
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.
 
uint8_t gnrc_rpl_gen_instance_id (bool local)
 Generate a local or global instance id.
 
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.
 
void gnrc_rpl_configure_root (gnrc_netif_t *netif, const ipv6_addr_t *dodag_id)
 Convenience function to start a RPL root using the default configuration.
 

Variables

kernel_pid_t gnrc_rpl_pid
 PID of the RPL thread.
 
const ipv6_addr_t ipv6_addr_all_rpl_nodes
 

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
 

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)
 

Trickle parameters

See also
Trickle Parameters
#define CONFIG_GNRC_RPL_DEFAULT_DIO_INTERVAL_DOUBLINGS   (20)
 
#define CONFIG_GNRC_RPL_DEFAULT_DIO_INTERVAL_MIN   (3)
 
#define CONFIG_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 CONFIG_GNRC_RPL_DEFAULT_LIFETIME   (5)
 
#define CONFIG_GNRC_RPL_LIFETIME_UNIT   (60)
 

Parameters used for DAO handling

See also
RPL Constants and Variables
#define CONFIG_GNRC_RPL_DAO_SEND_RETRIES   (4)
 
#define CONFIG_GNRC_RPL_DAO_ACK_DELAY   (3000UL)
 
#define CONFIG_GNRC_RPL_DAO_DELAY_LONG   (60000UL)
 Long delay for DAOs in milli seconds.
 
#define CONFIG_GNRC_RPL_DAO_DELAY_DEFAULT   (1000UL)
 Default delay for DAOs in milli seconds.
 
#define CONFIG_GNRC_RPL_DAO_DELAY_JITTER   (1000UL)
 Jitter for DAOs in milli seconds.
 

Node Status

#define GNRC_RPL_NORMAL_NODE   (0)
 
#define GNRC_RPL_ROOT_NODE   (1)
 
#define GNRC_RPL_LEAF_NODE   (2)
 

RPL Control Message Options

See also
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

See also
RFC 6550, section 5.1, RPL Instance ID
#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)
 
#define GNRC_RPL_DIS_SOLICITED_INFO_LENGTH   (19)
 DIS Solicited Information option (numbers)
 
#define GNRC_RPL_DIS_SOLICITED_INFO_FLAG_V   (1 << 7)
 
#define GNRC_RPL_DIS_SOLICITED_INFO_FLAG_I   (1 << 6)
 
#define GNRC_RPL_DIS_SOLICITED_INFO_FLAG_D   (1 << 5)