diff --git a/core/net/rpl/rpl-dag.c b/core/net/rpl/rpl-dag.c index e103d65f9..08178d5ad 100644 --- a/core/net/rpl/rpl-dag.c +++ b/core/net/rpl/rpl-dag.c @@ -987,7 +987,7 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio) instance->dio_redundancy != dio->dag_redund || instance->default_lifetime != dio->default_lifetime || instance->lifetime_unit != dio->lifetime_unit) { - PRINTF("RPL: DIO for DAG instance %u uncompatible with previos DIO\n", + PRINTF("RPL: DIO for DAG instance %u incompatible with previous DIO\n", dio->instance_id); rpl_remove_parent(p); dag->used = 0; @@ -1171,7 +1171,7 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio) RPL_LOLLIPOP_INCREMENT(dag->version); rpl_reset_dio_timer(instance); } else { - PRINTF("RPL: Global Repair\n"); + PRINTF("RPL: Global repair\n"); if(dio->prefix_info.length != 0) { if(dio->prefix_info.flags & UIP_ND6_RA_FLAG_AUTONOMOUS) { PRINTF("RPL : Prefix announced in DIO\n"); diff --git a/core/net/rpl/rpl-icmp6.c b/core/net/rpl/rpl-icmp6.c index c1cc6060b..a34eb06aa 100644 --- a/core/net/rpl/rpl-icmp6.c +++ b/core/net/rpl/rpl-icmp6.c @@ -176,12 +176,14 @@ dis_output(uip_ipaddr_t *addr) unsigned char *buffer; uip_ipaddr_t tmpaddr; - /* DAG Information Solicitation - 2 bytes reserved */ - /* 0 1 2 */ - /* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 */ - /* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ - /* | Flags | Reserved | Option(s)... */ - /* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ + /* + * DAG Information Solicitation - 2 bytes reserved + * 0 1 2 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Flags | Reserved | Option(s)... + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ buffer = UIP_ICMP_PAYLOAD; buffer[0] = buffer[1] = 0; @@ -241,7 +243,7 @@ dio_input(void) PRINTLLADDR((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER)); PRINTF("\n"); } else { - PRINTF("RPL: Out of Memory, dropping DIO from "); + PRINTF("RPL: Out of memory, dropping DIO from "); PRINT6ADDR(&from); PRINTF(", "); PRINTLLADDR((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER)); @@ -383,7 +385,7 @@ dio_input(void) break; case RPL_OPTION_PREFIX_INFO: if(len != 32) { - PRINTF("RPL: DAG prefix info not ok, len != 32\n"); + PRINTF("RPL: Invalid DAG prefix info, len != 32\n"); RPL_STAT(rpl_stats.malformed_msgs++); return; } @@ -420,7 +422,7 @@ dio_output(rpl_instance_t *instance, uip_ipaddr_t *uc_addr) #endif /* !RPL_LEAF_ONLY */ #if RPL_LEAF_ONLY - /* In leaf mode, we send DIO message only as unicasts in response to + /* In leaf mode, we only send DIO messages as unicasts in response to unicast DIS messages. */ if(uc_addr == NULL) { PRINTF("RPL: LEAF ONLY have multicast addr: skip dio_output\n"); @@ -583,10 +585,11 @@ dao_input(void) int len; int i; int learned_from; - rpl_parent_t *p; + rpl_parent_t *parent; uip_ds6_nbr_t *nbr; prefixlen = 0; + parent = NULL; uip_ipaddr_copy(&dao_sender_addr, &UIP_IP_BUF->srcipaddr); @@ -616,15 +619,13 @@ dao_input(void) sequence = buffer[pos++]; dag = instance->current_dag; - /* Is the DAGID present? */ + /* Is the DAG ID present? */ if(flags & RPL_DAO_D_FLAG) { if(memcmp(&dag->dag_id, &buffer[pos], sizeof(dag->dag_id))) { PRINTF("RPL: Ignoring a DAO for a DAG different from ours\n"); return; } pos += 16; - } else { - /* Perhaps, there are verification to do but ... */ } learned_from = uip_is_addr_mcast(&dao_sender_addr) ? @@ -634,23 +635,23 @@ dao_input(void) learned_from == RPL_ROUTE_FROM_UNICAST_DAO? "unicast": "multicast"); if(learned_from == RPL_ROUTE_FROM_UNICAST_DAO) { /* Check whether this is a DAO forwarding loop. */ - p = rpl_find_parent(dag, &dao_sender_addr); + parent = rpl_find_parent(dag, &dao_sender_addr); /* check if this is a new DAO registration with an "illegal" rank */ /* if we already route to this node it is likely */ - if(p != NULL && - DAG_RANK(p->rank, instance) < DAG_RANK(dag->rank, instance)) { + if(parent != NULL && + DAG_RANK(parent->rank, instance) < DAG_RANK(dag->rank, instance)) { PRINTF("RPL: Loop detected when receiving a unicast DAO from a node with a lower rank! (%u < %u)\n", - DAG_RANK(p->rank, instance), DAG_RANK(dag->rank, instance)); - p->rank = INFINITE_RANK; - p->updated = 1; + DAG_RANK(parent->rank, instance), DAG_RANK(dag->rank, instance)); + parent->rank = INFINITE_RANK; + parent->updated = 1; return; } /* If we get the DAO from our parent, we also have a loop. */ - if(p != NULL && p == dag->preferred_parent) { + if(parent != NULL && parent == dag->preferred_parent) { PRINTF("RPL: Loop detected when receiving a unicast DAO from our parent\n"); - p->rank = INFINITE_RANK; - p->updated = 1; + parent->rank = INFINITE_RANK; + parent->updated = 1; return; } } @@ -756,7 +757,7 @@ dao_input(void) PRINTF("RPL: Neighbor already in neighbor cache\n"); } - rpl_lock_parent(p); + rpl_lock_parent(parent); rep = rpl_add_route(dag, &prefix, prefixlen, &dao_sender_addr); if(rep == NULL) { diff --git a/core/net/rpl/rpl-mrhof.c b/core/net/rpl/rpl-mrhof.c index 9d75f319b..634bec763 100644 --- a/core/net/rpl/rpl-mrhof.c +++ b/core/net/rpl/rpl-mrhof.c @@ -104,7 +104,7 @@ calculate_path_metric(rpl_parent_t *p) } static void -reset(rpl_dag_t *sag) +reset(rpl_dag_t *dag) { PRINTF("RPL: Reset MRHOF\n"); } diff --git a/core/net/rpl/rpl-private.h b/core/net/rpl/rpl-private.h index 0df8a91ca..943ef1db8 100644 --- a/core/net/rpl/rpl-private.h +++ b/core/net/rpl/rpl-private.h @@ -203,7 +203,7 @@ * whose integer part can be obtained by dividing the value by * RPL_DAG_MC_ETX_DIVISOR. */ -#define RPL_DAG_MC_ETX_DIVISOR 128 +#define RPL_DAG_MC_ETX_DIVISOR 256 /* DIS related */ #define RPL_DIS_SEND 1 diff --git a/core/net/rpl/rpl-timers.c b/core/net/rpl/rpl-timers.c index b4c25df19..d2ff5c97f 100644 --- a/core/net/rpl/rpl-timers.c +++ b/core/net/rpl/rpl-timers.c @@ -70,7 +70,7 @@ handle_periodic_timer(void *ptr) rpl_recalculate_ranks(); /* handle DIS */ -#ifdef RPL_DIS_SEND +#if RPL_DIS_SEND next_dis++; if(rpl_get_any_dag() == NULL && next_dis >= RPL_DIS_INTERVAL) { next_dis = 0; diff --git a/core/net/rpl/rpl.c b/core/net/rpl/rpl.c index 9fca4c28e..c1384b0b6 100644 --- a/core/net/rpl/rpl.c +++ b/core/net/rpl/rpl.c @@ -308,6 +308,8 @@ rpl_init(void) #if RPL_CONF_STATS memset(&rpl_stats, 0, sizeof(rpl_stats)); #endif + + RPL_OF.reset(NULL); } /*---------------------------------------------------------------------------*/ #endif /* UIP_CONF_IPV6 */ diff --git a/core/net/rpl/rpl.h b/core/net/rpl/rpl.h index 562961d84..76134e44e 100644 --- a/core/net/rpl/rpl.h +++ b/core/net/rpl/rpl.h @@ -189,6 +189,9 @@ struct rpl_of { rpl_ocp_t ocp; }; typedef struct rpl_of rpl_of_t; + +/* Declare the selected objective function. */ +extern rpl_of_t RPL_OF; /*---------------------------------------------------------------------------*/ /* Instance */ struct rpl_instance {