21 #include "ns3/config.h"
22 #include "ns3/simulator.h"
23 #include "ns3/pointer.h"
25 #include "ns3/packet.h"
26 #include "ns3/node-container.h"
27 #include "ns3/net-device-container.h"
28 #include "ns3/error-model.h"
29 #include "ns3/rng-seed-manager.h"
30 #include "ns3/radio-bearer-stats-calculator.h"
31 #include "ns3/lte-rlc-header.h"
32 #include "ns3/lte-rlc-um.h"
56 double losses[] = {0.0, 0.10, 0.25, 0.50, 0.75, 0.90, 1.00};
57 uint32_t seeds[] = {1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 10101};
59 for ( uint32_t l = 0 ; l < (
sizeof (losses) /
sizeof (
double)) ; l++ )
61 for ( uint32_t
s = 0 ;
s < (
sizeof (seeds) /
sizeof (uint32_t)) ;
s++ )
63 std::ostringstream name;
64 name <<
" Losses = " << losses[l] <<
"%. Seed = " << seeds[
s];
68 testDuration = TestCase::QUICK;
72 testDuration = TestCase::EXTENSIVE;
120 uint16_t numberOfNodes = 1;
135 RngSeedManager::SetSeed (
m_seed);
146 enbNodes.
Create (numberOfNodes);
147 ueNodes.
Create (numberOfNodes);
173 ueLteDevs.
Get (0)->SetAttribute (
"ReceiveErrorModel",
PointerValue (dlEm));
175 enbLteDevs.
Get (0)->SetAttribute (
"ReceiveErrorModel",
PointerValue (ulEm));
180 lteSimpleHelper->
m_enbRrc->SetPduSize (100);
189 lteSimpleHelper->
m_ueRrc->SetPduSize (100);
197 Simulator::Schedule (
Seconds (0.100), &LteTestRrc::Start, lteSimpleHelper->
m_enbRrc);
198 Simulator::Schedule (
Seconds (10.100), &LteTestRrc::Stop, lteSimpleHelper->
m_enbRrc);
201 Simulator::Schedule (
Seconds (20.100), &LteTestRrc::Start, lteSimpleHelper->
m_ueRrc);
202 Simulator::Schedule (
Seconds (30.100), &LteTestRrc::Stop, lteSimpleHelper->
m_ueRrc);
205 Simulator::Stop (
Seconds (31.000));
208 uint32_t txEnbRrcPdus = lteSimpleHelper->
m_enbRrc->GetTxPdus ();
209 uint32_t rxUeRrcPdus = lteSimpleHelper->
m_ueRrc->GetRxPdus ();
211 uint32_t txUeRrcPdus = lteSimpleHelper->
m_ueRrc->GetTxPdus ();
212 uint32_t rxEnbRrcPdus = lteSimpleHelper->
m_enbRrc->GetRxPdus ();
229 "Downlink: TX PDUs (" << txEnbRrcPdus <<
") != RX PDUs (" << rxUeRrcPdus <<
") + DROPS (" <<
m_dlDrops <<
")");
231 "Uplink: TX PDUs (" << txUeRrcPdus <<
") != RX PDUs (" << rxEnbRrcPdus <<
") + DROPS (" <<
m_ulDrops <<
")");
233 Simulator::Destroy ();
Ptr< LteTestRrc > m_enbRrc
Hold variables of type string.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
static LteRlcUmE2eTestSuite lteRlcUmE2eTestSuite
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Ptr< LteTestRrc > m_ueRrc
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
void SetTxOpportunityMode(uint8_t mode)
Ptr< LteTestMac > m_ueMac
TestDuration
How long the test takes to execute.
Ptr< LteTestMac > m_enbMac
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
#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.
holds a vector of ns3::NetDevice pointers
NetDeviceContainer InstallEnbDevice(NodeContainer c)
create a set of eNB devices
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void SetTxOppTime(Time txOppTime)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
Hold objects of type Ptr.
virtual ~LteRlcUmE2eTestCase()
NetDeviceContainer InstallUeDevice(NodeContainer c)
create a set of UE devices
void UlDropEvent(Ptr< const Packet > p)
void SetTxOppSize(uint32_t txOppSize)
void DlDropEvent(Ptr< const Packet > p)
Time Seconds(double value)
Construct a Time in the indicated unit.
LteRlcUmE2eTestSuite()
Test x.x.x RLC UM: End-to-end flow.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
This class can be used to hold variables of floating point type such as 'double' or 'float'...
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Test x.x.x RLC UM: End-to-end flow.