@@ -1199,6 +1199,7 @@ mac_pre_build_frame_t *mcps_sap_prebuild_frame_buffer_get(uint16_t payload_size)
1199
1199
return NULL ;
1200
1200
}
1201
1201
memset (buffer , 0 , sizeof (mac_pre_build_frame_t ));
1202
+ buffer -> aux_header .frameCounter = 0xffffffff ;
1202
1203
if (payload_size ) {
1203
1204
//Mac interlnal payload allocate
1204
1205
buffer -> mac_payload = ns_dyn_mem_temporary_alloc (payload_size );
@@ -1519,14 +1520,20 @@ static int8_t mcps_generic_packet_build(protocol_interface_rf_mac_setup_s *rf_pt
1519
1520
mcps_generic_sequence_number_allocate (rf_ptr , buffer );
1520
1521
1521
1522
if (buffer -> fcf_dsn .securityEnabled ) {
1523
+ bool increment_framecounter = false;
1522
1524
//Remember to update security counter here!
1523
- buffer -> aux_header .frameCounter = mac_mlme_framecounter_get (rf_ptr );
1525
+ uint32_t new_frameCounter = mac_mlme_framecounter_get (rf_ptr );
1526
+ // If buffer frame counter is set, this is FHSS channel retry, update frame counter only if something was sent after failure
1527
+ if ((buffer -> aux_header .frameCounter == 0xffffffff ) || ((new_frameCounter - buffer -> aux_header .frameCounter ) > 1 )) {
1528
+ buffer -> aux_header .frameCounter = new_frameCounter ;
1529
+ increment_framecounter = true;
1530
+ }
1524
1531
if (!mac_frame_security_parameters_init (& ccm_ptr , rf_ptr , buffer )) {
1525
1532
return -2 ;
1526
1533
}
1527
- //Increment security counter
1528
- mac_mlme_framecounter_increment (rf_ptr );
1529
-
1534
+ if ( increment_framecounter ) {
1535
+ mac_mlme_framecounter_increment (rf_ptr );
1536
+ }
1530
1537
}
1531
1538
1532
1539
//Calculate Payload length here with IE extension
0 commit comments