Bugzilla – Bug 725
L-2 fragmentation and RTS cannot be used at the same time
Last modified: 2010-01-08 11:41:37 UTC
Created attachment 633 [details] Frag threshold set at 800, RTS threshold set at 100. Still RTS handshake is not triggered. It seems that MAC-layer fragmentation and RTS handshake cannot be used at the same time. In particular, when turning on both mechanisms only fragmentation gets actually turned on. According to the standard, it should be possible to use both mechanisms jointly. To reproduce this bug, just set FragmentationThreshold and RtsCtsThreshold accordingly. As an example, they could be set this way: Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("800")); Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("100"));
Created attachment 634 [details] (Very simple) patch proposed to overcome this issue As correctly pointed out here: http://groups.google.com/group/ns-3-users/browse_thread/thread/b96cfbe60458bbf1 the problem seems due to the instruction params.DisableRts() in function DcaTxop::NotifyAccessGranted (in src/devices/wifi/dca-txop.cc). The patched code simply calls params.EnableRts() after checking RTS is actually needed. As a result, the RTS handshake is called only for the first fragment and the duration field is properly set to cover up to the first ACK (as stated in the standard).
I believe that this patch enables RTS if the size of the packet is higher than RtsThreshold but the correct expected behavior is to enable it only if the size of the first fragment is higher than RtsThreshold. Right ?
(In reply to comment #2) > the correct expected behavior is to enable it only if the size > of the first fragment is higher than RtsThreshold. Right ? I reviewed the std 802.11-2007 and i think you are right. Section 9.2.6 states that "a STA shall use RTS/CTS [...] only when the length of the MPDU is greater than [...] dot11RTSThreshold". So this step comes after a possible fragmentation. Hence the station should instead check the length of 'fragment' against the RtsThreshold but should do it only in the case 'fragment' is the first fragment.
changeset: c4b8a337fc29