WARP Project Forums - Wireless Open-Access Research Platform

You are not logged in.

#1 2018-Nov-27 02:04:03

1471765122
Member
Registered: 2018-Nov-26
Posts: 1

Bug report: Station with QoSData can't ping each other successfully.

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:

Code:

	// 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:

Code:

	// 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:

Code:

temp_word = ((parameters[i].reserved  < 24) | (parameters[i].group << 16) | (length));

I think it should be:

Code:

temp_word = ((parameters[i].reserved << 24) | (parameters[i].group << 16) | (length));

Thank you.

Last edited by 1471765122 (2018-Nov-27 02:29:32)

Offline

 

#2 2018-Nov-27 15:08:01

chunter
Administrator
From: Mango Communications
Registered: 2006-Aug-24
Posts: 1192

Re: Bug report: Station with QoSData can't ping each other successfully.

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

 

Board footer