Skip to content

Commit f5920e2

Browse files
author
Juha Heiskanen
committed
ETX API update and RPL ETX threshold callback update.
Added MAC64 with atribute index that etx update threshold callback can detetct proper etx owner. RPL will trig slow parent selection for ETX update for candidate and fast for selected parent when it goes worster.
1 parent 1fdee20 commit f5920e2

File tree

10 files changed

+122
-78
lines changed

10 files changed

+122
-78
lines changed

source/6LoWPAN/Bootstraps/Generic/protocol_6lowpan_bootstrap.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ static void mle_neigh_entry_update_by_mle_tlv_list(int8_t interface_id, mac_neig
588588
uint8_t link_idr;
589589
uint8_t iop_flags;
590590
if (mle_link_quality_tlv_parse(mac64, short_address, mle_tlv_info.dataPtr, mle_tlv_info.tlvLen, &iop_flags, &link_idr)) {
591-
etx_remote_incoming_idr_update(interface_id, link_idr, entry_temp->index);
591+
etx_remote_incoming_idr_update(interface_id, link_idr, entry_temp->index, entry_temp->mac64);
592592

593593
if ((iop_flags & MLE_NEIGHBOR_PRIORITY_LINK) == MLE_NEIGHBOR_PRIORITY_LINK) {
594594
entry_temp->link_role = CHILD_NEIGHBOUR;
@@ -965,9 +965,9 @@ int protocol_6lowpan_router_synch_to_new_router(protocol_interface_info_entry_t
965965
static uint8_t mle_calculate_idr(int8_t interface_id, mle_message_t *mle_msg, mac_neighbor_table_entry_t *entry_temp)
966966
{
967967
if (!entry_temp) {
968-
return etx_lqi_dbm_update(-2, mle_msg->lqi, mle_msg->dbm, 0) >> 3;
968+
return etx_lqi_dbm_update(-2, mle_msg->lqi, mle_msg->dbm, 0, NULL) >> 3;
969969
}
970-
return etx_lqi_dbm_update(interface_id, mle_msg->lqi, mle_msg->dbm, entry_temp->index) >> 3;
970+
return etx_lqi_dbm_update(interface_id, mle_msg->lqi, mle_msg->dbm, entry_temp->index, entry_temp->mac64) >> 3;
971971

972972
}
973973

@@ -1609,7 +1609,7 @@ static void lowpan_neighbor_entry_remove_notify(mac_neighbor_table_entry_t *entr
16091609
}
16101610
mac_helper_devicetable_remove(cur_interface->mac_api, entry_ptr->index, entry_ptr->mac64);
16111611
//Removes ETX neighbor
1612-
etx_neighbor_remove(cur_interface->id, entry_ptr->index);
1612+
etx_neighbor_remove(cur_interface->id, entry_ptr->index, entry_ptr->mac64);
16131613
//Remove MLE frame counter info
16141614
mle_service_frame_counter_entry_delete(cur_interface->id, entry_ptr->index);
16151615

source/6LoWPAN/Thread/thread_bootstrap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ static void thread_neighbor_remove(mac_neighbor_table_entry_t *entry_ptr, void *
141141

142142
thread_reset_neighbour_info(cur, entry_ptr);
143143
//Removes ETX neighbor
144-
etx_neighbor_remove(cur->id, entry_ptr->index);
144+
etx_neighbor_remove(cur->id, entry_ptr->index, entry_ptr->mac64);
145145
//Remove MLE frame counter info
146146
mle_service_frame_counter_entry_delete(cur->id, entry_ptr->index);
147147
}

source/6LoWPAN/adaptation_interface.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ static void lowpan_adaptation_etx_update_cb(protocol_interface_info_entry_t *cur
155155
// Gets table entry
156156
mac_neighbor_table_entry_t *neigh_table_ptr = mac_neighbor_table_address_discover(mac_neighbor_info(cur), buf->dst_sa.address + PAN_ID_LEN, buf->dst_sa.addr_type);
157157
if (neigh_table_ptr) {
158-
etx_transm_attempts_update(cur->id, 1 + confirm->tx_retries, success, neigh_table_ptr->index);
158+
etx_transm_attempts_update(cur->id, 1 + confirm->tx_retries, success, neigh_table_ptr->index, neigh_table_ptr->mac64);
159159
// Updates ETX statistics
160160
etx_storage_t *etx_entry = etx_storage_entry_get(cur->id, neigh_table_ptr->index);
161161
if (etx_entry) {

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ mac_neighbor_table_entry_t *ws_bootstrap_mac_neighbor_add(struct protocol_interf
148148
static void ws_bootstrap_neighbor_delete(struct protocol_interface_info_entry *interface, mac_neighbor_table_entry_t *entry_ptr)
149149
{
150150
mac_helper_devicetable_remove(interface->mac_api, entry_ptr->index, entry_ptr->mac64);
151-
etx_neighbor_remove(interface->id, entry_ptr->index);
151+
etx_neighbor_remove(interface->id, entry_ptr->index, entry_ptr->mac64);
152152
ws_neighbor_class_entry_remove(&interface->ws_info->neighbor_storage, entry_ptr->index);
153153
}
154154

@@ -1421,7 +1421,7 @@ static void ws_bootstrap_pan_config_analyse(struct protocol_interface_info_entry
14211421
}
14221422

14231423
if (neighbour_pointer_valid) {
1424-
etx_lqi_dbm_update(cur->id, data->mpduLinkQuality, data->signal_dbm, neighbor_info.neighbor->index);
1424+
etx_lqi_dbm_update(cur->id, data->mpduLinkQuality, data->signal_dbm, neighbor_info.neighbor->index, neighbor_info.neighbor->mac64);
14251425
//Update Neighbor Broadcast and Unicast Parameters
14261426
ws_neighbor_class_neighbor_unicast_time_info_update(neighbor_info.ws_neighbor, ws_utt, data->timestamp);
14271427
ws_neighbor_class_neighbor_unicast_schedule_set(neighbor_info.ws_neighbor, ws_us);
@@ -1506,7 +1506,7 @@ static void ws_bootstrap_pan_config_solicit_analyse(struct protocol_interface_in
15061506

15071507
llc_neighbour_req_t neighbor_info;
15081508
if (ws_bootstrap_neighbor_info_request(cur, data->SrcAddr, &neighbor_info, false)) {
1509-
etx_lqi_dbm_update(cur->id, data->mpduLinkQuality, data->signal_dbm, neighbor_info.neighbor->index);
1509+
etx_lqi_dbm_update(cur->id, data->mpduLinkQuality, data->signal_dbm, neighbor_info.neighbor->index, neighbor_info.neighbor->mac64);
15101510
ws_neighbor_class_neighbor_unicast_time_info_update(neighbor_info.ws_neighbor, ws_utt, data->timestamp);
15111511
ws_neighbor_class_neighbor_unicast_schedule_set(neighbor_info.ws_neighbor, ws_us);
15121512
}
@@ -2508,7 +2508,7 @@ static bool ws_rpl_new_parent_callback(uint8_t *ll_parent_address, void *handle,
25082508
//Copy fhss temporary data
25092509
*ws_neigh = entry->neigh_info_list;
25102510
//ETX Create here
2511-
etx_lqi_dbm_update(cur->id, entry->mpduLinkQuality, entry->signal_dbm, neigh_buffer.neighbor->index);
2511+
etx_lqi_dbm_update(cur->id, entry->mpduLinkQuality, entry->signal_dbm, neigh_buffer.neighbor->index, neigh_buffer.neighbor->mac64);
25122512
mac_neighbor_table_trusted_neighbor(mac_neighbor_info(cur), neigh_buffer.neighbor, true);
25132513
}
25142514
ws_llc_free_multicast_temp_entry(cur, entry);

source/6LoWPAN/ws/ws_llc_data_service.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ static void ws_llc_mac_confirm_cb(const mac_api_t *api, const mcps_data_conf_t *
449449
}
450450

451451
if (message->dst_address_type == MAC_ADDR_MODE_64_BIT && base->ws_neighbor_info_request_cb(interface, message->dst_address, &neighbor_info, false)) {
452-
etx_transm_attempts_update(interface->id, 1 + data->tx_retries, success, neighbor_info.neighbor->index);
452+
etx_transm_attempts_update(interface->id, 1 + data->tx_retries, success, neighbor_info.neighbor->index, neighbor_info.neighbor->mac64);
453453
//TODO discover RSL from Enchanced ACK Header IE elements
454454
ws_utt_ie_t ws_utt;
455455
if (ws_wh_utt_read(conf_data->headerIeList, conf_data->headerIeListLength, &ws_utt)) {
@@ -675,7 +675,7 @@ static void ws_llc_data_indication_cb(const mac_api_t *api, const mcps_data_ind_
675675

676676
if (neighbor_info.neighbor) {
677677
//Refresh ETX dbm
678-
etx_lqi_dbm_update(interface->id, data->mpduLinkQuality, data->signal_dbm, neighbor_info.neighbor->index);
678+
etx_lqi_dbm_update(interface->id, data->mpduLinkQuality, data->signal_dbm, neighbor_info.neighbor->index, neighbor_info.neighbor->mac64);
679679
if (data->Key.SecurityLevel) {
680680
//SET trusted state
681681
mac_neighbor_table_trusted_neighbor(mac_neighbor_info(interface), neighbor_info.neighbor, true);

source/RPL/rpl_control.c

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ static void rpl_control_addr_notifier(struct protocol_interface_info_entry *inte
391391
}
392392
}
393393

394-
static void rpl_control_etx_change_callback(int8_t nwk_id, uint16_t previous_etx, uint16_t current_etx, uint8_t attribute_index)
394+
static void rpl_control_etx_change_callback(int8_t nwk_id, uint16_t previous_etx, uint16_t current_etx, uint8_t attribute_index, const uint8_t *mac64)
395395
{
396396

397397
protocol_interface_info_entry_t *cur = protocol_stack_interface_info_get_by_id(nwk_id);
@@ -405,14 +405,29 @@ static void rpl_control_etx_change_callback(int8_t nwk_id, uint16_t previous_et
405405
uint16_t delay = rpl_policy_etx_change_parent_selection_delay(domain);
406406
tr_debug("Triggering parent selection due to ETX %s on neigh index %u, etx %u", better ? "better" : "worse", attribute_index, current_etx);
407407
rpl_dodag_t *dodag = NULL;
408+
//Define Link Local Address
409+
uint8_t ll_parent_address[16];
410+
memcpy(ll_parent_address, ADDR_LINK_LOCAL_PREFIX, 8);
411+
memcpy(ll_parent_address + 8, mac64, 8);
412+
ll_parent_address[8] ^= 2;
408413

409414
ns_list_foreach(rpl_instance_t, instance, &domain->instances) {
410-
if (better) {
411-
dodag = rpl_instance_current_dodag(instance);
412-
}
413-
rpl_instance_trigger_parent_selection(instance, delay, dodag);
415+
414416
if (rpl_instance_am_root(instance)) {
415417
rpl_downward_paths_invalidate(instance);
418+
} else {
419+
if (better) {
420+
//Only react here for candidate updates and when DODAG version is configured
421+
if (rpl_instance_address_is_candidate(instance, ll_parent_address, 0)) {
422+
dodag = rpl_instance_current_dodag(instance);
423+
if (dodag) {
424+
rpl_instance_trigger_parent_selection(instance, delay, dodag);
425+
}
426+
}
427+
} else if (rpl_instance_address_is_parent(instance, ll_parent_address)) {
428+
//Quick reaction for selected parent only
429+
rpl_instance_trigger_parent_selection(instance, delay, NULL);
430+
}
416431
}
417432
}
418433
}

source/Service_Libs/etx/etx.c

Lines changed: 60 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,14 @@
3737

3838
#define TRACE_GROUP "etx"
3939

40+
typedef struct {
41+
uint8_t attribute_index;
42+
const uint8_t *mac64;
43+
} ext_neigh_info_t;
44+
4045
static uint16_t etx_current_calc(uint16_t etx, uint8_t accumulated_failures);
4146
static uint16_t etx_dbm_lqi_calc(uint8_t lqi, int8_t dbm);
42-
static void etx_value_change_callback_needed_check(uint16_t etx, uint16_t *stored_diff_etx, uint8_t accumulated_failures, uint8_t attribute_index);
47+
static void etx_value_change_callback_needed_check(uint16_t etx, uint16_t *stored_diff_etx, uint8_t accumulated_failures, ext_neigh_info_t *etx_neigh_info);
4348
static void etx_accum_failures_callback_needed_check(etx_storage_t *entry, uint8_t attribute_index);
4449
static void etx_cache_entry_init(uint8_t attribute_index);
4550

@@ -90,7 +95,7 @@ static ext_info_t etx_info = {
9095
.interface_id = -1
9196
};
9297

93-
static void etx_calculation(etx_storage_t *entry, uint16_t attempts, uint8_t acks_rx, uint8_t attribute_index)
98+
static void etx_calculation(etx_storage_t *entry, uint16_t attempts, uint8_t acks_rx, ext_neigh_info_t *etx_neigh_info)
9499
{
95100
if (etx_info.hysteresis && !entry->stored_diff_etx) {
96101
if (entry->etx_samples >= etx_info.init_etx_sample_count) {
@@ -130,9 +135,9 @@ static void etx_calculation(etx_storage_t *entry, uint16_t attempts, uint8_t ack
130135
entry->etx = etx;
131136

132137
if (entry->etx_samples >= etx_info.init_etx_sample_count) {
133-
etx_cache_entry_init(attribute_index);
138+
etx_cache_entry_init(etx_neigh_info->attribute_index);
134139
// Checks if ETX value change callback is needed
135-
etx_value_change_callback_needed_check(entry->etx, &(entry->stored_diff_etx), entry->accumulated_failures, attribute_index);
140+
etx_value_change_callback_needed_check(entry->etx, &(entry->stored_diff_etx), entry->accumulated_failures, etx_neigh_info);
136141
}
137142
}
138143

@@ -203,7 +208,7 @@ static etx_sample_storage_t *etx_cache_sample_update(uint8_t attribute_index, ui
203208
* \param addr_type address type, ADDR_802_15_4_SHORT or ADDR_802_15_4_LONG
204209
* \param addr_ptr PAN ID with 802.15.4 address
205210
*/
206-
void etx_transm_attempts_update(int8_t interface_id, uint8_t attempts, bool success, uint8_t attribute_index)
211+
void etx_transm_attempts_update(int8_t interface_id, uint8_t attempts, bool success, uint8_t attribute_index, const uint8_t *mac64_addr_ptr)
207212
{
208213
uint8_t accumulated_failures;
209214
// Gets table entry
@@ -212,6 +217,10 @@ void etx_transm_attempts_update(int8_t interface_id, uint8_t attempts, bool succ
212217
return;
213218
}
214219

220+
ext_neigh_info_t etx_neigh_info;
221+
etx_neigh_info.attribute_index = attribute_index;
222+
etx_neigh_info.mac64 = mac64_addr_ptr;
223+
215224
if (entry->etx_samples < 7) {
216225
entry->etx_samples++;
217226
}
@@ -225,7 +234,7 @@ void etx_transm_attempts_update(int8_t interface_id, uint8_t attempts, bool succ
225234
return;
226235
}
227236

228-
etx_calculation(entry, storage->attempts_count, storage->received_acks, attribute_index);
237+
etx_calculation(entry, storage->attempts_count, storage->received_acks, &etx_neigh_info);
229238

230239
if (entry->etx_samples < 7 && !success) {
231240
entry->etx_samples = 7; //Stop Probing to failure
@@ -254,7 +263,7 @@ void etx_transm_attempts_update(int8_t interface_id, uint8_t attempts, bool succ
254263
if (entry->etx) {
255264

256265
if (success) {
257-
etx_calculation(entry, attempts + accumulated_failures, 1, attribute_index);
266+
etx_calculation(entry, attempts + accumulated_failures, 1, &etx_neigh_info);
258267
}
259268
}
260269
}
@@ -268,35 +277,42 @@ void etx_transm_attempts_update(int8_t interface_id, uint8_t attempts, bool succ
268277
* \param remote_incoming_idr Remote incoming IDR
269278
* \param mac64_addr_ptr long MAC address
270279
*/
271-
void etx_remote_incoming_idr_update(int8_t interface_id, uint8_t remote_incoming_idr, uint8_t attribute_index)
280+
void etx_remote_incoming_idr_update(int8_t interface_id, uint8_t remote_incoming_idr, uint8_t attribute_index, const uint8_t *mac64_addr_ptr)
272281
{
273282
etx_storage_t *entry = etx_storage_entry_get(interface_id, attribute_index);
283+
if (!entry) {
284+
return;
285+
}
274286

275-
if (entry) {
276-
// If ETX has been set
277-
if (entry->etx) {
278-
// If hysteresis is set stores ETX value to enable comparison
279-
if (etx_info.hysteresis && !entry->stored_diff_etx) {
280-
entry->stored_diff_etx = entry->etx;
281-
}
282-
// remote EXT = remote incoming IDR^2 (12 bit fraction)
283-
uint32_t remote_ext = ((uint32_t)remote_incoming_idr * remote_incoming_idr) << 2;
287+
ext_neigh_info_t etx_neigh_info;
288+
etx_neigh_info.attribute_index = attribute_index;
289+
etx_neigh_info.mac64 = mac64_addr_ptr;
284290

285-
// ETX = 7/8 * current ETX + 1/8 * remote ETX */
286-
uint32_t etx = entry->etx - (entry->etx >> ETX_MOVING_AVERAGE_FRACTION);
287-
etx += remote_ext >> ETX_MOVING_AVERAGE_FRACTION;
288291

289-
if (etx > 0xffff) {
290-
entry->etx = 0xffff;
291-
} else {
292-
entry->etx = etx;
293-
}
292+
// If ETX has been set
293+
if (entry->etx) {
294+
// If hysteresis is set stores ETX value to enable comparison
295+
if (etx_info.hysteresis && !entry->stored_diff_etx) {
296+
entry->stored_diff_etx = entry->etx;
297+
}
298+
// remote EXT = remote incoming IDR^2 (12 bit fraction)
299+
uint32_t remote_ext = ((uint32_t)remote_incoming_idr * remote_incoming_idr) << 2;
294300

295-
// Checks if ETX value change callback is needed
296-
etx_value_change_callback_needed_check(entry->etx, &(entry->stored_diff_etx), entry->accumulated_failures, attribute_index);
301+
// ETX = 7/8 * current ETX + 1/8 * remote ETX */
302+
uint32_t etx = entry->etx - (entry->etx >> ETX_MOVING_AVERAGE_FRACTION);
303+
etx += remote_ext >> ETX_MOVING_AVERAGE_FRACTION;
304+
305+
if (etx > 0xffff) {
306+
entry->etx = 0xffff;
307+
} else {
308+
entry->etx = etx;
297309
}
298-
entry->remote_incoming_idr = remote_incoming_idr;
310+
311+
// Checks if ETX value change callback is needed
312+
etx_value_change_callback_needed_check(entry->etx, &(entry->stored_diff_etx), entry->accumulated_failures, &etx_neigh_info);
299313
}
314+
entry->remote_incoming_idr = remote_incoming_idr;
315+
300316
}
301317

302318
/**
@@ -442,14 +458,18 @@ static uint16_t etx_current_calc(uint16_t etx, uint8_t accumulated_failures)
442458
*
443459
* \return 0x0100 to 0xFFFF local incoming IDR value (8 bit fraction)
444460
*/
445-
uint16_t etx_lqi_dbm_update(int8_t interface_id, uint8_t lqi, int8_t dbm, uint8_t attribute_index)
461+
uint16_t etx_lqi_dbm_update(int8_t interface_id, uint8_t lqi, int8_t dbm, uint8_t attribute_index, const uint8_t *mac64_addr_ptr)
446462
{
447463
uint32_t local_incoming_idr = 0;
448464
uint32_t etx = 0;
449465

450466
etx_storage_t *entry = etx_storage_entry_get(interface_id, attribute_index);
451467

468+
452469
if (entry) {
470+
ext_neigh_info_t etx_neigh_info;
471+
etx_neigh_info.attribute_index = attribute_index;
472+
etx_neigh_info.mac64 = mac64_addr_ptr;
453473
// If local ETX is not set calculate it based on LQI and dBm
454474
if (!entry->etx) {
455475
etx = etx_dbm_lqi_calc(lqi, dbm);
@@ -458,7 +478,7 @@ uint16_t etx_lqi_dbm_update(int8_t interface_id, uint8_t lqi, int8_t dbm, uint8_
458478
entry->tmp_etx = true;
459479
if (etx_info.callback_ptr) {
460480
etx_info.callback_ptr(etx_info.interface_id, 0, entry->etx >> 4,
461-
attribute_index);
481+
attribute_index, mac64_addr_ptr);
462482
}
463483
}
464484
// If local ETX has been calculated without remote incoming IDR and
@@ -474,7 +494,7 @@ uint16_t etx_lqi_dbm_update(int8_t interface_id, uint8_t lqi, int8_t dbm, uint8_
474494
entry->etx = etx >> 12;
475495

476496
local_incoming_idr >>= 4;
477-
etx_value_change_callback_needed_check(entry->etx, &(entry->stored_diff_etx), entry->accumulated_failures, attribute_index);
497+
etx_value_change_callback_needed_check(entry->etx, &(entry->stored_diff_etx), entry->accumulated_failures, &etx_neigh_info);
478498
}
479499
}
480500

@@ -721,7 +741,7 @@ uint8_t etx_accum_failures_callback_register(nwk_interface_id nwk_id, int8_t int
721741
*
722742
* \return ETX value (12 bit fraction)
723743
*/
724-
static void etx_value_change_callback_needed_check(uint16_t etx, uint16_t *stored_diff_etx, uint8_t accumulated_failures, uint8_t attribute_index)
744+
static void etx_value_change_callback_needed_check(uint16_t etx, uint16_t *stored_diff_etx, uint8_t accumulated_failures, ext_neigh_info_t *etx_neigh_info)
725745
{
726746
uint16_t current_etx;
727747
bool callback = false;
@@ -747,7 +767,7 @@ static void etx_value_change_callback_needed_check(uint16_t etx, uint16_t *store
747767

748768
// Calls callback function
749769
if (callback) {
750-
etx_info.callback_ptr(etx_info.interface_id, (*stored_diff_etx) >> 4, current_etx >> 4, attribute_index);
770+
etx_info.callback_ptr(etx_info.interface_id, (*stored_diff_etx) >> 4, current_etx >> 4, etx_neigh_info->attribute_index, etx_neigh_info->mac64);
751771
*stored_diff_etx = current_etx;
752772
}
753773
}
@@ -782,7 +802,7 @@ static void etx_accum_failures_callback_needed_check(etx_storage_t *entry, uint8
782802
* \param mac64_addr_ptr long MAC address
783803
*
784804
*/
785-
void etx_neighbor_remove(int8_t interface_id, uint8_t attribute_index)
805+
void etx_neighbor_remove(int8_t interface_id, uint8_t attribute_index, const uint8_t *mac64_addr_ptr)
786806
{
787807

788808
//tr_debug("Remove attribute %u", attribute_index);
@@ -795,7 +815,8 @@ void etx_neighbor_remove(int8_t interface_id, uint8_t attribute_index)
795815
if (!stored_diff_etx) {
796816
stored_diff_etx = 0xffff;
797817
}
798-
etx_info.callback_ptr(etx_info.interface_id, stored_diff_etx, 0xffff, attribute_index);
818+
819+
etx_info.callback_ptr(etx_info.interface_id, stored_diff_etx, 0xffff, attribute_index, mac64_addr_ptr);
799820
}
800821

801822
if (etx_info.cache_sample_requested) {
@@ -829,7 +850,10 @@ void etx_cache_timer(int8_t interface_id, uint16_t seconds_update)
829850
etx_sample_storage_t *storage = etx_info.etx_cache_storage_list + neighbour->index;
830851

831852
if (etx_update_possible(storage, etx_entry, seconds_update)) {
832-
etx_calculation(etx_entry, storage->attempts_count, storage->received_acks, neighbour->index);
853+
ext_neigh_info_t etx_neigh_info;
854+
etx_neigh_info.attribute_index = neighbour->index;
855+
etx_neigh_info.mac64 = neighbour->mac64;
856+
etx_calculation(etx_entry, storage->attempts_count, storage->received_acks, &etx_neigh_info);
833857
}
834858
}
835859

0 commit comments

Comments
 (0)