|
289 |
|
289 |
|
290 |
//----------------------------------------------------------------------------- |
290 |
//----------------------------------------------------------------------------- |
291 |
|
291 |
|
|
|
292 |
/** |
293 |
* Make sure that when two broadcast packets are queued on the same |
294 |
* device in a short succession no virtual collision occurs |
295 |
* |
296 |
*/ |
297 |
class Bug555Test : public TestCase |
298 |
{ |
299 |
public: |
300 |
Bug555Test (); |
301 |
|
302 |
virtual bool DoRun (void); |
303 |
|
304 |
void Receive (Ptr<Packet>, double x, WifiMode mode, enum WifiPreamble preamble); |
305 |
|
306 |
private: |
307 |
void RunOne (void); |
308 |
void CreateOne (Vector pos, Ptr<YansWifiChannel> channel); |
309 |
void SendOnePacket (Ptr<WifiNetDevice> dev); |
310 |
|
311 |
ObjectFactory m_manager; |
312 |
ObjectFactory m_mac; |
313 |
ObjectFactory m_propDelay; |
314 |
|
315 |
unsigned int m_numReceivedPackets; |
316 |
}; |
317 |
|
318 |
Bug555Test::Bug555Test () |
319 |
: TestCase ("Bug555") |
320 |
{ |
321 |
} |
322 |
|
323 |
void |
324 |
Bug555Test::SendOnePacket (Ptr<WifiNetDevice> dev) |
325 |
{ |
326 |
Ptr<Packet> p = Create<Packet> (1000); |
327 |
dev->Send (p, dev->GetBroadcast (), 1); |
328 |
} |
329 |
|
330 |
bool |
331 |
Bug555Test::DoRun (void) |
332 |
{ |
333 |
m_mac.SetTypeId ("ns3::AdhocWifiMac"); |
334 |
m_propDelay.SetTypeId ("ns3::ConstantSpeedPropagationDelayModel"); |
335 |
m_manager.SetTypeId ("ns3::ConstantRateWifiManager"); |
336 |
|
337 |
Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> (); |
338 |
Ptr<PropagationDelayModel> propDelay = m_propDelay.Create<PropagationDelayModel> (); |
339 |
Ptr<PropagationLossModel> propLoss = CreateObject<RandomPropagationLossModel> (); |
340 |
channel->SetPropagationDelayModel (propDelay); |
341 |
channel->SetPropagationLossModel (propLoss); |
342 |
|
343 |
Ptr<Node> txNode = CreateObject<Node> (); |
344 |
Ptr<WifiNetDevice> txDev = CreateObject<WifiNetDevice> (); |
345 |
Ptr<WifiMac> txMac = m_mac.Create<WifiMac> (); |
346 |
txMac->ConfigureStandard (WIFI_PHY_STANDARD_80211a); |
347 |
Ptr<ConstantPositionMobilityModel> txMobility = CreateObject<ConstantPositionMobilityModel> (); |
348 |
Ptr<YansWifiPhy> txPhy = CreateObject<YansWifiPhy> (); |
349 |
Ptr<ErrorRateModel> txError = CreateObject<YansErrorRateModel> (); |
350 |
txPhy->SetErrorRateModel (txError); |
351 |
txPhy->SetChannel (channel); |
352 |
txPhy->SetDevice (txDev); |
353 |
txPhy->SetMobility (txNode); |
354 |
txPhy->ConfigureStandard (WIFI_PHY_STANDARD_80211a); |
355 |
|
356 |
txMobility->SetPosition (Vector (0.0, 0.0, 0.0)); |
357 |
txNode->AggregateObject (txMobility); |
358 |
txMac->SetAddress (Mac48Address::Allocate ()); |
359 |
txDev->SetMac (txMac); |
360 |
txDev->SetPhy (txPhy); |
361 |
txDev->SetRemoteStationManager (m_manager.Create<WifiRemoteStationManager> ()); |
362 |
txNode->AddDevice (txDev); |
363 |
|
364 |
|
365 |
Ptr<Node> rxNode = CreateObject<Node> (); |
366 |
Ptr<WifiNetDevice> rxDev = CreateObject<WifiNetDevice> (); |
367 |
Ptr<WifiMac> rxMac = m_mac.Create<WifiMac> (); |
368 |
rxMac->ConfigureStandard (WIFI_PHY_STANDARD_80211a); |
369 |
Ptr<ConstantPositionMobilityModel> rxMobility = CreateObject<ConstantPositionMobilityModel> (); |
370 |
Ptr<YansWifiPhy> rxPhy = CreateObject<YansWifiPhy> (); |
371 |
Ptr<ErrorRateModel> rxError = CreateObject<YansErrorRateModel> (); |
372 |
rxPhy->SetErrorRateModel (rxError); |
373 |
rxPhy->SetChannel (channel); |
374 |
rxPhy->SetDevice (rxDev); |
375 |
rxPhy->SetMobility (rxNode); |
376 |
rxPhy->ConfigureStandard (WIFI_PHY_STANDARD_80211a); |
377 |
Ptr<WifiRemoteStationManager> manager = m_manager.Create<WifiRemoteStationManager> (); |
378 |
rxMobility->SetPosition (Vector (0.0, 0.0, 0.0)); |
379 |
rxNode->AggregateObject (rxMobility); |
380 |
rxMac->SetAddress (Mac48Address::Allocate ()); |
381 |
rxDev->SetMac (rxMac); |
382 |
rxDev->SetPhy (rxPhy); |
383 |
rxDev->SetRemoteStationManager (m_manager.Create<WifiRemoteStationManager> ()); |
384 |
rxNode->AddDevice (rxDev); |
385 |
|
386 |
|
387 |
rxPhy->SetReceiveOkCallback (MakeCallback (&Bug555Test::Receive, this)); |
388 |
|
389 |
m_numReceivedPackets = 0; |
390 |
Simulator::Schedule (Seconds (1.000000), &Bug555Test::SendOnePacket, this, txDev); |
391 |
Simulator::Schedule (Seconds (1.000040), &Bug555Test::SendOnePacket, this, txDev); |
392 |
|
393 |
Simulator::Stop (Seconds (10.0)); |
394 |
Simulator::Run (); |
395 |
Simulator::Destroy (); |
396 |
|
397 |
return (m_numReceivedPackets != 2); |
398 |
} |
399 |
|
400 |
void |
401 |
Bug555Test:: Receive (Ptr<Packet>, double x, WifiMode mode, enum WifiPreamble preamble) |
402 |
{ |
403 |
++m_numReceivedPackets; |
404 |
} |
405 |
|
406 |
|
407 |
//----------------------------------------------------------------------------- |
408 |
|
292 |
class WifiTestSuite : public TestSuite |
409 |
class WifiTestSuite : public TestSuite |
293 |
{ |
410 |
{ |
294 |
public: |
411 |
public: |
|
301 |
AddTestCase (new WifiTest); |
418 |
AddTestCase (new WifiTest); |
302 |
AddTestCase (new QosUtilsIsOldPacketTest); |
419 |
AddTestCase (new QosUtilsIsOldPacketTest); |
303 |
AddTestCase (new InterferenceHelperSequenceTest); // Bug 991 |
420 |
AddTestCase (new InterferenceHelperSequenceTest); // Bug 991 |
|
|
421 |
AddTestCase (new Bug555Test); |
304 |
} |
422 |
} |
305 |
|
423 |
|
306 |
WifiTestSuite g_wifiTestSuite; |
424 |
WifiTestSuite g_wifiTestSuite; |