48#include "net/routing/rpl-classic/rpl-nbr-policy.h"
49#include "net/routing/rpl-classic/rpl-private.h"
50#include "net/nbr-table.h"
51#include "net/link-stats.h"
55#define LOG_MODULE "RPL-nbrpol"
56#define LOG_LEVEL LOG_LEVEL_NONE
60get_rank(
const linkaddr_t *lladdr)
62 rpl_parent_t *p = rpl_get_parent((uip_lladdr_t *)lladdr);
64 return RPL_INFINITE_RANK;
67 return instance != NULL ?
68 instance->of->rank_via_parent(p) : RPL_INFINITE_RANK;
73rpl_nbr_gc_get_worst(
const linkaddr_t *lladdr1,
const linkaddr_t *lladdr2)
75 return get_rank(lladdr2) > get_rank(lladdr1) ? lladdr2 : lladdr1;
79can_accept_new_parent(
const linkaddr_t *candidate_for_removal, rpl_dio_t *dio)
81 rpl_rank_t rank_candidate;
84 if(candidate_for_removal == NULL
85 || (rank_candidate = get_rank(candidate_for_removal)) == RPL_INFINITE_RANK) {
89 rpl_rank_t new_path_rank;
91 if(instance == NULL || dio == NULL) {
95 new_path_rank = dio->rank + instance->min_hoprankinc;
96 return new_path_rank < rank_candidate - instance->min_hoprankinc / 2;
101rpl_nbr_can_accept_new(
const linkaddr_t *
new,
102 const linkaddr_t *candidate_for_removal,
103 nbr_table_reason_t reason,
const void *data)
107 case NBR_TABLE_REASON_RPL_DIO:
108 accept = can_accept_new_parent(candidate_for_removal, (rpl_dio_t *)data);
110 case NBR_TABLE_REASON_ROUTE:
111 case NBR_TABLE_REASON_RPL_DAO:
114 accept = rpl_nbr_policy_get_free_nexthop_neighbors() > 0;
116 case NBR_TABLE_REASON_RPL_DIS:
117 case NBR_TABLE_REASON_UNDEFINED:
118 case NBR_TABLE_REASON_IPV6_ND:
119 case NBR_TABLE_REASON_MAC:
120 case NBR_TABLE_REASON_LLSEC:
121 case NBR_TABLE_REASON_LINK_STATS:
122 case NBR_TABLE_REASON_IPV6_ND_AUTOFILL:
126 accept = (candidate_for_removal == NULL);
129 LOG_DBG(
"%s new neighbor ",
accept ?
"accept" :
"reject");
131 LOG_DBG_(
", reason %u, worst is ", reason);
132 LOG_DBG_LLADDR(candidate_for_removal);
133 LOG_DBG_(
" (total free %u, free nexthop neighbors %u)\n",
134 NBR_TABLE_MAX_NEIGHBORS - nbr_table_count_entries(),
135 rpl_nbr_policy_get_free_nexthop_neighbors());
140rpl_nbr_policy_get_free_nexthop_neighbors(
void)
142 return RPL_NBR_POLICY_MAX_NEXTHOP_NEIGHBORS - uip_ds6_route_count_nexthop_neighbors();
static uint8_t accept(uint8_t in)
Header file for the logging system.
Header file for routing table manipulation.