RPL header. 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 "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"
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 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_t * | gnrc_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_t * | gnrc_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 | |
| |
#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) | |
#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) |