A Discrete-Event Network Simulator
API
ocb-test-suite.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013 Dalian University of Technology
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: Junling Bu <linlinjavaer@gmail.com>
19  */
20 #include "ns3/test.h"
21 #include "ns3/rng-seed-manager.h"
22 #include "ns3/config.h"
23 #include "ns3/data-rate.h"
24 #include "ns3/vector.h"
25 #include "ns3/string.h"
26 #include "ns3/ssid.h"
27 #include "ns3/packet-socket-address.h"
28 #include "ns3/mobility-model.h"
29 #include "ns3/yans-wifi-helper.h"
30 #include "ns3/position-allocator.h"
31 #include "ns3/packet-socket-helper.h"
32 #include "ns3/mobility-helper.h"
33 #include "ns3/wifi-net-device.h"
34 #include "ns3/packet-socket-server.h"
35 #include "ns3/packet-socket-client.h"
36 #include <iostream>
37 
38 #include "ns3/ocb-wifi-mac.h"
39 #include "ns3/wifi-80211p-helper.h"
40 #include "ns3/wave-mac-helper.h"
41 
42 using namespace ns3;
43 // helper function to assign streams to random variables, to control
44 // randomness in the tests
45 static void
47 {
48  int64_t currentStream = stream;
49  Ptr<RegularWifiMac> rmac = DynamicCast<RegularWifiMac> (mac);
50  if (rmac)
51  {
52  PointerValue ptr;
53  rmac->GetAttribute ("DcaTxop", ptr);
54  Ptr<DcaTxop> dcaTxop = ptr.Get<DcaTxop> ();
55  currentStream += dcaTxop->AssignStreams (currentStream);
56 
57  rmac->GetAttribute ("VO_EdcaTxopN", ptr);
58  Ptr<EdcaTxopN> vo_edcaTxopN = ptr.Get<EdcaTxopN> ();
59  currentStream += vo_edcaTxopN->AssignStreams (currentStream);
60 
61  rmac->GetAttribute ("VI_EdcaTxopN", ptr);
62  Ptr<EdcaTxopN> vi_edcaTxopN = ptr.Get<EdcaTxopN> ();
63  currentStream += vi_edcaTxopN->AssignStreams (currentStream);
64 
65  rmac->GetAttribute ("BE_EdcaTxopN", ptr);
66  Ptr<EdcaTxopN> be_edcaTxopN = ptr.Get<EdcaTxopN> ();
67  currentStream += be_edcaTxopN->AssignStreams (currentStream);
68 
69  rmac->GetAttribute ("BK_EdcaTxopN", ptr);
70  Ptr<EdcaTxopN> bk_edcaTxopN = ptr.Get<EdcaTxopN> ();
71  currentStream += bk_edcaTxopN->AssignStreams (currentStream);
72  }
73 }
74 
82 {
83 public:
84  OcbWifiMacTestCase (void);
85  virtual ~OcbWifiMacTestCase (void);
86 private:
87  virtual void DoRun (void);
88 
94  void MacAssoc (std::string context, Mac48Address bssid);
103  void PhyRxOkTrace (std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble);
112  void PhyTxTrace (std::string context, Ptr<const Packet> packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower);
118  Vector GetCurrentPosition (uint32_t i);
123  void AdvancePosition (Ptr<Node> node);
124 
126  void PreRandomConfiguration (void);
132  void ConfigureApStaMode (Ptr<Node> static_node, Ptr<Node> mobile_node);
138  void ConfigureAdhocMode (Ptr<Node> static_node, Ptr<Node> mobile_node);
144  void ConfigureOcbMode (Ptr<Node> static_node, Ptr<Node> mobile_node);
150  void PostDeviceConfiguration (Ptr<Node> static_node, Ptr<Node> mobile_node);
151 
153  Vector phytx_pos;
154 
156  Vector macassoc_pos;
157 
159  Vector phyrx_pos;
160 
161  // nodes.Get (0) is static node
162  // nodes.Get (1) is mobile node
164 };
165 
167  : TestCase ("Association time: Ap+Sta mode vs Adhoc mode vs Ocb mode")
168 {
169 }
170 
172 {
173 }
174 
175 // mobility is like walk on line with velocity 5 m/s
176 // We prefer to update 0.5m every 0.1s rather than 5m every 1s
177 void
179 {
181  Vector pos = mobility->GetPosition ();
182  pos.x -= 0.5;
183  if (pos.x < 1.0 )
184  {
185  pos.x = 1.0;
186  return;
187  }
188  mobility->SetPosition (pos);
189 
190  Simulator::Schedule (Seconds (0.1), &OcbWifiMacTestCase::AdvancePosition, this, node);
191 }
192 
193 // here are only two nodes, a stationary and a mobile one
194 // the i value of the first = 0; the i value of second = 1.
195 Vector
197 {
198  NS_ASSERT (i < 2);
199  Ptr<Node> node = nodes.Get (i);
201  Vector pos = mobility->GetPosition ();
202  return pos;
203 }
204 
205 void
206 OcbWifiMacTestCase::MacAssoc (std::string context,Mac48Address bssid)
207 {
208  if (macassoc_time == Time (0))
209  {
210  macassoc_time = Now ();
212  std::cout << "MacAssoc time = " << macassoc_time.GetNanoSeconds ()
213  << " position = " << macassoc_pos
214  << std::endl;
215  }
216 }
217 
218 // We want to get the time that sta receives the first beacon frame from AP
219 // it means that in this time this sta has ability to receive frame
220 void
221 OcbWifiMacTestCase::PhyRxOkTrace (std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble)
222 {
223  if (phyrx_time == Time (0))
224  {
225  phyrx_time = Now ();
227  std::cout << "PhyRxOk time = " << phyrx_time.GetNanoSeconds ()
228  << " position = " << phyrx_pos
229  << std::endl;
230  }
231 }
232 
233 // We want to get the time that STA sends the first data packet successfully
234 void
235 OcbWifiMacTestCase::PhyTxTrace (std::string context, Ptr<const Packet> packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower)
236 {
237  WifiMacHeader h;
238  packet->PeekHeader (h);
239  if ((phytx_time == Time (0)) && h.IsData ())
240  {
241  phytx_time = Now ();
243  std::cout << "PhyTx data time = " << phytx_time.GetNanoSeconds ()
244  << " position = " << phytx_pos
245  << std::endl;
246  }
247 }
248 
249 void
251 {
252  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
253  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
254  wifiPhy.SetChannel (wifiChannel.Create ());
255 
256  Ssid ssid = Ssid ("wifi-default");
257  WifiMacHelper wifiStaMac;
258  wifiStaMac.SetType ("ns3::StaWifiMac", "Ssid", SsidValue (ssid));
259  WifiMacHelper wifiApMac;
260  wifiApMac.SetType ("ns3::ApWifiMac","Ssid", SsidValue (ssid));
261 
264  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
265  "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
266  "ControlMode",StringValue ("OfdmRate6MbpsBW10MHz"));
267  wifi.Install (wifiPhy, wifiStaMac, mobile_node);
268  wifi.Install (wifiPhy, wifiApMac, static_node);
269 }
270 
271 void
273 {
274  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
275  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
276  wifiPhy.SetChannel (wifiChannel.Create ());
277 
278  WifiMacHelper wifiMac;
279  wifiMac.SetType ("ns3::AdhocWifiMac");
280 
283  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
284  "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
285  "ControlMode",StringValue ("OfdmRate6MbpsBW10MHz"));
286  wifi.Install (wifiPhy, wifiMac, mobile_node);
287  wifi.Install (wifiPhy, wifiMac, static_node);
288 }
289 
290 void
292 {
293  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
294  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
295  wifiPhy.SetChannel (wifiChannel.Create ());
296 
297  NqosWaveMacHelper wifi80211pMac = NqosWaveMacHelper::Default ();
298 
299  Wifi80211pHelper wifi80211p = Wifi80211pHelper::Default ();
300  wifi80211p.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
301  "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
302  "ControlMode",StringValue ("OfdmRate6MbpsBW10MHz"));
303  wifi80211p.Install (wifiPhy, wifi80211pMac, mobile_node);
304  wifi80211p.Install (wifiPhy, wifi80211pMac, static_node);
305 }
306 
307 void
309 {
310  Ptr<WifiNetDevice> static_device = DynamicCast<WifiNetDevice> (static_node->GetDevice (0));
311  Ptr<WifiNetDevice> mobile_device = DynamicCast<WifiNetDevice> (mobile_node->GetDevice (0));
312 
313  // Fix the stream assignment to the Dcf Txop objects (backoffs)
314  // The below stream assignment will result in the DcaTxop object
315  // using a backoff value of zero for this test when the
316  // DcaTxop::EndTxNoAck() calls to StartBackoffNow()
317  AssignWifiRandomStreams (static_device->GetMac (), 21);
318  AssignWifiRandomStreams (mobile_device->GetMac (), 22);
319 
320  // setup mobility
321  // the initial position of static node is at 0,
322  // and the initial position of mobile node is 350.
324  mobility.Install (mobile_node);
325  mobility.Install (static_node);
326  Ptr<MobilityModel> mm = mobile_node->GetObject<MobilityModel> ();
327  Vector possta = mm->GetPosition ();
328  possta.x = 350;
329  mm->SetPosition (possta);
330  Simulator::Schedule (Seconds (1.0), &OcbWifiMacTestCase::AdvancePosition, this, mobile_node);
331 
332  PacketSocketAddress socket;
333  socket.SetSingleDevice (mobile_device->GetIfIndex ());
334  socket.SetPhysicalAddress (static_device->GetAddress ());
335  socket.SetProtocol (1);
336 
337  // give packet socket powers to nodes.
338  PacketSocketHelper packetSocket;
339  packetSocket.Install (static_node);
340  packetSocket.Install (mobile_node);
341 
342  Ptr<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
343  client->SetRemote (socket);
344  mobile_node->AddApplication (client);
345  client->SetStartTime (Seconds (0.5));
346  client->SetStopTime (Seconds (70.0));
347 
348  Ptr<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
349  server->SetLocal (socket);
350  static_node->AddApplication (server);
351  server->SetStartTime (Seconds (0.0));
352  server->SetStopTime (Seconds (70.5));
353 
355  phytx_pos = macassoc_pos = phyrx_pos = Vector ();
356 
357  Config::Connect ("/NodeList/1/DeviceList/*/Mac/Assoc", MakeCallback (&OcbWifiMacTestCase::MacAssoc, this));
358  Config::Connect ("/NodeList/1/DeviceList/*/Phy/State/RxOk", MakeCallback (&OcbWifiMacTestCase::PhyRxOkTrace, this));
359  Config::Connect ("/NodeList/1/DeviceList/*/Phy/State/Tx", MakeCallback (&OcbWifiMacTestCase::PhyTxTrace, this));
360 }
361 
375 void
377 {
378  std::cout << "test time point for Ap-Sta mode" << std::endl;
380  nodes = NodeContainer ();
381  nodes.Create (2);
382  Ptr<Node> static_node = nodes.Get (0);
383  Ptr<Node> mobile_node = nodes.Get (1);
384  ConfigureApStaMode (static_node, mobile_node);
385  PostDeviceConfiguration (static_node, mobile_node);
386  Simulator::Stop (Seconds (71.0));
387  Simulator::Run ();
388  Simulator::Destroy ();
389  NS_TEST_ASSERT_MSG_LT (phyrx_time, macassoc_time, "In Sta mode with AP, you cannot associate until receive beacon or AssocResponse frame" );
390  NS_TEST_ASSERT_MSG_LT (macassoc_time, phytx_time, "In Sta mode with AP, you cannot send data packet until associate" );
391  NS_TEST_ASSERT_MSG_GT ((phyrx_pos.x - macassoc_pos.x), 0.0, "");
392  //actually macassoc_pos.x - phytx_pos.x is greater than 0
393  //however associate switch to send is so fast with less than 100ms
394  //and in our mobility model that every 0.1s update position,
395  //so turn out to be that macassoc_pos.x - phytx_pos.x is equal to 0
396  //NS_TEST_ASSERT_MSG_GT ((macassoc_pos.x - phytx_pos.x), 0.0, "");
397 
398  std::cout << "test time point for Adhoc mode" << std::endl;
400  nodes = NodeContainer ();
401  nodes.Create (2);
402  static_node = nodes.Get (0);
403  mobile_node = nodes.Get (1);
404  ConfigureAdhocMode (static_node, mobile_node);
405  PostDeviceConfiguration (static_node, mobile_node);
406  Simulator::Stop (Seconds (71.0));
407  Simulator::Run ();
408  Simulator::Destroy ();
409  // below test assert will fail, because AdhocWifiMac has not implement state machine.
410  // if someone takes a look at the output in adhoc mode and in Ocb mode
411  // he will find these two outputs are almost same.
412  //NS_TEST_ASSERT_MSG_LT (phyrx_time, macassoc_time, "In Adhoc mode, you cannot associate until receive beacon or AssocResponse frame" );
413  //NS_TEST_ASSERT_MSG_LT (macassoc_time, phytx_time, "In Adhoc mode, you cannot send data packet until associate" );
414  //NS_TEST_ASSERT_MSG_GT ((phyrx_pos.x - macassoc_pos.x), 0.0, "");
415  // below test assert result refer to Ap-Sta mode
416  //NS_TEST_ASSERT_MSG_GT ((macassoc_pos.x - phytx_pos.x), 0.0, "");
417 
418  std::cout << "test time point for Ocb mode" << std::endl;
420  nodes = NodeContainer ();
421  nodes.Create (2);
422  static_node = nodes.Get (0);
423  mobile_node = nodes.Get (1);
424  ConfigureOcbMode (static_node, mobile_node);
425  PostDeviceConfiguration (static_node, mobile_node);
426  Simulator::Stop (Seconds (71.0));
427  Simulator::Run ();
428  Simulator::Destroy ();
429  NS_TEST_ASSERT_MSG_EQ (macassoc_time.GetNanoSeconds (), 0, "In Ocb mode, there is no associate state machine" );
430  NS_TEST_ASSERT_MSG_LT (phytx_time, phyrx_time, "before mobile node receives frames from far static node, it can send data packet directly" );
431  NS_TEST_ASSERT_MSG_EQ (macassoc_pos.x, 0.0, "");
432  NS_TEST_ASSERT_MSG_GT ((phytx_pos.x - phyrx_pos.x), 0.0, "");
433 }
434 void
436 {
437  // Assign a seed and run number, and later fix the assignment of streams to
438  // WiFi random variables, so that the first backoff used is zero slots
439  RngSeedManager::SetSeed (1);
440  RngSeedManager::SetRun (17);
441  // the WiFi random variables is set in PostDeviceConfiguration method.
442 }
443 
450 class OcbTestSuite : public TestSuite
451 {
452 public:
453  OcbTestSuite ();
454 };
455 
457  : TestSuite ("wifi-80211p-ocb", UNIT)
458 {
459  // TestDuration for TestCase can be QUICK, EXTENSIVE or TAKES_FOREVER
460  AddTestCase (new OcbWifiMacTestCase, TestCase::QUICK);
461 }
462 
463 // Do not forget to allocate an instance of this TestSuite
465 
uint32_t AddApplication(Ptr< Application > application)
Associate an Application to this Node.
Definition: node.cc:157
helps to create wifi 802.11p objects of WifiNetDevice class
void SetStopTime(Time stop)
Specify application stop time.
Definition: application.cc:75
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Ptr< T > Get(void) const
Definition: pointer.h:194
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
void SetLocal(PacketSocketAddress addr)
set the local address and protocol to be used
static void AdvancePosition(Ptr< Node > node)
Definition: wifi-ap.cc:96
void MacAssoc(std::string context, Mac48Address bssid)
MAC associate function.
Ptr< YansWifiChannel > Create(void) const
void SetRemoteStationManager(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
Definition: wifi-helper.cc:719
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:459
Hold variables of type string.
Definition: string.h:41
Make it easy to create and manage PHY objects for the yans model.
A suite of tests to run.
Definition: test.h:1342
Address GetAddress(void) const
an address for a packet socket
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:67
Vector GetPosition(void) const
OFDM PHY for the 5 GHz band (Clause 17 with 10 MHz channel bandwidth)
void ConfigureOcbMode(Ptr< Node > static_node, Ptr< Node > mobile_node)
Configure OCB mode function.
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:719
encapsulates test code
Definition: test.h:1155
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
Definition: dca-txop.cc:228
static OcbTestSuite ocbTestSuite
the test suite
void PhyTxTrace(std::string context, Ptr< const Packet > packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower)
Phy transmit trace function.
helps to create WifiNetDevice objects
Definition: wifi-helper.h:213
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:97
Give ns3::PacketSocket powers to ns3::Node.
void SetSingleDevice(uint32_t device)
Set the address to match only a specified NetDevice.
Vector macassoc_pos
MAC associate position.
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
Definition: wifi-preamble.h:30
Keep track of the current position and velocity of an object.
void SetChannel(Ptr< YansWifiChannel > channel)
This queue contains packets for a particular access class.
Definition: edca-txop-n.h:68
tuple mobility
Definition: third.py:101
Time phyrx_time
Phy receive time.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
Vector3D Vector
Definition: vector.h:217
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:168
virtual ~OcbWifiMacTestCase(void)
virtual void SetStandard(enum WifiPhyStandard standard)
Definition: wifi-helper.cc:742
Vector GetCurrentPosition(uint32_t i)
Get current position function.
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer::Iterator first, NodeContainer::Iterator last) const
Definition: wifi-helper.cc:748
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
Definition: node.cc:142
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1489
void PhyRxOkTrace(std::string context, Ptr< const Packet > packet, double snr, WifiMode mode, enum WifiPreamble preamble)
Definition: wifi-ap.cc:49
void PhyRxOkTrace(std::string context, Ptr< const Packet > packet, double snr, WifiMode mode, enum WifiPreamble preamble)
Phy receive ok trace function.
tuple mac
Definition: third.py:92
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:843
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer.
Definition: packet.cc:277
void AdvancePosition(Ptr< Node > node)
Advance position function.
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &macHelper, NodeContainer c) const
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void SetPhysicalAddress(const Address address)
Set the destination address.
keep track of a set of node pointers.
Hold objects of type Ptr.
Definition: pointer.h:36
void PhyTxTrace(std::string context, Ptr< const Packet > packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower)
Definition: wifi-ap.cc:65
void PostDeviceConfiguration(Ptr< Node > static_node, Ptr< Node > mobile_node)
Post device configuration function.
virtual void DoRun(void)
static-node:0 <-— mobile-node:1
an EUI-48 address
Definition: mac48-address.h:43
tuple ssid
Definition: third.py:93
manage and create wifi channel objects for the yans model.
void Install(Ptr< Node > node) const
Aggregate an instance of a ns3::PacketSocketFactory onto the provided node.
void GetAttribute(std::string name, AttributeValue &value) const
Get the value of an attribute, raising fatal errors if unsuccessful.
Definition: object-base.cc:223
create MAC layers for a ns3::WifiNetDevice.
Nqos Wave Mac Helper class.
Time phytx_time
Phy transmit time.
void SetPosition(const Vector &position)
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:35
virtual void SetType(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue(), std::string n10="", const AttributeValue &v10=EmptyAttributeValue())
int64_t GetNanoSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Definition: nstime.h:353
static void AssignWifiRandomStreams(Ptr< WifiMac > mac, int64_t stream)
Helper class used to assign positions and mobility models to nodes.
void ConfigureApStaMode(Ptr< Node > static_node, Ptr< Node > mobile_node)
Configure AP STA mode function.
Vector phytx_pos
Phy transmit position.
bool IsData(void) const
Return true if the Type is DATA.
void SetRemote(PacketSocketAddress addr)
set the remote address and protocol to be used
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:993
AttributeValue implementation for Ssid.
Definition: ssid.h:117
Ocb Wifi Mac Test Case.
void SetProtocol(uint16_t protocol)
Set the protocol.
NodeContainer nodes
the nodes
Ptr< WifiMac > GetMac(void) const
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:365
Vector phyrx_pos
Phy receive position.
tuple wifi
Definition: third.py:89
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ocb Test Suite.
void PreRandomConfiguration(void)
Pre random configuration function.
handle packet fragmentation and retransmissions.
Definition: dca-txop.h:58
#define NS_TEST_ASSERT_MSG_GT(actual, limit, msg)
Test that an actual value is greater than a limit and report and abort if not.
Definition: test.h:997
void ConfigureAdhocMode(Ptr< Node > static_node, Ptr< Node > mobile_node)
Configure adhoc mode function.
void SetStartTime(Time start)
Specify application start time.
Definition: application.cc:69
#define NS_TEST_ASSERT_MSG_LT(actual, limit, msg)
Test that an actual value is less than a limit and report and abort if not.
Definition: test.h:811
Implements the IEEE 802.11 MAC header.
Time macassoc_time
MAC associate time.