68 fnNetSimError(
"joined_dodag is null for %d device in %s\n", d, __FUNCTION__);
127 fnNetSimError(
"joined_dodag is null for %d in %s\n", d, __FUNCTION__);
157 fnNetSimError(
"joined_dodag is null for %d device in %s\n", d, __FUNCTION__);
172 if (neighbor->
nodeId == 0)
177 double link_quality = (send_link_quality + receive_link_quality) / 2;
194 fnNetSimError(
"joined_dodag is null for %d device in %s\n", d, __FUNCTION__);
204 INT16 best_rank_index = -1;
246 if (best_rank_index == -1)
252 if (matching_ranks[i] < matching_ranks[best_rank_index])
258 if (best_rank_index == -1)
264 if (preferred_dodag_pdu != NULL && !same)
277 UINT16 best_rank = matching_ranks[best_rank_index];
280 print_rpl_log(
"node '%d': in dodag_id = '%s', new rank (%d) would exceed the limit (%d + %d)",
288 print_rpl_log(
"node '%d': following parent on dodag_id = '%s'",
296 print_rpl_log(
"node '%d': couldn't follow preferred parent, need to poison", d);
302 dodag->
rank = best_rank;
303 if (best_rank < dodag->lowest_rank)
312 memset(&pevent, 0,
sizeof pevent);
339 if (dbase->
Rank < best_rank)
343 else if (dbase->
Rank == best_rank)
359 char parent_list_str[256];
360 char sibling_list_str[256];
364 parent_list_str[0] =
'\0';
372 sprintf(sz,
"(%d)", neighbor->
nodeId);
373 strcat(parent_list_str, sz);
378 sprintf(sz,
"%d", neighbor->
nodeId);
379 strcat(parent_list_str, sz);
382 if (i < dodag->parent_count - 1)
384 strcat(parent_list_str,
", ");
388 sibling_list_str[0] =
'\0';
394 sprintf(sz,
"%d", neighbor->
nodeId);
395 strcat(sibling_list_str, sz);
396 if (i < dodag->sibling_count - 1)
398 strcat(sibling_list_str,
", ");
401 print_rpl_log(
"node '%d': chosen parents and siblings in dodag_id = '%s': new rank = %d, parents = [%s], siblings = [%s]",
PRPL_CTRL_MSG get_preferred_dodag_dio_pdu(NETSIM_ID d, bool *same, double time)
void start_dio_poisoning(NETSIM_ID d)
void join_dodag_iteration(NETSIM_ID d, PRPL_CTRL_MSG dio_pdu)
#define IP_COMPARE(ip1, ip2)
#define fnNetSimError(x,...)
static void add_neighbor(NETSIM_ID d, NETSIM_ID r)
void rpl_node_add_sibling(NETSIM_ID d, PRPL_NEIGHBOR sibling)
PRPL_NEIGHBOR rpl_node_find_sibling(NETSIM_ID d, NETSIM_ID sibling)
PRPL_NEIGHBOR rpl_node_find_parent(NETSIM_ID d, NETSIM_ID parent)
void forget_neighbor_messages(PRPL_NODE rpl)
void rpl_node_remove_all_siblings(NETSIM_ID d)
void choose_parents_and_siblings(NETSIM_ID d)
PRPL_NEIGHBOR rpl_find_neighbor(NETSIM_ID d, NETSIM_ID r)
void update_neighbor_dio_message(PRPL_NEIGHBOR neighbor, PRPL_CTRL_MSG dio_pdu)
void rpl_node_add_parent(NETSIM_ID d, PRPL_NEIGHBOR parent)
void rpl_add_to_neighbor_list()
static UINT16 compute_candidate_rank(NETSIM_ID d, PRPL_NEIGHBOR neighbor)
void free_all_neighbor(PRPL_NODE rpl)
void rpl_node_remove_all_parents(NETSIM_ID d)
void rpl_delete_all_route(NETSIM_ID d)
void rpl_dio_pdu_free(PRPL_CTRL_MSG dio)
void rpl_add_route_to_parent(NETSIM_ID d, NETSIM_ID parent)
void print_rpl_log(char *format,...)
#define RPL_MAXIMUM_RANK_INCREMENT
#define RPL_IP_TO_STR(ip)
struct stru_rpl_neighbor * PRPL_NEIGHBOR
#define RPL_MINIMUM_RANK_INCREMENT
#define is_rpl_configured(d)
PRPL_CTRL_MSG rpl_dio_pdu_duplicate(PRPL_CTRL_MSG dio)
#define DEVICE_TYPE(DeviceId)
double fn_NetSim_stack_get_link_quality(NETSIM_ID trx, NETSIM_ID tri, NETSIM_ID rx, NETSIM_ID ri)
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
#define fnpAddEvent(pstruEvent)
struct stru_NetSim_Packet * pPacket
netsimDEVICE_TYPE nDeviceType
PRPL_NEIGHBOR pref_parent
PRPL_NEIGHBOR * sibling_list
PRPL_NEIGHBOR * parent_list
PRPL_NEIGHBOR * neighbor_list