Merge pull request #236 from cetic/fix-rpl-classic-multi-dodag-probing

Do RPL probing on all the known DAGs (rpl-classic)
This commit is contained in:
Simon Duquennoy 2017-12-12 18:04:48 +01:00 committed by GitHub
commit 3408b333d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 1 deletions

View File

@ -56,6 +56,7 @@
typedef struct rpl_ns_node {
struct rpl_ns_node *next;
uint32_t lifetime;
rpl_dag_t *dag;
/* Store only IPv6 link identifiers as all nodes in the DAG share the same prefix */
unsigned char link_identifier[8];
struct rpl_ns_node *parent;

View File

@ -457,11 +457,29 @@ get_probing_target(rpl_dag_t *dag)
return probing_target;
}
/*---------------------------------------------------------------------------*/
static rpl_dag_t *
get_next_dag(rpl_instance_t *instance)
{
rpl_dag_t *dag = NULL;
int new_dag = instance->last_dag;
do {
new_dag++;
if(new_dag >= RPL_MAX_DAG_PER_INSTANCE) {
new_dag = 0;
}
if(instance->dag_table[new_dag].used) {
dag = &instance->dag_table[new_dag];
}
} while(new_dag != instance->last_dag && dag == NULL);
instance->last_dag = new_dag;
return dag;
}
/*---------------------------------------------------------------------------*/
static void
handle_probing_timer(void *ptr)
{
rpl_instance_t *instance = (rpl_instance_t *)ptr;
rpl_parent_t *probing_target = RPL_PROBING_SELECT_FUNC(instance->current_dag);
rpl_parent_t *probing_target = RPL_PROBING_SELECT_FUNC(get_next_dag(instance));
uip_ipaddr_t *target_ipaddr = rpl_parent_get_ipaddr(probing_target);
/* Perform probing */

View File

@ -252,6 +252,7 @@ struct rpl_instance {
#if RPL_WITH_PROBING
struct ctimer probing_timer;
rpl_parent_t *urgent_probing_target;
int last_dag;
#endif /* RPL_WITH_PROBING */
struct ctimer dio_timer;
struct ctimer dao_timer;