Tweaks to the collision tests
This commit is contained in:
@@ -90,6 +90,11 @@ MAC
|
||||
###
|
||||
|
||||
The MAC at present implements the unslotted CSMA/CA variant, without beaconing.
|
||||
|
||||
The implemented MAC is similar to Contiki's NullMAC, i.e., a MAC without sleep
|
||||
features. The radio is assiumed to be always active (receiving or transmitting).
|
||||
Moreover, frame reception is disabled while performing the CCA.
|
||||
|
||||
The main API supported is the data transfer API
|
||||
(McpsDataRequest/Indication/Confirm). CSMA/CA according to Stc 802.15.4-2006,
|
||||
section 7.5.1.4 is supported. Frame reception and rejection
|
||||
|
||||
@@ -180,7 +180,7 @@ LrWpanNetDevice::SetChannel (Ptr<SpectrumChannel> channel)
|
||||
Ptr<LrWpanMac>
|
||||
LrWpanNetDevice::GetMac (void) const
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
// NS_LOG_FUNCTION (this);
|
||||
return m_mac;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "lr-wpan-spectrum-signal-parameters.h"
|
||||
#include "lr-wpan-spectrum-value-helper.h"
|
||||
#include "lr-wpan-error-model.h"
|
||||
#include "lr-wpan-net-device.h"
|
||||
#include <ns3/log.h>
|
||||
#include <ns3/abort.h>
|
||||
#include <ns3/simulator.h>
|
||||
@@ -37,6 +38,10 @@
|
||||
|
||||
NS_LOG_COMPONENT_DEFINE ("LrWpanPhy");
|
||||
|
||||
#undef NS_LOG_APPEND_CONTEXT
|
||||
#define NS_LOG_APPEND_CONTEXT \
|
||||
std::clog << "[address " << DynamicCast<LrWpanNetDevice> (m_device)->GetMac ()->GetShortAddress () << "] ";
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
NS_OBJECT_ENSURE_REGISTERED (LrWpanPhy);
|
||||
@@ -251,6 +256,7 @@ LrWpanPhy::StartRx (Ptr<SpectrumSignalParameters> spectrumRxParams)
|
||||
NS_LOG_FUNCTION (this << spectrumRxParams);
|
||||
LrWpanSpectrumValueHelper psdHelper;
|
||||
|
||||
std::cout << Simulator::Now () << " StartRx " << this << std::endl;
|
||||
|
||||
Ptr<LrWpanSpectrumSignalParameters> lrWpanRxParams = DynamicCast<LrWpanSpectrumSignalParameters> (spectrumRxParams);
|
||||
NS_ASSERT (lrWpanRxParams != 0);
|
||||
@@ -325,6 +331,8 @@ LrWpanPhy::EndRx (Ptr<LrWpanSpectrumSignalParameters> params)
|
||||
NS_LOG_FUNCTION (this);
|
||||
NS_ASSERT (params != 0);
|
||||
|
||||
std::cout << Simulator::Now () << " EndRx " << this << " " << int(m_trxState) << " - ";
|
||||
|
||||
// Calculate whether packet was lost.
|
||||
LrWpanSpectrumValueHelper psdHelper;
|
||||
Ptr<LrWpanSpectrumSignalParameters> currentRxParams = m_currentRxPacket.first;
|
||||
@@ -354,8 +362,13 @@ LrWpanPhy::EndRx (Ptr<LrWpanSpectrumSignalParameters> params)
|
||||
if (m_random.GetValue () < per)
|
||||
{
|
||||
// The packet was destroyed, drop the packet after reception.
|
||||
std::cout << "discarding " << sinr << " - " << per;
|
||||
m_currentRxPacket.second = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "processing " << sinr << " - " << per;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -365,6 +378,8 @@ LrWpanPhy::EndRx (Ptr<LrWpanSpectrumSignalParameters> params)
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
// Update the interference.
|
||||
m_signal->RemoveSignal (params->psd);
|
||||
m_rxLastUpdate = Simulator::Now ();
|
||||
@@ -454,6 +469,7 @@ LrWpanPhy::PdDataRequest (const uint32_t psduLength, Ptr<Packet> p)
|
||||
Ptr<PacketBurst> pb = CreateObject<PacketBurst> ();
|
||||
pb->AddPacket (p);
|
||||
txParams->packetBurst = pb;
|
||||
std::cout << "** " << Simulator::Now () << " - StartTx " << this << std::endl;
|
||||
m_channel->StartTx (txParams);
|
||||
m_pdDataRequest = Simulator::Schedule (txParams->duration, &LrWpanPhy::EndTx, this);
|
||||
ChangeTrxState (IEEE_802_15_4_PHY_BUSY_TX);
|
||||
@@ -497,6 +513,7 @@ void
|
||||
LrWpanPhy::PlmeCcaRequest (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
if (m_trxState == IEEE_802_15_4_PHY_RX_ON || m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
|
||||
{
|
||||
//call StartRx or ED and then get updated m_rxTotalPower in EndCCA?
|
||||
@@ -578,6 +595,8 @@ LrWpanPhy::PlmeSetTRXStateRequest (LrWpanPhyEnumeration state)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << state);
|
||||
|
||||
// std::cout << Simulator::Now () << " PlmeSetTRXStateRequest " << int (state) << std::endl;
|
||||
|
||||
// Check valid states (Table 14)
|
||||
NS_ABORT_IF ( (state != IEEE_802_15_4_PHY_RX_ON)
|
||||
&& (state != IEEE_802_15_4_PHY_TRX_OFF)
|
||||
|
||||
@@ -120,9 +120,9 @@ LrWpanCollisionTestCase::DoRun (void)
|
||||
dev1->GetCsmaCa ()->SetMacMinBE (0);
|
||||
dev2->GetCsmaCa ()->SetMacMinBE (0);
|
||||
|
||||
Ptr<Packet> p0 = Create<Packet> (50);
|
||||
Ptr<Packet> p0 = Create<Packet> (20);
|
||||
Ptr<Packet> p1 = Create<Packet> (60);
|
||||
Ptr<Packet> p2 = Create<Packet> (120);
|
||||
Ptr<Packet> p2 = Create<Packet> (100);
|
||||
|
||||
McpsDataRequestParams params;
|
||||
params.m_srcAddrMode = SHORT_ADDR;
|
||||
@@ -131,77 +131,85 @@ LrWpanCollisionTestCase::DoRun (void)
|
||||
params.m_msduHandle = 0;
|
||||
// params.m_txOptions = TX_OPTION_ACK;
|
||||
|
||||
// First case: concurrent tx and no ACKs
|
||||
m_rxPackets = 0;
|
||||
params.m_dstAddr = Mac16Address ("00:02");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev0->GetMac (), params, p0);
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:01");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev1->GetMac (), params, p1);
|
||||
|
||||
Simulator::Run ();
|
||||
|
||||
NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 0, "Not received a packet (as expected)");
|
||||
|
||||
// Second case: concurrent tx and ACKs
|
||||
m_rxPackets = 0;
|
||||
params.m_txOptions = TX_OPTION_ACK;
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:02");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev0->GetMac (), params, p0);
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:01");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev1->GetMac (), params, p1);
|
||||
|
||||
Simulator::Run ();
|
||||
|
||||
NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 1, "Received a packet (as expected)");
|
||||
// // First case: concurrent tx and no ACKs
|
||||
// std::cout << "*** First test " << std::endl;
|
||||
// m_rxPackets = 0;
|
||||
// params.m_dstAddr = Mac16Address ("00:02");
|
||||
// Simulator::Schedule (Seconds (0.0),
|
||||
// &LrWpanMac::McpsDataRequest,
|
||||
// dev0->GetMac (), params, p0);
|
||||
//
|
||||
// params.m_dstAddr = Mac16Address ("00:01");
|
||||
// Simulator::Schedule (Seconds (0.0),
|
||||
// &LrWpanMac::McpsDataRequest,
|
||||
// dev1->GetMac (), params, p1);
|
||||
//
|
||||
// Simulator::Run ();
|
||||
//
|
||||
// NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 0, "Not received a packet (as expected)");
|
||||
//
|
||||
// // Second case: concurrent tx and ACKs
|
||||
// std::cout << "*** Second test " << std::endl;
|
||||
// m_rxPackets = 0;
|
||||
// params.m_txOptions = TX_OPTION_ACK;
|
||||
//
|
||||
// params.m_dstAddr = Mac16Address ("00:02");
|
||||
// Simulator::Schedule (Seconds (0.0),
|
||||
// &LrWpanMac::McpsDataRequest,
|
||||
// dev0->GetMac (), params, p0);
|
||||
//
|
||||
// params.m_dstAddr = Mac16Address ("00:01");
|
||||
// Simulator::Schedule (Seconds (0.0),
|
||||
// &LrWpanMac::McpsDataRequest,
|
||||
// dev1->GetMac (), params, p1);
|
||||
//
|
||||
// Simulator::Run ();
|
||||
//
|
||||
// NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 1, "Received a packet (as expected)");
|
||||
|
||||
// Third case: two concurrent tx and no ACKs
|
||||
std::cout << "*** Third test " << Seconds (0.0) << " " << Seconds (0.0001) << std::endl;
|
||||
m_rxPackets = 0;
|
||||
params.m_txOptions = 0;
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:01");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev1->GetMac (), params, p2);
|
||||
// LogComponentEnable("LrWpanMac",LOG_LEVEL_ALL);
|
||||
// LogComponentEnable("LrWpanPhy",LOG_LEVEL_ALL);
|
||||
// LogComponentEnableAll (LOG_PREFIX_TIME);
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:01");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
Simulator::Schedule (Seconds (0.0001),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev2->GetMac (), params, p2);
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:01");
|
||||
Simulator::Schedule (Seconds (0.0002),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev1->GetMac (), params, p0);
|
||||
|
||||
Simulator::Run ();
|
||||
|
||||
std::cout << "m_rxPackets = " << int(m_rxPackets) << std::endl;
|
||||
NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 0, "Received a packet (as expected)");
|
||||
|
||||
// Fourth case: two concurrent tx and ACKs
|
||||
m_rxPackets = 0;
|
||||
params.m_txOptions = TX_OPTION_ACK;
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:01");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev1->GetMac (), params, p0);
|
||||
|
||||
params.m_dstAddr = Mac16Address ("00:01");
|
||||
Simulator::Schedule (Seconds (0.0),
|
||||
&LrWpanMac::McpsDataRequest,
|
||||
dev2->GetMac (), params, p1);
|
||||
|
||||
Simulator::Run ();
|
||||
|
||||
std::cout << "m_rxPackets = " << int(m_rxPackets) << std::endl;
|
||||
NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 2, "Received two packets (as expected)");
|
||||
// // Fourth case: two concurrent tx and ACKs
|
||||
// std::cout << "*** Fourth test " << std::endl;
|
||||
// m_rxPackets = 0;
|
||||
// params.m_txOptions = TX_OPTION_ACK;
|
||||
//
|
||||
// params.m_dstAddr = Mac16Address ("00:01");
|
||||
// Simulator::Schedule (Seconds (0.0),
|
||||
// &LrWpanMac::McpsDataRequest,
|
||||
// dev1->GetMac (), params, p0);
|
||||
//
|
||||
// params.m_dstAddr = Mac16Address ("00:01");
|
||||
// Simulator::Schedule (Seconds (0.0),
|
||||
// &LrWpanMac::McpsDataRequest,
|
||||
// dev2->GetMac (), params, p1);
|
||||
//
|
||||
// Simulator::Run ();
|
||||
//
|
||||
// std::cout << "m_rxPackets = " << int(m_rxPackets) << std::endl;
|
||||
// NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 2, "Received two packets (as expected)");
|
||||
|
||||
Simulator::Destroy ();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user