fixed so that nbr policy for RPL Root do not save room for parents
This commit is contained in:
parent
1fcef0f90d
commit
13b8c04c6f
2 changed files with 12 additions and 5 deletions
|
@ -820,7 +820,7 @@ dao_input(void)
|
||||||
PRINTF("RPL: adding DAO route\n");
|
PRINTF("RPL: adding DAO route\n");
|
||||||
|
|
||||||
/* Update and add neighbor - if no room - fail. */
|
/* Update and add neighbor - if no room - fail. */
|
||||||
if((nbr = rpl_icmp6_update_nbr_table(&dao_sender_addr, NBR_TABLE_REASON_RPL_DAO, NULL)) == NULL) {
|
if((nbr = rpl_icmp6_update_nbr_table(&dao_sender_addr, NBR_TABLE_REASON_RPL_DAO, instance)) == NULL) {
|
||||||
PRINTF("RPL: Out of Memory, dropping DAO from ");
|
PRINTF("RPL: Out of Memory, dropping DAO from ");
|
||||||
PRINT6ADDR(&dao_sender_addr);
|
PRINT6ADDR(&dao_sender_addr);
|
||||||
PRINTF(", ");
|
PRINTF(", ");
|
||||||
|
|
|
@ -62,7 +62,6 @@
|
||||||
* NOTE: this policy assumes that all neighbors end up being IPv6
|
* NOTE: this policy assumes that all neighbors end up being IPv6
|
||||||
* neighbors and are not only MAC neighbors.
|
* neighbors and are not only MAC neighbors.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MAX_CHILDREN (NBR_TABLE_MAX_NEIGHBORS - 2)
|
#define MAX_CHILDREN (NBR_TABLE_MAX_NEIGHBORS - 2)
|
||||||
#define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
|
#define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
|
||||||
|
|
||||||
|
@ -212,13 +211,21 @@ find_removable_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
const linkaddr_t *
|
const linkaddr_t *
|
||||||
find_removable_dao(uip_ipaddr_t *from)
|
find_removable_dao(uip_ipaddr_t *from, rpl_instance_t *instance)
|
||||||
{
|
{
|
||||||
|
int max = MAX_CHILDREN;
|
||||||
update_nbr();
|
update_nbr();
|
||||||
|
|
||||||
|
if(instance != NULL) {
|
||||||
|
/* No need to reserve space for parents for RPL ROOT */
|
||||||
|
if(instance->current_dag->rank == ROOT_RANK(instance)) {
|
||||||
|
max = NBR_TABLE_MAX_NEIGHBORS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if this DAO sender is not yet neighbor and there is already too
|
/* Check if this DAO sender is not yet neighbor and there is already too
|
||||||
many children. */
|
many children. */
|
||||||
if(num_children >= MAX_CHILDREN) {
|
if(num_children >= max) {
|
||||||
PRINTF("Can not add another child - already at max.\n");
|
PRINTF("Can not add another child - already at max.\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -234,7 +241,7 @@ rpl_nbr_policy_find_removable(nbr_table_reason_t reason,void * data) {
|
||||||
case NBR_TABLE_REASON_RPL_DIO:
|
case NBR_TABLE_REASON_RPL_DIO:
|
||||||
return find_removable_dio(&UIP_IP_BUF->srcipaddr, data);
|
return find_removable_dio(&UIP_IP_BUF->srcipaddr, data);
|
||||||
case NBR_TABLE_REASON_RPL_DAO:
|
case NBR_TABLE_REASON_RPL_DAO:
|
||||||
return find_removable_dao(&UIP_IP_BUF->srcipaddr);
|
return find_removable_dao(&UIP_IP_BUF->srcipaddr, data);
|
||||||
case NBR_TABLE_REASON_RPL_DIS:
|
case NBR_TABLE_REASON_RPL_DIS:
|
||||||
return find_removable_dis(&UIP_IP_BUF->srcipaddr);
|
return find_removable_dis(&UIP_IP_BUF->srcipaddr);
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Add table
Reference in a new issue