Skip to content

Commit 66378d1

Browse files
author
Juha Heiuskanen
committed
RPL Poison update
rpl_control_poison() by count 1 will trigger faster DIO Poison. RPL trigger a RPL_EVENT_POISON_READY when poison count reach zero.
1 parent 9e27a77 commit 66378d1

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

source/RPL/rpl_control.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ typedef enum rpl_event {
3636
RPL_EVENT_LOCAL_REPAIR_START, /* RPL start scanning new parent by multicast DIS user can disable beacon request responser here*/
3737
RPL_EVENT_LOCAL_REPAIR_NO_MORE_DIS, /* RPL not sending DIS anymore user can report bootstrap error */
3838
RPL_EVENT_DAO_PARENT_ADD, /* RPL indicate that DAO downward Parent has been added */
39+
RPL_EVENT_POISON_FINISHED, /* RPL have finished Dodag Poison proces */
3940
} rpl_event_t;
4041

4142
typedef void rpl_domain_callback_t(rpl_event_t event, void *handle);
@@ -200,6 +201,7 @@ const rpl_dodag_conf_t *rpl_control_get_dodag_config(const struct rpl_instance *
200201
const uint8_t *rpl_control_preferred_parent_addr(const struct rpl_instance *instance, bool global);
201202
uint16_t rpl_control_current_rank(const struct rpl_instance *instance);
202203
uint8_t rpl_policy_mrhof_parent_set_size_get(const rpl_domain_t *domain);
204+
void rpl_control_instant_poison(struct protocol_interface_info_entry *cur, rpl_domain_t *domain);
203205

204206
#else /* HAVE_RPL */
205207

@@ -211,6 +213,7 @@ uint8_t rpl_policy_mrhof_parent_set_size_get(const rpl_domain_t *domain);
211213
#define rpl_control_address_register_done(interface, ll_addr, status) (false)
212214
#define rpl_policy_mrhof_parent_set_size_get(domain) (0)
213215
#define rpl_control_set_mrhof_parent_set_size(parent_set_size)
216+
#define rpl_control_instant_poison(cur, domain) ((void) 0)
214217
#endif /* HAVE_RPL */
215218

216219
#endif /* RPL_CONTROL_H_ */

source/RPL/rpl_upward.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,14 @@ void rpl_instance_poison(rpl_instance_t *instance, uint8_t count)
347347
rpl_instance_inconsistency(instance);
348348
}
349349

350+
void rpl_control_instant_poison(protocol_interface_info_entry_t *cur, rpl_domain_t *domain)
351+
{
352+
ns_list_foreach(rpl_instance_t, instance, &domain->instances) {
353+
rpl_instance_poison(instance, 1);
354+
rpl_instance_dio_trigger(instance, cur, NULL);
355+
}
356+
}
357+
350358
void rpl_instance_force_leaf(rpl_instance_t *instance)
351359
{
352360
instance->current_rank = RPL_RANK_INFINITE;
@@ -1620,6 +1628,10 @@ void rpl_instance_dio_trigger(rpl_instance_t *instance, protocol_interface_info_
16201628
instance->poison_count--;
16211629
rank = RPL_RANK_INFINITE;
16221630
tr_debug("Poison count -> set RPL_RANK_INFINITE");
1631+
if (instance->poison_count == 0) {
1632+
//Report RPL user that Poison message is triggered
1633+
rpl_control_event(instance->domain, RPL_EVENT_POISON_FINISHED);
1634+
}
16231635
}
16241636

16251637
// Always send config in unicasts (as required), never in multicasts (optional)

test/nanostack/unittest/stub/rpl_upward_stub.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,4 +508,9 @@ bool rpl_instance_possible_better_candidate(const rpl_instance_t *instance, rpl_
508508
return false;
509509
}
510510

511+
void rpl_control_instant_poison(struct protocol_interface_info_entry *cur, rpl_domain_t *domain)
512+
{
513+
514+
}
515+
511516
#endif /* HAVE_RPL */

0 commit comments

Comments
 (0)