Skip to content
Snippets Groups Projects
Commit ebd18f49 authored by BytesGalore's avatar BytesGalore
Browse files

Merge pull request #3678 from cgundogan/pr/rpl/parse_opt_from_pref_parent

rpl: parse DIO and options only for DIOs from pref. parent
parents 4cf8cbcc baa57a6f
Branches
No related tags found
No related merge requests found
...@@ -436,9 +436,6 @@ void gnrc_rpl_recv_DIO(gnrc_rpl_dio_t *dio, ipv6_addr_t *src, uint16_t len) ...@@ -436,9 +436,6 @@ void gnrc_rpl_recv_DIO(gnrc_rpl_dio_t *dio, ipv6_addr_t *src, uint16_t len)
return; return;
} }
dodag->grounded = dio->g_mop_prf >> GNRC_RPL_GROUNDED_SHIFT;
dodag->prf = dio->g_mop_prf & GNRC_RPL_PRF_MASK;
gnrc_rpl_parent_t *parent = NULL; gnrc_rpl_parent_t *parent = NULL;
if (!gnrc_rpl_parent_add_by_addr(dodag, src, &parent) && (parent == NULL)) { if (!gnrc_rpl_parent_add_by_addr(dodag, src, &parent) && (parent == NULL)) {
...@@ -458,19 +455,22 @@ void gnrc_rpl_recv_DIO(gnrc_rpl_dio_t *dio, ipv6_addr_t *src, uint16_t len) ...@@ -458,19 +455,22 @@ void gnrc_rpl_recv_DIO(gnrc_rpl_dio_t *dio, ipv6_addr_t *src, uint16_t len)
parent->rank = byteorder_ntohs(dio->rank); parent->rank = byteorder_ntohs(dio->rank);
if(!_parse_options(GNRC_RPL_ICMPV6_CODE_DIO, dodag, (gnrc_rpl_opt_t *)(dio + 1), len, NULL)) {
DEBUG("RPL: Error encountered during DIO option parsing - remove DODAG\n");
gnrc_rpl_dodag_remove(dodag);
return;
}
gnrc_rpl_parent_update(dodag, parent); gnrc_rpl_parent_update(dodag, parent);
if (parent->state != 0) { /* incoming DIO is from pref. parent */
if (dodag->parents && (parent == dodag->parents) && (parent->dtsn != dio->dtsn)) { if (dodag->parents && (parent == dodag->parents) && (parent->state != 0)) {
if (parent->dtsn != dio->dtsn) {
gnrc_rpl_delay_dao(dodag); gnrc_rpl_delay_dao(dodag);
} }
parent->dtsn = dio->dtsn; parent->dtsn = dio->dtsn;
dodag->grounded = dio->g_mop_prf >> GNRC_RPL_GROUNDED_SHIFT;
dodag->prf = dio->g_mop_prf & GNRC_RPL_PRF_MASK;
if(!_parse_options(GNRC_RPL_ICMPV6_CODE_DIO, dodag,
(gnrc_rpl_opt_t *)(dio + 1), len, NULL)) {
DEBUG("RPL: Error encountered during DIO option parsing - remove DODAG\n");
gnrc_rpl_dodag_remove(dodag);
return;
}
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment