Merge branch 'contrib/ti-simplelink' of https://github.com/tiepettersen/contiki-ng into contrib/ti-simplelink

This commit is contained in:
Edvard Pettersen 2018-09-11 17:51:54 +02:00
commit 02fc8fdede
11 changed files with 444 additions and 410 deletions

View File

@ -9,10 +9,13 @@ SIZE = arm-none-eabi-size
SREC_CAT = srec_cat
CFLAGS += -mthumb -mabi=aapcs -mlittle-endian
CFLAGS += -Werror -Wall
CFLAGS += -Wall
CFLAGS += -std=c99
CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
CFLAGS += -fshort-enums -fomit-frame-pointer -fno-builtin
ifeq ($(WERROR),1)
CFLAGS += -Werror
endif
LDFLAGS += -mthumb -mlittle-endian

View File

@ -1,6 +1,12 @@
CPU_ABS_PATH = arch/cpu/cc26xx-cc13xx
TI_XXWARE = $(CONTIKI_CPU)/$(TI_XXWARE_PATH)
ifeq (,$(wildcard $(TI_XXWARE)))
$(warning $(TI_XXWARE) does not exist.)
$(warning Did you run 'git submodule update --init' ?)
$(error "")
endif
### cc26xxware sources under driverlib will be added to the MODULES list
TI_XXWARE_SRC = $(CPU_ABS_PATH)/$(TI_XXWARE_PATH)/driverlib

View File

