44 #include "net/routing/rpl-lite/rpl.h" 45 #include "net/nbr-table.h" 46 #include "net/link-stats.h" 50 #define LOG_MODULE "RPL" 51 #define LOG_LEVEL LOG_LEVEL_RPL 54 #define RANK_STRETCH 0 57 #define MIN_STEP_OF_RANK 1 58 #define MAX_STEP_OF_RANK 9 67 #define RPL_OF0_FIXED_SR 0 68 #define RPL_OF0_ETX_BASED_SR 1 70 #ifdef RPL_OF0_CONF_SR 71 #define RPL_OF0_SR RPL_OF0_CONF_SR 73 #define RPL_OF0_SR RPL_OF0_ETX_BASED_SR 77 #define STEP_OF_RANK(nbr) (3) 80 #if RPL_OF0_ETX_BASED_SR 83 #define STEP_OF_RANK(nbr) (((3 * nbr_link_metric(nbr)) / LINK_STATS_ETX_DIVISOR) - 2) 90 LOG_INFO(
"reset OF0\n");
98 return stats != NULL ? stats->etx : 0xffff;
104 uint16_t min_hoprankinc;
106 return RPL_INFINITE_RANK;
108 min_hoprankinc = curr_instance.min_hoprankinc;
109 return (RANK_FACTOR * STEP_OF_RANK(nbr) + RANK_STRETCH) * min_hoprankinc;
119 return MIN((uint32_t)nbr->rank + nbr_link_metric(nbr), 0xffff);
126 return RPL_INFINITE_RANK;
128 return MIN((uint32_t)nbr->rank + nbr_rank_increase(nbr), RPL_INFINITE_RANK);
141 return STEP_OF_RANK(nbr) >= MIN_STEP_OF_RANK
142 && STEP_OF_RANK(nbr) <= MAX_STEP_OF_RANK;
150 int nbr1_is_acceptable;
151 int nbr2_is_acceptable;
153 nbr1_is_acceptable = nbr1 != NULL && nbr_is_acceptable_parent(nbr1);
154 nbr2_is_acceptable = nbr2 != NULL && nbr_is_acceptable_parent(nbr2);
156 if(!nbr1_is_acceptable) {
157 return nbr2_is_acceptable ? nbr2 : NULL;
159 if(!nbr2_is_acceptable) {
160 return nbr1_is_acceptable ? nbr1 : NULL;
163 nbr1_cost = nbr_path_cost(nbr1);
164 nbr2_cost = nbr_path_cost(nbr2);
167 if(nbr1_cost != nbr2_cost) {
169 return nbr1_cost < nbr2_cost ? nbr1 : nbr2;
173 if(nbr1 == curr_instance.dag.preferred_parent || nbr2 == curr_instance.dag.preferred_parent) {
174 return curr_instance.dag.preferred_parent;
178 return nbr_link_metric(nbr1) < nbr_link_metric(nbr2) ? nbr1 : nbr2;
183 update_metric_container(
void)
185 curr_instance.mc.type = RPL_DAG_MC_NONE;
192 nbr_is_acceptable_parent,
196 update_metric_container,
static uip_ds6_nbr_t * nbr
Pointer to llao option in uip_buf.
API for RPL objective functions (OF)
const struct link_stats * rpl_neighbor_get_link_stats(rpl_nbr_t *nbr)
Returns a neighbor's link statistics.
All information related to a RPL neighbor.
Header file for the logging system