RPL header. Declaration of global variables and functions needed for core functionality of RPL. More...
RPL header. Declaration of global variables and functions needed for core functionality of RPL.
Header which includes all core RPL-functions.
Definition in file rpl.h.
#include <string.h>
#include <stdint.h>
#include "kernel_defines.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"
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). More... | |
#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) More... | |
#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. More... | |
#define | CONFIG_GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE (256) |
Default minimum hop rank increase. More... | |
#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. More... | |
#define | GNRC_RPL_GROUNDED (1) |
A DODAG can be grounded or floating. More... | |
#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. 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... | |
#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. More... | |
gnrc_rpl_instance_t * | gnrc_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, gnrc_rpl_internal_opt_t **options, size_t num_opts) |
Send a DIS of the instance 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_t * | gnrc_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 |
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 | |
| |
#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 | |
| |
#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
| |
#define | CONFIG_GNRC_RPL_DEFAULT_LIFETIME (5) |
#define | CONFIG_GNRC_RPL_LIFETIME_UNIT (60) |
Parameters used for DAO handling | |
| |
#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 | |
| |
#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) |
#define | GNRC_RPL_DIS_SOLICITED_INFO_LENGTH (19) |
DIS Solicited Information option (numbers) More... | |
#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) |