@ -36,18 +36,18 @@
#include "net/routing/rpl-classic/rpl-private.h"
#include "net/ipv6/uip-ds6-route.h"
#include "sys/log.h"
#include <string.h>
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
/*---------------------------------------------------------------------------*/
static void
set_global_address(uip_ipaddr_t *prefix, uip_ipaddr_t *iid)
{
static uip_ipaddr_t root_ipaddr;
int i;
uint8_t state;
/* Assign a unique local address (RFC4193,
http://tools.ietf.org/html/rfc4193). */
@ -64,13 +64,17 @@ set_global_address(uip_ipaddr_t *prefix, uip_ipaddr_t *iid)
uip_ds6_addr_add(&root_ipaddr, 0, ADDR_AUTOCONF);
printf("IPv6 addresses: ");
for(i = 0; i < UIP_DS6_ADDR_NB; i++) {
state = uip_ds6_if.addr_list[i].state;
if(uip_ds6_if.addr_list[i].isused &&
(state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) {
uip_debug_ipaddr_print(&uip_ds6_if.addr_list[i].ipaddr);
printf("\n");
if(LOG_DBG_ENABLED) {
uint8_t state;
LOG_DBG("IPv6 addresses: ");
for(int i = 0; i < UIP_DS6_ADDR_NB; i++) {
state = uip_ds6_if.addr_list[i].state;
if(uip_ds6_if.addr_list[i].isused &&
(state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) {
LOG_DBG_6ADDR(&uip_ds6_if.addr_list[i].ipaddr);
LOG_DBG_("\n");
}
}
}
}
@ -126,14 +130,14 @@ rpl_dag_root_start(void)
uip_ip6addr(&prefix, UIP_DS6_DEFAULT_PREFIX, 0, 0, 0, 0, 0, 0, 0);
rpl_set_prefix(dag, &prefix, 64);
PRINTF("rpl_dag_root_set_prefix_dag: created a new RPL dag\n");
LOG_INFO("root_set_prefix: created a new RPL dag\n");
return 0;
} else {
PRINTF("rpl_dag_root_set_prefix_dag: failed to create a new RPL DAG\n");
LOG_ERR("root_set_prefix: failed to create a new RPL DAG\n");
return -1;
}
} else {
PRINTF("rpl_dag_root_set_prefix_dag: failed to create a new RPL DAG, no preferred IP address found\n");
LOG_ERR("root_set_prefix_dag: failed to create a new RPL DAG, no preferred IP address found\n");
return -2;
}
}

View File

@ -56,12 +56,13 @@
#include "lib/list.h"
#include "lib/memb.h"
#include "sys/ctimer.h"
#include "sys/log.h"
#include <limits.h>
#include <string.h>
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
/* A configurable function called after every RPL parent switch */
#ifdef RPL_CALLBACK_PARENT_SWITCH
@ -233,19 +234,19 @@ static void
rpl_set_preferred_parent(rpl_dag_t *dag, rpl_parent_t *p)
{
if(dag != NULL && dag->preferred_parent != p) {
PRINTF("RPL: rpl_set_preferred_parent ");
LOG_INFO("rpl_set_preferred_parent ");
if(p != NULL) {
PRINT6ADDR(rpl_parent_get_ipaddr(p));
LOG_INFO_6ADDR(rpl_parent_get_ipaddr(p));
} else {
PRINTF("NULL");
LOG_INFO_("NULL");
}
PRINTF(" used to be ");
LOG_INFO_(" used to be ");
if(dag->preferred_parent != NULL) {
PRINT6ADDR(rpl_parent_get_ipaddr(dag->preferred_parent));
LOG_INFO_6ADDR(rpl_parent_get_ipaddr(dag->preferred_parent));
} else {
PRINTF("NULL");
LOG_INFO_("NULL");
}
PRINTF("\n");
LOG_INFO_("\n");
#ifdef RPL_CALLBACK_PARENT_SWITCH
RPL_CALLBACK_PARENT_SWITCH(dag->preferred_parent, p);
@ -281,8 +282,7 @@ remove_parents(rpl_dag_t *dag, rpl_rank_t minimum_rank)
{
rpl_parent_t *p;
PRINTF("RPL: Removing parents (minimum rank %u)\n",
minimum_rank);
LOG_INFO("Removing parents (minimum rank %u)\n", minimum_rank);
p = nbr_table_head(rpl_parents);
while(p != NULL) {
@ -298,8 +298,7 @@ nullify_parents(rpl_dag_t *dag, rpl_rank_t minimum_rank)
{
rpl_parent_t *p;
PRINTF("RPL: Nullifying parents (minimum rank %u)\n",
minimum_rank);
LOG_INFO("Nullifying parents (minimum rank %u)\n", minimum_rank);
p = nbr_table_head(rpl_parents);
while(p != NULL) {
@ -371,11 +370,11 @@ rpl_set_root(uint8_t instance_id, uip_ipaddr_t *dag_id)
RPL_LOLLIPOP_INCREMENT(version);
}
if(dag == dag->instance->current_dag) {
PRINTF("RPL: Dropping a joined DAG when setting this node as root");
LOG_INFO("Dropping a joined DAG when setting this node as root\n");
rpl_set_default_route(instance, NULL);
dag->instance->current_dag = NULL;
} else {
PRINTF("RPL: Dropping a DAG when setting this node as root");
LOG_INFO("Dropping a DAG when setting this node as root\n");
}
rpl_free_dag(dag);
}
@ -384,7 +383,7 @@ rpl_set_root(uint8_t instance_id, uip_ipaddr_t *dag_id)
dag = rpl_alloc_dag(instance_id, dag_id);
if(dag == NULL) {
PRINTF("RPL: Failed to allocate a DAG\n");
LOG_ERR("Failed to allocate a DAG\n");
return NULL;
}
@ -397,7 +396,7 @@ rpl_set_root(uint8_t instance_id, uip_ipaddr_t *dag_id)
instance->mop = RPL_MOP_DEFAULT;
instance->of = rpl_find_of(RPL_OF_OCP);
if(instance->of == NULL) {
PRINTF("RPL: OF with OCP %u not supported\n", RPL_OF_OCP);
LOG_WARN("OF with OCP %u not supported\n", RPL_OF_OCP);
return NULL;
}
@ -433,11 +432,11 @@ rpl_set_root(uint8_t instance_id, uip_ipaddr_t *dag_id)
instance->of->update_metric_container(instance);
default_instance = instance;
PRINTF("RPL: Node set to be a DAG root with DAG ID ");
PRINT6ADDR(&dag->dag_id);
PRINTF("\n");
LOG_INFO("Node set to be a DAG root with DAG ID ");
LOG_INFO_6ADDR(&dag->dag_id);
LOG_INFO_("\n");
ANNOTATE("#A root=%u\n", dag->dag_id.u8[sizeof(dag->dag_id) - 1]);
LOG_ANNOTATE("#A root=%u\n", dag->dag_id.u8[sizeof(dag->dag_id) - 1]);
rpl_reset_dio_timer(instance);
@ -452,14 +451,14 @@ rpl_repair_root(uint8_t instance_id)
instance = rpl_get_instance(instance_id);
if(instance == NULL ||
instance->current_dag->rank != ROOT_RANK(instance)) {
PRINTF("RPL: rpl_repair_root triggered but not root\n");
LOG_WARN("rpl_repair_root triggered but not root\n");
return 0;
}
RPL_STAT(rpl_stats.root_repairs++);
RPL_LOLLIPOP_INCREMENT(instance->current_dag->version);
RPL_LOLLIPOP_INCREMENT(instance->dtsn_out);
PRINTF("RPL: rpl_repair_root initiating global repair with version %d\n", instance->current_dag->version);
LOG_INFO("rpl_repair_root initiating global repair with version %d\n", instance->current_dag->version);
rpl_reset_dio_timer(instance);
return 1;
}
@ -490,9 +489,9 @@ check_prefix(rpl_prefix_t *last_prefix, rpl_prefix_t *new_prefix)
set_ip_from_prefix(&ipaddr, last_prefix);
rep = uip_ds6_addr_lookup(&ipaddr);
if(rep != NULL) {
PRINTF("RPL: removing global IP address ");
PRINT6ADDR(&ipaddr);
PRINTF("\n");
LOG_DBG("removing global IP address ");
LOG_DBG_6ADDR(&ipaddr);
LOG_DBG_("\n");
uip_ds6_addr_rm(rep);
}
}
@ -500,9 +499,9 @@ check_prefix(rpl_prefix_t *last_prefix, rpl_prefix_t *new_prefix)
if(new_prefix != NULL) {
set_ip_from_prefix(&ipaddr, new_prefix);
if(uip_ds6_addr_lookup(&ipaddr) == NULL) {
PRINTF("RPL: adding global IP address ");
PRINT6ADDR(&ipaddr);
PRINTF("\n");
LOG_DBG("adding global IP address ");
LOG_DBG_6ADDR(&ipaddr);
LOG_DBG_("\n");
uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF);
}
}
@ -524,15 +523,15 @@ rpl_set_prefix(rpl_dag_t *dag, uip_ipaddr_t *prefix, unsigned len)
memcpy(&dag->prefix_info.prefix, prefix, (len + 7) / 8);
dag->prefix_info.length = len;
dag->prefix_info.flags = UIP_ND6_RA_FLAG_AUTONOMOUS;
PRINTF("RPL: Prefix set - will announce this in DIOs\n");
LOG_INFO("Prefix set - will announce this in DIOs\n");
if(dag->rank != ROOT_RANK(dag->instance)) {
/* Autoconfigure an address if this node does not already have an address
with this prefix. Otherwise, update the prefix */
if(last_len == 0) {
PRINTF("rpl_set_prefix - prefix NULL\n");
LOG_INFO("rpl_set_prefix - prefix NULL\n");
check_prefix(NULL, &dag->prefix_info);
} else {
PRINTF("rpl_set_prefix - prefix NON-NULL\n");
LOG_INFO("rpl_set_prefix - prefix NON-NULL\n");
check_prefix(&last_prefix, &dag->prefix_info);
}
}
@ -543,17 +542,17 @@ int
rpl_set_default_route(rpl_instance_t *instance, uip_ipaddr_t *from)
{
if(instance->def_route != NULL) {
PRINTF("RPL: Removing default route through ");
PRINT6ADDR(&instance->def_route->ipaddr);
PRINTF("\n");
LOG_DBG("Removing default route through ");
LOG_DBG_6ADDR(&instance->def_route->ipaddr);
LOG_DBG_("\n");
uip_ds6_defrt_rm(instance->def_route);
instance->def_route = NULL;
}
if(from != NULL) {
PRINTF("RPL: Adding default route through ");
PRINT6ADDR(from);
PRINTF("\n");
LOG_DBG("Adding default route through ");
LOG_DBG_6ADDR(from);
LOG_DBG("\n");
instance->def_route = uip_ds6_defrt_add(from,
RPL_DEFAULT_ROUTE_INFINITE_LIFETIME ? 0 : RPL_LIFETIME(instance, instance->default_lifetime));
if(instance->def_route == NULL) {
@ -632,7 +631,7 @@ rpl_free_instance(rpl_instance_t *instance)
rpl_dag_t *dag;
rpl_dag_t *end;
PRINTF("RPL: Leaving the instance %u\n", instance->instance_id);
LOG_INFO("Leaving the instance %u\n", instance->instance_id);
/* Remove any DAG inside this instance */
for(dag = &instance->dag_table[0], end = dag + RPL_MAX_DAG_PER_INSTANCE; dag < end; ++dag) {
@ -661,9 +660,9 @@ void
rpl_free_dag(rpl_dag_t *dag)
{
if(dag->joined) {
PRINTF("RPL: Leaving the DAG ");
PRINT6ADDR(&dag->dag_id);
PRINTF("\n");
LOG_INFO("Leaving the DAG ");
LOG_INFO_6ADDR(&dag->dag_id);
LOG_INFO_("\n");
dag->joined = 0;
/* Remove routes installed by DAOs. */
@ -693,15 +692,15 @@ rpl_add_parent(rpl_dag_t *dag, rpl_dio_t *dio, uip_ipaddr_t *addr)
* Typically, the parent is added upon receiving a DIO. */
const uip_lladdr_t *lladdr = uip_ds6_nbr_lladdr_from_ipaddr(addr);
PRINTF("RPL: rpl_add_parent lladdr %p ", lladdr);
PRINT6ADDR(addr);
PRINTF("\n");
LOG_DBG("rpl_add_parent lladdr %p ", lladdr);
LOG_DBG_6ADDR(addr);
LOG_DBG_("\n");
if(lladdr != NULL) {
/* Add parent in rpl_parents - again this is due to DIO */
p = nbr_table_add_lladdr(rpl_parents, (linkaddr_t *)lladdr,
NBR_TABLE_REASON_RPL_DIO, dio);
if(p == NULL) {
PRINTF("RPL: rpl_add_parent p NULL\n");
LOG_DBG("rpl_add_parent p NULL\n");
} else {
p->dag = dag;
p->rank = dio->rank;
@ -792,9 +791,9 @@ rpl_select_dag(rpl_instance_t *instance, rpl_parent_t *p)
rpl_remove_routes(instance->current_dag);
}
PRINTF("RPL: New preferred DAG: ");
PRINT6ADDR(&best_dag->dag_id);
PRINTF("\n");
LOG_INFO("New preferred DAG: ");
LOG_INFO_6ADDR(&best_dag->dag_id);
LOG_INFO_("\n");
if(best_dag->prefix_info.flags & UIP_ND6_RA_FLAG_AUTONOMOUS) {
check_prefix(&instance->current_dag->prefix_info, &best_dag->prefix_info);
@ -817,7 +816,7 @@ rpl_select_dag(rpl_instance_t *instance, rpl_parent_t *p)
}
if(!acceptable_rank(best_dag, best_dag->rank)) {
PRINTF("RPL: New rank unacceptable!\n");
LOG_WARN("New rank unacceptable!\n");
rpl_set_preferred_parent(instance->current_dag, NULL);
if(RPL_IS_STORING(instance) && last_parent != NULL) {
/* Send a No-Path DAO to the removed preferred parent. */
@ -828,7 +827,7 @@ rpl_select_dag(rpl_instance_t *instance, rpl_parent_t *p)
if(best_dag->preferred_parent != last_parent) {
rpl_set_default_route(instance, rpl_parent_get_ipaddr(best_dag->preferred_parent));
PRINTF("RPL: Changed preferred parent, rank changed from %u to %u\n",
LOG_INFO("Changed preferred parent, rank changed from %u to %u\n",
(unsigned)old_rank, best_dag->rank);
RPL_STAT(rpl_stats.parent_switch++);
if(RPL_IS_STORING(instance)) {
@ -843,11 +842,11 @@ rpl_select_dag(rpl_instance_t *instance, rpl_parent_t *p)
/* The DAO parent set changed - schedule a DAO transmission. */
rpl_schedule_dao(instance);
rpl_reset_dio_timer(instance);
#if DEBUG
rpl_print_neighbor_list();
#endif
if(LOG_DBG_ENABLED) {
rpl_print_neighbor_list();
}
} else if(best_dag->rank != old_rank) {
PRINTF("RPL: Preferred parent update, rank changed from %u to %u\n",
LOG_DBG("RPL: Preferred parent update, rank changed from %u to %u\n",
(unsigned)old_rank, best_dag->rank);
}
return best_dag;
@ -871,7 +870,7 @@ best_parent(rpl_dag_t *dag, int fresh_only)
/* Exclude parents from other DAGs or announcing an infinite rank */
if(p->dag != dag || p->rank == RPL_INFINITE_RANK || p->rank < ROOT_RANK(dag->instance)) {
if(p->rank < ROOT_RANK(dag->instance)) {
PRINTF("RPL: Parent has invalid rank\n");
LOG_WARN("Parent has invalid rank\n");
}
continue;
}
@ -939,9 +938,9 @@ rpl_select_parent(rpl_dag_t *dag)
void
rpl_remove_parent(rpl_parent_t *parent)
{
PRINTF("RPL: Removing parent ");
PRINT6ADDR(rpl_parent_get_ipaddr(parent));
PRINTF("\n");
LOG_INFO("Removing parent ");
LOG_INFO_6ADDR(rpl_parent_get_ipaddr(parent));
LOG_INFO_("\n");
rpl_nullify_parent(parent);
@ -958,9 +957,9 @@ rpl_nullify_parent(rpl_parent_t *parent)
dag->rank = RPL_INFINITE_RANK;
if(dag->joined) {
if(dag->instance->def_route != NULL) {
PRINTF("RPL: Removing default route ");
PRINT6ADDR(rpl_parent_get_ipaddr(parent));
PRINTF("\n");
LOG_DBG("Removing default route ");
LOG_DBG_6ADDR(rpl_parent_get_ipaddr(parent));
LOG_DBG_("\n");
uip_ds6_defrt_rm(dag->instance->def_route);
dag->instance->def_route = NULL;
}
@ -974,9 +973,9 @@ rpl_nullify_parent(rpl_parent_t *parent)
}
}
PRINTF("RPL: Nullifying parent ");
PRINT6ADDR(rpl_parent_get_ipaddr(parent));
PRINTF("\n");
LOG_INFO("Nullifying parent ");
LOG_INFO_6ADDR(rpl_parent_get_ipaddr(parent));
LOG_INFO_("\n");
}
/*---------------------------------------------------------------------------*/
void
@ -986,10 +985,10 @@ rpl_move_parent(rpl_dag_t *dag_src, rpl_dag_t *dag_dst, rpl_parent_t *parent)
rpl_set_preferred_parent(dag_src, NULL);
dag_src->rank = RPL_INFINITE_RANK;
if(dag_src->joined && dag_src->instance->def_route != NULL) {
PRINTF("RPL: Removing default route ");
PRINT6ADDR(rpl_parent_get_ipaddr(parent));
PRINTF("\n");
PRINTF("rpl_move_parent\n");
LOG_DBG("Removing default route ");
LOG_DBG_6ADDR(rpl_parent_get_ipaddr(parent));
LOG_DBG_("\n");
LOG_DBG("rpl_move_parent\n");
uip_ds6_defrt_rm(dag_src->instance->def_route);
dag_src->instance->def_route = NULL;
}
@ -1000,9 +999,9 @@ rpl_move_parent(rpl_dag_t *dag_src, rpl_dag_t *dag_dst, rpl_parent_t *parent)
}
}
PRINTF("RPL: Moving parent ");
PRINT6ADDR(rpl_parent_get_ipaddr(parent));
PRINTF("\n");
LOG_INFO("Moving parent ");
LOG_INFO_6ADDR(rpl_parent_get_ipaddr(parent));
LOG_INFO_("\n");
parent->dag = dag_dst;
}
@ -1100,7 +1099,7 @@ rpl_join_instance(uip_ipaddr_t *from, rpl_dio_t *dio)
if((!RPL_WITH_NON_STORING && dio->mop == RPL_MOP_NON_STORING)
|| (!RPL_WITH_STORING && (dio->mop == RPL_MOP_STORING_NO_MULTICAST
|| dio->mop == RPL_MOP_STORING_MULTICAST))) {
PRINTF("RPL: DIO advertising a non-supported MOP %u\n", dio->mop);
LOG_WARN("DIO advertising a non-supported MOP %u\n", dio->mop);
return;
}
@ -1108,30 +1107,30 @@ rpl_join_instance(uip_ipaddr_t *from, rpl_dio_t *dio)
objective code point of the DIO. */
of = rpl_find_of(dio->ocp);
if(of == NULL) {
PRINTF("RPL: DIO for DAG instance %u does not specify a supported OF: %u\n",
LOG_WARN("DIO for DAG instance %u does not specify a supported OF: %u\n",
dio->instance_id, dio->ocp);
return;
}
dag = rpl_alloc_dag(dio->instance_id, &dio->dag_id);
if(dag == NULL) {
PRINTF("RPL: Failed to allocate a DAG object!\n");
LOG_ERR("Failed to allocate a DAG object!\n");
return;
}
instance = dag->instance;
p = rpl_add_parent(dag, dio, from);
PRINTF("RPL: Adding ");
PRINT6ADDR(from);
PRINTF(" as a parent: ");
LOG_DBG("Adding ");
LOG_DBG_6ADDR(from);
LOG_DBG_(" as a parent: ");
if(p == NULL) {
PRINTF("failed\n");
LOG_DBG_("failed\n");
instance->used = 0;
return;
}
p->dtsn = dio->dtsn;
PRINTF("succeeded\n");
LOG_DBG_("succeeded\n");
/* Autoconfigure an address if this node does not already have an address
with this prefix. */
@ -1177,12 +1176,12 @@ rpl_join_instance(uip_ipaddr_t *from, rpl_dio_t *dio)
default_instance = instance;
}
PRINTF("RPL: Joined DAG with instance ID %u, rank %hu, DAG ID ",
LOG_INFO("Joined DAG with instance ID %u, rank %hu, DAG ID ",
dio->instance_id, dag->rank);
PRINT6ADDR(&dag->dag_id);
PRINTF("\n");
LOG_INFO_6ADDR(&dag->dag_id);
LOG_INFO_("\n");
ANNOTATE("#A join=%u\n", dag->dag_id.u8[sizeof(dag->dag_id) - 1]);
LOG_ANNOTATE("#A join=%u\n", dag->dag_id.u8[sizeof(dag->dag_id) - 1]);
rpl_reset_dio_timer(instance);
rpl_set_default_route(instance, from);
@ -1190,7 +1189,7 @@ rpl_join_instance(uip_ipaddr_t *from, rpl_dio_t *dio)
if(instance->mop != RPL_MOP_NO_DOWNWARD_ROUTES) {
rpl_schedule_dao(instance);
} else {
PRINTF("RPL: The DIO does not meet the prerequisites for sending a DAO\n");
LOG_WARN("The DIO does not meet the prerequisites for sending a DAO\n");
}
instance->of->reset(dag);
@ -1208,7 +1207,7 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
dag = rpl_alloc_dag(dio->instance_id, &dio->dag_id);
if(dag == NULL) {
PRINTF("RPL: Failed to allocate a DAG object!\n");
LOG_ERR("Failed to allocate a DAG object!\n");
return NULL;
}
@ -1216,16 +1215,16 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
previous_dag = find_parent_dag(instance, from);
if(previous_dag == NULL) {
PRINTF("RPL: Adding ");
PRINT6ADDR(from);
PRINTF(" as a parent: ");
LOG_DBG("Adding ");
LOG_DBG_6ADDR(from);
LOG_DBG_(" as a parent: ");
p = rpl_add_parent(dag, dio, from);
if(p == NULL) {
PRINTF("failed\n");
LOG_DBG_("failed\n");
dag->used = 0;
return NULL;
}
PRINTF("succeeded\n");
LOG_DBG_("succeeded\n");
} else {
p = rpl_find_parent(previous_dag, from);
if(p != NULL) {
@ -1246,7 +1245,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 incompatible with previous DIO\n",
LOG_WARN("DIO for DAG instance %u incompatible with previous DIO\n",
dio->instance_id);
rpl_remove_parent(p);
dag->used = 0;
@ -1267,12 +1266,12 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
dag->rank = rpl_rank_via_parent(p);
dag->min_rank = dag->rank; /* So far this is the lowest rank we know of. */
PRINTF("RPL: Joined DAG with instance ID %u, rank %hu, DAG ID ",
LOG_INFO("Joined DAG with instance ID %u, rank %hu, DAG ID ",
dio->instance_id, dag->rank);
PRINT6ADDR(&dag->dag_id);
PRINTF("\n");
LOG_INFO_6ADDR(&dag->dag_id);
LOG_INFO_("\n");
ANNOTATE("#A join=%u\n", dag->dag_id.u8[sizeof(dag->dag_id) - 1]);
LOG_ANNOTATE("#A join=%u\n", dag->dag_id.u8[sizeof(dag->dag_id) - 1]);
rpl_process_parent_event(instance, p);
p->dtsn = dio->dtsn;
@ -1303,16 +1302,16 @@ global_repair(uip_ipaddr_t *from, rpl_dag_t *dag, rpl_dio_t *dio)
p = rpl_add_parent(dag, dio, from);
if(p == NULL) {
PRINTF("RPL: Failed to add a parent during the global repair\n");
LOG_ERR("Failed to add a parent during the global repair\n");
dag->rank = RPL_INFINITE_RANK;
} else {
dag->rank = rpl_rank_via_parent(p);
dag->min_rank = dag->rank;
PRINTF("RPL: rpl_process_parent_event global repair\n");
LOG_DBG("rpl_process_parent_event global repair\n");
rpl_process_parent_event(dag->instance, p);
}
PRINTF("RPL: Participating in a global repair (version=%u, rank=%hu)\n",
LOG_DBG("Participating in a global repair (version=%u, rank=%hu)\n",
dag->version, dag->rank);
RPL_STAT(rpl_stats.global_repairs++);
@ -1325,10 +1324,10 @@ rpl_local_repair(rpl_instance_t *instance)
int i;
if(instance == NULL) {
PRINTF("RPL: local repair requested for instance NULL\n");
LOG_WARN("local repair requested for instance NULL\n");
return;
}
PRINTF("RPL: Starting a local instance repair\n");
LOG_INFO("Starting a local instance repair\n");
for(i = 0; i < RPL_MAX_DAG_PER_INSTANCE; i++) {
if(instance->dag_table[i].used) {
instance->dag_table[i].rank = RPL_INFINITE_RANK;
@ -1367,9 +1366,9 @@ rpl_recalculate_ranks(void)
while(p != NULL) {
if(p->dag != NULL && p->dag->instance && (p->flags & RPL_PARENT_FLAG_UPDATED)) {
p->flags &= ~RPL_PARENT_FLAG_UPDATED;
PRINTF("RPL: rpl_process_parent_event recalculate_ranks\n");
LOG_DBG("rpl_process_parent_event recalculate_ranks\n");
if(!rpl_process_parent_event(p->dag->instance, p)) {
PRINTF("RPL: A parent was dropped\n");
LOG_DBG("A parent was dropped\n");
}
}
p = nbr_table_next(rpl_parents, p);
@ -1382,26 +1381,26 @@ rpl_process_parent_event(rpl_instance_t *instance, rpl_parent_t *p)
int return_value;
rpl_parent_t *last_parent = instance->current_dag->preferred_parent;
#if DEBUG
rpl_rank_t old_rank;
old_rank = instance->current_dag->rank;
#endif /* DEBUG */
#if LOG_DBG_ENABLED
rpl_rank_t old_rank;
old_rank = instance->current_dag->rank;
#endif /* LOG_DBG_ENABLED */
return_value = 1;
if(RPL_IS_STORING(instance)
&& uip_ds6_route_is_nexthop(rpl_parent_get_ipaddr(p))
&& !rpl_parent_is_reachable(p) && instance->mop > RPL_MOP_NON_STORING) {
PRINTF("RPL: Unacceptable link %u, removing routes via: ", rpl_get_parent_link_metric(p));
PRINT6ADDR(rpl_parent_get_ipaddr(p));
PRINTF("\n");
LOG_WARN("Unacceptable link %u, removing routes via: ", rpl_get_parent_link_metric(p));
LOG_WARN_6ADDR(rpl_parent_get_ipaddr(p));
LOG_WARN_("\n");
rpl_remove_routes_by_nexthop(rpl_parent_get_ipaddr(p), p->dag);
}
if(!acceptable_rank(p->dag, p->rank)) {
/* The candidate parent is no longer valid: the rank increase resulting
from the choice of it as a parent would be too high. */
PRINTF("RPL: Unacceptable rank %u (Current min %u, MaxRankInc %u)\n", (unsigned)p->rank,
LOG_WARN("Unacceptable rank %u (Current min %u, MaxRankInc %u)\n", (unsigned)p->rank,
p->dag->min_rank, p->dag->instance->max_rankinc);
rpl_nullify_parent(p);
if(p != instance->current_dag->preferred_parent) {
@ -1414,26 +1413,26 @@ rpl_process_parent_event(rpl_instance_t *instance, rpl_parent_t *p)
if(rpl_select_dag(instance, p) == NULL) {
if(last_parent != NULL) {
/* No suitable parent anymore; trigger a local repair. */
PRINTF("RPL: No parents found in any DAG\n");
LOG_ERR("No parents found in any DAG\n");
rpl_local_repair(instance);
return 0;
}
}
#if DEBUG
#if LOG_DBG_ENABLED
if(DAG_RANK(old_rank, instance) != DAG_RANK(instance->current_dag->rank, instance)) {
PRINTF("RPL: Moving in the instance from rank %hu to %hu\n",
LOG_INFO("Moving in the instance from rank %hu to %hu\n",
DAG_RANK(old_rank, instance), DAG_RANK(instance->current_dag->rank, instance));
if(instance->current_dag->rank != RPL_INFINITE_RANK) {
PRINTF("RPL: The preferred parent is ");
PRINT6ADDR(rpl_parent_get_ipaddr(instance->current_dag->preferred_parent));
PRINTF(" (rank %u)\n",
LOG_DBG("The preferred parent is ");
LOG_DBG_6ADDR(rpl_parent_get_ipaddr(instance->current_dag->preferred_parent));
LOG_DBG_(" (rank %u)\n",
(unsigned)DAG_RANK(instance->current_dag->preferred_parent->rank, instance));
} else {
PRINTF("RPL: We don't have any parent");
LOG_WARN("We don't have any parent");
}
}
#endif /* DEBUG */
#endif /* LOG_DBG_ENABLED */
return return_value;
}
@ -1443,9 +1442,9 @@ add_nbr_from_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
{
/* add this to the neighbor cache if not already there */
if(rpl_icmp6_update_nbr_table(from, NBR_TABLE_REASON_RPL_DIO, dio) == NULL) {
PRINTF("RPL: Out of memory, dropping DIO from ");
PRINT6ADDR(from);
PRINTF("\n");
LOG_ERR("Out of memory, dropping DIO from ");
LOG_ERR_6ADDR(from);
LOG_ERR_("\n");
return 0;
}
return 1;
@ -1465,7 +1464,7 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
#else
if(dio->mop != RPL_MOP_DEFAULT) {
#endif
PRINTF("RPL: Ignoring a DIO with an unsupported MOP: %d\n", dio->mop);
LOG_ERR("Ignoring a DIO with an unsupported MOP: %d\n", dio->mop);
return;
}
@ -1475,15 +1474,15 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
if(dag != NULL && instance != NULL) {
if(lollipop_greater_than(dio->version, dag->version)) {
if(dag->rank == ROOT_RANK(instance)) {
PRINTF("RPL: Root received inconsistent DIO version number (current: %u, received: %u)\n", dag->version, dio->version);
LOG_WARN("Root received inconsistent DIO version number (current: %u, received: %u)\n", dag->version, dio->version);
dag->version = dio->version;
RPL_LOLLIPOP_INCREMENT(dag->version);
rpl_reset_dio_timer(instance);
} else {
PRINTF("RPL: Global repair\n");
LOG_DBG("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");
LOG_DBG("Prefix announced in DIO\n");
rpl_set_prefix(dag, &dio->prefix_info.prefix, dio->prefix_info.length);
}
}
@ -1494,7 +1493,7 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
if(lollipop_greater_than(dag->version, dio->version)) {
/* The DIO sender is on an older version of the DAG. */
PRINTF("RPL: old version received => inconsistency detected\n");
LOG_WARN("old version received => inconsistency detected\n");
if(dag->joined) {
rpl_reset_dio_timer(instance);
return;
@ -1503,41 +1502,41 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
}
if(instance == NULL) {
PRINTF("RPL: New instance detected (ID=%u): Joining...\n", dio->instance_id);
LOG_INFO("New instance detected (ID=%u): Joining...\n", dio->instance_id);
if(add_nbr_from_dio(from, dio)) {
rpl_join_instance(from, dio);
} else {
PRINTF("RPL: Not joining since could not add parent\n");
LOG_WARN("Not joining since could not add parent\n");
}
return;
}
if(instance->current_dag->rank == ROOT_RANK(instance) && instance->current_dag != dag) {
PRINTF("RPL: Root ignored DIO for different DAG\n");
LOG_WARN("Root ignored DIO for different DAG\n");
return;
}
if(dag == NULL) {
#if RPL_MAX_DAG_PER_INSTANCE > 1
PRINTF("RPL: Adding new DAG to known instance.\n");
LOG_INFO("Adding new DAG to known instance.\n");
if(!add_nbr_from_dio(from, dio)) {
PRINTF("RPL: Could not add new DAG, could not add parent\n");
LOG_WARN("Could not add new DAG, could not add parent\n");
return;
}
dag = rpl_add_dag(from, dio);
if(dag == NULL) {
PRINTF("RPL: Failed to add DAG.\n");
LOG_WARN("Failed to add DAG.\n");
return;
}
#else /* RPL_MAX_DAG_PER_INSTANCE > 1 */
PRINTF("RPL: Only one instance supported.\n");
LOG_WARN("Only one instance supported.\n");
return;
#endif /* RPL_MAX_DAG_PER_INSTANCE > 1 */
}
if(dio->rank < ROOT_RANK(instance)) {
PRINTF("RPL: Ignoring DIO with too low rank: %u\n",
LOG_INFO("Ignoring DIO with too low rank: %u\n",
(unsigned)dio->rank);
return;
}
@ -1545,13 +1544,13 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
/* Prefix Information Option treated to add new prefix */
if(dio->prefix_info.length != 0) {
if(dio->prefix_info.flags & UIP_ND6_RA_FLAG_AUTONOMOUS) {
PRINTF("RPL: Prefix announced in DIO\n");
LOG_DBG("Prefix announced in DIO\n");
rpl_set_prefix(dag, &dio->prefix_info.prefix, dio->prefix_info.length);
}
}
if(!add_nbr_from_dio(from, dio)) {
PRINTF("RPL: Could not add parent based on DIO\n");
LOG_WARN("Could not add parent based on DIO\n");
return;
}
@ -1564,9 +1563,9 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
/* The DIO comes from a valid DAG, we can refresh its lifetime */
dag->lifetime = (1UL << (instance->dio_intmin + instance->dio_intdoubl)) * RPL_DAG_LIFETIME / 1000;
PRINTF("Set dag ");
PRINT6ADDR(&dag->dag_id);
PRINTF(" lifetime to %ld\n", dag->lifetime);
LOG_INFO("Set dag ");
LOG_INFO_6ADDR(&dag->dag_id);
LOG_INFO_(" lifetime to %ld\n", (long int) dag->lifetime);
/*
* At this point, we know that this DIO pertains to a DAG that
@ -1582,14 +1581,14 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
/* Add the DIO sender as a candidate parent. */
p = rpl_add_parent(dag, dio, from);
if(p == NULL) {
PRINTF("RPL: Failed to add a new parent (");
PRINT6ADDR(from);
PRINTF(")\n");
LOG_WARN("Failed to add a new parent (");
LOG_WARN_6ADDR(from);
LOG_WARN_(")\n");
return;
}
PRINTF("RPL: New candidate parent with rank %u: ", (unsigned)p->rank);
PRINT6ADDR(from);
PRINTF("\n");
LOG_INFO("New candidate parent with rank %u: ", (unsigned)p->rank);
LOG_INFO_6ADDR(from);
LOG_INFO_("\n");
} else {
p = rpl_find_parent(previous_dag, from);
if(p != NULL) {
@ -1598,7 +1597,7 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
}
} else {
if(p->rank == dio->rank) {
PRINTF("RPL: Received consistent DIO\n");
LOG_WARN("Received consistent DIO\n");
if(dag->joined) {
instance->dio_counter++;
}
@ -1614,11 +1613,11 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
/* Parent info has been updated, trigger rank recalculation */
p->flags |= RPL_PARENT_FLAG_UPDATED;
PRINTF("RPL: preferred DAG ");
PRINT6ADDR(&instance->current_dag->dag_id);
PRINTF(", rank %u, min_rank %u, ",
LOG_INFO("preferred DAG ");
LOG_INFO_6ADDR(&instance->current_dag->dag_id);
LOG_INFO_(", rank %u, min_rank %u, ",
instance->current_dag->rank, instance->current_dag->min_rank);
PRINTF("parent rank %u, link metric %u\n",
LOG_INFO_("parent rank %u, link metric %u\n",
p->rank, rpl_get_parent_link_metric(p));
/* We have allocated a candidate parent; process the DIO further. */
@ -1627,7 +1626,7 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
memcpy(&p->mc, &dio->mc, sizeof(p->mc));
#endif /* RPL_WITH_MC */
if(rpl_process_parent_event(instance, p) == 0) {
PRINTF("RPL: The candidate parent is rejected\n");
LOG_WARN("The candidate parent is rejected\n");
return;
}

View File

@ -52,8 +52,10 @@
#include "net/routing/rpl-classic/rpl-private.h"
#include "net/packetbuf.h"
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#include "sys/log.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
#include <limits.h>
#include <string.h>
@ -83,7 +85,7 @@ rpl_ext_header_hbh_update(int uip_ext_opt_offset)
|| UIP_EXT_HDR_OPT_RPL_BUF->opt_type != UIP_EXT_HDR_OPT_RPL
|| UIP_EXT_HDR_OPT_RPL_BUF->opt_len != RPL_HDR_OPT_LEN) {
PRINTF("RPL: Hop-by-hop extension header has wrong size or type (%u %u %u)\n",
LOG_ERR("Hop-by-hop extension header has wrong size or type (%u %u %u)\n",
UIP_HBHO_BUF->len,
UIP_EXT_HDR_OPT_RPL_BUF->opt_type,
UIP_EXT_HDR_OPT_RPL_BUF->opt_len);
@ -92,13 +94,13 @@ rpl_ext_header_hbh_update(int uip_ext_opt_offset)
instance = rpl_get_instance(UIP_EXT_HDR_OPT_RPL_BUF->instance);
if(instance == NULL) {
PRINTF("RPL: Unknown instance: %u\n",
LOG_ERR("Unknown instance: %u\n",
UIP_EXT_HDR_OPT_RPL_BUF->instance);
return 0;
}
if(UIP_EXT_HDR_OPT_RPL_BUF->flags & RPL_HDR_OPT_FWD_ERR) {
PRINTF("RPL: Forward error!\n");
LOG_ERR("Forward error!\n");
/* We should try to repair it by removing the neighbor that caused
the packet to be forwareded in the first place. We drop any
routes that go through the neighbor that sent the packet to
@ -117,7 +119,7 @@ rpl_ext_header_hbh_update(int uip_ext_opt_offset)
}
if(!instance->current_dag->joined) {
PRINTF("RPL: No DAG in the instance\n");
LOG_ERR("No DAG in the instance\n");
return 0;
}
down = 0;
@ -142,14 +144,14 @@ rpl_ext_header_hbh_update(int uip_ext_opt_offset)
sender_closer = sender_rank < instance->current_dag->rank;
PRINTF("RPL: Packet going %s, sender closer %d (%d < %d)\n", down == 1 ? "down" : "up",
LOG_DBG("Packet going %s, sender closer %d (%d < %d)\n", down == 1 ? "down" : "up",
sender_closer,
sender_rank,
instance->current_dag->rank
);
if((down && !sender_closer) || (!down && sender_closer)) {
PRINTF("RPL: Loop detected - senderrank: %d my-rank: %d sender_closer: %d\n",
LOG_WARN("Loop detected - senderrank: %d my-rank: %d sender_closer: %d\n",
sender_rank, instance->current_dag->rank,
sender_closer);
/* Attempt to repair the loop by sending a unicast DIO back to the sender
@ -160,18 +162,18 @@ rpl_ext_header_hbh_update(int uip_ext_opt_offset)
}
if(UIP_EXT_HDR_OPT_RPL_BUF->flags & RPL_HDR_OPT_RANK_ERR) {
RPL_STAT(rpl_stats.loop_errors++);
PRINTF("RPL: Rank error signalled in RPL option!\n");
LOG_ERR(" Rank error signalled in RPL option!\n");
/* Packet must be dropped and dio trickle timer reset, see RFC6550 - 11.2.2.2 */
rpl_reset_dio_timer(instance);
return 0;
}
PRINTF("RPL: Single error tolerated\n");
LOG_WARN("Single error tolerated\n");
RPL_STAT(rpl_stats.loop_warnings++);
UIP_EXT_HDR_OPT_RPL_BUF->flags |= RPL_HDR_OPT_RANK_ERR;
return 1;
}
PRINTF("RPL: Rank OK\n");
LOG_DBG("Rank OK\n");
return 1;
}
/*---------------------------------------------------------------------------*/
@ -281,7 +283,7 @@ rpl_ext_header_srh_update(void)
path_len = ((ext_len - padding - RPL_RH_LEN - RPL_SRH_LEN - (16 - cmpre)) / (16 - cmpri)) + 1;
(void)path_len;
PRINTF("RPL: read SRH, path len %u, segments left %u, Cmpri %u, Cmpre %u, ext len %u (padding %u)\n",
LOG_DBG("read SRH, path len %u, segments left %u, Cmpri %u, Cmpre %u, ext len %u (padding %u)\n",
path_len, segments_left, cmpri, cmpre, ext_len, padding);
if(segments_left == 0) {
@ -303,9 +305,9 @@ rpl_ext_header_srh_update(void)
/* Update segments left field */
UIP_RH_BUF->seg_left--;
PRINTF("RPL: SRH next hop ");
PRINT6ADDR(&UIP_IP_BUF->destipaddr);
PRINTF("\n");
LOG_INFO("SRH next hop ");
LOG_INFO_6ADDR(&UIP_IP_BUF->destipaddr);
LOG_INFO_("\n");
}
uip_ext_len = last_uip_ext_len;
return 1;
@ -346,9 +348,9 @@ insert_srh_header(void)
rpl_dag_t *dag;
uip_ipaddr_t node_addr;
PRINTF("RPL: SRH creating source routing header with destination ");
PRINT6ADDR(&UIP_IP_BUF->destipaddr);
PRINTF(" \n");
LOG_INFO("SRH creating source routing header with destination ");
LOG_INFO_6ADDR(&UIP_IP_BUF->destipaddr);
LOG_INFO_("\n");
/* Construct source route. We do not do this recursively to keep the runtime stack usage constant. */
@ -356,7 +358,7 @@ insert_srh_header(void)
dag = rpl_get_dag(&UIP_IP_BUF->destipaddr);
if(dag == NULL) {
PRINTF("RPL: SRH DAG not found\n");
LOG_ERR("SRH DAG not found\n");
return 0;
}
@ -368,12 +370,12 @@ insert_srh_header(void)
root_node = uip_sr_get_node(dag, &dag->dag_id);
if(root_node == NULL) {
PRINTF("RPL: SRH root node not found\n");
LOG_ERR("SRH root node not found\n");
return 0;
}
if(!uip_sr_is_addr_reachable(dag, &UIP_IP_BUF->destipaddr)) {
PRINTF("RPL: SRH no path found to destination\n");
LOG_ERR("SRH no path found to destination\n");
return 0;
}
@ -385,7 +387,7 @@ insert_srh_header(void)
cmpre = 15;
if(node == root_node) {
PRINTF("RPL: SRH no need to insert SRH\n");
LOG_DBG("SRH no need to insert SRH\n");
return 1;
}
@ -397,9 +399,9 @@ insert_srh_header(void)
cmpri = MIN(cmpri, count_matching_bytes(&node_addr, &UIP_IP_BUF->destipaddr, 16));
cmpre = cmpri;
PRINTF("RPL: SRH Hop ");
PRINT6ADDR(&node_addr);
PRINTF("\n");
LOG_DBG("SRH Hop ");
LOG_DBG_6ADDR(&node_addr);
LOG_DBG_("\n");
node = node->parent;
path_len++;
}
@ -412,12 +414,12 @@ insert_srh_header(void)
padding = ext_len % 8 == 0 ? 0 : (8 - (ext_len % 8));
ext_len += padding;
PRINTF("RPL: SRH Path len: %u, ComprI %u, ComprE %u, ext len %u (padding %u)\n",
LOG_DBG("SRH Path len: %u, ComprI %u, ComprE %u, ext len %u (padding %u)\n",
path_len, cmpri, cmpre, ext_len, padding);
/* Check if there is enough space to store the extension header */
if(uip_len + ext_len > UIP_BUFSIZE - UIP_LLH_LEN) {
PRINTF("RPL: Packet too long: impossible to add source routing header (%u bytes)\n", ext_len);
LOG_ERR("Packet too long: impossible to add source routing header (%u bytes)\n", ext_len);
return 0;
}
@ -486,7 +488,7 @@ update_hbh_header(void)
if(UIP_HBHO_BUF->len != ((RPL_HOP_BY_HOP_LEN - 8) / 8)
|| UIP_EXT_HDR_OPT_RPL_BUF->opt_len != RPL_HDR_OPT_LEN) {
PRINTF("RPL: Hop-by-hop extension header has wrong size (%u %u)\n",
LOG_ERR("Hop-by-hop extension header has wrong size (%u %u)\n",
UIP_EXT_HDR_OPT_RPL_BUF->opt_len,
uip_ext_len);
return 0; /* Drop */
@ -494,12 +496,12 @@ update_hbh_header(void)
instance = rpl_get_instance(UIP_EXT_HDR_OPT_RPL_BUF->instance);
if(instance == NULL || !instance->used || !instance->current_dag->joined) {
PRINTF("RPL: Unable to add/update hop-by-hop extension header: incorrect instance\n");
LOG_ERR("Unable to add/update hop-by-hop extension header: incorrect instance\n");
uip_ext_len = last_uip_ext_len;
return 0; /* Drop */
}
PRINTF("RPL: Updating RPL option\n");
LOG_INFO("Updating RPL option\n");
/* Update sender rank and instance, will update flags next */
UIP_EXT_HDR_OPT_RPL_BUF->senderrank = UIP_HTONS(instance->current_dag->rank);
UIP_EXT_HDR_OPT_RPL_BUF->instance = instance->instance_id;
@ -512,10 +514,10 @@ update_hbh_header(void)
if((UIP_EXT_HDR_OPT_RPL_BUF->flags & RPL_HDR_OPT_DOWN)) {
if(uip_ds6_route_lookup(&UIP_IP_BUF->destipaddr) == NULL) {
UIP_EXT_HDR_OPT_RPL_BUF->flags |= RPL_HDR_OPT_FWD_ERR;
PRINTF("RPL forwarding error\n");
LOG_WARN("RPL forwarding error\n");
/* We should send back the packet to the originating parent,
but it is not feasible yet, so we send a No-Path DAO instead */
PRINTF("RPL generate No-Path DAO\n");
LOG_WARN("RPL generate No-Path DAO\n");
parent = rpl_get_parent((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
if(parent != NULL) {
dao_output_target(parent, &UIP_IP_BUF->destipaddr, RPL_ZERO_LIFETIME);
@ -531,11 +533,11 @@ update_hbh_header(void)
/* No route was found, so this packet will go towards the RPL
root. If so, we should not set the down flag. */
UIP_EXT_HDR_OPT_RPL_BUF->flags &= ~RPL_HDR_OPT_DOWN;
PRINTF("RPL option going up\n");
LOG_DBG("RPL option going up\n");
} else {
/* A DAO route was found so we set the down flag. */
UIP_EXT_HDR_OPT_RPL_BUF->flags |= RPL_HDR_OPT_DOWN;
PRINTF("RPL option going down\n");
LOG_DBG("RPL option going down\n");
}
}
}
@ -557,9 +559,9 @@ insert_hbh_header(const rpl_instance_t *instance)
uip_ext_opt_offset = 2;
/* Insert hop-by-hop header */
PRINTF("RPL: Creating hop-by-hop option\n");
LOG_DBG("Creating hop-by-hop option\n");
if(uip_len + RPL_HOP_BY_HOP_LEN > UIP_BUFSIZE - UIP_LLH_LEN) {
PRINTF("RPL: Packet too long: impossible to add hop-by-hop option\n");
LOG_ERR("Packet too long: impossible to add hop-by-hop option\n");
uip_ext_len = last_uip_ext_len;
return 0;
}
@ -619,7 +621,7 @@ rpl_ext_header_remove(void)
if(UIP_IP_BUF->len[1] > temp_len) {
UIP_IP_BUF->len[0]--;
}
PRINTF("RPL: Removing RPL extension header (type %u, len %u)\n", *uip_next_hdr, rpl_ext_hdr_len);
LOG_DBG("Removing RPL extension header (type %u, len %u)\n", *uip_next_hdr, rpl_ext_hdr_len);
memmove(UIP_EXT_BUF, ((uint8_t *)UIP_EXT_BUF) + rpl_ext_hdr_len, uip_len - UIP_IPH_LEN);
} else {
uip_next_hdr = &UIP_EXT_BUF->next;

View File

@ -56,12 +56,13 @@
#include "net/ipv6/multicast/uip-mcast6.h"
#include "random.h"
#include "sys/log.h"
#include <limits.h>
#include <string.h>
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
/*---------------------------------------------------------------------------*/
#define RPL_DIO_GROUNDED 0x80
@ -201,11 +202,11 @@ rpl_icmp6_update_nbr_table(uip_ipaddr_t *from, nbr_table_reason_t reason, void *
if((nbr = uip_ds6_nbr_add(from, (uip_lladdr_t *)
packetbuf_addr(PACKETBUF_ADDR_SENDER),
0, NBR_REACHABLE, reason, data)) != NULL) {
PRINTF("RPL: Neighbor added to neighbor cache ");
PRINT6ADDR(from);
PRINTF(", ");
PRINTLLADDR((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
PRINTF("\n");
LOG_INFO("Neighbor added to neighbor cache ");
LOG_INFO_6ADDR(from);
LOG_INFO_(", ");
LOG_INFO_LLADDR(packetbuf_addr(PACKETBUF_ADDR_SENDER));
LOG_INFO_("\n");
}
}
@ -219,31 +220,31 @@ dis_input(void)
rpl_instance_t *end;
/* DAG Information Solicitation */
PRINTF("RPL: Received a DIS from ");
PRINT6ADDR(&UIP_IP_BUF->srcipaddr);
PRINTF("\n");
LOG_INFO("Received a DIS from ");
LOG_INFO_6ADDR(&UIP_IP_BUF->srcipaddr);
LOG_INFO_("\n");
for(instance = &instance_table[0], end = instance + RPL_MAX_INSTANCES;
instance < end; ++instance) {
if(instance->used == 1) {
if(uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) {
#if RPL_LEAF_ONLY
PRINTF("RPL: LEAF ONLY Multicast DIS will NOT reset DIO timer\n");
LOG_INFO("LEAF ONLY Multicast DIS will NOT reset DIO timer\n");
#else /* !RPL_LEAF_ONLY */
PRINTF("RPL: Multicast DIS => reset DIO timer\n");
LOG_DBG("Multicast DIS => reset DIO timer\n");
rpl_reset_dio_timer(instance);
#endif /* !RPL_LEAF_ONLY */
} else {
/* Check if this neighbor should be added according to the policy. */
if(rpl_icmp6_update_nbr_table(&UIP_IP_BUF->srcipaddr,
NBR_TABLE_REASON_RPL_DIS, NULL) == NULL) {
PRINTF("RPL: Out of Memory, not sending unicast DIO, DIS from ");
PRINT6ADDR(&UIP_IP_BUF->srcipaddr);
PRINTF(", ");
PRINTLLADDR((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
PRINTF("\n");
LOG_ERR("Out of Memory, not sending unicast DIO, DIS from ");
LOG_ERR_6ADDR(&UIP_IP_BUF->srcipaddr);
LOG_ERR_(", ");
LOG_ERR_LLADDR(packetbuf_addr(PACKETBUF_ADDR_SENDER));
LOG_ERR_("\n");
} else {
PRINTF("RPL: Unicast DIS, reply to sender\n");
LOG_DBG("Unicast DIS, reply to sender\n");
dio_output(instance, &UIP_IP_BUF->srcipaddr);
}
/* } */
@ -276,9 +277,9 @@ dis_output(uip_ipaddr_t *addr)
addr = &tmpaddr;
}
PRINTF("RPL: Sending a DIS to ");
PRINT6ADDR(addr);
PRINTF("\n");
LOG_INFO("Sending a DIS to ");
LOG_INFO_6ADDR(addr);
LOG_INFO_("\n");
uip_icmp6_send(addr, ICMP6_RPL, RPL_CODE_DIS, 2);
}
@ -309,9 +310,9 @@ dio_input(void)
uip_ipaddr_copy(&from, &UIP_IP_BUF->srcipaddr);
/* DAG Information Object */
PRINTF("RPL: Received a DIO from ");
PRINT6ADDR(&from);
PRINTF("\n");
LOG_INFO("Received a DIO from ");
LOG_INFO_6ADDR(&from);
LOG_INFO_("\n");
buffer_length = uip_len - uip_l3_icmp_hdr_len;
@ -324,7 +325,7 @@ dio_input(void)
dio.rank = get16(buffer, i);
i += 2;
PRINTF("RPL: Incoming DIO (id, ver, rank) = (%u,%u,%u)\n",
LOG_DBG("Incoming DIO (id, ver, rank) = (%u,%u,%u)\n",
(unsigned)dio.instance_id,
(unsigned)dio.version,
(unsigned)dio.rank);
@ -340,9 +341,9 @@ dio_input(void)
memcpy(&dio.dag_id, buffer + i, sizeof(dio.dag_id));
i += sizeof(dio.dag_id);
PRINTF("RPL: Incoming DIO (dag_id, pref) = (");
PRINT6ADDR(&dio.dag_id);
PRINTF(", %u)\n", dio.preference);
LOG_DBG("Incoming DIO (dag_id, pref) = (");
LOG_DBG_6ADDR(&dio.dag_id);
LOG_DBG_(", %u)\n", dio.preference);
/* Check if there are any DIO suboptions. */
for(; i < buffer_length; i += len) {
@ -355,17 +356,17 @@ dio_input(void)
}
if(len + i > buffer_length) {
PRINTF("RPL: Invalid DIO packet\n");
LOG_WARN("Invalid DIO packet\n");
RPL_STAT(rpl_stats.malformed_msgs++);
goto discard;
}
PRINTF("RPL: DIO option %u, length: %u\n", subopt_type, len - 2);
LOG_DBG("Incoming DIO (option, length) = (%u, %u)\n", subopt_type, len - 2);
switch(subopt_type) {
case RPL_OPTION_DAG_METRIC_CONTAINER:
if(len < 6) {
PRINTF("RPL: Invalid DAG MC, len = %d\n", len);
LOG_WARN("Invalid DAG MC, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
goto discard;
}
@ -381,7 +382,7 @@ dio_input(void)
} else if(dio.mc.type == RPL_DAG_MC_ETX) {
dio.mc.obj.etx = get16(buffer, i + 6);
PRINTF("RPL: DAG MC: type %u, flags %u, aggr %u, prec %u, length %u, ETX %u\n",
LOG_DBG("DAG MC: type %u, flags %u, aggr %u, prec %u, length %u, ETX %u\n",
(unsigned)dio.mc.type,
(unsigned)dio.mc.flags,
(unsigned)dio.mc.aggr,
@ -392,13 +393,13 @@ dio_input(void)
dio.mc.obj.energy.flags = buffer[i + 6];
dio.mc.obj.energy.energy_est = buffer[i + 7];
} else {
PRINTF("RPL: Unhandled DAG MC type: %u\n", (unsigned)dio.mc.type);
LOG_WARN("Unhandled DAG MC type: %u\n", (unsigned)dio.mc.type);
goto discard;
}
break;
case RPL_OPTION_ROUTE_INFO:
if(len < 9) {
PRINTF("RPL: Invalid destination prefix option, len = %d\n", len);
LOG_WARN("Invalid destination prefix option, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
goto discard;
}
@ -410,11 +411,11 @@ dio_input(void)
if(((dio.destination_prefix.length + 7) / 8) + 8 <= len &&
dio.destination_prefix.length <= 128) {
PRINTF("RPL: Copying destination prefix\n");
LOG_INFO("Copying destination prefix\n");
memcpy(&dio.destination_prefix.prefix, &buffer[i + 8],
(dio.destination_prefix.length + 7) / 8);
} else {
PRINTF("RPL: Invalid route info option, len = %d\n", len);
LOG_WARN("Invalid route info option, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
goto discard;
}
@ -422,7 +423,7 @@ dio_input(void)
break;
case RPL_OPTION_DAG_CONF:
if(len != 16) {
PRINTF("RPL: Invalid DAG configuration option, len = %d\n", len);
LOG_WARN("Invalid DAG configuration option, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
goto discard;
}
@ -437,14 +438,14 @@ dio_input(void)
/* buffer + 12 is reserved */
dio.default_lifetime = buffer[i + 13];
dio.lifetime_unit = get16(buffer, i + 14);
PRINTF("RPL: DAG conf:dbl=%d, min=%d red=%d maxinc=%d mininc=%d ocp=%d d_l=%u l_u=%u\n",
LOG_INFO("DAG conf:dbl=%d, min=%d red=%d maxinc=%d mininc=%d ocp=%d d_l=%u l_u=%u\n",
dio.dag_intdoubl, dio.dag_intmin, dio.dag_redund,
dio.dag_max_rankinc, dio.dag_min_hoprankinc, dio.ocp,
dio.default_lifetime, dio.lifetime_unit);
break;
case RPL_OPTION_PREFIX_INFO:
if(len != 32) {
PRINTF("RPL: Invalid DAG prefix info, len != 32\n");
LOG_WARN("Invalid DAG prefix info, len != 32\n");
RPL_STAT(rpl_stats.malformed_msgs++);
goto discard;
}
@ -454,11 +455,11 @@ dio_input(void)
/* preferred lifetime stored in lifetime */
dio.prefix_info.lifetime = get32(buffer, i + 8);
/* 32-bit reserved at i + 12 */
PRINTF("RPL: Copying prefix information\n");
LOG_INFO("Copying prefix information\n");
memcpy(&dio.prefix_info.prefix, &buffer[i + 16], 16);
break;
default:
PRINTF("RPL: Unsupported suboption type in DIO: %u\n",
LOG_WARN("Unsupported suboption type in DIO: %u\n",
(unsigned)subopt_type);
}
}
@ -488,7 +489,7 @@ dio_output(rpl_instance_t *instance, uip_ipaddr_t *uc_addr)
/* 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");
LOG_DBG("LEAF ONLY have multicast addr: skip dio_output\n");
return;
}
#endif /* RPL_LEAF_ONLY */
@ -502,7 +503,7 @@ dio_output(rpl_instance_t *instance, uip_ipaddr_t *uc_addr)
is_root = (dag->rank == ROOT_RANK(instance));
#if RPL_LEAF_ONLY
PRINTF("RPL: LEAF ONLY DIO rank set to RPL_INFINITE_RANK\n");
LOG_DBG("LEAF ONLY DIO rank set to RPL_INFINITE_RANK\n");
set16(buffer, pos, RPL_INFINITE_RANK);
#else /* RPL_LEAF_ONLY */
set16(buffer, pos, dag->rank);
@ -553,7 +554,7 @@ dio_output(rpl_instance_t *instance, uip_ipaddr_t *uc_addr)
buffer[pos++] = instance->mc.obj.energy.flags;
buffer[pos++] = instance->mc.obj.energy.energy_est;
} else {
PRINTF("RPL: Unable to send DIO because of unhandled DAG MC type %u\n",
LOG_ERR("Unable to send DIO because of unhandled DAG MC type %u\n",
(unsigned)instance->mc.type);
return;
}
@ -593,37 +594,38 @@ dio_output(rpl_instance_t *instance, uip_ipaddr_t *uc_addr)
pos += 4;
memcpy(&buffer[pos], &dag->prefix_info.prefix, 16);
pos += 16;
PRINTF("RPL: Sending prefix info in DIO for ");
PRINT6ADDR(&dag->prefix_info.prefix);
PRINTF("\n");
LOG_DBG("Sending prefix info in DIO for ");
LOG_DBG_6ADDR(&dag->prefix_info.prefix);
LOG_DBG_("\n");
} else {
PRINTF("RPL: No prefix to announce (len %d)\n",
LOG_DBG("No prefix to announce (len %d)\n",
dag->prefix_info.length);
}
#if RPL_LEAF_ONLY
#if (DEBUG) & DEBUG_PRINT
if(uc_addr == NULL) {
PRINTF("RPL: LEAF ONLY sending unicast-DIO from multicast-DIO\n");
if(LOG_DBG_ENABLED) {
if(uc_addr == NULL) {
LOG_DBG("LEAF ONLY sending unicast-DIO from multicast-DIO\n");
}
}
#endif /* DEBUG_PRINT */
PRINTF("RPL: Sending unicast-DIO with rank %u to ",
LOG_INFO("Sending unicast-DIO with rank %u to ",
(unsigned)dag->rank);
PRINT6ADDR(uc_addr);
PRINTF("\n");
LOG_INFO_6ADDR(uc_addr);
LOG_INFO_("\n");
uip_icmp6_send(uc_addr, ICMP6_RPL, RPL_CODE_DIO, pos);
#else /* RPL_LEAF_ONLY */
/* Unicast requests get unicast replies! */
if(uc_addr == NULL) {
PRINTF("RPL: Sending a multicast-DIO with rank %u\n",
LOG_INFO("Sending a multicast-DIO with rank %u\n",
(unsigned)instance->current_dag->rank);
uip_create_linklocal_rplnodes_mcast(&addr);
uip_icmp6_send(&addr, ICMP6_RPL, RPL_CODE_DIO, pos);
} else {
PRINTF("RPL: Sending unicast-DIO with rank %u to ",
LOG_INFO("Sending unicast-DIO with rank %u to ",
(unsigned)instance->current_dag->rank);
PRINT6ADDR(uc_addr);
PRINTF("\n");
LOG_INFO_6ADDR(uc_addr);
LOG_INFO_("\n");
uip_icmp6_send(uc_addr, ICMP6_RPL, RPL_CODE_DIO, pos);
}
#endif /* RPL_LEAF_ONLY */
@ -685,7 +687,7 @@ dao_input_storing(void)
/* 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");
LOG_INFO("Ignoring a DAO for a DAG different from ours\n");
return;
}
pos += 16;
@ -695,10 +697,10 @@ dao_input_storing(void)
RPL_ROUTE_FROM_MULTICAST_DAO : RPL_ROUTE_FROM_UNICAST_DAO;
/* Destination Advertisement Object */
PRINTF("RPL: Received a (%s) DAO with sequence number %u from ",
LOG_DBG("Received a (%s) DAO with sequence number %u from ",
learned_from == RPL_ROUTE_FROM_UNICAST_DAO? "unicast": "multicast", sequence);
PRINT6ADDR(&dao_sender_addr);
PRINTF("\n");
LOG_DBG_6ADDR(&dao_sender_addr);
LOG_DBG_("\n");
if(learned_from == RPL_ROUTE_FROM_UNICAST_DAO) {
/* Check whether this is a DAO forwarding loop. */
@ -707,7 +709,7 @@ dao_input_storing(void)
/* if we already route to this node it is likely */
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",
LOG_WARN("Loop detected when receiving a unicast DAO from a node with a lower rank! (%u < %u)\n",
DAG_RANK(parent->rank, instance), DAG_RANK(dag->rank, instance));
parent->rank = RPL_INFINITE_RANK;
parent->flags |= RPL_PARENT_FLAG_UPDATED;
@ -716,7 +718,7 @@ dao_input_storing(void)
/* If we get the DAO from our parent, we also have a loop. */
if(parent != NULL && parent == dag->preferred_parent) {
PRINTF("RPL: Loop detected when receiving a unicast DAO from our parent\n");
LOG_WARN("Loop detected when receiving a unicast DAO from our parent\n");
parent->rank = RPL_INFINITE_RANK;
parent->flags |= RPL_PARENT_FLAG_UPDATED;
return;
@ -750,10 +752,10 @@ dao_input_storing(void)
}
}
PRINTF("RPL: DAO lifetime: %u, prefix length: %u prefix: ",
LOG_INFO("DAO lifetime: %u, prefix length: %u prefix: ",
(unsigned)lifetime, (unsigned)prefixlen);
PRINT6ADDR(&prefix);
PRINTF("\n");
LOG_INFO_6ADDR(&prefix);
LOG_INFO_("\n");
#if RPL_WITH_MULTICAST
if(uip_is_addr_mcast_global(&prefix)) {
@ -774,16 +776,16 @@ dao_input_storing(void)
rep = uip_ds6_route_lookup(&prefix);
if(lifetime == RPL_ZERO_LIFETIME) {
PRINTF("RPL: No-Path DAO received\n");
LOG_INFO("No-Path DAO received\n");
/* No-Path DAO received; invoke the route purging routine. */
if(rep != NULL &&
!RPL_ROUTE_IS_NOPATH_RECEIVED(rep) &&
rep->length == prefixlen &&
uip_ds6_route_nexthop(rep) != NULL &&
uip_ipaddr_cmp(uip_ds6_route_nexthop(rep), &dao_sender_addr)) {
PRINTF("RPL: Setting expiration timer for prefix ");
PRINT6ADDR(&prefix);
PRINTF("\n");
LOG_DBG("Setting expiration timer for prefix ");
LOG_DBG_6ADDR(&prefix);
LOG_DBG_("\n");
RPL_ROUTE_SET_NOPATH_RECEIVED(rep);
rep->state.lifetime = RPL_NOPATH_REMOVAL_DELAY;
@ -794,10 +796,10 @@ dao_input_storing(void)
uint8_t out_seq;
out_seq = prepare_for_dao_fwd(sequence, rep);
PRINTF("RPL: Forwarding No-path DAO to parent - out_seq:%d",
LOG_DBG("Forwarding No-path DAO to parent - out_seq:%d",
out_seq);
PRINT6ADDR(rpl_parent_get_ipaddr(dag->preferred_parent));
PRINTF("\n");
LOG_DBG_6ADDR(rpl_parent_get_ipaddr(dag->preferred_parent));
LOG_DBG_("\n");
buffer = UIP_ICMP_PAYLOAD;
buffer[3] = out_seq; /* add an outgoing seq no before fwd */
@ -815,15 +817,15 @@ dao_input_storing(void)
return;
}
PRINTF("RPL: Adding DAO route\n");
LOG_INFO("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, instance)) == NULL) {
PRINTF("RPL: Out of Memory, dropping DAO from ");
PRINT6ADDR(&dao_sender_addr);
PRINTF(", ");
PRINTLLADDR((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
PRINTF("\n");
LOG_ERR("Out of Memory, dropping DAO from ");
LOG_ERR_6ADDR(&dao_sender_addr);
LOG_ERR_(", ");
LOG_ERR_LLADDR(packetbuf_addr(PACKETBUF_ADDR_SENDER));
LOG_ERR_("\n");
if(flags & RPL_DAO_K_FLAG) {
/* signal the failure to add the node */
dao_ack_output(instance, &dao_sender_addr, sequence,
@ -836,7 +838,7 @@ dao_input_storing(void)
rep = rpl_add_route(dag, &prefix, prefixlen, &dao_sender_addr);
if(rep == NULL) {
RPL_STAT(rpl_stats.mem_overflows++);
PRINTF("RPL: Could not add a route after receiving a DAO\n");
LOG_ERR("Could not add a route after receiving a DAO\n");
if(flags & RPL_DAO_K_FLAG) {
/* signal the failure to add the node */
dao_ack_output(instance, &dao_sender_addr, sequence,
@ -887,9 +889,9 @@ fwd_dao:
}
}
PRINTF("RPL: Forwarding DAO to parent ");
PRINT6ADDR(rpl_parent_get_ipaddr(dag->preferred_parent));
PRINTF(" in seq: %d out seq: %d\n", sequence, out_seq);
LOG_DBG("Forwarding DAO to parent ");
LOG_DBG_6ADDR(rpl_parent_get_ipaddr(dag->preferred_parent));
LOG_DBG_(" in seq: %d out seq: %d\n", sequence, out_seq);
buffer = UIP_ICMP_PAYLOAD;
buffer[3] = out_seq; /* add an outgoing seq no before fwd */
@ -897,7 +899,7 @@ fwd_dao:
ICMP6_RPL, RPL_CODE_DAO, buffer_length);
}
if(should_ack) {
PRINTF("RPL: Sending DAO ACK\n");
LOG_DBG("Sending DAO ACK\n");
uip_clear_buf();
dao_ack_output(instance, &dao_sender_addr, sequence,
RPL_DAO_ACK_UNCONDITIONAL_ACCEPT);
@ -927,6 +929,11 @@ dao_input_nonstoring(void)
int len;
int i;
/* Destination Advertisement Object */
LOG_INFO("Received a DAO from ");
LOG_INFO_6ADDR(&UIP_IP_BUF->srcipaddr);
LOG_INFO_("\n");
prefixlen = 0;
uip_ipaddr_copy(&dao_sender_addr, &UIP_IP_BUF->srcipaddr);
@ -949,7 +956,7 @@ dao_input_nonstoring(void)
/* 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");
LOG_INFO("Ignoring a DAO for a DAG different from ours\n");
return;
}
pos += 16;
@ -984,25 +991,29 @@ dao_input_nonstoring(void)
}
}
PRINTF("RPL: DAO lifetime: %u, prefix length: %u prefix: ",
LOG_INFO("DAO lifetime: %u, prefix length: %u prefix: ",
(unsigned)lifetime, (unsigned)prefixlen);
PRINT6ADDR(&prefix);
PRINTF(", parent: ");
PRINT6ADDR(&dao_parent_addr);
PRINTF(" \n");
LOG_INFO_6ADDR(&prefix);
LOG_INFO_(", parent: ");
LOG_INFO_6ADDR(&dao_parent_addr);
LOG_INFO_("\n");
if(lifetime == RPL_ZERO_LIFETIME) {
PRINTF("RPL: No-Path DAO received\n");
LOG_DBG("No-Path DAO received\n");
uip_sr_expire_parent(dag, &prefix, &dao_parent_addr);
} else {
if(uip_sr_update_node(dag, &prefix, &dao_parent_addr, RPL_LIFETIME(instance, lifetime)) == NULL) {
PRINTF("RPL: failed to add link\n");
LOG_WARN("DAO failed to add link prefix: ");
LOG_WARN_6ADDR(&prefix);
LOG_WARN_(", parent: ");
LOG_WARN_6ADDR(&dao_parent_addr);
LOG_WARN_("\n");
return;
}
}
if(flags & RPL_DAO_K_FLAG) {
PRINTF("RPL: Sending DAO ACK\n");
LOG_DBG("Sending DAO ACK\n");
uip_clear_buf();
dao_ack_output(instance, &dao_sender_addr, sequence,
RPL_DAO_ACK_UNCONDITIONAL_ACCEPT);
@ -1017,14 +1028,14 @@ dao_input(void)
uint8_t instance_id;
/* Destination Advertisement Object */
PRINTF("RPL: Received a DAO from ");
PRINT6ADDR(&UIP_IP_BUF->srcipaddr);
PRINTF("\n");
LOG_INFO("Received a DAO from ");
LOG_INFO_6ADDR(&UIP_IP_BUF->srcipaddr);
LOG_INFO_("\n");
instance_id = UIP_ICMP_PAYLOAD[0];
instance = rpl_get_instance(instance_id);
if(instance == NULL) {
PRINTF("RPL: Ignoring a DAO for an unknown RPL instance(%u)\n",
LOG_INFO("Ignoring a DAO for an unknown RPL instance(%u)\n",
instance_id);
goto discard;
}
@ -1076,7 +1087,7 @@ handle_dao_retransmission(void *ptr)
return;
}
PRINTF("RPL: will retransmit DAO - seq:%d trans:%d\n", instance->my_dao_seqno,
LOG_INFO("will retransmit DAO - seq:%d trans:%d\n", instance->my_dao_seqno,
instance->my_dao_transmissions);
if(get_global_addr(&prefix) == 0) {
@ -1101,7 +1112,7 @@ dao_output(rpl_parent_t *parent, uint8_t lifetime)
uip_ipaddr_t prefix;
if(get_global_addr(&prefix) == 0) {
PRINTF("RPL: No global address set for this node - suppressing DAO\n");
LOG_ERR("No global address set for this node - suppressing DAO\n");
return;
}
@ -1159,30 +1170,30 @@ dao_output_target_seq(rpl_parent_t *parent, uip_ipaddr_t *prefix,
}
if(parent == NULL) {
PRINTF("RPL dao_output_target error parent NULL\n");
LOG_ERR("dao_output_target error parent NULL\n");
return;
}
parent_ipaddr = rpl_parent_get_ipaddr(parent);
if(parent_ipaddr == NULL) {
PRINTF("RPL dao_output_target error parent IP address NULL\n");
LOG_ERR("dao_output_target error parent IP address NULL\n");
return;
}
dag = parent->dag;
if(dag == NULL) {
PRINTF("RPL dao_output_target error dag NULL\n");
LOG_ERR("dao_output_target error dag NULL\n");
return;
}
instance = dag->instance;
if(instance == NULL) {
PRINTF("RPL dao_output_target error instance NULL\n");
LOG_ERR("dao_output_target error instance NULL\n");
return;
}
if(prefix == NULL) {
PRINTF("RPL dao_output_target error prefix NULL\n");
LOG_ERR("dao_output_target error prefix NULL\n");
return;
}
#ifdef RPL_DEBUG_DAO_OUTPUT
@ -1240,15 +1251,15 @@ dao_output_target_seq(rpl_parent_t *parent, uip_ipaddr_t *prefix,
dest_ipaddr = &parent->dag->dag_id;
}
PRINTF("RPL: Sending a %sDAO with sequence number %u, lifetime %u, prefix ",
LOG_INFO("Sending a %sDAO with sequence number %u, lifetime %u, prefix ",
lifetime == RPL_ZERO_LIFETIME ? "No-Path " : "", seq_no, lifetime);
PRINT6ADDR(prefix);
PRINTF(" to ");
PRINT6ADDR(dest_ipaddr);
PRINTF(" , parent ");
PRINT6ADDR(parent_ipaddr);
PRINTF("\n");
LOG_INFO_6ADDR(prefix);
LOG_INFO_(" to ");
LOG_INFO_6ADDR(dest_ipaddr);
LOG_INFO_(" , parent ");
LOG_INFO_6ADDR(parent_ipaddr);
LOG_INFO_("\n");
if(dest_ipaddr != NULL) {
uip_icmp6_send(dest_ipaddr, ICMP6_RPL, RPL_CODE_DAO, pos);
@ -1291,16 +1302,16 @@ dao_ack_input(void)
}
if(instance->current_dag->rank == ROOT_RANK(instance)) {
PRINTF("RPL: DODAG root received a DAO ACK, ignoring it\n");
LOG_DBG("DODAG root received a DAO ACK, ignoring it\n");
uip_clear_buf();
return;
}
PRINTF("RPL: Received a DAO %s with sequence number %d (%d) and status %d from ",
LOG_INFO("Received a DAO %s with sequence number %d (%d) and status %d from ",
status < 128 ? "ACK" : "NACK",
sequence, instance->my_dao_seqno, status);
PRINT6ADDR(&UIP_IP_BUF->srcipaddr);
PRINTF("\n");
LOG_INFO_6ADDR(&UIP_IP_BUF->srcipaddr);
LOG_INFO_("\n");
if(sequence == instance->my_dao_seqno) {
instance->has_downward_route = status < 128;
@ -1334,11 +1345,11 @@ dao_ack_input(void)
nexthop = uip_ds6_route_nexthop(re);
if(nexthop == NULL) {
PRINTF("RPL: No next hop to fwd DAO ACK to\n");
LOG_WARN("No next hop to fwd DAO ACK to\n");
} else {
PRINTF("RPL: Fwd DAO ACK to:");
PRINT6ADDR(nexthop);
PRINTF("\n");
LOG_INFO("Fwd DAO ACK to:");
LOG_INFO_6ADDR(nexthop);
LOG_INFO_("\n");
buffer[2] = re->state.dao_seqno_in;
uip_icmp6_send(nexthop, ICMP6_RPL, RPL_CODE_DAO_ACK, 4);
}
@ -1348,7 +1359,7 @@ dao_ack_input(void)
uip_ds6_route_rm(re);
}
} else {
PRINTF("RPL: No route entry found to forward DAO ACK (seqno %u)\n", sequence);
LOG_WARN("No route entry found to forward DAO ACK (seqno %u)\n", sequence);
}
}
#endif /* RPL_WITH_DAO_ACK */
@ -1362,9 +1373,9 @@ dao_ack_output(rpl_instance_t *instance, uip_ipaddr_t *dest, uint8_t sequence,
#if RPL_WITH_DAO_ACK
unsigned char *buffer;
PRINTF("RPL: Sending a DAO %s with sequence number %d to ", status < 128 ? "ACK" : "NACK", sequence);
PRINT6ADDR(dest);
PRINTF(" with status %d\n", status);
LOG_INFO("Sending a DAO %s with sequence number %d to ", status < 128 ? "ACK" : "NACK", sequence);
LOG_INFO_6ADDR(dest);
LOG_INFO_(" with status %d\n", status);
buffer = UIP_ICMP_PAYLOAD;

View File

@ -51,8 +51,10 @@
#include "net/nbr-table.h"
#include "net/link-stats.h"
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#include "sys/log.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
/* RFC6551 and RFC6719 do not mandate the use of a specific formula to
* compute the ETX value. This MRHOF implementation relies on the value
@ -97,7 +99,7 @@ to the threshold of 96 in the non-squared case) */
static void
reset(rpl_dag_t *dag)
{
PRINTF("RPL: Reset MRHOF\n");
LOG_INFO("Reset MRHOF\n");
}
/*---------------------------------------------------------------------------*/
#if RPL_WITH_DAO_ACK
@ -108,7 +110,7 @@ dao_ack_callback(rpl_parent_t *p, int status)
return;
}
/* here we need to handle failed DAO's and other stuff */
PRINTF("RPL: MRHOF - DAO ACK received with status: %d\n", status);
LOG_DBG("MRHOF - DAO ACK received with status: %d\n", status);
if(status >= RPL_DAO_ACK_UNABLE_TO_ACCEPT) {
/* punish the ETX as if this was 10 packets lost */
link_stats_packet_sent(rpl_get_parent_lladdr(p), MAC_TX_OK, 10);
@ -262,7 +264,7 @@ update_metric_container(rpl_instance_t *instance)
dag = instance->current_dag;
if(dag == NULL || !dag->joined) {
PRINTF("RPL: Cannot update the metric container when not joined\n");
LOG_WARN("Cannot update the metric container when not joined\n");
return;
}
@ -297,7 +299,7 @@ update_metric_container(rpl_instance_t *instance)
instance->mc.obj.energy.energy_est = path_cost >> 8;
break;
default:
PRINTF("RPL: MRHOF, non-supported MC %u\n", instance->mc.type);
LOG_WARN("MRHOF, non-supported MC %u\n", instance->mc.type);
break;
}
}

View File

@ -49,8 +49,10 @@
#include "net/ipv6/uip-ds6-nbr.h"
#include "net/ipv6/uip-ds6-route.h"
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#include "sys/log.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
/*
* Policy for neighbor adds
@ -71,7 +73,7 @@ static int num_free;
static linkaddr_t *worst_rank_nbr; /* the parent that has the worst rank */
static rpl_rank_t worst_rank;
/*---------------------------------------------------------------------------*/
#if DEBUG == DEBUG_FULL
#if LOG_DBG_ENABLED
/*
* This create a periodic call of the update_nbr function that will print
* useful debugging information when in DEBUG_FULL mode
@ -85,7 +87,7 @@ handle_periodic_timer(void *ptr)
update_nbr();
ctimer_restart(&periodic_timer);
}
#endif /* DEBUG == DEBUG_FULL */
#endif /* LOG_DBG_ENABLED */
/*---------------------------------------------------------------------------*/
static void
update_nbr(void)
@ -96,13 +98,13 @@ update_nbr(void)
int is_used;
rpl_rank_t rank;
#if DEBUG == DEBUG_FULL
if(!timer_init) {
timer_init = 1;
ctimer_set(&periodic_timer, 60 * CLOCK_SECOND,
&handle_periodic_timer, NULL);
}
#endif /* DEBUG == DEBUG_FULL */
#if LOG_DBG_ENABLED
if(!timer_init) {
timer_init = 1;
ctimer_set(&periodic_timer, 60 * CLOCK_SECOND,
&handle_periodic_timer, NULL);
}
#endif /* LOG_DBG_ENABLED */
worst_rank = 0;
worst_rank_nbr = NULL;
@ -152,9 +154,9 @@ update_nbr(void)
worst_rank_nbr = lladdr;
worst_rank = RPL_INFINITE_RANK;
} else if(is_used > 1) {
PRINTF("NBR-POLICY: *** Neighbor is both child and candidate parent: ");
PRINTLLADDR((uip_lladdr_t *)lladdr);
PRINTF("\n");
LOG_DBG("nbr-policy: *** neighbor is both child and candidate parent: ");
LOG_DBG_LLADDR(lladdr);
LOG_DBG_("\n");
}
nbr = nbr_table_next(ds6_neighbors, nbr);
@ -163,7 +165,7 @@ update_nbr(void)
/* how many more IP neighbors can be have? */
num_free = NBR_TABLE_MAX_NEIGHBORS - num_used;
PRINTF("NBR-POLICY: Free: %d, Children: %d, Parents: %d Routes: %d\n",
LOG_DBG("nbr-policy: free: %d, children: %d, parents: %d routes: %d\n",
num_free, num_children, num_parents, uip_ds6_route_num_routes());
}
/*---------------------------------------------------------------------------*/
@ -177,7 +179,7 @@ find_removable_dis(uip_ipaddr_t *from)
if(num_free > 0) {
/* there are free entries (e.g. unsused by RPL and ND6) but since it is
used by other modules we can not pick these entries for removal. */
PRINTF("Num-free > 0 = %d - Other for RPL/ND6 unused NBR entry exists .",
LOG_DBG("nbr-policy: num-free > 0 = %d - Other for RPL/ND6 unused NBR entry exists.\n",
num_free);
}
if(num_children < MAX_CHILDREN) {
@ -195,20 +197,20 @@ find_removable_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
instance = rpl_get_instance(dio->instance_id);
if(instance == NULL || instance->current_dag == NULL) {
PRINTF("Did not find instance id: %d\n", dio->instance_id);
LOG_WARN("nbr-policy: did not find instance id: %d\n", dio->instance_id);
return NULL;
}
/* Add the new neighbor only if it is better than the worst parent. */
if(dio->rank + instance->min_hoprankinc < worst_rank - instance->min_hoprankinc / 2) {
/* Found *great* neighbor - add! */
PRINTF("Found better neighbor %d < %d - add to cache...\n",
LOG_DBG("nbr-policy: DIO rank %u, worst_rank %u -- add to cache\n",
dio->rank, worst_rank);
return worst_rank_nbr;
}
PRINTF("Found worse neighbor with new %d and old %d - NOT add to cache.\n",
LOG_DBG("nbr-policy: DIO rank %u, worst_rank %u -- do not add to cache\n",
dio->rank, worst_rank);
return NULL;
}
@ -229,7 +231,7 @@ find_removable_dao(uip_ipaddr_t *from, rpl_instance_t *instance)
/* Check if this DAO sender is not yet neighbor and there is already too
many children. */
if(num_children >= max) {
PRINTF("Can not add another child - already at max.\n");
LOG_ERR("nbr-policy: can not add another child - already at max.\n");
return NULL;
}
/* remove the worst ranked nbr */

View File

@ -47,8 +47,10 @@
#include "net/nbr-table.h"
#include "net/link-stats.h"
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#include "sys/log.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
/* Constants from RFC6552. We use the default values. */
#define RANK_STRETCH 0 /* Must be in the range [0;5] */
@ -87,7 +89,7 @@
static void
reset(rpl_dag_t *dag)
{
PRINTF("RPL: Reset OF0\n");
LOG_INFO("Reset OF0\n");
}
/*---------------------------------------------------------------------------*/
#if RPL_WITH_DAO_ACK
@ -98,7 +100,7 @@ dao_ack_callback(rpl_parent_t *p, int status)
return;
}
/* here we need to handle failed DAO's and other stuff */
PRINTF("RPL: OF0 - DAO ACK received with status: %d\n", status);
LOG_DBG("OF0 - DAO ACK received with status: %d\n", status);
if(status >= RPL_DAO_ACK_UNABLE_TO_ACCEPT) {
/* punish the ETX as if this was 10 packets lost */
link_stats_packet_sent(rpl_get_parent_lladdr(p), MAC_TX_OK, 10);

View File

@ -48,9 +48,10 @@
#include "net/ipv6/uip-sr.h"
#include "lib/random.h"
#include "sys/ctimer.h"
#include "sys/log.h"
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
/* A configurable function called after update of the RPL DIO interval */
#ifdef RPL_CALLBACK_NEW_DIO_INTERVAL
@ -133,7 +134,7 @@ new_dio_interval(rpl_instance_t *instance)
/* keep some stats */
instance->dio_totint++;
instance->dio_totrecv += instance->dio_counter;
ANNOTATE("#A rank=%u.%u(%u),stats=%d %d %d %d,color=%s\n",
LOG_ANNOTATE("#A rank=%u.%u(%u),stats=%d %d %d %d,color=%s\n",
DAG_RANK(instance->current_dag->rank, instance),
(10 * (instance->current_dag->rank % instance->min_hoprankinc)) / instance->min_hoprankinc,
instance->current_dag->version,
@ -146,7 +147,7 @@ new_dio_interval(rpl_instance_t *instance)
instance->dio_counter = 0;
/* schedule the timer */
PRINTF("RPL: Scheduling DIO timer %lu ticks in future (Interval)\n", ticks);
LOG_INFO("Scheduling DIO timer %lu ticks in future (Interval)\n", ticks);
ctimer_set(&instance->dio_timer, ticks, &handle_dio_timer, instance);
#ifdef RPL_CALLBACK_NEW_DIO_INTERVAL
@ -161,12 +162,12 @@ handle_dio_timer(void *ptr)
instance = (rpl_instance_t *)ptr;
PRINTF("RPL: DIO Timer triggered\n");
LOG_DBG("DIO Timer triggered\n");
if(!dio_send_ok) {
if(uip_ds6_get_link_local(ADDR_PREFERRED) != NULL) {
dio_send_ok = 1;
} else {
PRINTF("RPL: Postponing DIO transmission since link local address is not ok\n");
LOG_WARN("Postponing DIO transmission since link local address is not ok\n");
ctimer_set(&instance->dio_timer, CLOCK_SECOND, &handle_dio_timer, instance);
return;
}
@ -180,25 +181,25 @@ handle_dio_timer(void *ptr)
#endif /* RPL_CONF_STATS */
dio_output(instance, NULL);
} else {
PRINTF("RPL: Suppressing DIO transmission (%d >= %d)\n",
LOG_DBG("Suppressing DIO transmission (%d >= %d)\n",
instance->dio_counter, instance->dio_redundancy);
}
instance->dio_send = 0;
PRINTF("RPL: Scheduling DIO timer %lu ticks in future (sent)\n",
LOG_DBG("Scheduling DIO timer %lu ticks in future (sent)\n",
instance->dio_next_delay);
ctimer_set(&instance->dio_timer, instance->dio_next_delay, handle_dio_timer, instance);
} else {
/* check if we need to double interval */
if(instance->dio_intcurrent < instance->dio_intmin + instance->dio_intdoubl) {
instance->dio_intcurrent++;
PRINTF("RPL: DIO Timer interval doubled %d\n", instance->dio_intcurrent);
LOG_DBG("DIO Timer interval doubled %d\n", instance->dio_intcurrent);
}
new_dio_interval(instance);
}
#if DEBUG
rpl_print_neighbor_list();
#endif
if(LOG_DBG_ENABLED) {
rpl_print_neighbor_list();
}
}
/*---------------------------------------------------------------------------*/
void
@ -245,7 +246,7 @@ set_dao_lifetime_timer(rpl_instance_t *instance)
CLOCK_SECOND / 2;
/* make the time for the re registration be betwen 1/2 - 3/4 of lifetime */
expiration_time = expiration_time + (random_rand() % (expiration_time / 2));
PRINTF("RPL: Scheduling DAO lifetime timer %u ticks in the future\n",
LOG_DBG("Scheduling DAO lifetime timer %u ticks in the future\n",
(unsigned)expiration_time);
ctimer_set(&instance->dao_lifetime_timer, expiration_time,
handle_dao_timer, instance);
@ -264,14 +265,14 @@ handle_dao_timer(void *ptr)
instance = (rpl_instance_t *)ptr;
if(!dio_send_ok && uip_ds6_get_link_local(ADDR_PREFERRED) == NULL) {
PRINTF("RPL: Postpone DAO transmission\n");
LOG_INFO("Postpone DAO transmission\n");
ctimer_set(&instance->dao_timer, CLOCK_SECOND, handle_dao_timer, instance);
return;
}
/* Send the DAO to the DAO parent set -- the preferred parent in our case. */
if(instance->current_dag->preferred_parent != NULL) {
PRINTF("RPL: handle_dao_timer - sending DAO\n");
LOG_INFO("handle_dao_timer - sending DAO\n");
/* Set the route lifetime to the default value. */
dao_output(instance->current_dag->preferred_parent, instance->default_lifetime);
@ -300,7 +301,7 @@ handle_dao_timer(void *ptr)
}
#endif
} else {
PRINTF("RPL: No suitable DAO parent\n");
LOG_INFO("No suitable DAO parent\n");
}
ctimer_stop(&instance->dao_timer);
@ -322,7 +323,7 @@ schedule_dao(rpl_instance_t *instance, clock_time_t latency)
expiration_time = etimer_expiration_time(&instance->dao_timer.etimer);
if(!etimer_expired(&instance->dao_timer.etimer)) {
PRINTF("RPL: DAO timer already scheduled\n");
LOG_DBG("DAO timer already scheduled\n");
} else {
if(latency != 0) {
expiration_time = latency / 2 +
@ -330,7 +331,7 @@ schedule_dao(rpl_instance_t *instance, clock_time_t latency)
} else {
expiration_time = 0;
}
PRINTF("RPL: Scheduling DAO timer %u ticks in the future\n",
LOG_DBG("Scheduling DAO timer %u ticks in the future\n",
(unsigned)expiration_time);
ctimer_set(&instance->dao_timer, expiration_time,
handle_dao_timer, instance);
@ -479,7 +480,7 @@ handle_probing_timer(void *ptr)
if(target_ipaddr != NULL) {
const struct link_stats *stats = rpl_get_parent_link_stats(probing_target);
(void)stats;
PRINTF("RPL: probing %u %s last tx %u min ago\n",
LOG_INFO("probing %u %s last tx %u min ago\n",
rpl_get_parent_lladdr(probing_target)->u8[7],
instance->urgent_probing_target != NULL ? "(urgent)" : "",
probing_target != NULL ?
@ -492,9 +493,9 @@ handle_probing_timer(void *ptr)
/* Schedule next probing */
rpl_schedule_probing(instance);
#if DEBUG
rpl_print_neighbor_list();
#endif
if(LOG_DBG_ENABLED) {
rpl_print_neighbor_list();
}
}
/*---------------------------------------------------------------------------*/
void

View File

@ -52,12 +52,14 @@
#include "net/routing/rpl-classic/rpl-dag-root.h"
#include "net/ipv6/multicast/uip-mcast6.h"
#define DEBUG DEBUG_NONE
#include "net/ipv6/uip-debug.h"
#include "sys/log.h"
#include <limits.h>
#include <string.h>
#define LOG_MODULE "RPL"
#define LOG_LEVEL LOG_LEVEL_RPL
#if RPL_CONF_STATS
rpl_stats_t rpl_stats;
#endif
@ -83,7 +85,7 @@ rpl_set_mode(enum rpl_mode m)
inform our parent that we now are reachable. Before we do this,
we must set the mode variable, since DAOs will not be sent if
we are in feather mode. */
PRINTF("RPL: switching to mesh mode\n");
LOG_DBG("rpl_set_mode: switching to mesh mode\n");
mode = m;
if(default_instance != NULL) {
@ -91,15 +93,15 @@ rpl_set_mode(enum rpl_mode m)
}
} else if(m == RPL_MODE_FEATHER) {
PRINTF("RPL: switching to feather mode\n");
LOG_INFO("rpl_set_mode: switching to feather mode\n");
if(default_instance != NULL) {
PRINTF("rpl_set_mode: RPL sending DAO with zero lifetime\n");
LOG_INFO("rpl_set_mode: RPL sending DAO with zero lifetime\n");
if(default_instance->current_dag != NULL) {
dao_output(default_instance->current_dag->preferred_parent, RPL_ZERO_LIFETIME);
}
rpl_cancel_dao(default_instance);
} else {
PRINTF("rpl_set_mode: no default instance\n");
LOG_INFO("rpl_set_mode: no default instance\n");
}
mode = m;
@ -145,17 +147,17 @@ rpl_purge_routes(void)
uip_ipaddr_copy(&prefix, &r->ipaddr);
uip_ds6_route_rm(r);
r = uip_ds6_route_head();
PRINTF("No more routes to ");
PRINT6ADDR(&prefix);
LOG_INFO("No more routes to ");
LOG_INFO_6ADDR(&prefix);
dag = default_instance->current_dag;
/* Propagate this information with a No-Path DAO to preferred parent if we are not a RPL Root */
if(dag->rank != ROOT_RANK(default_instance)) {
PRINTF(" -> generate No-Path DAO\n");
LOG_INFO_(" -> generate No-Path DAO\n");
dao_output_target(dag->preferred_parent, &prefix, RPL_ZERO_LIFETIME);
/* Don't schedule more than 1 No-Path DAO, let next iteration handle that */
return;
}
PRINTF("\n");
LOG_INFO_("\n");
} else {
r = uip_ds6_route_next(r);
}
@ -223,7 +225,7 @@ rpl_remove_routes_by_nexthop(uip_ipaddr_t *nexthop, rpl_dag_t *dag)
}
r = uip_ds6_route_next(r);
}
ANNOTATE("#L %u 0\n", nexthop->u8[sizeof(uip_ipaddr_t) - 1]);
LOG_ANNOTATE("#L %u 0\n", nexthop->u8[sizeof(uip_ipaddr_t) - 1]);
}
/*---------------------------------------------------------------------------*/
uip_ds6_route_t *
@ -233,7 +235,7 @@ rpl_add_route(rpl_dag_t *dag, uip_ipaddr_t *prefix, int prefix_len,
uip_ds6_route_t *rep;
if((rep = uip_ds6_route_add(prefix, prefix_len, next_hop)) == NULL) {
PRINTF("RPL: No space for more route entries\n");
LOG_ERR("No space for more route entries\n");
return NULL;
}
@ -242,11 +244,11 @@ rpl_add_route(rpl_dag_t *dag, uip_ipaddr_t *prefix, int prefix_len,
/* always clear state flags for the no-path received when adding/refreshing */
RPL_ROUTE_CLEAR_NOPATH_RECEIVED(rep);
PRINTF("RPL: Added a route to ");
PRINT6ADDR(prefix);
PRINTF("/%d via ", prefix_len);
PRINT6ADDR(next_hop);
PRINTF("\n");
LOG_INFO("Added a route to ");
LOG_INFO_6ADDR(prefix);
LOG_INFO_("/%d via ", prefix_len);
LOG_INFO_6ADDR(next_hop);
LOG_INFO_("\n");
return rep;
}
@ -272,7 +274,7 @@ rpl_link_callback(const linkaddr_t *addr, int status, int numtx)
instance->urgent_probing_target = NULL;
}
/* Trigger DAG rank recalculation. */
PRINTF("RPL: rpl_link_callback triggering update\n");
LOG_DBG("rpl_link_callback triggering update\n");
parent->flags |= RPL_PARENT_FLAG_UPDATED;
}
}
@ -286,12 +288,12 @@ rpl_ipv6_neighbor_callback(uip_ds6_nbr_t *nbr)
rpl_instance_t *instance;
rpl_instance_t *end;
PRINTF("RPL: Neighbor state changed for ");
PRINT6ADDR(&nbr->ipaddr);
LOG_DBG("Neighbor state changed for ");
LOG_DBG_6ADDR(&nbr->ipaddr);
#if UIP_ND6_SEND_NS || UIP_ND6_SEND_RA
PRINTF(", nscount=%u, state=%u\n", nbr->nscount, nbr->state);
LOG_DBG_(", nscount=%u, state=%u\n", nbr->nscount, nbr->state);
#else /* UIP_ND6_SEND_NS || UIP_ND6_SEND_RA */
PRINTF(", state=%u\n", nbr->state);
LOG_DBG_(", state=%u\n", nbr->state);
#endif /* UIP_ND6_SEND_NS || UIP_ND6_SEND_RA */
for(instance = &instance_table[0], end = instance + RPL_MAX_INSTANCES; instance < end; ++instance) {
if(instance->used == 1 ) {
@ -299,7 +301,7 @@ rpl_ipv6_neighbor_callback(uip_ds6_nbr_t *nbr)
if(p != NULL) {
p->rank = RPL_INFINITE_RANK;
/* Trigger DAG rank recalculation. */
PRINTF("RPL: rpl_ipv6_neighbor_callback infinite rank\n");
LOG_DBG("rpl_ipv6_neighbor_callback infinite rank\n");
p->flags |= RPL_PARENT_FLAG_UPDATED;
}
}
@ -320,9 +322,9 @@ rpl_purge_dags(void)
if(instance->dag_table[i].used) {
if(instance->dag_table[i].lifetime == 0) {
if(!instance->dag_table[i].joined) {
PRINTF("Removing dag ");
PRINT6ADDR(&instance->dag_table[i].dag_id);
PRINTF("\n");
LOG_INFO("Removing dag ");
LOG_INFO_6ADDR(&instance->dag_table[i].dag_id);
LOG_INFO_("\n");
rpl_free_dag(&instance->dag_table[i]);
}
} else {
@ -338,7 +340,7 @@ static void
init(void)
{
uip_ipaddr_t rplmaddr;
PRINTF("RPL started\n");
LOG_INFO("rpl-classic started\n");
default_instance = NULL;
rpl_dag_init();
@ -403,7 +405,7 @@ drop_route(uip_ds6_route_t *route)
static void
leave_network(void)
{
PRINTF("RPL: leave_network not supported in RPL Classic\n");
LOG_ERR("leave_network not supported in RPL Classic\n");
}
/*---------------------------------------------------------------------------*/
static int