You are not logged in.
Pages: 1
Hi,
I have found two bugs in Release v1.7.7.
I have two WARP V3 boards. I set one of the boards as an access point and another as a station. The station board had connected to the AP board. I used a thinkpad x1 laptop as a station which connected to the AP board.
So, the relation and IP address is:(192.168.3.1 and 192.168.3.2 are the IP addresses of the computers which connected to the ETH A port of the WARP V3 borad)
station(laptop) <-> AP(warp v3) <-> station(warp v3)
192.168.3.3 192.168.3.1 192.168.3.2
When 192.168.3.3(laptop) ping 192.168.3.2(warp station), I found 192.168.3.2 couldn't receive any frame from 192.168.3.3.
When 192.168.3.3 or 192.168.3.2 ping 192.168.3.1, everything was ok.
I found out that when 192.168.3.3 ping 192.168.3.2, AP(192.168.3.1) did receive the ARP broadcast data from 192.168.3.3, and It had relayed the ARP frame to all of it's stations and DS. But I found out that the data frame which was sent by 192.168.3.3 was QoSData.
Bug 1:
\SDK_Workspace\wlan-mac-sw\wlan_mac_high_ap\wlan_mac_ap.c(line 1304, line 1342)
When AP relay the QoSData(unicast or broadcast), It forget to set the frame_control_1 field to QosData.
In wlan_mac_ap.c line 1304, The original code is:
// Fill in the data mac_payload_ptr_u8 = curr_tx_queue_buffer->frame; tx_length = wlan_create_data_frame((void*)mac_payload_ptr_u8, &tx_header_common, MAC_FRAME_CTRL2_FLAG_FROM_DS); mac_payload_ptr_u8 += sizeof(mac_header_80211); wlan_mac_high_cdma_start_transfer(mac_payload_ptr_u8, (void*)rx_80211_header + sizeof(mac_header_80211), length - sizeof(mac_header_80211));
The wlan_create_data_frame function will create a header which frame_control_1 field is MAC_FRAME_CTRL1_SUBTYPE_DATA.
But when AP relay a broadcast QoSData, It should be MAC_FRAME_CTRL1_SUBTYPE_QOSDATA.
I think it should be:
// Fill in the data mac_payload_ptr_u8 = curr_tx_queue_buffer->frame; tx_length = wlan_create_data_frame((void*)mac_payload_ptr_u8, &tx_header_common, MAC_FRAME_CTRL2_FLAG_FROM_DS); ((mac_header_80211*)mac_payload_ptr_u8)->frame_control_1 = rx_80211_header->frame_control_1; mac_payload_ptr_u8 += sizeof(mac_header_80211); wlan_mac_high_cdma_start_transfer(mac_payload_ptr_u8, (void*)rx_80211_header + sizeof(mac_header_80211), length - sizeof(mac_header_80211));
The same bug is in line 1342.
Bug 2:
\SDK_Workspace\wlan-mac-sw\wlan_mac_high_framework\wlan_exp_common.c(line 293)
Original code:
temp_word = ((parameters[i].reserved < 24) | (parameters[i].group << 16) | (length));
I think it should be:
temp_word = ((parameters[i].reserved << 24) | (parameters[i].group << 16) | (length));
Thank you.
Last edited by 1471765122 (2018-Nov-27 02:29:32)
Offline
Thank you for the heads up. Both were definitely bugs, and your fixes are correct. I've made the changes to the current publicly-accessible branch of the code here. We're aiming to release a new version of the design later this week that will incorporate these fixes as well as our other changes.
Offline
Pages: 1