@@ -174,7 +174,6 @@ void mcps_sap_data_req_handler_ext(protocol_interface_rf_mac_setup_s *rf_mac_set
174
174
status = MLME_FRAME_TOO_LONG ;
175
175
goto verify_status ;
176
176
}
177
- //protocol_interface_rf_mac_setup_s *rf_mac_setup = (protocol_interface_rf_mac_setup_s*)api;
178
177
buffer = mcps_sap_prebuild_frame_buffer_get (0 );
179
178
//tr_debug("Data Req");
180
179
if (!buffer ) {
@@ -217,8 +216,8 @@ void mcps_sap_data_req_handler_ext(protocol_interface_rf_mac_setup_s *rf_mac_set
217
216
buffer -> fcf_dsn .SrcAddrMode = data_req -> SrcAddrMode ;
218
217
buffer -> fcf_dsn .framePending = data_req -> PendingBit ;
219
218
220
- if (buffer -> fcf_dsn .SrcAddrMode == MAC_ADDR_MODE_NONE ) {
221
- if (buffer -> fcf_dsn .DstAddrMode == MAC_ADDR_MODE_NONE ) {
219
+ if (buffer -> fcf_dsn .SrcAddrMode == MAC_ADDR_MODE_NONE && ! rf_mac_setup -> mac_extension_enabled ) {
220
+ if (buffer -> fcf_dsn .DstAddrMode == MAC_ADDR_MODE_NONE ) {
222
221
status = MLME_INVALID_ADDRESS ;
223
222
goto verify_status ;
224
223
}
@@ -238,27 +237,37 @@ void mcps_sap_data_req_handler_ext(protocol_interface_rf_mac_setup_s *rf_mac_set
238
237
buffer -> ie_elements .payloadIovLength = ie_list -> payloadIovLength ;
239
238
buffer -> headerIeLength = ie_header_length ;
240
239
buffer -> payloadsIeLength = ie_payload_length ;
241
- if (ie_header_length || ie_payload_length ) {
242
- buffer -> fcf_dsn .frameVersion = MAC_FRAME_VERSION_2015 ;
243
- buffer -> fcf_dsn .informationElementsPresets = true;
244
- }
245
240
246
- if (buffer -> fcf_dsn .DstAddrMode && buffer -> DstPANId == buffer -> SrcPANId ) {
247
- if (buffer -> fcf_dsn .frameVersion == MAC_FRAME_VERSION_2015 ) {
248
241
249
- if (buffer -> fcf_dsn .DstAddrMode && buffer -> fcf_dsn .SrcAddrMode ) {
250
- if (buffer -> fcf_dsn .DstAddrMode != MAC_ADDR_MODE_64_BIT || buffer -> fcf_dsn .SrcAddrMode != MAC_ADDR_MODE_64_BIT ) {
251
- buffer -> fcf_dsn .intraPan = true;
252
- }
253
- }
242
+ if (rf_mac_setup -> mac_extension_enabled ) {
243
+ //Handle mac extension's
244
+ buffer -> fcf_dsn .frameVersion = MAC_FRAME_VERSION_2015 ;
245
+ if (ie_header_length || ie_payload_length ) {
246
+ buffer -> fcf_dsn .informationElementsPresets = true;
247
+ }
254
248
255
- } else {
249
+ buffer -> fcf_dsn .sequenceNumberSuppress = data_req -> SeqNumSuppressed ;
250
+ if (buffer -> fcf_dsn .sequenceNumberSuppress ) {
251
+ buffer -> mac_header_length_with_security -- ;
252
+ }
253
+ /* PAN-ID compression bit enable when necessary */
254
+ if (buffer -> fcf_dsn .SrcAddrMode == MAC_ADDR_MODE_NONE && buffer -> fcf_dsn .DstAddrMode == MAC_ADDR_MODE_NONE ) {
255
+ buffer -> fcf_dsn .intraPan = !data_req -> PanIdSuppressed ;
256
+ } else if (buffer -> fcf_dsn .DstAddrMode == MAC_ADDR_MODE_NONE ) {
257
+ buffer -> fcf_dsn .intraPan = data_req -> PanIdSuppressed ;
258
+ } else if (buffer -> fcf_dsn .SrcAddrMode == MAC_ADDR_MODE_NONE || (buffer -> fcf_dsn .SrcAddrMode == MAC_ADDR_MODE_64_BIT && buffer -> fcf_dsn .DstAddrMode == MAC_ADDR_MODE_64_BIT )) {
259
+ buffer -> fcf_dsn .intraPan = data_req -> PanIdSuppressed ;
260
+ } else /* two addresses, at least one address short */ {
261
+ // ignore or fault panidsuppressed
262
+ if (buffer -> DstPANId == buffer -> SrcPANId ) {
263
+ buffer -> fcf_dsn .intraPan = true;
264
+ }
265
+ }
266
+ } else {
267
+ /* PAN-ID compression bit enable when necessary */
268
+ if ((buffer -> fcf_dsn .DstAddrMode && buffer -> fcf_dsn .SrcAddrMode ) && (buffer -> DstPANId == buffer -> SrcPANId )) {
256
269
buffer -> fcf_dsn .intraPan = true;
257
270
}
258
- } else if (buffer -> fcf_dsn .DstAddrMode == MAC_ADDR_MODE_NONE && buffer -> fcf_dsn .frameVersion == MAC_FRAME_VERSION_2015 ) {
259
- //Suppress sequence number
260
- buffer -> fcf_dsn .sequenceNumberSuppress = true;
261
- buffer -> mac_header_length_with_security -- ;
262
271
}
263
272
264
273
//Check PanID presents at header
0 commit comments