diff --git a/sys/net/include/rpl.h b/sys/net/include/rpl.h index d81b19bfd02a0bc53481c9e9527aeb2c047ba4c5..6789d4f2428f1473c62c9168d72054107ce1bb6b 100644 --- a/sys/net/include/rpl.h +++ b/sys/net/include/rpl.h @@ -92,14 +92,15 @@ uint8_t rpl_init(int if_id, ipv6_addr_t *address); void rpl_init_root(rpl_options_t *rpl_opts); /** - * @brief Sends a DIO-message to a given destination + * @brief Sends a DIO-message to a given destination in a given dodag * - * This function sends a DIO message to a given destination. + * This function sends a DIO message to a given destination in a given dodag. * + * @param[in] dodag Dodag of the DIO-message. * @param[in] destination IPv6-address of the destination of the DIO. Should be a direct neighbor. * */ -void rpl_send_DIO(ipv6_addr_t *destination); +void rpl_send_DIO(rpl_dodag_t *dodag, ipv6_addr_t *destination); /** * @brief Sends a DAO-message to a given destination diff --git a/sys/net/routing/rpl/rpl_control_messages.c b/sys/net/routing/rpl/rpl_control_messages.c index fc7c93eef49b4f7939674a42f7e8384ede2ce6de..fee742270001dc31f9dcaf41af77600438559cae 100644 --- a/sys/net/routing/rpl/rpl_control_messages.c +++ b/sys/net/routing/rpl/rpl_control_messages.c @@ -257,7 +257,7 @@ uint8_t rpl_is_root(void) return i_am_root; } -void rpl_send_DIO(ipv6_addr_t *destination) +void rpl_send_DIO(rpl_dodag_t *mydodag, ipv6_addr_t *destination) { #if ENABLE_DEBUG @@ -266,11 +266,8 @@ void rpl_send_DIO(ipv6_addr_t *destination) } #endif - rpl_dodag_t *mydodag; icmp_send_buf = get_rpl_send_icmpv6_buf(ipv6_ext_hdr_len); - mydodag = rpl_get_my_dodag(); - if (mydodag == NULL) { DEBUGF("Error - trying to send DIO without being part of a dodag.\n"); return; @@ -943,7 +940,7 @@ void rpl_recv_DIS(void) } } - rpl_send_DIO(&ipv6_buf->srcaddr); + rpl_send_DIO(my_dodag, &ipv6_buf->srcaddr); } diff --git a/sys/net/routing/rpl/rpl_dodag.c b/sys/net/routing/rpl/rpl_dodag.c index bc97ff447187874ca231e68839ba375217bf967d..52a017992d0a8d4abcdf04605d4b70a282b5a551 100644 --- a/sys/net/routing/rpl/rpl_dodag.c +++ b/sys/net/routing/rpl/rpl_dodag.c @@ -37,11 +37,10 @@ static rpl_parent_t parents[RPL_MAX_PARENTS]; void rpl_trickle_send_dio(void *args) { - (void) args; ipv6_addr_t mcast; ipv6_addr_set_all_rpl_nodes_addr(&mcast); - rpl_send_DIO(&mcast); + rpl_send_DIO((rpl_dodag_t *) args, &mcast); } void rpl_instances_init(void) @@ -107,6 +106,7 @@ rpl_dodag_t *rpl_new_dodag(rpl_instance_t *inst, ipv6_addr_t *dodagid) dodag->ack_received = true; dodag->dao_counter = 0; dodag->trickle.callback.func = &rpl_trickle_send_dio; + dodag->trickle.callback.args = dodag; memcpy(&dodag->dodag_id, dodagid, sizeof(*dodagid)); return dodag; }