[Ns-developers] static InterferenceHelper::CalculateTxDuration()

Mathieu Lacage mathieu.lacage at sophia.inria.fr
Tue Jul 14 11:19:12 PDT 2009


my only comment is that you can move the content of
interference-helper-tx-duration-test.h into
interference-helper-tx-duration-test.cc: this is usually what we have
done for tests.

Other than that, looks good for commit :)

thanks for your work,
Mathieu

On Tue, 2009-07-14 at 18:23 +0200, Nicola Baldo wrote:
> Hi all,
> 
> I was trying to simulate a scenario with 802.11b using short preamble, 
> and I realized that frame durations were not calculated appropriately. 
> Thinking about how to fix this issue, it emerged that there are actually 
> several other associated issues.
> 
> In the end, I prepared a patch that does following things to address the 
> whole problem:
> 
> 1) make InterferenceHelper::CalculateTxDuration() a static method.
> Currently, InterferenceHelper has several member variables which store 
> PHY related parameters such as the standard being used and the duration 
> of the PLCP preamble. This information is used to calculate the duration 
> of received frames. This makes it not feasible to simulate scenarios in 
> which several configurations co-exist in the same channel (e.g., a BSS 
> using short preamble and another BSS using long preamble).
> 
> 2) add several convenience methods:
>    static WifiMode GetPlcpHeaderMode (WifiMode, WifiPreamble);
>    static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode, 
> WifiPreamble);
>    static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode, 
> WifiPreamble);
>    static uint32_t GetPayloadDurationMicroSeconds (size, WifiMode);
> the introduction of the above methods makes IMHO the code more readable 
> and makes it possible to remove several switch statements (there were 
> many of them for calculating preamble durations at different locations).
> Particular care was taken in making all calculations according to the 
> standard. I put comments referring to specific sections in the IEEE Std. 
> 802.11-2007 for the majority of these calculations, in the hope that it 
> is easier for everybody to check that the code does the right thing.
> 
> 3) (I'm sure I'll have to fight to get this one accepted ;-) )
> Added a WifiPhyStandard member variable to WifiMode.
> I think from a logical perspective it makes sense, since there is a 
> 1-to-1 relationship between a WifiMode and a WifiPhyStandard. Even if, 
> for example, 802.11a and 802.11g modes are very similar, the standard 
> makes an explicit distinction between them (OFDM at 5Hz vs ERP-OFDM and 
> DSSS-OFDM at 2.4Ghz), and the duration of their frames would differ due 
> to different PLCP.
> 
> 4) added a unit test (interference-helper-tx-duration-test) which makes 
> sure that the code calculating frame durations returns the correct value 
> for some known cases. I've added a lot of cases for 802.11b; for 802.11a 
> there are only 3 test cases, if somebody could provide more it would be 
> great.
> 
> 5) let m_maxPacketDuration be set automatically based on received 
> packets. This makes it possible for a device using a "fast" standard to 
> use the correct interference duration when other devices using "slow" 
> standard are present in the same channel. Conceptually, this issue is 
> similar to issue 1), and this is the reason why it is included in the 
> same patch.
> 
> 6) in InterferenceHelper, I removed several member variables which 
> became unused, and removed as well all 
> InterferenceHelper::Configure80211*Parameters() methods, which were not 
> needed any more.
> 
> 
> The patch is here for review:
> http://codereview.appspot.com/91110
> 
> as a final note, I would like to say that the patch passes regression 
> tests, so even though most of the CalculateTxDuration code was 
> re-implemented the result is consistent at least in a few cases.
> 
> That's all! I am looking forward to seeing your comments...
> 
> Regards,
> 
> Nicola
> 
> 
> 



More information about the Ns-developers mailing list