|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
23 #include "ns3/string.h"
24 #include "ns3/nstime.h"
36 : m_firstWrite (true),
37 m_pendingOutput (false),
38 m_protocolType (
"RLC")
44 : m_firstWrite (true),
45 m_pendingOutput (false)
60 TypeId (
"ns3::RadioBearerStatsCalculator")
63 .AddAttribute (
"StartTime",
"Start time of the on going epoch.",
68 .AddAttribute (
"EpochDuration",
"Epoch duration.",
73 .AddAttribute (
"DlRlcOutputFilename",
74 "Name of the file where the downlink results will be saved.",
78 .AddAttribute (
"UlRlcOutputFilename",
79 "Name of the file where the uplink results will be saved.",
83 .AddAttribute (
"DlPdcpOutputFilename",
84 "Name of the file where the downlink results will be saved.",
88 .AddAttribute (
"UlPdcpOutputFilename",
89 "Name of the file where the uplink results will be saved.",
175 Uint64StatsMap::iterator it =
m_ulDelay.find (p);
178 NS_LOG_DEBUG (
this <<
" Creating UL stats calculators for IMSI " << p.
m_imsi <<
" and LCID " << (uint32_t) p.
m_lcId);
179 m_ulDelay[p] = CreateObject<MinMaxAvgTotalCalculator<uint64_t> > ();
180 m_ulPduSize[p] = CreateObject<MinMaxAvgTotalCalculator<uint32_t> > ();
199 Uint64StatsMap::iterator it =
m_dlDelay.find (p);
202 NS_LOG_DEBUG (
this <<
" Creating DL stats calculators for IMSI " << p.
m_imsi <<
" and LCID " << (uint32_t) p.
m_lcId);
203 m_dlDelay[p] = CreateObject<MinMaxAvgTotalCalculator<uint64_t> > ();
204 m_dlPduSize[p] = CreateObject<MinMaxAvgTotalCalculator<uint32_t> > ();
219 std::ofstream ulOutFile;
220 std::ofstream dlOutFile;
225 if (!ulOutFile.is_open ())
232 if (!dlOutFile.is_open ())
238 ulOutFile <<
"% start\tend\tCellId\tIMSI\tRNTI\tLCID\tnTxPDUs\tTxBytes\tnRxPDUs\tRxBytes\t";
239 ulOutFile <<
"delay\tstdDev\tmin\tmax\t";
240 ulOutFile <<
"PduSize\tstdDev\tmin\tmax";
241 ulOutFile << std::endl;
242 dlOutFile <<
"% start\tend\tCellId\tIMSI\tRNTI\tLCID\tnTxPDUs\tTxBytes\tnRxPDUs\tRxBytes\t";
243 dlOutFile <<
"delay\tstdDev\tmin\tmax\t";
244 dlOutFile <<
"PduSize\tstdDev\tmin\tmax";
245 dlOutFile << std::endl;
250 if (!ulOutFile.is_open ())
257 if (!dlOutFile.is_open ())
276 std::vector < ImsiLcidPair_t > pairVector;
279 if (find (pairVector.begin (), pairVector.end (), (*it).first) == pairVector.end ())
281 pairVector.push_back ((*it).first);
287 if (find (pairVector.begin (), pairVector.end (), (*it).first) == pairVector.end ())
289 pairVector.push_back ((*it).first);
294 for (std::vector<ImsiLcidPair_t>::iterator it = pairVector.begin (); it != pairVector.end (); ++it)
297 FlowIdMap::const_iterator flowIdIt =
m_flowId.find (p);
299 "FlowId (imsi " << p.
m_imsi <<
" lcid " << (uint32_t) p.
m_lcId <<
") is missing");
306 outFile << p.
m_imsi <<
"\t";
307 outFile << flowId.
m_rnti <<
"\t";
308 outFile << (uint32_t) flowId.
m_lcId <<
"\t";
314 for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
316 outFile << (*it) * 1e-9 <<
"\t";
319 for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
321 outFile << (*it) <<
"\t";
323 outFile << std::endl;
335 std::vector < ImsiLcidPair_t > pairVector;
338 if (find (pairVector.begin (), pairVector.end (), (*it).first) == pairVector.end ())
340 pairVector.push_back ((*it).first);
346 if (find (pairVector.begin (), pairVector.end (), (*it).first) == pairVector.end ())
348 pairVector.push_back ((*it).first);
353 for (std::vector<ImsiLcidPair_t>::iterator pair = pairVector.begin (); pair != pairVector.end (); ++pair)
356 FlowIdMap::const_iterator flowIdIt =
m_flowId.find (p);
358 "FlowId (imsi " << p.
m_imsi <<
" lcid " << (uint32_t) p.
m_lcId <<
") is missing");
365 outFile << p.
m_imsi <<
"\t";
366 outFile << flowId.
m_rnti <<
"\t";
367 outFile << (uint32_t) flowId.
m_lcId <<
"\t";
373 for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
375 outFile << (*it) * 1e-9 <<
"\t";
378 for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
380 outFile << (*it) <<
"\t";
382 outFile << std::endl;
464 Uint64StatsMap::iterator it =
m_ulDelay.find (p);
467 NS_LOG_ERROR (
"UL delay for " << imsi <<
" - " << (uint16_t) lcid <<
" not found");
479 std::vector<double> stats;
480 Uint64StatsMap::iterator it =
m_ulDelay.find (p);
483 stats.push_back (0.0);
484 stats.push_back (0.0);
485 stats.push_back (0.0);
486 stats.push_back (0.0);
490 stats.push_back (
m_ulDelay[p]->getMean ());
491 stats.push_back (
m_ulDelay[p]->getStddev ());
492 stats.push_back (
m_ulDelay[p]->getMin ());
493 stats.push_back (
m_ulDelay[p]->getMax ());
502 std::vector<double> stats;
503 Uint32StatsMap::iterator it =
m_ulPduSize.find (p);
506 stats.push_back (0.0);
507 stats.push_back (0.0);
508 stats.push_back (0.0);
509 stats.push_back (0.0);
573 Uint64StatsMap::iterator it =
m_dlDelay.find (p);
587 std::vector<double> stats;
588 Uint64StatsMap::iterator it =
m_dlDelay.find (p);
591 stats.push_back (0.0);
592 stats.push_back (0.0);
593 stats.push_back (0.0);
594 stats.push_back (0.0);
598 stats.push_back (
m_dlDelay[p]->getMean ());
599 stats.push_back (
m_dlDelay[p]->getStddev ());
600 stats.push_back (
m_dlDelay[p]->getMin ());
601 stats.push_back (
m_dlDelay[p]->getMax ());
610 std::vector<double> stats;
611 Uint32StatsMap::iterator it =
m_dlPduSize.find (p);
614 stats.push_back (0.0);
615 stats.push_back (0.0);
616 stats.push_back (0.0);
617 stats.push_back (0.0);
a unique identifier for an interface.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
std::vector< double > GetDlDelayStats(uint64_t imsi, uint8_t lcid)
Gets the downlink RLC to RLC statistics: average, min, max and standard deviation.
Uint64StatsMap m_ulDelay
UL delay by (IMSI, LCID) pair.
void DlRxPdu(uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
Notifies the stats calculator that an downlink reception has occurred.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
static Time Now(void)
Return the current simulation virtual time.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::string GetUlOutputFilename(void)
Get the name of the file where the uplink statistics will be stored.
void SetDlOutputFilename(std::string outputFilename)
Set the name of the file where the downlink statistics will be stored.
void WriteDlResults(std::ofstream &outFile)
Writes collected statistics to DL output file and closes DL output file.
double GetDlDelay(uint64_t imsi, uint8_t lcid)
Gets the downlink RLC to RLC delay.
uint64_t GetUlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received uplink data bytes.
Uint32Map m_ulTxPackets
Number of UL TX Packets by (IMSI, LCID) pair.
void UlTxPdu(uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize)
Notifies the stats calculator that an uplink transmission has occurred.
std::string GetUlPdcpOutputFilename(void)
Get the name of the file where the uplink PDCP statistics will be stored.
uint32_t GetDlCellId(uint64_t imsi, uint8_t lcid)
Gets the attached Enb cellId.
Uint32Map m_ulCellId
List of UL CellIds by (IMSI, LCID) pair.
void RescheduleEndEpoch()
Reschedules EndEpoch event.
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
void ShowResults(void)
Called after each epoch to write collected statistics to output files.
bool m_firstWrite
true if output files have not been opened yet
uint32_t GetUlCellId(uint64_t imsi, uint8_t lcid)
Gets the attached Enb cellId.
void EndEpoch(void)
Function called in every endEpochEvent.
Base class for ***StatsCalculator classes.
Uint32Map m_dlRxPackets
Number of DL RX Packets by (IMSI, LCID) pair.
virtual ~RadioBearerStatsCalculator()
Class destructor.
std::vector< double > GetUlDelayStats(uint64_t imsi, uint8_t lcid)
Gets the uplink RLC to RLC statistics: average, min, max and standard deviation.
Time m_startTime
Start time of the on going epoch.
std::vector< double > GetUlPduSizeStats(uint64_t imsi, uint8_t lcid)
Gets the uplink PDU size statistics: average, min, max and standard deviation.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Uint64Map m_dlRxData
Amount of DL RX Data by (IMSI, LCID) pair.
FlowIdMap m_flowId
List of FlowIds, ie.
Uint32StatsMap m_dlPduSize
DL PDU Size by (IMSI, LCID) pair.
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method.
Uint32Map m_ulRxPackets
Number of UL RX Packets by (IMSI, LCID) pair.
uint32_t GetDlRxPackets(uint64_t imsi, uint8_t lcid)
Gets the number of received downlink data bytes.
std::string GetUlOutputFilename(void)
Get the name of the file where the uplink statistics will be stored.
Simulation virtual time values and global simulation resolution.
void DlTxPdu(uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize)
Notifies the stats calculator that an downlink transmission has occurred.
uint64_t GetDlTxData(uint64_t imsi, uint8_t lcid)
Gets the number of transmitted downlink data bytes.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
void DoDispose()
Destructor implementation.
Time GetStartTime() const
Uint32StatsMap m_ulPduSize
UL PDU Size by (IMSI, LCID) pair.
std::string m_dlPdcpOutputFilename
Name of the file where the downlink PDCP statistics will be saved.
Hold variables of type string.
static TypeId GetTypeId(void)
Register this type.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
std::string GetDlOutputFilename(void)
Get the name of the file where the downlink statistics will be stored.
std::vector< double > GetDlPduSizeStats(uint64_t imsi, uint8_t lcid)
Gets the downlink PDU size statistics: average, min, max and standard deviation.
uint32_t GetDlTxPackets(uint64_t imsi, uint8_t lcid)
Gets the number of transmitted downlink data bytes.
void WriteUlResults(std::ofstream &outFile)
Writes collected statistics to UL output file and closes UL output file.
Uint64Map m_ulTxData
Amount of UL TX Data by (IMSI, LCID) pair.
static const uint32_t packetSize
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Uint64Map m_ulRxData
Amount of UL RX Data by (IMSI, LCID) pair.
Time Seconds(double value)
Construct a Time in the indicated unit.
std::string GetDlOutputFilename(void)
Get the name of the file where the downlink statistics will be stored.
double GetUlDelay(uint64_t imsi, uint8_t lcid)
Gets the uplink RLC to RLC delay.
Uint32Map m_dlCellId
List of DL CellIds by (IMSI, LCID) pair.
AttributeValue implementation for Time.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
void ResetResults(void)
Erases collected statistics.
Uint32Map m_dlTxPackets
Number of DL TX Packets by (IMSI, LCID) pair.
Ptr< const AttributeChecker > MakeStringChecker(void)
uint32_t GetUlTxPackets(uint64_t imsi, uint8_t lcid)
Gets the number of transmitted uplink packets.
uint32_t GetUlRxPackets(uint64_t imsi, uint8_t lcid)
Gets the number of received uplink packets.
std::string GetDlPdcpOutputFilename(void)
Get the name of the file where the downlink PDCP statistics will be stored.
uint64_t GetUlTxData(uint64_t imsi, uint8_t lcid)
Gets the number of transmitted uplink data bytes.
std::string m_ulPdcpOutputFilename
Name of the file where the uplink PDCP statistics will be saved.
bool m_pendingOutput
true if any output is pending
RadioBearerStatsCalculator()
Class constructor.
uint64_t GetDlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received downlink data bytes.
void SetUlPdcpOutputFilename(std::string outputFilename)
Set the name of the file where the uplink PDCP statistics will be stored.
void SetUlOutputFilename(std::string outputFilename)
Set the name of the file where the uplink statistics will be stored.
void SetStartTime(Time t)
Time m_epochDuration
Epoch duration.
void SetDlPdcpOutputFilename(std::string outputFilename)
Set the name of the file where the downlink PDCP statistics will be stored.
Uint64StatsMap m_dlDelay
DL delay by (IMSI, LCID) pair.
Uint64Map m_dlTxData
Amount of DL TX Data by (IMSI, LCID) pair.
Ptr< const AttributeAccessor > MakeStringAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
EventId m_endEpochEvent
Event id for next end epoch event.
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
void UlRxPdu(uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
Notifies the stats calculator that an uplink reception has occurred.
std::string m_protocolType
Protocol type, by default RLC.