void _dao_handle_send(rpl_dodag_t *dodag) { if ((dodag->ack_received == false) && (dodag->dao_counter < DAO_SEND_RETRIES)) { dodag->dao_counter++; rpl_send_DAO(dodag, NULL, 0, true, 0); dodag->dao_time = timex_set(DEFAULT_WAIT_FOR_DAO_ACK, 0); vtimer_remove(&dodag->dao_timer); vtimer_set_msg(&dodag->dao_timer, dodag->dao_time, rpl_process_pid, RPL_MSG_TYPE_DAO_HANDLE, dodag); } else if (dodag->ack_received == false) { long_delay_dao(dodag); } }
void dao_delay_over(void) { while (1) { thread_sleep(); if ((ack_received == false) && (dao_counter < DAO_SEND_RETRIES)) { dao_counter++; send_DAO(NULL, 0, true, 0); dao_time = timex_set(DEFAULT_WAIT_FOR_DAO_ACK, 0); vtimer_remove(&dao_timer); vtimer_set_wakeup(&dao_timer, dao_time, dao_delay_over_pid); } else if (ack_received == false) { long_delay_dao(); } } }
void dao_ack_received() { ack_received = true; long_delay_dao(); }
void rpl_dao_ack_received(rpl_dodag_t *dodag) { dodag->ack_received = true; long_delay_dao(dodag); }