Exemplo n.º 1
0
static rpl_parent_t *
best_parent(rpl_parent_t *p1, rpl_parent_t *p2)
{
  rpl_dag_t *dag;
  rpl_rank_t p1_rank;
  rpl_rank_t p2_rank;

  dag = (rpl_dag_t *)p1->dag; /* Both parents must be in the same DAG. */

  p1_rank = calculate_rank(p1, 0);
  p2_rank = calculate_rank(p2, 0);

  /* Maintain stability of the preferred parent in case of similar ranks. */
  if(p1_rank < p2_rank + MAX_DIFFERENCE(dag) &&
     p1_rank > p2_rank - MAX_DIFFERENCE(dag)) {
    PRINTF("RPL: MRHOF hysteresis: %u <= %u <= %u\n",
           p2_rank - MAX_DIFFERENCE(dag),
           p1_rank,
           p2_rank + MAX_DIFFERENCE(dag));
    if(p1 == dag->preferred_parent) {
      return p1;
    } else if(p2 == dag->preferred_parent) {
      return p2;
    }
  }

  if(p1_rank < p2_rank) {
    return p1;
  }

  return p2;
}
Exemplo n.º 2
0
static rpl_parent_t *
best_parent(rpl_parent_t *p1, rpl_parent_t *p2)
{
  rpl_dag_t *dag;
  rpl_rank_t p1_rank;
  rpl_rank_t p2_rank;

  dag = (rpl_dag_t *)p1->dag; /* Both parents must be in the same DAG. */

  p1_rank = DAG_RANK(calculate_rank(p1, 0), dag);
  p2_rank = DAG_RANK(calculate_rank(p2, 0), dag);

  /* Maintain stability of the preferred parent in case of similar ranks. */
  if(p1_rank == p2_rank) {
    if(p1 == dag->preferred_parent) {
      return p1;
    } else if(p2 == dag->preferred_parent) {
      return p2;
    }
  }

  if(p1_rank < p2_rank) {
    return p1;
  }

  return p2;
}