A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
tx-duration-test.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2009 CTTC
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Nicola Baldo <nbaldo@cttc.es>
19  */
20 
21 #include <ns3/object.h>
22 #include <ns3/log.h>
23 #include <ns3/test.h>
24 #include <iostream>
25 #include "ns3/interference-helper.h"
26 #include "ns3/wifi-phy.h"
27 
28 NS_LOG_COMPONENT_DEFINE ("InterferenceHelperTxDurationTest");
29 
30 namespace ns3 {
31 
32 class TxDurationTest : public TestCase
33 {
34 public:
35  TxDurationTest ();
36  virtual ~TxDurationTest ();
37  virtual void DoRun (void);
38 
39 private:
50  bool CheckPayloadDuration (uint32_t size, WifiMode payloadMode, uint32_t knownDurationMicroSeconds);
51 
63  bool CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, uint32_t knownDurationMicroSeconds);
64 
65 };
66 
67 
69  : TestCase ("Wifi TX Duration")
70 {
71 }
72 
73 
75 {
76 }
77 
78 bool
79 TxDurationTest::CheckPayloadDuration (uint32_t size, WifiMode payloadMode, uint32_t knownDurationMicroSeconds)
80 {
81  uint32_t calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, payloadMode);
82  if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
83  {
84  std::cerr << " size=" << size
85  << " mode=" << payloadMode
86  << " known=" << knownDurationMicroSeconds
87  << " calculated=" << calculatedDurationMicroSeconds
88  << std::endl;
89  return false;
90  }
91  return true;
92 }
93 
94 bool
95 TxDurationTest::CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, uint32_t knownDurationMicroSeconds)
96 {
97  uint32_t calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, payloadMode, preamble).GetMicroSeconds ();
98  if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
99  {
100  std::cerr << " size=" << size
101  << " mode=" << payloadMode
102  << " preamble=" << preamble
103  << " known=" << knownDurationMicroSeconds
104  << " calculated=" << calculatedDurationMicroSeconds
105  << std::endl;
106  return false;
107  }
108  return true;
109 }
110 
111 void
113 {
114  bool retval = true;
115 
116  // IEEE Std 802.11-2007 Table 18-2 "Example of LENGTH calculations for CCK"
117  retval = retval
122 
123 
124  // Similar, but we add PLCP preamble and header durations
125  // and we test different rates.
126  // The payload durations for modes other than 11mbb have been
127  // calculated by hand according to IEEE Std 802.11-2007 18.2.3.5
128  retval = retval
161 
162  // values from http://mailman.isi.edu/pipermail/ns-developers/2009-July/006226.html
163  retval = retval && CheckTxDuration (14, WifiPhy::GetDsssRate1Mbps (), WIFI_PREAMBLE_LONG, 304);
164 
165  // values from
166  // http://www.oreillynet.com/pub/a/wireless/2003/08/08/wireless_throughput.html
167  retval = retval
174 
175  // 802.11g durations are same as 802.11a durations but with 6 us signal extension
176  retval = retval
180 }
181 
183 {
184 public:
186 };
187 
189  : TestSuite ("devices-wifi-tx-duration", UNIT)
190 {
192 }
193 
195 } // namespace ns3
196