Skip to content

Commit c65292e

Browse files
author
Juha Heiskanen
committed
Mac enhanced ACK pending update
Earlier we checked at CCA prepare Neighbour list for new neighbour. New solution will add permission when neighbour is added to list which reduce tx drifting. Change-Id: I9a237e936ea8d3dc538302ff5bec5e4810a2e6e4
1 parent 11a1e1d commit c65292e

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

source/MAC/IEEE802_15_4/mac_pd_sap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ static int8_t mac_data_interface_tx_done_cb(protocol_interface_rf_mac_setup_s *r
429429

430430
if (rf_ptr->mac_ack_tx_active) {
431431
//Accept direct non crypted acks and crypted only if neighbor is at list
432-
if (rf_ptr->ack_tx_possible || mac_sec_mib_device_description_get(rf_ptr, rf_ptr->enhanced_ack_buffer.DstAddr, rf_ptr->enhanced_ack_buffer.fcf_dsn.DstAddrMode, rf_ptr->enhanced_ack_buffer.DstPANId)) {
432+
if (rf_ptr->ack_tx_possible) {
433433
return PHY_TX_ALLOWED;
434434
}
435435

source/MAC/IEEE802_15_4/mac_security_mib.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ int8_t mac_sec_mib_device_description_set(uint8_t atribute_index, mlme_device_de
281281
return -1;
282282
}
283283

284+
platform_enter_critical();
284285
mlme_device_descriptor_t *device_ptr = rf_mac_setup->device_description_table + atribute_index;
285286

286287
//Copy description
@@ -293,6 +294,24 @@ int8_t mac_sec_mib_device_description_set(uint8_t atribute_index, mlme_device_de
293294
//tr_debug("Set %u, mac16 %x mac64: %s, %"PRIu32, atribute_index, device_descriptor->ShortAddress, trace_array(device_descriptor->ExtAddress, 8), device_descriptor->FrameCounter);
294295

295296
*device_ptr = *device_descriptor;
297+
298+
if (rf_mac_setup->mac_ack_tx_active && !rf_mac_setup->ack_tx_possible &&
299+
device_ptr->PANId == rf_mac_setup->enhanced_ack_buffer.DstPANId) {
300+
301+
//Compare address for pending neigbour add
302+
if (rf_mac_setup->enhanced_ack_buffer.fcf_dsn.DstAddrMode == MAC_ADDR_MODE_16_BIT) {
303+
uint16_t short_id = common_read_16_bit(rf_mac_setup->enhanced_ack_buffer.DstAddr);
304+
if (short_id == device_ptr->ShortAddress) {
305+
rf_mac_setup->ack_tx_possible = true;
306+
}
307+
} else if (rf_mac_setup->enhanced_ack_buffer.fcf_dsn.DstAddrMode == MAC_ADDR_MODE_64_BIT) {
308+
if (memcmp(device_ptr->ExtAddress, rf_mac_setup->enhanced_ack_buffer.DstAddr, 8) == 0) {
309+
rf_mac_setup->ack_tx_possible = true;
310+
}
311+
}
312+
}
313+
platform_exit_critical();
314+
296315
return 0;
297316
}
298317

0 commit comments

Comments
 (0)