21 #include "ns3/simulator.h"
24 #include "ns3/lte-rlc-header.h"
25 #include "ns3/lte-rlc-am-header.h"
26 #include "ns3/lte-pdcp-header.h"
28 #include "lte-test-entities.h"
38 LteTestRrc::GetTypeId (
void)
40 static TypeId tid = TypeId (
"ns3::LteTestRrc")
42 .AddConstructor<LteTestRrc> ()
48 LteTestRrc::LteTestRrc ()
56 m_txLastTime = Time (0);
57 m_rxLastTime = Time (0);;
59 m_pdcpSapUser =
new LtePdcpSpecificLtePdcpSapUser<LteTestRrc> (
this);
63 LteTestRrc::~LteTestRrc ()
78 m_pdcpSapProvider = s;
89 LteTestRrc::GetDataReceived (
void)
92 return m_receivedData;
97 LteTestRrc::GetTxPdus (
void)
104 LteTestRrc::GetTxBytes (
void)
111 LteTestRrc::GetRxPdus (
void)
118 LteTestRrc::GetRxBytes (
void)
125 LteTestRrc::GetTxLastTime (
void)
132 LteTestRrc::GetRxLastTime (
void)
140 LteTestRrc::SetArrivalTime (Time arrivalTime)
143 m_arrivalTime = arrivalTime;
147 LteTestRrc::SetPduSize (uint32_t pduSize)
165 uint32_t dataLen = p->
GetSize ();
166 uint8_t *buf =
new uint8_t[dataLen];
170 m_rxBytes += dataLen;
173 p->CopyData (buf, dataLen);
174 m_receivedData = std::string ((
char *)buf, dataLen);
189 NS_ASSERT_MSG (m_arrivalTime != 0,
"Arrival time must be different from 0");
193 m_txBytes += m_pduSize;
199 p.
pdcpSdu = Create<Packet> (m_pduSize);
214 LteTestRrc::SendData (Time at, std::string dataToSend)
220 m_txBytes += dataToSend.length ();
222 LtePdcpSapProvider::TransmitPdcpSduParameters p;
226 NS_LOG_LOGIC (
"Data(" << dataToSend.length () <<
") = " << dataToSend.data ());
227 p.pdcpSdu = Create<Packet> ((uint8_t *) dataToSend.data (), dataToSend.length ());
229 NS_LOG_LOGIC (
"Packet(" << p.pdcpSdu->GetSize () <<
")");
236 LteTestPdcp::GetTypeId (
void)
238 static TypeId tid = TypeId (
"ns3::LteTestPdcp")
239 .SetParent<Object> ()
240 .AddConstructor<LteTestPdcp> ()
246 LteTestPdcp::LteTestPdcp ()
249 m_rlcSapUser =
new LteRlcSpecificLteRlcSapUser<LteTestPdcp> (
this);
253 LteTestPdcp::~LteTestPdcp ()
268 m_rlcSapProvider = s;
279 LteTestPdcp::GetDataReceived (
void)
283 return m_receivedData;
297 uint32_t dataLen = p->
GetSize ();
298 uint8_t *buf =
new uint8_t[dataLen];
300 m_receivedData = std::string ((
char *)buf, dataLen);
318 LteTestPdcp::SendData (
Time time, std::string dataToSend)
326 NS_LOG_LOGIC (
"Data(" << dataToSend.length () <<
") = " << dataToSend.data ());
327 p.pdcpPdu = Create<Packet> ((uint8_t *) dataToSend.data (), dataToSend.length ());
329 NS_LOG_LOGIC (
"Packet(" << p.pdcpPdu->GetSize () <<
")");
336 LteTestMac::GetTypeId (
void)
338 static TypeId tid = TypeId (
"ns3::LteTestMac")
339 .SetParent<Object> ()
340 .AddConstructor<LteTestMac> ()
346 LteTestMac::LteTestMac ()
350 m_macSapProvider =
new EnbMacMemberLteMacSapProvider<LteTestMac> (
this);
353 m_pdcpHeaderPresent =
false;
354 m_rlcHeaderType = UM_RLC_HEADER;
355 m_txOpportunityMode = MANUAL_MODE;
370 LteTestMac::~LteTestMac ()
379 delete m_macSapProvider;
403 return m_macSapProvider;
413 LteTestMac::GetDataReceived (
void)
416 return m_receivedData;
421 LteTestMac::GetTxPdus (
void)
428 LteTestMac::GetTxBytes (
void)
435 LteTestMac::GetRxPdus (
void)
442 LteTestMac::GetRxBytes (
void)
450 LteTestMac::SendTxOpportunity (Time time, uint32_t bytes)
454 if (m_txOpportunityMode == RANDOM_MODE)
456 if (m_txOppTime !=
Seconds (0))
458 Simulator::Schedule (m_txOppTime, &LteTestMac::SendTxOpportunity,
this, m_txOppTime, m_txOppSize);
464 LteTestMac::SetPdcpHeaderPresent (
bool present)
467 m_pdcpHeaderPresent = present;
471 LteTestMac::SetRlcHeaderType (uint8_t rlcHeaderType)
474 m_rlcHeaderType = rlcHeaderType;
478 LteTestMac::SetTxOpportunityMode (uint8_t mode)
481 m_txOpportunityMode = mode;
483 if (m_txOpportunityMode == RANDOM_MODE)
485 if (m_txOppTime !=
Seconds (0.0))
487 SendTxOpportunity (m_txOppTime, m_txOppSize);
493 LteTestMac::SetTxOppTime (Time txOppTime)
496 m_txOppTime = txOppTime;
500 LteTestMac::SetTxOppSize (uint32_t txOppSize)
503 m_txOppSize = txOppSize;
521 m_device->Send (params.
pdu, m_device->GetBroadcast (), 0);
523 else if (m_macLoopback)
526 m_macLoopback->m_macSapUser, params.
pdu);
532 if (m_rlcHeaderType == AM_RLC_HEADER)
548 if (m_pdcpHeaderPresent)
556 uint8_t *buf =
new uint8_t[dataLen];
558 m_receivedData = std::string ((
char *)buf, dataLen);
560 NS_LOG_LOGIC (
"Data (" << dataLen <<
") = " << m_receivedData);
570 if (m_txOpportunityMode == AUTOMATIC_MODE)
592 LteTestMac::Receive (Ptr<NetDevice> nd, Ptr<const Packet> p, uint16_t protocol,
const Address& addr)
597 m_rxBytes += p->GetSize ();
599 Ptr<Packet> packet = p->Copy ();
611 NS_OBJECT_ENSURE_REGISTERED (EpcTestRrc);
613 EpcTestRrc::EpcTestRrc ()
614 : m_s1SapProvider (0)
617 m_s1SapUser =
new MemberEpcEnbS1SapUser<EpcTestRrc> (
this);
621 EpcTestRrc::~EpcTestRrc ()
635 EpcTestRrc::GetTypeId (
void)
640 .AddConstructor<EpcTestRrc> ()
664 EpcTestRrc::DoPathSwitchRequestAcknowledge (EpcEnbS1SapUser::PathSwitchRequestAcknowledgeParameters params)
uint32_t RemoveHeader(Header &header)
#define NS_LOG_FUNCTION(parameters)
virtual void DoDispose(void)
#define NS_LOG_COMPONENT_DEFINE(name)
virtual void NotifyTxOpportunity(uint32_t bytes, uint8_t layer, uint8_t harqId)=0
uint32_t GetSize(void) const
virtual void DoDispose(void)
void SetLteMacLoopback(Ptr< LteTestMac > s)
Set the other side of the MAC Loopback.
virtual void DoReceivePdcpSdu(LtePdcpSapUser::ReceivePdcpSduParameters params)
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
virtual void TransmitPdcpPdu(TransmitPdcpPduParameters params)=0
void SetLteMacSapUser(LteMacSapUser *s)
Set the MAC SAP user.
LtePdcpSapUser * GetLtePdcpSapUser(void)
Get the PDCP SAP user.
void SetLteRlcSapProvider(LteRlcSapProvider *s)
Set the RLC SAP provider.
void SetS1SapProvider(EpcEnbS1SapProvider *s)
#define NS_LOG_LOGIC(msg)
EpcEnbS1SapUser * GetS1SapUser()
LteMacSapProvider * GetLteMacSapProvider(void)
Get the MAC SAP provider.
virtual void DoDispose(void)
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
virtual void TransmitPdcpSdu(TransmitPdcpSduParameters params)=0
virtual void DoDispose(void)
#define NS_ASSERT_MSG(condition, message)
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
virtual void ReceivePdu(Ptr< Packet > p)=0
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
void DoTransmitPdu(LteMacSapProvider::TransmitPduParameters)
a base class which provides memory management and object aggregation
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
virtual void DoReceivePdcpPdu(Ptr< Packet > p)
void SetLtePdcpSapProvider(LtePdcpSapProvider *s)
Set the PDCP SAP provider.
LteRlcSapUser * GetLteRlcSapUser(void)
Get the RLC SAP user.