Skip to content

Commit 60a3b0f

Browse files
Juha Heiskanenjuhhei01
authored andcommitted
Fixed ETX update at LLC layer.
LLC message free was too early so etx update is now in correct place. Change-Id: Ib399079ab78b036784c68d04ed415ee266a1874e
1 parent bb152ce commit 60a3b0f

File tree

1 file changed

+27
-28
lines changed

1 file changed

+27
-28
lines changed

source/6LoWPAN/ws/ws_llc_data_service.c

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ static llc_message_t * llc_message_allocate(uint16_t ie_buffer_size,llc_data_bas
192192
if (!message) {
193193
return NULL;
194194
}
195+
message->ack_requested = false;
195196

196197
//Guarantee
197198
while(1) {
@@ -371,7 +372,33 @@ static void ws_llc_mac_confirm_cb(const mac_api_t* api, const mcps_data_conf_t *
371372

372373
uint8_t messsage_type = message->messsage_type;
373374
uint8_t mpx_user_handle = message->mpx_user_handle;
375+
//ETX update
376+
if (message->ack_requested && messsage_type == WS_FT_DATA ) {
374377

378+
ws_neighbor_class_entry_t * ws_neighbor = NULL;
379+
mac_neighbor_table_entry_t *neighbor = NULL;
380+
bool success = false;
381+
382+
switch (data->status) {
383+
case MLME_SUCCESS:
384+
case MLME_TX_NO_ACK:
385+
case MLME_NO_DATA:
386+
if (data->status == MLME_SUCCESS ) {
387+
success = true;
388+
}
389+
neighbor = mac_neighbor_table_address_discover(interface->mac_parameters->mac_neighbor_table, message->dst_address, message->dst_address_type);
390+
if (neighbor) {
391+
ws_neighbor = ws_neighbor_class_entry_get(&interface->ws_info->neighbor_storage, neighbor->index);
392+
}
393+
if (ws_neighbor) {
394+
etx_transm_attempts_update(interface->id, 1 + data->tx_retries , success, neighbor->index);
395+
//TODO discover RSL from Enchanced ACK Header IE elements
396+
}
397+
break;
398+
default:
399+
break;
400+
}
401+
}
375402
//Free message
376403
llc_message_free(message, base);
377404

@@ -384,34 +411,6 @@ static void ws_llc_mac_confirm_cb(const mac_api_t* api, const mcps_data_conf_t *
384411
mpx_user_id = MPX_KEY_MANAGEMENT_ENC_USER_ID;
385412
}
386413

387-
//ETX update
388-
if (message->ack_requested && messsage_type == WS_FT_DATA ) {
389-
390-
ws_neighbor_class_entry_t * ws_neighbor = NULL;
391-
mac_neighbor_table_entry_t *neighbor = NULL;
392-
bool success = false;
393-
394-
switch (data->status) {
395-
case MLME_SUCCESS:
396-
case MLME_TX_NO_ACK:
397-
case MLME_NO_DATA:
398-
if (data->status == MLME_SUCCESS ) {
399-
success = true;
400-
}
401-
neighbor = mac_neighbor_table_address_discover(interface->mac_parameters->mac_neighbor_table, message->dst_address, message->dst_address_type);
402-
if (neighbor) {
403-
ws_neighbor = ws_neighbor_class_entry_get(&interface->ws_info->neighbor_storage, neighbor->index);
404-
}
405-
if (ws_neighbor) {
406-
etx_transm_attempts_update(interface->id, 1 + data->tx_retries , success, neighbor->index);
407-
//TODO discover RSL from Enchanced ACK Header IE elements
408-
}
409-
break;
410-
default:
411-
break;
412-
}
413-
}
414-
415414
user_cb = ws_llc_mpx_user_discover(&base->mpx_data_base, mpx_user_id);
416415
if (user_cb && user_cb->data_confirm) {
417416
//Call MPX registered call back

0 commit comments

Comments
 (0)