WARP Project Forums - Wireless Open-Access Research Platform

You are not logged in.

#1 2019-May-02 19:47:56

sgv1975
Member
Registered: 2014-Oct-02
Posts: 14

Disabling ACKs

Hello,

I am interested in disabling the ACK functionality on all frames in the 802.11 reference design. My system has certain very high SNR links for which I would like to disable ACKs.

I am working on version 1.7.0. Ultimately, I would like to disable ACKs for certain STAs, but to start, I would like to disable it for all STAs.   I was wondering if there was a relatively painless way of doing this.


The following is what I have tried:


I followed a suggestion about disabling retransmissions at the bottom of the first page of https://warpproject.org/forums/viewtopic.php?id=3218which I believe is for a much older version of the code, as I could not find wlan_mac_high_setup_tx_frame_info() in version 1.7.0.  What I did was to comment out the line: if(!is_multicast) tx_frame_info->flags |= TX_FRAME_INFO_FLAGS_REQ_TO;  in wlan_mac_high.c   for the AP. With this change, I was able to associate successfully with an unmodified STA.

Additionally, I also tried to effectively disable ACK transmissions by the STA using a crude approach, by sending the ACK transmissions to the nonexistent Antenna C. I did this by adding active_rx_ant = RX_ACTIVE_ANTC;  right after the line    active_rx_ant = (wlan_phy_rx_get_active_rx_ant());, to overwrite the active_rx_ant value in wlan_mac_dcf.c  When I did this, the STA was not able to associate with the AP, in fact, the whole system seemed to enter a deadlocked state of some kind as I was not seeing anything on the ADC_I and ADC_Q channels of the STA on chipscope after a very short time.

I was wondering if you have any suggestions on what may be going wrong and/or some other suggestions on how to remove the ACK functionality.

Thanks

SG

Last edited by sgv1975 (2019-May-02 20:05:36)

Offline

 

#2 2019-May-02 22:00:46

murphpo
Administrator
From: Mango Communications
Registered: 2006-Jul-03
Posts: 5076

Re: Disabling ACKs

You'll have to be more specific about the exact protocol you want to achieve.

ACKs are part of the normal DCF protocol. When a DCF node transmits a unicast data packet it waits to receive an ACK. If no ACK is received before the timeout, the node starts the DCF retransmission state machine. If you disable all ACK transmissions, every unicast data packet will time out and be retransmitted many times.

Besides disabling ACKs, do you have a specific DCF modification in mind?

If you're looking for a much simpler low-level MAC, try the NoMAC application. The NoMAC app implements no MAC protocol - every packet transferred from CPU High is transmitted immediately, exactly once. There are no ACKs, timeouts, retransmissions, etc. in NoMAC.

Offline

 

#3 2019-May-02 23:00:48

sgv1975
Member
Registered: 2014-Oct-02
Posts: 14

Re: Disabling ACKs

Thanks for the quick response.  Sorry for the lack of clarity. I should have added that besides disabling ACKs, I would also like to disable retransmissions.

I will try to illustrate the protocol I am ultimately hoping to implement with a more specific example.  Suppose that there is 1 AP and 2 STAs in the network. STA1 is a regular 802.11 station, STA2 operates under the new protocol.

All communications between the AP and STA1 are according to the standard 802.11 protocol.

Communications between the AP and STA2 do not use ACKs or retransmissions. So if the AP has a packet to transmit to the STA, it puts it into its packet buffer, and when the medium is available (according to physical and virtual carrier sensing), transmits it to STA2.  STA2 receives the packet but does not send an ACK even if the FCS is good. The packet is passed up to higher layers if the FCS is good. The AP does not wait for an ACK from STA2, and hence there are no re-transmissions. So if a packet is dropped, it is lost.  So in some sense, the transmissions to STA2 are UDP-like.

For now, I am first trying to implement a system with just the AP and STA2. I have tried using NoMAC which does fit the bill for the AP-STA2 link, but ultimately, I would like to be able to also connect to STA1 following the standard 802.11 DCF, so I would like to first achieve this No-ACK, no retransmissions behavior by modifying the DCF MAC as it seems like this would be the easier approach rather than adding DCF functionality to NoMAC.

Based on the last answer in  https://warpproject.org/forums/viewtopic.php?id=3218, I am trying to make unicast data packets look like multicast packets to the DCF by not asserting the TX_FRAME_INFO_FLAGS_REQ_TO bit in tx_frame_info->flags.  My thought is that with this change at the AP, the DCF will not wait for an ACK or perform any retransmissions, and I can then disable transmissions of ACKs at the STA.  I tried to effectively disable ACK transmissions from the STA by setting the antenna used for the ACK to Antenna C which is not installed.  However, when I run the system, it enters some kind of a deadlocked state where there are no more transmissions (not even the beacon) from the AP.

I would appreciate any suggestions on how to figure out what may be going on, and/or suggestions on other ways to turn off ACKs and retransmissions.

Thanks.

Last edited by sgv1975 (2019-May-02 23:10:24)

Offline

 

#4 2019-May-03 09:56:15

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

Re: Disabling ACKs

I'd recommend moving up to the 1.7.8 version of the design. The links in this post will reference that latest codebase, but there should be similar code blocks you can modify in 1.7.0 if you want to stay on that version.

As far as bypassing the retransmissions mechanism for some stations, de-asserting TX_FRAME_INFO_FLAGS_REQ_TO is the right approach. You can do this on a per-station basis pretty easily. This is the block of code that currently asserts TX_FRAME_INFO_FLAGS_REQ_TO. That context also has access to the station_info_t struct that defines stuff about the station you are sending to. If it were me, I'd define a new flag for station_info_t of:

Code:

#define STATION_INFO_FLAG_DISABLE_TIMEOUTS              0x04

Then you could (1) set that flag for a station when it associates (or when your protocol wants to disable the retransmission behavior) and (2) use the presence of that flag to avoid setting TX_FRAME_INFO_FLAGS_REQ_TO during wlan_mac_high_mpdu_transmit()


As far as avoiding ACK transmissions in response to receiving a unicast packet, I don't think switching to an unused antenna is a good idea. I'm pretty sure that is what is hanging the system. A better way is just to modify the part of the DCF that is setting up the ACK transmission to keep it from doing so. This if() clause is what is doing that. Under standard behavior, if the reception is a unicast packet to me and it isn't a control packet, I should start to prepare an ACK response. Simply changing that if() line to this will disable all ACK transmissions:

Code:

if(0 && unicast_to_me && !WLAN_IS_CTRL_FRAME(rx_header)) {

However, that will disable ACK transmissions permanently for the node. Maybe that's okay if you are fine with STA1 having a normal DCF bitstream and STA2 having this modification to the DCF in its bitstream. Alternatively, you could make that "0" be based on a variable that gets set via an IPC message sent from the High MAC that is toggled based upon something in your algorithm.

Offline

 

#5 2019-May-03 22:51:01

sgv1975
Member
Registered: 2014-Oct-02
Posts: 14

Re: Disabling ACKs

Thanks! This works.

Offline

 

Board footer