Skip to content

Commit c1c5926

Browse files
author
Juha Heiskanen
committed
Dynamic parent selection delay based on trickle i_min.
Parent select delay min is 15 seconds or dynamic based on i_min. Bigger value is selected. Change-Id: Ieb53162a6232c329ce48f2bfb99eb9dd149e1034
1 parent 5836b50 commit c1c5926

File tree

4 files changed

+14
-6
lines changed

4 files changed

+14
-6
lines changed

source/RPL/rpl_control.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,7 @@ static buffer_t *rpl_control_dio_handler(protocol_interface_info_entry_t *cur, r
10121012
rpl_instance_consistent_rx(instance);
10131013
}
10141014

1015-
rpl_instance_neighbours_changed(instance);
1015+
rpl_instance_neighbours_changed(instance, dodag);
10161016

10171017
return buffer_free(buf);
10181018

source/RPL/rpl_upward.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ void rpl_delete_neighbour(rpl_instance_t *instance, rpl_neighbour_t *neighbour)
427427
}
428428
if (neighbour->dodag_parent) {
429429
rpl_instance_remove_system_routes_through_parent(instance, neighbour);
430-
rpl_instance_neighbours_changed(instance);
430+
rpl_instance_neighbours_changed(instance, NULL);
431431
}
432432

433433
rpl_free(neighbour, sizeof *neighbour);
@@ -1171,10 +1171,18 @@ bool rpl_instance_purge(rpl_instance_t *instance)
11711171
return false;
11721172
}
11731173

1174-
void rpl_instance_neighbours_changed(rpl_instance_t *instance)
1174+
void rpl_instance_neighbours_changed(rpl_instance_t *instance, const rpl_dodag_t *dodag)
11751175
{
11761176
instance->neighbours_changed = true;
1177-
rpl_instance_trigger_parent_selection(instance, rpl_policy_dio_parent_selection_delay(instance->domain));
1177+
uint16_t delay = rpl_policy_dio_parent_selection_delay(instance->domain);
1178+
if (dodag) {
1179+
//Convert imin 100ms tick to seconds
1180+
uint16_t i_min_delay = dodag->dio_timer_params.Imin / 10;
1181+
if (i_min_delay > delay) {
1182+
delay = i_min_delay;
1183+
}
1184+
}
1185+
rpl_instance_trigger_parent_selection(instance, delay);
11781186
}
11791187

11801188
static void rpl_instance_remove_parents(rpl_instance_t *instance)

source/RPL/rpl_upward.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ void rpl_neighbour_update_dodag_version(rpl_neighbour_t *neighbour, rpl_dodag_ve
135135
bool rpl_neighbour_update_dtsn(rpl_neighbour_t *neighbour, uint8_t dtsn);
136136
rpl_instance_t *rpl_neighbour_instance(const rpl_neighbour_t *neighbour);
137137

138-
void rpl_instance_neighbours_changed(rpl_instance_t *instance);
138+
void rpl_instance_neighbours_changed(rpl_instance_t *instance, const rpl_dodag_t *dodag);
139139
void rpl_instance_run_parent_selection(rpl_instance_t *instance);
140140

141141
void rpl_upward_print_instance(rpl_instance_t *instance, route_print_fn_t *print_fn);

test/nanostack/unittest/stub/rpl_upward_stub.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ bool rpl_instance_purge(rpl_instance_t *instance)
382382
return false;
383383
}
384384

385-
void rpl_instance_neighbours_changed(rpl_instance_t *instance)
385+
void rpl_instance_neighbours_changed(rpl_instance_t *instance, const rpl_dodag_t *dodag)
386386
{
387387
}
388388

0 commit comments

Comments
 (0)