diff --git a/os/net/routing/rpl-lite/rpl-conf.h b/os/net/routing/rpl-lite/rpl-conf.h index 8d2f4b7b9..9b8a12adb 100644 --- a/os/net/routing/rpl-lite/rpl-conf.h +++ b/os/net/routing/rpl-lite/rpl-conf.h @@ -191,6 +191,13 @@ #define RPL_DEFAULT_LEAF_ONLY 0 #endif +/* + * Function used to validate dio before using it to init dag + */ +#ifdef RPL_CONF_VALIDATE_DIO_FUNC +#define RPL_VALIDATE_DIO_FUNC RPL_CONF_VALIDATE_DIO_FUNC +#endif + /******************************************************************************/ /********************************** Timing ************************************/ /******************************************************************************/ diff --git a/os/net/routing/rpl-lite/rpl-dag.c b/os/net/routing/rpl-lite/rpl-dag.c index 68d9e7aaa..09caa9625 100644 --- a/os/net/routing/rpl-lite/rpl-dag.c +++ b/os/net/routing/rpl-lite/rpl-dag.c @@ -61,6 +61,12 @@ static int init_dag_from_dio(rpl_dio_t *dio); /* Allocate instance table. */ rpl_instance_t curr_instance; +/*---------------------------------------------------------------------------*/ + +#ifdef RPL_VALIDATE_DIO_FUNC +int RPL_VALIDATE_DIO_FUNC(rpl_dio_t *dio); +#endif /* RPL_PROBING_SELECT_FUNC */ + /*---------------------------------------------------------------------------*/ const char * rpl_dag_state_to_str(enum rpl_dag_state state) @@ -542,6 +548,13 @@ init_dag_from_dio(rpl_dio_t *dio) static int process_dio_init_dag(uip_ipaddr_t *from, rpl_dio_t *dio) { +#ifdef RPL_VALIDATE_DIO_FUNC + if(!RPL_VALIDATE_DIO_FUNC(dio)) { + LOG_WARN("DIO validation failed\n"); + return 0; + } +#endif + /* Check MOP */ if(dio->mop != RPL_MOP_NO_DOWNWARD_ROUTES && dio->mop != RPL_MOP_NON_STORING) { LOG_WARN("ignoring DIO with an unsupported MOP: %d\n", dio->mop);