/*---------------------------------------------------------------------------*/ rpl_instance_t * rpl_alloc_instance(uint8_t instance_id) { rpl_instance_t *instance, *end; for(instance = &instance_table[0], end = instance + RPL_MAX_INSTANCES; instance < end; ++instance) { if(instance->used == 0) { memset(instance, 0, sizeof(*instance)); instance->instance_id = instance_id; instance->def_route = NULL; instance->used = 1; #if RPL_WITH_PROBING rpl_schedule_probing(instance); #endif /* RPL_WITH_PROBING */ return instance; } } return NULL; }
/*---------------------------------------------------------------------------*/ 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); /* Perform probing */ if(probing_target != NULL && rpl_get_parent_ipaddr(probing_target) != NULL) { PRINTF("RPL: probing %3u\n", nbr_table_get_lladdr(rpl_parents, probing_target)->u8[7]); /* Send probe, e.g. unicast DIO or DIS */ RPL_PROBING_SEND_FUNC(instance, rpl_get_parent_ipaddr(probing_target)); } /* Schedule next probing */ rpl_schedule_probing(instance); #if DEBUG rpl_print_neighbor_list(); #endif }