156 #ifdef MODULE_NETSTATS_RPL 
  167 #ifndef GNRC_RPL_STACK_SIZE 
  168 #define GNRC_RPL_STACK_SIZE     (THREAD_STACKSIZE_DEFAULT) 
  174 #ifndef GNRC_RPL_PRIO 
  175 #define GNRC_RPL_PRIO           (GNRC_IPV6_PRIO + 1) 
  186 #ifndef CONFIG_GNRC_RPL_MSG_QUEUE_SIZE_EXP 
  187 #define CONFIG_GNRC_RPL_MSG_QUEUE_SIZE_EXP   (3U) 
  193 #ifndef GNRC_RPL_MSG_QUEUE_SIZE 
  194 #define GNRC_RPL_MSG_QUEUE_SIZE     (1 << CONFIG_GNRC_RPL_MSG_QUEUE_SIZE_EXP) 
  205 #define GNRC_RPL_ALL_NODES_ADDR {{ 0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1a }} 
  210 #define GNRC_RPL_MSG_TYPE_LIFETIME_UPDATE     (0x0900) 
  215 #define GNRC_RPL_MSG_TYPE_TRICKLE_MSG         (0x0901) 
  220 #define GNRC_RPL_MSG_TYPE_DAO_HANDLE  (0x0903) 
  228 #define GNRC_RPL_INFINITE_RANK (0xFFFF) 
  236 #ifndef CONFIG_GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE 
  237 #define CONFIG_GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE (256) 
  243 #ifndef CONFIG_GNRC_RPL_DEFAULT_MAX_RANK_INCREASE 
  244 #define CONFIG_GNRC_RPL_DEFAULT_MAX_RANK_INCREASE (0) 
  250 #define GNRC_RPL_IMPLEMENTED_OFS_NUMOF (1) 
  255 #define GNRC_RPL_DEFAULT_OCP (0) 
  260 #ifndef CONFIG_GNRC_RPL_DEFAULT_INSTANCE 
  261 #define CONFIG_GNRC_RPL_DEFAULT_INSTANCE (0) 
  268 #define GNRC_RPL_MOP_NO_DOWNWARD_ROUTES  (0x00) 
  269 #define GNRC_RPL_MOP_NON_STORING_MODE    (0x01) 
  270 #define GNRC_RPL_MOP_STORING_MODE_NO_MC  (0x02) 
  271 #define GNRC_RPL_MOP_STORING_MODE_MC     (0x03) 
  274 #if IS_ACTIVE(CONFIG_GNRC_RPL_MOP_NO_DOWNWARD_ROUTES) 
  275 #define GNRC_RPL_DEFAULT_MOP GNRC_RPL_MOP_NO_DOWNWARD_ROUTES 
  276 #elif IS_ACTIVE(CONFIG_GNRC_RPL_MOP_NON_STORING_MODE) 
  277 #define GNRC_RPL_DEFAULT_MOP GNRC_RPL_MOP_NON_STORING_MODE 
  278 #elif IS_ACTIVE(CONFIG_GNRC_RPL_MOP_STORING_MODE_NO_MC) 
  279 #define GNRC_RPL_DEFAULT_MOP GNRC_RPL_MOP_STORING_MODE_NO_MC 
  280 #elif IS_ACTIVE(CONFIG_GNRC_RPL_MOP_STORING_MODE_MC) 
  281 #define GNRC_RPL_DEFAULT_MOP GNRC_RPL_MOP_STORING_MODE_MC 
  285 #ifndef GNRC_RPL_DEFAULT_MOP 
  286 #define GNRC_RPL_DEFAULT_MOP GNRC_RPL_MOP_STORING_MODE_NO_MC 
  297 #define GNRC_RPL_COUNTER_MAX                 (255) 
  298 #define GNRC_RPL_COUNTER_LOWER_REGION        (127) 
  299 #define GNRC_RPL_COUNTER_SEQ_WINDOW          (16) 
  300 #define GNRC_RPL_COUNTER_INIT                (GNRC_RPL_COUNTER_MAX - GNRC_RPL_COUNTER_SEQ_WINDOW + 1) 
  302 static inline uint8_t GNRC_RPL_COUNTER_INCREMENT(uint8_t counter)
 
  304     return ((counter > GNRC_RPL_COUNTER_LOWER_REGION) ?
 
  305             ((counter == GNRC_RPL_COUNTER_MAX) ? counter = 0 : ++counter) :
 
  306             ((counter == GNRC_RPL_COUNTER_LOWER_REGION) ? counter = 0 : ++counter));
 
  309 static inline bool GNRC_RPL_COUNTER_IS_INIT(uint8_t counter)
 
  311     return (counter > GNRC_RPL_COUNTER_LOWER_REGION);
 
  314 static inline bool GNRC_RPL_COUNTER_GREATER_THAN_LOCAL(uint8_t A, uint8_t B)
 
  316     return (((A < B) && (GNRC_RPL_COUNTER_LOWER_REGION + 1 - B + A < GNRC_RPL_COUNTER_SEQ_WINDOW))
 
  317             || ((A > B) && (A - B < GNRC_RPL_COUNTER_SEQ_WINDOW)));
 
  320 static inline bool GNRC_RPL_COUNTER_GREATER_THAN(uint8_t A, uint8_t B)
 
  322     return ((A > GNRC_RPL_COUNTER_LOWER_REGION) ? ((B > GNRC_RPL_COUNTER_LOWER_REGION) ?
 
  323                 GNRC_RPL_COUNTER_GREATER_THAN_LOCAL(A, B) : 0) :
 
  324             ((B > GNRC_RPL_COUNTER_LOWER_REGION) ? 1 : GNRC_RPL_COUNTER_GREATER_THAN_LOCAL(A, B)));
 
  335 #ifndef CONFIG_GNRC_RPL_DEFAULT_DIO_INTERVAL_DOUBLINGS 
  336 #define CONFIG_GNRC_RPL_DEFAULT_DIO_INTERVAL_DOUBLINGS (20) 
  339 #ifndef CONFIG_GNRC_RPL_DEFAULT_DIO_INTERVAL_MIN 
  340 #define CONFIG_GNRC_RPL_DEFAULT_DIO_INTERVAL_MIN (3) 
  343 #ifndef CONFIG_GNRC_RPL_DEFAULT_DIO_REDUNDANCY_CONSTANT 
  344 #define CONFIG_GNRC_RPL_DEFAULT_DIO_REDUNDANCY_CONSTANT (10) 
  356 #ifndef CONFIG_GNRC_RPL_DEFAULT_LIFETIME 
  357 #define CONFIG_GNRC_RPL_DEFAULT_LIFETIME (5) 
  359 #ifndef CONFIG_GNRC_RPL_LIFETIME_UNIT 
  360 #define CONFIG_GNRC_RPL_LIFETIME_UNIT (60) 
  367 #define GNRC_RPL_DEFAULT_PREFIX_LEN   (64) 
  376 #define GNRC_RPL_DEFAULT_PREFIX_LIFETIME  (0xFFFFFFFF) 
  384 #define GNRC_RPL_GROUNDED (1) 
  393 #ifndef CONFIG_GNRC_RPL_DAO_SEND_RETRIES 
  394 #define CONFIG_GNRC_RPL_DAO_SEND_RETRIES   (4) 
  396 #ifndef CONFIG_GNRC_RPL_DAO_ACK_DELAY 
  397 #define CONFIG_GNRC_RPL_DAO_ACK_DELAY      (3000UL) 
  399 #ifndef CONFIG_GNRC_RPL_DAO_DELAY_LONG 
  403 #define CONFIG_GNRC_RPL_DAO_DELAY_LONG     (60000UL) 
  405 #ifndef CONFIG_GNRC_RPL_DAO_DELAY_DEFAULT 
  409 #define CONFIG_GNRC_RPL_DAO_DELAY_DEFAULT  (1000UL) 
  411 #ifndef CONFIG_GNRC_RPL_DAO_DELAY_JITTER 
  415 #define CONFIG_GNRC_RPL_DAO_DELAY_JITTER   (1000UL) 
  422 #ifndef CONFIG_GNRC_RPL_CLEANUP_TIME 
  423 #define CONFIG_GNRC_RPL_CLEANUP_TIME (5 * MS_PER_SEC) 
  430 #define GNRC_RPL_NORMAL_NODE (0) 
  431 #define GNRC_RPL_ROOT_NODE (1) 
  432 #define GNRC_RPL_LEAF_NODE (2) 
  445 #define GNRC_RPL_OPT_PAD1                 (0) 
  449 #define GNRC_RPL_OPT_PADN                 (1) 
  453 #define GNRC_RPL_OPT_DAG_METRIC_CONTAINER (2) 
  457 #define GNRC_RPL_OPT_ROUTE_INFO           (3) 
  461 #define GNRC_RPL_OPT_DODAG_CONF           (4) 
  465 #define GNRC_RPL_OPT_TARGET               (5) 
  469 #define GNRC_RPL_OPT_TRANSIT              (6) 
  474 #define GNRC_RPL_OPT_TRANSIT_E_FLAG_SHIFT (7) 
  478 #define GNRC_RPL_OPT_SOLICITED_INFO       (7) 
  482 #define GNRC_RPL_OPT_PREFIX_INFO          (8) 
  487 #define GNRC_RPL_PREFIX_AUTO_ADDRESS_BIT  (1 << 6) 
  491 #define GNRC_RPL_OPT_TARGET_DESC          (9) 
  504 #define GNRC_RPL_GROUNDED_SHIFT             (7) 
  508 #define GNRC_RPL_MOP_SHIFT                  (3) 
  512 #define GNRC_RPL_SHIFTED_MOP_MASK           (0x7) 
  516 #define GNRC_RPL_PRF_MASK                   (0x7) 
  523 #define GNRC_RPL_ROOT_RANK (CONFIG_GNRC_RPL_DEFAULT_MIN_HOP_RANK_INCREASE) 
  531 #define GNRC_RPL_ICMPV6_CODE_DIS (0x00) 
  539 #define GNRC_RPL_ICMPV6_CODE_DIO (0x01) 
  547 #define GNRC_RPL_ICMPV6_CODE_DAO (0x02) 
  555 #define GNRC_RPL_ICMPV6_CODE_DAO_ACK (0x03) 
  560 #define GNRC_RPL_LIFETIME_UPDATE_STEP (2) 
  568 #define DAGRANK(rank,mhri)   (rank/mhri) 
  577 #define GNRC_RPL_INSTANCE_ID_MSB      (1 << 7) 
  578 #define GNRC_RPL_GLOBAL_INSTANCE_MASK (0x7F) 
  579 #define GNRC_RPL_LOCAL_INSTANCE_MASK  (0x3F) 
  580 #define GNRC_RPL_INSTANCE_D_FLAG_MASK (1 << 6) 
  590 #define GNRC_RPL_DIS_SOLICITED_INFO_LENGTH  (19) 
  591 #define GNRC_RPL_DIS_SOLICITED_INFO_FLAG_V  (1 << 7) 
  592 #define GNRC_RPL_DIS_SOLICITED_INFO_FLAG_I  (1 << 6) 
  593 #define GNRC_RPL_DIS_SOLICITED_INFO_FLAG_D  (1 << 5) 
  606 #ifdef MODULE_NETSTATS_RPL 
  626 #ifndef CONFIG_GNRC_RPL_PARENT_TIMEOUT_DIS_RETRIES 
  627 #define CONFIG_GNRC_RPL_PARENT_TIMEOUT_DIS_RETRIES (3) 
  633 #ifndef CONFIG_GNRC_RPL_DEFAULT_NETIF 
  634 #define CONFIG_GNRC_RPL_DEFAULT_NETIF (KERNEL_PID_UNDEF) 
  661                                         bool gen_inst_id, 
