@@ -158,7 +158,7 @@ typedef struct {
158158
159159static NS_LIST_DEFINE (llc_data_base_list , llc_data_base_t , link ) ;
160160
161- static uint16_t ws_wp_nested_message_length (wp_nested_ie_sub_list_t requested_list , llc_ie_params_t * params );
161+ static uint16_t ws_wp_nested_message_length (wp_nested_ie_sub_list_t requested_list , llc_data_base_t * llc_base );
162162static uint16_t ws_wh_headers_length (wh_ie_sub_list_t requested_list , llc_ie_params_t * params );
163163
164164/** LLC message local functions */
@@ -378,9 +378,10 @@ static uint16_t ws_wh_headers_length(wh_ie_sub_list_t requested_list, llc_ie_par
378378 return length ;
379379}
380380
381- static uint16_t ws_wp_nested_message_length (wp_nested_ie_sub_list_t requested_list , llc_ie_params_t * params )
381+ static uint16_t ws_wp_nested_message_length (wp_nested_ie_sub_list_t requested_list , llc_data_base_t * llc_base )
382382{
383383 uint16_t length = 0 ;
384+ llc_ie_params_t * params = & llc_base -> ie_params ;
384385 if (requested_list .gtkhash_ie ) {
385386 //Static 32 bytes allways
386387 length += WS_WP_SUB_IE_ELEMENT_HEADER_LENGTH + params -> gtkhash_length ;
@@ -411,6 +412,17 @@ static uint16_t ws_wp_nested_message_length(wp_nested_ie_sub_list_t requested_li
411412 length += 2 ;
412413 }
413414 }
415+ #ifdef HAVE_WS_VERSION_1_1
416+ if (requested_list .lfn_gtk_version_ie ) {
417+
418+ length += WS_WP_SUB_IE_ELEMENT_HEADER_LENGTH + ws_wp_nested_lfn_version_length ();
419+ ws_lgtkhash_ie_t ws_lgtkhash ;
420+ ws_lgtkhash .lgtk0 = llc_base -> interface_ptr -> ws_info -> lfngtk .active_hash_1 ;
421+ ws_lgtkhash .lgtk1 = llc_base -> interface_ptr -> ws_info -> lfngtk .active_hash_2 ;
422+ ws_lgtkhash .lgtk2 = llc_base -> interface_ptr -> ws_info -> lfngtk .active_hash_3 ;
423+ length += WS_WP_SUB_IE_ELEMENT_HEADER_LENGTH + ws_wp_lgtk_hash_length (& ws_lgtkhash );
424+ }
425+ #endif
414426
415427 if (requested_list .bs_ie ) {
416428 ///Dynamic length
@@ -1038,7 +1050,7 @@ static void ws_llc_lowpan_mpx_data_request(llc_data_base_t *base, mpx_user_t *us
10381050 nested_wp_id .us_ie = true;
10391051
10401052 uint16_t ie_header_length = ws_wh_headers_length (ie_header_mask , & base -> ie_params );
1041- uint16_t nested_ie_length = ws_wp_nested_message_length (nested_wp_id , & base -> ie_params );
1053+ uint16_t nested_ie_length = ws_wp_nested_message_length (nested_wp_id , base );
10421054
10431055 uint16_t over_head_size = ie_header_length ;
10441056 if (nested_ie_length ) {
@@ -1207,7 +1219,7 @@ static void ws_llc_mpx_eapol_request(llc_data_base_t *base, mpx_user_t *user_cb,
12071219 nested_wp_id .us_ie = true;
12081220
12091221 uint16_t ie_header_length = ws_wh_headers_length (ie_header_mask , & base -> ie_params );
1210- uint16_t nested_ie_length = ws_wp_nested_message_length (nested_wp_id , & base -> ie_params );
1222+ uint16_t nested_ie_length = ws_wp_nested_message_length (nested_wp_id , base );
12111223
12121224 uint16_t over_head_size = ie_header_length ;
12131225 if (nested_ie_length ) {
@@ -1783,7 +1795,7 @@ int8_t ws_llc_asynch_request(struct protocol_interface_info_entry *interface, as
17831795 request -> wh_requested_ie_list .rsl_ie = false; //Never should not be a part Asynch message
17841796 request -> wh_requested_ie_list .vh_ie = false;
17851797 uint16_t header_buffer_length = ws_wh_headers_length (request -> wh_requested_ie_list , & base -> ie_params );
1786- uint16_t wp_nested_payload_length = ws_wp_nested_message_length (request -> wp_requested_nested_ie_list , & base -> ie_params );
1798+ uint16_t wp_nested_payload_length = ws_wp_nested_message_length (request -> wp_requested_nested_ie_list , base );
17871799
17881800 //Allocated
17891801 uint16_t total_length = header_buffer_length ;
@@ -1880,6 +1892,28 @@ int8_t ws_llc_asynch_request(struct protocol_interface_info_entry *interface, as
18801892 //Write Vendor spesific payload
18811893 ptr = ws_wp_nested_vp_write (ptr , base -> ie_params .vendor_payload , base -> ie_params .vendor_payload_length );
18821894 }
1895+
1896+ #ifdef HAVE_WS_VERSION_1_1
1897+ if (ws_version_1_1 (interface )) {
1898+ if (request -> wp_requested_nested_ie_list .lfn_gtk_version_ie ) {
1899+ ws_lfnver_ie_t lfn_ver ;
1900+ ws_lgtkhash_ie_t ws_lgtkhash ;
1901+ //Write LFN Version
1902+ lfn_ver .lfn_version = interface -> ws_info -> lfngtk .lfn_version ;
1903+ ptr = ws_wp_nested_lfn_version_write (ptr , & lfn_ver );
1904+ //Write LFN GTK Hash info
1905+ ws_lgtkhash .lgtk0 = base -> interface_ptr -> ws_info -> lfngtk .active_hash_1 ;
1906+ ws_lgtkhash .lgtk1 = base -> interface_ptr -> ws_info -> lfngtk .active_hash_2 ;
1907+ ws_lgtkhash .lgtk2 = base -> interface_ptr -> ws_info -> lfngtk .active_hash_3 ;
1908+ ws_lgtkhash .active_lgtk_index = base -> interface_ptr -> ws_info -> lfngtk .active_key_index ;
1909+ ws_lgtkhash .lgtk0_hash = base -> interface_ptr -> ws_info -> lfngtk .lgtkhash ;
1910+ ws_lgtkhash .lgtk1_hash = base -> interface_ptr -> ws_info -> lfngtk .lgtkhash + 8 ;
1911+ ws_lgtkhash .lgtk2_hash = base -> interface_ptr -> ws_info -> lfngtk .lgtkhash + 16 ;
1912+ ptr = ws_wp_nested_lgtk_hash_write (ptr , & ws_lgtkhash );
1913+ }
1914+ }
1915+ #endif
1916+
18831917 }
18841918
18851919 base -> interface_ptr -> mac_api -> mcps_data_req_ext (base -> interface_ptr -> mac_api , & data_req , & message -> ie_ext , & request -> channel_list , message -> priority );
0 commit comments