1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #2625 from cgundogan/rpl_remove_global_root_indication

rpl: remove global variable indicating the root node
This commit is contained in:
Oleg Hahm 2015-04-29 10:41:21 +02:00
commit 51ff5e056c

View File

@ -35,9 +35,6 @@ static char addr_str[IPV6_MAX_ADDR_STR_LEN];
#endif
#include "debug.h"
/* Identification variables */
static char i_am_root;
/* in send buffer we need space for LL_HDR */
static uint8_t rpl_send_buffer[BUFFER_SIZE];
@ -244,7 +241,6 @@ void rpl_init_root(rpl_options_t *rpl_opts)
return;
}
i_am_root = 1;
trickle_start(rpl_process_pid, &dodag->trickle, RPL_MSG_TYPE_TRICKLE_INTERVAL,
RPL_MSG_TYPE_TRICKLE_CALLBACK, (1 << dodag->dio_min), dodag->dio_interval_doubling,
dodag->dio_redundancy);
@ -252,9 +248,19 @@ void rpl_init_root(rpl_options_t *rpl_opts)
}
/* TODO: this function is used by the ip layer for source routing (non-storing mode)
* to determine if the node is root and change the dodag direction (upwards -> downwards).
* This is a hack and needs to be refactored when the new network stack is ready.
*/
uint8_t rpl_is_root(void)
{
return i_am_root;
rpl_dodag_t *dodag, *end;
for (dodag = rpl_dodags, end = dodag + RPL_MAX_DODAGS; dodag < end; dodag++) {
if (dodag->node_status == ROOT_NODE) {
return 1;
}
}
return 0;
}
void rpl_send_DIO(rpl_dodag_t *mydodag, ipv6_addr_t *destination)
@ -345,12 +351,12 @@ void rpl_send_DAO(rpl_dodag_t *my_dodag, ipv6_addr_t *destination, uint8_t lifet
#endif
if (i_am_root) {
if (my_dodag == NULL) {
DEBUGF("send_DAO: I have no my_dodag\n");
return;
}
if (my_dodag == NULL) {
DEBUGF("send_DAO: I have no my_dodag\n");
if (my_dodag->node_status == ROOT_NODE) {
return;
}
@ -754,13 +760,9 @@ void rpl_recv_DIO(void)
void rpl_recv_DAO(void)
{
#if RPL_DEFAULT_MOP == RPL_MOP_NON_STORING_MODE
if (!i_am_root) {
DEBUGF("[Error] something went wrong - got a DAO.\n");
return;
}
#endif
#else
ipv6_buf = get_rpl_ipv6_buf();
rpl_dao_buf = get_rpl_dao_buf();
DEBUG("instance %04X ", rpl_dao_buf->rpl_instanceid);
@ -854,6 +856,7 @@ void rpl_recv_DAO(void)
RPL_COUNTER_INCREMENT(my_dodag->dao_seq);
rpl_delay_dao(my_dodag);
}
#endif
}
void rpl_recv_DIS(void)