bool local_inst_id);
 
  807     if (!
IS_ACTIVE(CONFIG_GNRC_RPL_WITHOUT_PIO)) {
 
  808         dodag->dio_opts = (dodag->dio_opts & ~GNRC_RPL_REQ_DIO_OPT_PREFIX_INFO) |
 
  809                           (status << GNRC_RPL_REQ_DIO_OPT_PREFIX_INFO_SHIFT);
 
  813 #if IS_USED(MODULE_GNRC_RPL) || DOXYGEN 
  822 #define gnrc_rpl_configure_root(netif, dodag_id)  ((void)netif) 
DODAG-related functions for RPL.
 
Types and functions for FIB.
 
Definitions for GNRC's IPv6 implementation.
 
Includes all essential GNRC network stack base modules.
 
int16_t kernel_pid_t
Unique process identifier.
 
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_DIO(gnrc_rpl_instance_t *instance, ipv6_addr_t *destination)
Send a DIO of the instance 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_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.
 
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.
 
kernel_pid_t gnrc_rpl_pid
PID of the RPL thread.
 
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.
 
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_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.
 
uint8_t gnrc_rpl_gen_instance_id(bool local)
Generate a local or global instance id.
 
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.
 
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.
 
const ipv6_addr_t ipv6_addr_all_rpl_nodes
See GNRC_RPL_ALL_NODES_ADDR.
 
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_DIS(gnrc_rpl_dis_t *dis, kernel_pid_t iface, ipv6_addr_t *src, ipv6_addr_t *dst, uint16_t len)
Parse a DIS.
 
kernel_pid_t gnrc_rpl_init(kernel_pid_t if_pid)
Initialization of the RPL thread.
 
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.
 
void gnrc_rpl_long_delay_dao(gnrc_rpl_dodag_t *dodag)
Long delay the DAO sending interval.
 
void gnrc_rpl_delay_dao(gnrc_rpl_dodag_t *dodag)
Delay the DAO sending interval.
 
Definitions for IPv6 addresses.
 
Common macros and compiler attributes/pragmas configuration.
 
#define IS_ACTIVE(macro)
Allows to verify a macro definition outside the preprocessor.
 
Protocol type definitions.
 
RPL Objective functions manager header.
 
Definition of RPL related packet statistics.
 
Representation of a network interface.
 
Type to represent parts (either headers or payload) of a packet, called snips.
 
Destination Advertisement Object Acknowledgement.
 
Destination Advertisement Object.
 
DODAG Information Solicitation.
 
internal unpacked struct type for option insertion
 
struct gnrc_rpl_instance gnrc_rpl_instance_t
Instance representation.
 
struct gnrc_rpl_dodag gnrc_rpl_dodag_t
DODAG representation.
 
Trickle timer interface definition.
 
Data type to represent an IPv6 address.