fixed so that nbr policy for RPL Root do not save room for parents

This commit is contained in:
Joakim Eriksson 2015-09-22 22:12:06 +02:00
parent 1fcef0f90d
commit 13b8c04c6f
2 changed files with 12 additions and 5 deletions

View file

@ -820,7 +820,7 @@ dao_input(void)
PRINTF("RPL: adding DAO route\n");
/* 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 ");
PRINT6ADDR(&dao_sender_addr);
PRINTF(", ");

View file

@ -62,7 +62,6 @@
* NOTE: this policy assumes that all neighbors end up being IPv6
* neighbors and are not only MAC neighbors.
*/
#define MAX_CHILDREN (NBR_TABLE_MAX_NEIGHBORS - 2)
#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 *
find_removable_dao(uip_ipaddr_t *from)
find_removable_dao(uip_ipaddr_t *from, rpl_instance_t *instance)
{
int max = MAX_CHILDREN;
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
many children. */
if(num_children >= MAX_CHILDREN) {
if(num_children >= max) {
PRINTF("Can not add another child - already at max.\n");
return NULL;
}
@ -234,7 +241,7 @@ rpl_nbr_policy_find_removable(nbr_table_reason_t reason,void * data) {
case NBR_TABLE_REASON_RPL_DIO:
return find_removable_dio(&UIP_IP_BUF->srcipaddr, data);
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:
return find_removable_dis(&UIP_IP_BUF->srcipaddr);
default: