From 1d4d3fa1c19c8b3fa89718b21edeec8843e06176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Wed, 25 Feb 2015 20:33:13 +0100 Subject: [PATCH] rpl: use the all-RPL-nodes multicast address --- sys/net/include/sixlowpan/ip.h | 19 +++++++++++++++++++ sys/net/routing/rpl/rpl.c | 6 ++++++ sys/net/routing/rpl/rpl_dodag.c | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/sys/net/include/sixlowpan/ip.h b/sys/net/include/sixlowpan/ip.h index 952a090d0a..3de41e2f37 100644 --- a/sys/net/include/sixlowpan/ip.h +++ b/sys/net/include/sixlowpan/ip.h @@ -297,6 +297,25 @@ static inline void ipv6_addr_set_all_nodes_addr(ipv6_addr_t *ipv6_addr) ipv6_addr->uint32[3] = HTONL(1); } +/** + * @brief Set *ipv6_addr* to the all-RPL-nodes multicast address + * (ff02::1a). + * + * @see + * RFC 6550 + * + * + * @param[out] ipv6_addr Is set to the all-RPL-nodes multicast + * address. + */ +static inline void ipv6_addr_set_all_rpl_nodes_addr(ipv6_addr_t *ipv6_addr) +{ + ipv6_addr->uint32[0] = HTONL(0xff020000); + ipv6_addr->uint32[1] = 0; + ipv6_addr->uint32[2] = 0; + ipv6_addr->uint32[3] = HTONL(0x1a); +} + /** * @brief Set *ipv6_addr_out* to the solicited-node multicast address * computed from *ipv6_addr_in*. diff --git a/sys/net/routing/rpl/rpl.c b/sys/net/routing/rpl/rpl.c index 07bb5298d3..27504fcecc 100644 --- a/sys/net/routing/rpl/rpl.c +++ b/sys/net/routing/rpl/rpl.c @@ -92,6 +92,12 @@ uint8_t rpl_init(int if_id) ipv6_addr_set_link_local_prefix(&ll_address); ipv6_net_if_get_best_src_addr(&my_address, &ll_address); ipv6_register_rpl_handler(rpl_process_pid); + + /* add all-RPL-nodes address */ + ipv6_addr_t all_rpl_nodes; + ipv6_addr_set_all_rpl_nodes_addr(&all_rpl_nodes); + ipv6_net_if_add_addr(if_id, &all_rpl_nodes, NDP_ADDR_STATE_ANY, 0, 0, 0); + #if (RPL_DEFAULT_MOP == RPL_MOP_NON_STORING_MODE) ipv6_iface_set_srh_indicator(rpl_is_root); #endif diff --git a/sys/net/routing/rpl/rpl_dodag.c b/sys/net/routing/rpl/rpl_dodag.c index 06766226df..177c5e551d 100644 --- a/sys/net/routing/rpl/rpl_dodag.c +++ b/sys/net/routing/rpl/rpl_dodag.c @@ -40,7 +40,7 @@ void rpl_trickle_send_dio(void *args) (void) args; ipv6_addr_t mcast; - ipv6_addr_set_all_nodes_addr(&mcast); + ipv6_addr_set_all_rpl_nodes_addr(&mcast); rpl_send_DIO(&mcast); }