diff --git a/src/lte/test/lte-test-rlc-am-e2e.cc b/src/lte/test/lte-test-rlc-am-e2e.cc index 03306f0ee..26546a464 100644 --- a/src/lte/test/lte-test-rlc-am-e2e.cc +++ b/src/lte/test/lte-test-rlc-am-e2e.cc @@ -28,7 +28,6 @@ #include "ns3/lte-simple-helper.h" #include "ns3/error-model.h" - #include "ns3/radio-bearer-stats-calculator.h" #include "ns3/lte-rlc-header.h" @@ -58,11 +57,8 @@ LteRlcAmE2eTestSuite::LteRlcAmE2eTestSuite () { // NS_LOG_INFO ("Creating LteRlcAmE2eTestSuite"); -// double losses[] = {0.0, 0.10, 0.25, 0.50, 0.75, 0.90, 1.00}; -// uint32_t seeds[] = {1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 10101}; - - double losses[] = {0.10}; - uint32_t seeds[] = {1111}; + double losses[] = {0.0, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95}; + uint32_t seeds[] = {1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 10101}; for ( uint32_t l = 0 ; l < (sizeof (losses) / sizeof (double)) ; l++ ) { @@ -90,10 +86,8 @@ LteRlcAmE2eTestCase::LteRlcAmE2eTestCase (std::string name, uint32_t seed, doubl m_seed = seed; m_losses = losses; -// m_enbCount = 0; -// m_ueCount = 0; - m_enbDrops = 0; - m_ueDrops = 0; + m_dlDrops = 0; + m_ulDrops = 0; } LteRlcAmE2eTestCase::~LteRlcAmE2eTestCase () @@ -101,69 +95,44 @@ LteRlcAmE2eTestCase::~LteRlcAmE2eTestCase () } -// bool -// LteRlcAmE2eTestCase::EnbReceive (Ptr nd, Ptr p, uint16_t protocol, const Address& addr) -// { -// NS_LOG_FUNCTION (this); -// m_enbCount++; -// return true; -// } -// -// bool -// LteRlcAmE2eTestCase::UeReceive (Ptr nd, Ptr p, uint16_t protocol, const Address& addr) -// { -// NS_LOG_FUNCTION (this); -// m_ueCount++; -// return true; -// } - void -LteRlcAmE2eTestCase::EnbDropEvent (Ptr p) +LteRlcAmE2eTestCase::DlDropEvent (Ptr p) { // NS_LOG_FUNCTION (this); - m_enbDrops++; + m_dlDrops++; } void -LteRlcAmE2eTestCase::UeDropEvent (Ptr p) +LteRlcAmE2eTestCase::UlDropEvent (Ptr p) { // NS_LOG_FUNCTION (this); - m_ueDrops++; + m_ulDrops++; } void LteRlcAmE2eTestCase::DoRun (void) { uint16_t numberOfNodes = 1; - // uint16_t rnti = 1111; - // uint8_t lcid = 222; - - Packet::EnablePrinting (); LogLevel level = (LogLevel) (LOG_LEVEL_ALL | LOG_PREFIX_TIME | LOG_PREFIX_NODE | LOG_PREFIX_FUNC); LogComponentEnable ("LteRlcAmE2eTest", level); - // LogComponentEnable ("Config", level); - // LogComponentEnable ("NodeList", level); - // LogComponentEnable ("ChannelList", level); // LogComponentEnable ("ErrorModel", level); - LogComponentEnable ("SimpleChannel", level); - LogComponentEnable ("SimpleNetDevice", level); - LogComponentEnable ("LteTestEntities", level); - LogComponentEnable ("LtePdcp", level); - LogComponentEnable ("LteRlc", level); - LogComponentEnable ("LteRlcUm", level); - LogComponentEnable ("LteRlcAm", level); + // LogComponentEnable ("LteSimpleHelper", level); + // LogComponentEnable ("LteSimpleNetDevice", level); + // LogComponentEnable ("SimpleNetDevice", level); + // LogComponentEnable ("SimpleChannel", level); + // LogComponentEnable ("LteTestEntities", level); + // LogComponentEnable ("LtePdcp", level); + // LogComponentEnable ("LteRlc", level); + // LogComponentEnable ("LteRlcUm", level); + // LogComponentEnable ("LteRlcAm", level); SeedManager::SetSeed (m_seed); - ConfigStore inputConfig; - inputConfig.ConfigureDefaults(); - Ptr lteSimpleHelper = CreateObject (); // lteSimpleHelper->EnableLogComponents (); // lteSimpleHelper->EnableTraces (); - // lteSimpleHelper->SetAttribute ("EpsBearerToRlcMapping", StringValue ("RlcUmAlways")); lteSimpleHelper->SetAttribute ("RlcEntity", StringValue ("RlcAm")); // eNB and UE nodes @@ -177,6 +146,7 @@ LteRlcAmE2eTestCase::DoRun (void) NetDeviceContainer ueLteDevs = lteSimpleHelper->InstallUeDevice (ueNodes); // Note: Just one eNB and UE is supported. Everything is done in InstallEnbDevice and InstallUeDevice + // Attach one UE per eNodeB // for (uint16_t i = 0; i < numberOfNodes; i++) // { @@ -186,128 +156,61 @@ LteRlcAmE2eTestCase::DoRun (void) // lteSimpleHelper->ActivateEpsBearer (ueLteDevs, EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT), EpcTft::Default ()); - // Create transmission PDCP test entity -// Ptr txPdcp = CreateObject (); -// txPdcp->SetRnti (rnti); -// txPdcp->SetLcId (lcid); + // Error models: downlink and uplink + Ptr dlEm = CreateObjectWithAttributes ("RanVar", RandomVariableValue (UniformVariable (0.0, 1.0))); + dlEm->SetAttribute ("ErrorRate", DoubleValue (m_losses)); + dlEm->SetAttribute ("ErrorUnit", StringValue ("EU_PKT")); - // Create transmission AM RLC entity -// Ptr txRlc = CreateObject (); -// txRlc->SetRnti (rnti); -// txRlc->SetLcId (lcid); - - // Create loopback MAC test entities -// Ptr txMac = CreateObject (); -// Ptr rxMac = CreateObject (); -// txMac->SetPdcpHeaderPresent (true); -// txMac->SetTxOpportunityMode (LteTestMac::AUTOMATIC_MODE); -// rxMac->SetPdcpHeaderPresent (true); -// rxMac->SetTxOpportunityMode (LteTestMac::AUTOMATIC_MODE); - - // Create reception AM RLC entity -// Ptr rxRlc = CreateObject (); -// rxRlc->SetRnti (rnti); -// rxRlc->SetLcId (lcid); - - // Create reception PDCP test entity -// Ptr rxPdcp = CreateObject (); -// rxPdcp->SetRnti (rnti); -// rxPdcp->SetLcId (lcid); - - // Connect SAPs: PDCP (TX) <-> RLC (Tx) <-> MAC <--> MAC <-> RLC (Rx) <-> PDCP (Rx) -// txPdcp->SetLteRlcSapProvider (txRlc->GetLteRlcSapProvider ()); -// txRlc->SetLteRlcSapUser (txPdcp->GetLteRlcSapUser ()); - -// txRlc->SetLteMacSapProvider (txMac->GetLteMacSapProvider ()); -// txMac->SetLteMacSapUser (txRlc->GetLteMacSapUser ()); // TODO ??? - -// txMac->SetLteMacLoopback (rxMac); -// rxMac->SetLteMacLoopback (txMac); - -// rxRlc->SetLteMacSapProvider (rxMac->GetLteMacSapProvider ()); -// rxMac->SetLteMacSapUser (rxRlc->GetLteMacSapUser ()); // TODO ??? - -// rxPdcp->SetLteRlcSapProvider (rxRlc->GetLteRlcSapProvider ()); -// rxRlc->SetLteRlcSapUser (rxPdcp->GetLteRlcSapUser ()); - -// ConfigStore inputConfig; -// inputConfig.ConfigureDefaults(); - -// GtkConfigStore config; -// config.ConfigureAttributes(); - - -// Ptr dev = CreateObject (n, phy, mac, sched, rrc); -// phy->SetDevice (dev); -// dlPhy->SetDevice (dev); -// ulPhy->SetDevice (dev); - -// n->AddDevice (dev); -// ulPhy->SetGenericPhyRxEndOkCallback (MakeCallback (&LteEnbPhy::PhyPduReceived, phy)); -// -// dev->Start (); -// return dev; - - - // Note: These callbacks are already set in the LteSimpleHelper, the receive callback is in the MAC -// enbLteDevs.Get (0)->SetReceiveCallback (MakeCallback (&LteRlcAmE2eTestCase::EnbReceive, this)); -// ueLteDevs.Get (0)->SetReceiveCallback (MakeCallback (&LteRlcAmE2eTestCase::UeReceive, this)); - - Ptr enbEm = CreateObjectWithAttributes ("RanVar", RandomVariableValue (UniformVariable (0.0, 1.0))); - enbEm->SetAttribute ("ErrorRate", DoubleValue (m_losses)); - enbEm->SetAttribute ("ErrorUnit", StringValue ("EU_PKT")); - - Ptr ueEm = CreateObjectWithAttributes ("RanVar", RandomVariableValue (UniformVariable (0.0, 1.0))); - ueEm->SetAttribute ("ErrorRate", DoubleValue (m_losses)); - ueEm->SetAttribute ("ErrorUnit", StringValue ("EU_PKT")); +// Ptr ueEm = CreateObjectWithAttributes ("RanVar", RandomVariableValue (UniformVariable (0.0, 1.0))); +// ueEm->SetAttribute ("ErrorRate", DoubleValue (m_losses)); +// ueEm->SetAttribute ("ErrorUnit", StringValue ("EU_PKT")); // The below hooks will cause drops and receptions to be counted - enbLteDevs.Get (0)->SetAttribute ("ReceiveErrorModel", PointerValue (enbEm)); - enbLteDevs.Get (0)->TraceConnectWithoutContext ("PhyRxDrop", MakeCallback (&LteRlcAmE2eTestCase::EnbDropEvent, this)); - ueLteDevs.Get (0)->SetAttribute ("ReceiveErrorModel", PointerValue (ueEm)); - ueLteDevs.Get (0)->TraceConnectWithoutContext ("PhyRxDrop", MakeCallback (&LteRlcAmE2eTestCase::UeDropEvent, this)); + ueLteDevs.Get (0)->SetAttribute ("ReceiveErrorModel", PointerValue (dlEm)); + ueLteDevs.Get (0)->TraceConnectWithoutContext ("PhyRxDrop", MakeCallback (&LteRlcAmE2eTestCase::DlDropEvent, this)); +// enbLteDevs.Get (0)->SetAttribute ("ReceiveErrorModel", PointerValue (enbEm)); +// enbLteDevs.Get (0)->TraceConnectWithoutContext ("PhyRxDrop", MakeCallback (&LteRlcAmE2eTestCase::EnbDropEvent, this)); + // Sending packets from RRC layer lteSimpleHelper->m_enbRrc->SetArrivalTime (Seconds (0.010)); lteSimpleHelper->m_enbRrc->SetPduSize (100); + // MAC sends transmission opportunities (TxOpp) lteSimpleHelper->m_enbMac->SetTxOppSize (150); lteSimpleHelper->m_enbMac->SetTxOppTime (Seconds (0.005)); lteSimpleHelper->m_enbMac->SetTxOpportunityMode (LteTestMac::RANDOM_MODE); + // MAC sends transmission opportunities (TxOpp) + lteSimpleHelper->m_ueMac->SetTxOppSize (140); + lteSimpleHelper->m_ueMac->SetTxOppTime (Seconds (0.015)); + lteSimpleHelper->m_ueMac->SetTxOpportunityMode (LteTestMac::RANDOM_MODE); + + // Start/Stop pseudo-application at RRC layer Simulator::Schedule (Seconds (0.100), &LteTestRrc::Start, lteSimpleHelper->m_enbRrc); -// FAIL Simulator::Schedule (Seconds (20.100), &LteTestRrc::Stop, lteSimpleHelper->m_enbRrc); -// FAIL Simulator::Schedule (Seconds (10.100), &LteTestRrc::Stop, lteSimpleHelper->m_enbRrc); Simulator::Schedule (Seconds (1.100), &LteTestRrc::Stop, lteSimpleHelper->m_enbRrc); - Simulator::Stop (Seconds (2.000)); + Simulator::Stop (Seconds (15.000)); Simulator::Run (); - uint32_t txRrcPdus = lteSimpleHelper->m_enbRrc->GetTxPdus (); -// uint32_t txMacPdus = lteSimpleHelper->m_enbMac->GetTxPdus (); -// uint32_t txBytes = lteSimpleHelper->m_enbRrc->GetTxBytes (); - uint32_t rxRrcPdus = lteSimpleHelper->m_ueRrc->GetRxPdus (); -// uint32_t rxMacPdus = lteSimpleHelper->m_ueMac->GetRxPdus (); -// uint32_t rxBytes = lteSimpleHelper->m_ueRrc->GetRxBytes (); + uint32_t txEnbRrcPdus = lteSimpleHelper->m_enbRrc->GetTxPdus (); + uint32_t rxUeRrcPdus = lteSimpleHelper->m_ueRrc->GetRxPdus (); + // NS_LOG_INFO ("Seed = " << m_seed); + // NS_LOG_INFO ("Losses (%) = " << uint32_t (m_losses * 100)); -// NS_LOG_INFO ("Seed = " << m_seed); -// NS_LOG_INFO ("Losses (%) = " << uint32_t (m_losses * 100)); + // NS_LOG_INFO ("dl dev drops = " << m_dlDrops); + // NS_LOG_INFO ("ul dev drops = " << m_ulDrops); -// NS_LOG_INFO ("eNB dev drops = " << m_enbDrops); -// NS_LOG_INFO ("UE dev drops = " << m_ueDrops); -// NS_LOG_INFO ("eNB dev count = " << m_enbCount); -// NS_LOG_INFO ("UE dev count = " << m_ueCount); + // NS_LOG_INFO ("eNB tx RRC count = " << txEnbRrcPdus); + // NS_LOG_INFO ("eNB rx RRC count = " << rxEnbRrcPdus); + // NS_LOG_INFO ("UE tx RRC count = " << txUeRrcPdus); + // NS_LOG_INFO ("UE rx RRC count = " << rxUeRrcPdus); -// NS_LOG_INFO ("eNB tx RRC count = " << txRrcPdus); -// NS_LOG_INFO ("eNB tx MAC count = " << txMacPdus); -// NS_LOG_INFO ("UE rx RRC count = " << rxRrcPdus); -// NS_LOG_INFO ("UE rx MAC count = " << rxMacPdus); + NS_LOG_INFO (m_seed << "\t" << m_losses << "\t" << txEnbRrcPdus << "\t" << rxUeRrcPdus << "\t" << m_dlDrops); - NS_LOG_INFO (m_seed << "\t" << m_losses << "\t" << txRrcPdus << "\t" << rxRrcPdus << "\t" << m_ueDrops); - - NS_TEST_ASSERT_MSG_EQ (txRrcPdus, rxRrcPdus, - "TX PDUs (" << txRrcPdus << ") != RX PDUs (" << rxRrcPdus << ")"); + NS_TEST_ASSERT_MSG_EQ (txEnbRrcPdus, rxUeRrcPdus, + "TX PDUs (" << txEnbRrcPdus << ") != RX PDUs (" << rxUeRrcPdus << ")"); Simulator::Destroy (); } diff --git a/src/lte/test/lte-test-rlc-am-e2e.h b/src/lte/test/lte-test-rlc-am-e2e.h index 3070b43ca..eb4ad2f2e 100644 --- a/src/lte/test/lte-test-rlc-am-e2e.h +++ b/src/lte/test/lte-test-rlc-am-e2e.h @@ -47,11 +47,11 @@ class LteRlcAmE2eTestCase : public TestCase private: virtual void DoRun (void); - void EnbDropEvent (Ptr p); - void UeDropEvent (Ptr p); + void DlDropEvent (Ptr p); + void UlDropEvent (Ptr p); - uint32_t m_enbDrops; - uint32_t m_ueDrops; + uint32_t m_dlDrops; + uint32_t m_ulDrops; uint32_t m_seed; double m_losses;