Code style fix

This commit is contained in:
Jaume Nin
2011-12-22 15:37:01 +01:00
parent 3258cebe07
commit af01afcda6
2 changed files with 241 additions and 239 deletions

View File

@@ -33,114 +33,105 @@ NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsCalculator");
NS_OBJECT_ENSURE_REGISTERED ( RadioBearerStatsCalculator);
RadioBearerStatsCalculator::RadioBearerStatsCalculator () :
m_firstWrite(true)
m_firstWrite (true)
{
NS_LOG_FUNCTION(this);
NS_LOG_FUNCTION (this);
}
RadioBearerStatsCalculator::~RadioBearerStatsCalculator ()
{
NS_LOG_FUNCTION(this);
ShowResults();
NS_LOG_FUNCTION (this);
ShowResults ();
}
TypeId
RadioBearerStatsCalculator::GetTypeId (void)
{
static TypeId tid = TypeId("ns3::RadioBearerStatsCalculator") .SetParent<
Object> () .AddConstructor<RadioBearerStatsCalculator> () .AddAttribute(
"StartTime", "Start time of the on going epoch.", TimeValue(Seconds(0.)),
MakeTimeAccessor(&RadioBearerStatsCalculator::m_startTime),
MakeTimeChecker()) .AddAttribute("EpochDuration", "Epoch duration.",
TimeValue(Seconds(0.25)),
MakeTimeAccessor(&RadioBearerStatsCalculator::m_epochDuration),
MakeTimeChecker());
static TypeId tid =
TypeId ("ns3::RadioBearerStatsCalculator").SetParent<Object> ().AddConstructor<RadioBearerStatsCalculator> ().AddAttribute (
"StartTime", "Start time of the on going epoch.", TimeValue (Seconds (0.)),
MakeTimeAccessor (&RadioBearerStatsCalculator::m_startTime), MakeTimeChecker ()).AddAttribute ("EpochDuration",
"Epoch duration.", TimeValue (Seconds (0.25)), MakeTimeAccessor (&RadioBearerStatsCalculator::m_epochDuration),
MakeTimeChecker ());
return tid;
}
void
RadioBearerStatsCalculator::UlTxPdu (uint64_t imsi, uint16_t rnti,
uint8_t lcid, uint32_t packetSize)
RadioBearerStatsCalculator::UlTxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize)
{
NS_LOG_FUNCTION(this << "UlTxPDU" << imsi << rnti << (uint32_t) lcid << packetSize);
CheckEpoch();
ImsiLcidPair_t p(imsi, lcid);
if (Simulator::Now() > m_startTime)
NS_LOG_FUNCTION (this << "UlTxPDU" << imsi << rnti << (uint32_t) lcid << packetSize);
CheckEpoch ();
ImsiLcidPair_t p (imsi, lcid);
if (Simulator::Now () > m_startTime)
{
m_flowId[p] = LteFlowId_t(rnti, lcid);
m_flowId[p] = LteFlowId_t (rnti, lcid);
m_ulTxPackets[p]++;
m_ulTxData[p] += packetSize;
}
}
void
RadioBearerStatsCalculator::DlTxPdu (uint16_t cellId, uint64_t imsi,
uint16_t rnti, uint8_t lcid, uint32_t packetSize)
RadioBearerStatsCalculator::DlTxPdu (uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize)
{
NS_LOG_FUNCTION(this << "DlTxPDU" << imsi << rnti << (uint32_t) lcid << packetSize);
CheckEpoch();
ImsiLcidPair_t p(imsi, lcid);
if (Simulator::Now() > m_startTime)
NS_LOG_FUNCTION (this << "DlTxPDU" << imsi << rnti << (uint32_t) lcid << packetSize);
CheckEpoch ();
ImsiLcidPair_t p (imsi, lcid);
if (Simulator::Now () > m_startTime)
{
m_dlCellId[p] = cellId;
m_flowId[p] = LteFlowId_t(rnti, lcid);
m_flowId[p] = LteFlowId_t (rnti, lcid);
m_dlTxPackets[p]++;
m_dlTxData[p] += packetSize;
}
}
void
RadioBearerStatsCalculator::UlRxPdu (uint16_t cellId, uint64_t imsi,
uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
RadioBearerStatsCalculator::UlRxPdu (uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize,
uint64_t delay)
{
NS_LOG_FUNCTION(this << "UlRxPDU" << imsi << rnti << (uint32_t) lcid << packetSize << delay);
ImsiLcidPair_t p(imsi, lcid);
CheckEpoch();
NS_LOG_FUNCTION (this << "UlRxPDU" << imsi << rnti << (uint32_t) lcid << packetSize << delay);
ImsiLcidPair_t p (imsi, lcid);
CheckEpoch ();
if (Simulator::Now() > m_startTime)
if (Simulator::Now () > m_startTime)
{
m_ulCellId[p] = cellId;
m_ulRxPackets[p]++;
m_ulRxData[p] += packetSize;
Uint64StatsMap::iterator it = m_ulDelay.find(p);
if (it == m_ulDelay.end())
Uint64StatsMap::iterator it = m_ulDelay.find (p);
if (it == m_ulDelay.end ())
{
NS_LOG_DEBUG(
this << " Creating UL stats calculators for IMSI " << p.m_imsi
<< " and LCID " << (uint32_t) p.m_lcId);
NS_LOG_DEBUG (this << " Creating UL stats calculators for IMSI " << p.m_imsi << " and LCID " << (uint32_t) p.m_lcId);
m_ulDelay[p] = CreateObject<MinMaxAvgTotalCalculator<uint64_t> > ();
m_ulPduSize[p] = CreateObject<MinMaxAvgTotalCalculator<uint32_t> > ();
}
m_ulDelay[p]->Update(delay);
m_ulPduSize[p]->Update(packetSize);
m_ulDelay[p]->Update (delay);
m_ulPduSize[p]->Update (packetSize);
}
}
void
RadioBearerStatsCalculator::DlRxPdu (uint64_t imsi, uint16_t rnti,
uint8_t lcid, uint32_t packetSize, uint64_t delay)
RadioBearerStatsCalculator::DlRxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
{
NS_LOG_FUNCTION(this << "DlRxPDU" << imsi << rnti << (uint32_t) lcid << packetSize << delay);
CheckEpoch();
ImsiLcidPair_t p(imsi, lcid);
if (Simulator::Now() > m_startTime)
NS_LOG_FUNCTION (this << "DlRxPDU" << imsi << rnti << (uint32_t) lcid << packetSize << delay);
CheckEpoch ();
ImsiLcidPair_t p (imsi, lcid);
if (Simulator::Now () > m_startTime)
{
m_dlRxPackets[p]++;
m_dlRxData[p] += packetSize;
Uint64StatsMap::iterator it = m_dlDelay.find(p);
if (it == m_dlDelay.end())
Uint64StatsMap::iterator it = m_dlDelay.find (p);
if (it == m_dlDelay.end ())
{
NS_LOG_DEBUG(
this << " Creating DL stats calculators for IMSI " << p.m_imsi
<< " and LCID " << (uint32_t) p.m_lcId);
NS_LOG_DEBUG (this << " Creating DL stats calculators for IMSI " << p.m_imsi << " and LCID " << (uint32_t) p.m_lcId);
m_dlDelay[p] = CreateObject<MinMaxAvgTotalCalculator<uint64_t> > ();
m_dlPduSize[p] = CreateObject<MinMaxAvgTotalCalculator<uint32_t> > ();
}
m_dlDelay[p]->Update(delay);
m_dlPduSize[p]->Update(packetSize);
m_dlDelay[p]->Update (delay);
m_dlPduSize[p]->Update (packetSize);
}
}
@@ -148,199 +139,188 @@ void
RadioBearerStatsCalculator::ShowResults (void)
{
NS_LOG_FUNCTION(
this << GetUlOutputFilename().c_str() << GetDlOutputFilename().c_str());
NS_LOG_INFO(
"Write Rlc Stats in " << GetUlOutputFilename().c_str() << " and in "
<< GetDlOutputFilename().c_str());
NS_LOG_FUNCTION (this << GetUlOutputFilename ().c_str () << GetDlOutputFilename ().c_str ());
NS_LOG_INFO ("Write Rlc Stats in " << GetUlOutputFilename ().c_str () << " and in " << GetDlOutputFilename ().c_str ());
std::ofstream ulOutFile;
std::ofstream dlOutFile;
if (m_firstWrite == true)
{
ulOutFile.open(GetUlOutputFilename().c_str());
if (!ulOutFile.is_open())
ulOutFile.open (GetUlOutputFilename ().c_str ());
if (!ulOutFile.is_open ())
{
NS_LOG_ERROR("Can't open file " << GetUlOutputFilename().c_str());
NS_LOG_ERROR ("Can't open file " << GetUlOutputFilename ().c_str ());
return;
}
dlOutFile.open(GetDlOutputFilename().c_str());
if (!dlOutFile.is_open())
dlOutFile.open (GetDlOutputFilename ().c_str ());
if (!dlOutFile.is_open ())
{
NS_LOG_ERROR("Can't open file " << GetDlOutputFilename().c_str());
NS_LOG_ERROR ("Can't open file " << GetDlOutputFilename ().c_str ());
return;
}
m_firstWrite = false;
ulOutFile
<< "% start\tend\tCellId\tIMSI\tRNTI\tLCID\tnTxPDUs\tTxBytes\tnRxPDUs\tRxBytes\t";
ulOutFile << "% start\tend\tCellId\tIMSI\tRNTI\tLCID\tnTxPDUs\tTxBytes\tnRxPDUs\tRxBytes\t";
ulOutFile << "delay\tstdDev\tmin\tmax\t";
ulOutFile << "PduSize\tstdDev\tmin\tmax";
ulOutFile << std::endl;
dlOutFile
<< "% start\tend\tCellId\tIMSI\tRNTI\tLCID\tnTxPDUs\tTxBytes\tnRxPDUs\tRxBytes\t";
dlOutFile << "% start\tend\tCellId\tIMSI\tRNTI\tLCID\tnTxPDUs\tTxBytes\tnRxPDUs\tRxBytes\t";
dlOutFile << "delay\tstdDev\tmin\tmax\t";
dlOutFile << "PduSize\tstdDev\tmin\tmax";
dlOutFile << std::endl;
}
else
{
ulOutFile.open(GetUlOutputFilename().c_str(), std::ios_base::app);
if (!ulOutFile.is_open())
ulOutFile.open (GetUlOutputFilename ().c_str (), std::ios_base::app);
if (!ulOutFile.is_open ())
{
NS_LOG_ERROR("Can't open file " << GetUlOutputFilename().c_str());
NS_LOG_ERROR ("Can't open file " << GetUlOutputFilename ().c_str ());
return;
}
dlOutFile.open(GetDlOutputFilename().c_str(), std::ios_base::app);
if (!dlOutFile.is_open())
dlOutFile.open (GetDlOutputFilename ().c_str (), std::ios_base::app);
if (!dlOutFile.is_open ())
{
NS_LOG_ERROR("Can't open file " << GetDlOutputFilename().c_str());
NS_LOG_ERROR ("Can't open file " << GetDlOutputFilename ().c_str ());
return;
}
}
WriteUlResults(ulOutFile);
WriteDlResults(dlOutFile);
WriteUlResults (ulOutFile);
WriteDlResults (dlOutFile);
}
void
RadioBearerStatsCalculator::WriteUlResults (std::ofstream& outFile)
{
NS_LOG_FUNCTION(this);
NS_LOG_FUNCTION (this);
// Get the unique IMSI / LCID list
std::vector < ImsiLcidPair_t > pairVector;
for (Uint32Map::iterator it = m_ulTxPackets.begin(); it
!= m_ulTxPackets.end(); ++it)
for (Uint32Map::iterator it = m_ulTxPackets.begin (); it != m_ulTxPackets.end (); ++it)
{
if (find(pairVector.begin(), pairVector.end(), (*it).first)
== pairVector.end())
if (find (pairVector.begin (), pairVector.end (), (*it).first) == pairVector.end ())
{
pairVector.push_back((*it).first);
pairVector.push_back ((*it).first);
}
}
Time endTime = m_startTime + m_epochDuration;
for (std::vector<ImsiLcidPair_t>::iterator it = pairVector.begin(); it
!= pairVector.end(); ++it)
for (std::vector<ImsiLcidPair_t>::iterator it = pairVector.begin (); it != pairVector.end (); ++it)
{
ImsiLcidPair_t p = *it;
outFile << m_startTime.GetNanoSeconds() / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds() / 1.0e9 << "\t";
outFile << GetUlCellId(p.m_imsi, p.m_lcId) << "\t";
outFile << m_startTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << GetUlCellId (p.m_imsi, p.m_lcId) << "\t";
outFile << p.m_imsi << "\t";
outFile << m_flowId[p].m_rnti << "\t";
outFile << (uint32_t) m_flowId[p].m_lcId << "\t";
outFile << GetUlTxPackets(p.m_imsi, p.m_lcId) << "\t";
outFile << GetUlTxData(p.m_imsi, p.m_lcId) << "\t";
outFile << GetUlRxPackets(p.m_imsi, p.m_lcId) << "\t";
outFile << GetUlRxData(p.m_imsi, p.m_lcId) << "\t";
std::vector<double> stats = GetUlDelayStats(p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin(); it != stats.end(); ++it)
outFile << GetUlTxPackets (p.m_imsi, p.m_lcId) << "\t";
outFile << GetUlTxData (p.m_imsi, p.m_lcId) << "\t";
outFile << GetUlRxPackets (p.m_imsi, p.m_lcId) << "\t";
outFile << GetUlRxData (p.m_imsi, p.m_lcId) << "\t";
std::vector<double> stats = GetUlDelayStats (p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
{
outFile << (*it) * 1e-9 << "\t";
}
stats = GetUlPduSizeStats(p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin(); it != stats.end(); ++it)
stats = GetUlPduSizeStats (p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
{
outFile << (*it) << "\t";
}
outFile << std::endl;
}
outFile.close();
outFile.close ();
}
void
RadioBearerStatsCalculator::WriteDlResults (std::ofstream& outFile)
{
NS_LOG_FUNCTION(this);
NS_LOG_FUNCTION (this);
// Get the unique IMSI list
std::vector < ImsiLcidPair_t > pairVector;
for (Uint32Map::iterator it = m_dlTxPackets.begin(); it
!= m_dlTxPackets.end(); ++it)
for (Uint32Map::iterator it = m_dlTxPackets.begin (); it != m_dlTxPackets.end (); ++it)
{
if (find(pairVector.begin(), pairVector.end(), (*it).first)
== pairVector.end())
if (find (pairVector.begin (), pairVector.end (), (*it).first) == pairVector.end ())
{
pairVector.push_back((*it).first);
pairVector.push_back ((*it).first);
}
}
Time endTime = m_startTime + m_epochDuration;
for (std::vector<ImsiLcidPair_t>::iterator pair = pairVector.begin(); pair
!= pairVector.end(); ++pair)
for (std::vector<ImsiLcidPair_t>::iterator pair = pairVector.begin (); pair != pairVector.end (); ++pair)
{
ImsiLcidPair_t p = *pair;
outFile << m_startTime.GetNanoSeconds() / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds() / 1.0e9 << "\t";
outFile << GetDlCellId(p.m_imsi, p.m_lcId) << "\t";
outFile << m_startTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << GetDlCellId (p.m_imsi, p.m_lcId) << "\t";
outFile << p.m_imsi << "\t";
outFile << m_flowId[p].m_rnti << "\t";
outFile << (uint32_t) m_flowId[p].m_lcId << "\t";
outFile << GetDlTxPackets(p.m_imsi, p.m_lcId) << "\t";
outFile << GetDlTxData(p.m_imsi, p.m_lcId) << "\t";
outFile << GetDlRxPackets(p.m_imsi, p.m_lcId) << "\t";
outFile << GetDlRxData(p.m_imsi, p.m_lcId) << "\t";
std::vector<double> stats = GetDlDelayStats(p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin(); it != stats.end(); ++it)
outFile << GetDlTxPackets (p.m_imsi, p.m_lcId) << "\t";
outFile << GetDlTxData (p.m_imsi, p.m_lcId) << "\t";
outFile << GetDlRxPackets (p.m_imsi, p.m_lcId) << "\t";
outFile << GetDlRxData (p.m_imsi, p.m_lcId) << "\t";
std::vector<double> stats = GetDlDelayStats (p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
{
outFile << (*it) * 1e-9 << "\t";
}
stats = GetDlPduSizeStats(p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin(); it != stats.end(); ++it)
stats = GetDlPduSizeStats (p.m_imsi, p.m_lcId);
for (std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it)
{
outFile << (*it) << "\t";
}
outFile << std::endl;
}
outFile.close();
outFile.close ();
}
void
RadioBearerStatsCalculator::ResetResults (void)
{
NS_LOG_FUNCTION(this);
NS_LOG_FUNCTION (this);
m_ulTxPackets.erase(m_ulTxPackets.begin(), m_ulTxPackets.end());
m_ulRxPackets.erase(m_ulRxPackets.begin(), m_ulRxPackets.end());
m_ulRxData.erase(m_ulRxData.begin(), m_ulRxData.end());
m_ulTxData.erase(m_ulTxData.begin(), m_ulTxData.end());
m_ulDelay.erase(m_ulDelay.begin(), m_ulDelay.end());
m_ulPduSize.erase(m_ulPduSize.begin(), m_ulPduSize.end());
m_ulTxPackets.erase (m_ulTxPackets.begin (), m_ulTxPackets.end ());
m_ulRxPackets.erase (m_ulRxPackets.begin (), m_ulRxPackets.end ());
m_ulRxData.erase (m_ulRxData.begin (), m_ulRxData.end ());
m_ulTxData.erase (m_ulTxData.begin (), m_ulTxData.end ());
m_ulDelay.erase (m_ulDelay.begin (), m_ulDelay.end ());
m_ulPduSize.erase (m_ulPduSize.begin (), m_ulPduSize.end ());
m_dlTxPackets.erase(m_dlTxPackets.begin(), m_dlTxPackets.end());
m_dlRxPackets.erase(m_dlRxPackets.begin(), m_dlRxPackets.end());
m_dlRxData.erase(m_dlRxData.begin(), m_dlRxData.end());
m_dlTxData.erase(m_dlTxData.begin(), m_dlTxData.end());
m_dlDelay.erase(m_dlDelay.begin(), m_dlDelay.end());
m_dlPduSize.erase(m_dlPduSize.begin(), m_dlPduSize.end());
m_dlTxPackets.erase (m_dlTxPackets.begin (), m_dlTxPackets.end ());
m_dlRxPackets.erase (m_dlRxPackets.begin (), m_dlRxPackets.end ());
m_dlRxData.erase (m_dlRxData.begin (), m_dlRxData.end ());
m_dlTxData.erase (m_dlTxData.begin (), m_dlTxData.end ());
m_dlDelay.erase (m_dlDelay.begin (), m_dlDelay.end ());
m_dlPduSize.erase (m_dlPduSize.begin (), m_dlPduSize.end ());
}
void
RadioBearerStatsCalculator::CheckEpoch (void)
{
NS_LOG_FUNCTION(this);
NS_LOG_FUNCTION (this);
if (Simulator::Now() > m_startTime + m_epochDuration)
if (Simulator::Now () > m_startTime + m_epochDuration)
{
ShowResults();
ResetResults();
StartEpoch();
ShowResults ();
ResetResults ();
StartEpoch ();
}
}
void
RadioBearerStatsCalculator::StartEpoch (void)
{
NS_LOG_FUNCTION(this);
while (Simulator::Now() > m_startTime + m_epochDuration)
NS_LOG_FUNCTION (this);
while (Simulator::Now () > m_startTime + m_epochDuration)
{
m_startTime += m_epochDuration;
}
@@ -349,195 +329,191 @@ RadioBearerStatsCalculator::StartEpoch (void)
uint32_t
RadioBearerStatsCalculator::GetUlTxPackets (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_ulTxPackets[p];
}
uint32_t
RadioBearerStatsCalculator::GetUlRxPackets (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_ulRxPackets[p];
}
uint64_t
RadioBearerStatsCalculator::GetUlTxData (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_ulTxData[p];
}
uint64_t
RadioBearerStatsCalculator::GetUlRxData (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_ulRxData[p];
}
double
RadioBearerStatsCalculator::GetUlDelay (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
Uint64StatsMap::iterator it = m_ulDelay.find(p);
if (it == m_ulDelay.end())
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
Uint64StatsMap::iterator it = m_ulDelay.find (p);
if (it == m_ulDelay.end ())
{
NS_LOG_ERROR(
"UL delay for " << imsi << " - " << (uint16_t) lcid << " not found");
NS_LOG_ERROR ("UL delay for " << imsi << " - " << (uint16_t) lcid << " not found");
return 0;
}
return m_ulDelay[p]->getMean();
return m_ulDelay[p]->getMean ();
}
std::vector<double>
RadioBearerStatsCalculator::GetUlDelayStats (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
std::vector<double> stats;
Uint64StatsMap::iterator it = m_ulDelay.find(p);
if (it == m_ulDelay.end())
Uint64StatsMap::iterator it = m_ulDelay.find (p);
if (it == m_ulDelay.end ())
{
NS_LOG_ERROR(
"UL delay for " << imsi << " - " << (uint16_t) lcid << " not found");
NS_LOG_ERROR ("UL delay for " << imsi << " - " << (uint16_t) lcid << " not found");
return stats;
}
stats.push_back(m_ulDelay[p]->getMean());
stats.push_back(m_ulDelay[p]->getStddev());
stats.push_back(m_ulDelay[p]->getMin());
stats.push_back(m_ulDelay[p]->getMax());
stats.push_back (m_ulDelay[p]->getMean ());
stats.push_back (m_ulDelay[p]->getStddev ());
stats.push_back (m_ulDelay[p]->getMin ());
stats.push_back (m_ulDelay[p]->getMax ());
return stats;
}
std::vector<double>
RadioBearerStatsCalculator::GetUlPduSizeStats (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
std::vector<double> stats;
Uint32StatsMap::iterator it = m_ulPduSize.find(p);
if (it == m_ulPduSize.end())
Uint32StatsMap::iterator it = m_ulPduSize.find (p);
if (it == m_ulPduSize.end ())
{
NS_LOG_ERROR(
"UL PDU Size for " << imsi << " - " << (uint16_t) lcid
<< " not found");
NS_LOG_ERROR ("UL PDU Size for " << imsi << " - " << (uint16_t) lcid << " not found");
return stats;
}
stats.push_back(m_ulPduSize[p]->getMean());
stats.push_back(m_ulPduSize[p]->getStddev());
stats.push_back(m_ulPduSize[p]->getMin());
stats.push_back(m_ulPduSize[p]->getMax());
stats.push_back (m_ulPduSize[p]->getMean ());
stats.push_back (m_ulPduSize[p]->getStddev ());
stats.push_back (m_ulPduSize[p]->getMin ());
stats.push_back (m_ulPduSize[p]->getMax ());
return stats;
}
uint32_t
RadioBearerStatsCalculator::GetDlTxPackets (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_dlTxPackets[p];
}
uint32_t
RadioBearerStatsCalculator::GetDlRxPackets (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_dlRxPackets[p];
}
uint64_t
RadioBearerStatsCalculator::GetDlTxData (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_dlTxData[p];
}
uint64_t
RadioBearerStatsCalculator::GetDlRxData (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_dlRxData[p];
}
uint32_t
RadioBearerStatsCalculator::GetUlCellId (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_ulCellId[p];
}
uint32_t
RadioBearerStatsCalculator::GetDlCellId (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
return m_dlCellId[p];
}
double
RadioBearerStatsCalculator::GetDlDelay (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
Uint64StatsMap::iterator it = m_dlDelay.find(p);
if (it == m_dlDelay.end())
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
Uint64StatsMap::iterator it = m_dlDelay.find (p);
if (it == m_dlDelay.end ())
{
NS_LOG_ERROR("DL delay for " << imsi << " not found");
NS_LOG_ERROR ("DL delay for " << imsi << " not found");
return 0;
}
return m_dlDelay[p]->getMean();
return m_dlDelay[p]->getMean ();
}
std::vector<double>
RadioBearerStatsCalculator::GetDlDelayStats (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
std::vector<double> stats;
Uint64StatsMap::iterator it = m_dlDelay.find(p);
if (it == m_dlDelay.end())
Uint64StatsMap::iterator it = m_dlDelay.find (p);
if (it == m_dlDelay.end ())
{
NS_LOG_ERROR("DL delay for " << imsi << " not found");
NS_LOG_ERROR ("DL delay for " << imsi << " not found");
return stats;
}
stats.push_back(m_dlDelay[p]->getMean());
stats.push_back(m_dlDelay[p]->getStddev());
stats.push_back(m_dlDelay[p]->getMin());
stats.push_back(m_dlDelay[p]->getMax());
stats.push_back (m_dlDelay[p]->getMean ());
stats.push_back (m_dlDelay[p]->getStddev ());
stats.push_back (m_dlDelay[p]->getMin ());
stats.push_back (m_dlDelay[p]->getMax ());
return stats;
}
std::vector<double>
RadioBearerStatsCalculator::GetDlPduSizeStats (uint64_t imsi, uint8_t lcid)
{
NS_LOG_FUNCTION(this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p(imsi, lcid);
NS_LOG_FUNCTION (this << imsi << (uint16_t) lcid);
ImsiLcidPair_t p (imsi, lcid);
std::vector<double> stats;
Uint32StatsMap::iterator it = m_dlPduSize.find(p);
if (it == m_dlPduSize.end())
Uint32StatsMap::iterator it = m_dlPduSize.find (p);
if (it == m_dlPduSize.end ())
{
NS_LOG_ERROR("DL delay for " << imsi << " not found");
NS_LOG_ERROR ("DL delay for " << imsi << " not found");
return stats;
}
stats.push_back(m_dlPduSize[p]->getMean());
stats.push_back(m_dlPduSize[p]->getStddev());
stats.push_back(m_dlPduSize[p]->getMin());
stats.push_back(m_dlPduSize[p]->getMax());
stats.push_back (m_dlPduSize[p]->getMean ());
stats.push_back (m_dlPduSize[p]->getStddev ());
stats.push_back (m_dlPduSize[p]->getMin ());
stats.push_back (m_dlPduSize[p]->getMax ());
return stats;
}

View File

@@ -31,8 +31,8 @@
#include <map>
#include <fstream>
namespace ns3 {
namespace ns3
{
typedef std::map<ImsiLcidPair_t, uint32_t> Uint32Map;
typedef std::map<ImsiLcidPair_t, uint64_t> Uint64Map;
@@ -41,8 +41,6 @@ typedef std::map<ImsiLcidPair_t, Ptr<MinMaxAvgTotalCalculator<uint64_t> > > Uint
typedef std::map<ImsiLcidPair_t, double> DoubleMap;
typedef std::map<ImsiLcidPair_t, LteFlowId_t> FlowIdMap;
/**
* Calculation of statistics from the RLC layer for uplink and downlink, the data is dumped into a file periodically. Metrics considered are:
* - Number of transmitted PDUs
@@ -65,12 +63,14 @@ public:
/**
* Class destructor
*/
virtual ~RadioBearerStatsCalculator ();
virtual
~RadioBearerStatsCalculator ();
/**
* Inherited from ns3::Object
*/
static TypeId GetTypeId (void);
static TypeId
GetTypeId (void);
/**
* Notifies the stats calculator that an uplink transmission has occurred.
@@ -79,7 +79,8 @@ public:
* @param lcid LCID through which the PDU has been transmitted
* @param packetSize size of the PDU in bytes
*/
void UlTxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize);
void
UlTxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize);
/**
* Notifies the stats calculator that an uplink reception has occurred.
@@ -90,7 +91,8 @@ public:
* @param packetSize size of the PDU in bytes
* @param delay RLC to RLC delay in nanoseconds
*/
void UlRxPdu (uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay);
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 downlink transmission has occurred.
@@ -100,7 +102,8 @@ public:
* @param lcid LCID through which the PDU has been transmitted
* @param packetSize size of the PDU in bytes
*/
void DlTxPdu (uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize);
void
DlTxPdu (uint16_t cellId, uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize);
/**
* Notifies the stats calculator that an downlink reception has occurred.
@@ -110,7 +113,8 @@ public:
* @param packetSize size of the PDU in bytes
* @param delay RLC to RLC delay in nanoseconds
*/
void DlRxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay);
void
DlRxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay);
/**
* Gets the number of transmitted uplink packets.
@@ -118,7 +122,8 @@ public:
* @param lcid LCID
* @return number of transmitted uplink packets
*/
uint32_t GetUlTxPackets (uint64_t imsi, uint8_t lcid);
uint32_t
GetUlTxPackets (uint64_t imsi, uint8_t lcid);
/**
* Gets the number of received uplink packets.
@@ -126,7 +131,8 @@ public:
* @param lcid LCID
* @return number of received uplink packets
*/
uint32_t GetUlRxPackets (uint64_t imsi, uint8_t lcid);
uint32_t
GetUlRxPackets (uint64_t imsi, uint8_t lcid);
/**
* Gets the number of transmitted uplink data bytes.
@@ -134,7 +140,8 @@ public:
* @param lcid LCID
* @return number of transmitted data bytes
*/
uint64_t GetUlTxData (uint64_t imsi, uint8_t lcid);
uint64_t
GetUlTxData (uint64_t imsi, uint8_t lcid);
/**
* Gets the number of received uplink data bytes.
@@ -142,7 +149,8 @@ public:
* @param lcid LCID
* @return number of received data bytes
*/
uint64_t GetUlRxData (uint64_t imsi, uint8_t lcid);
uint64_t
GetUlRxData (uint64_t imsi, uint8_t lcid);
/**
* Gets the attached Enb cellId.
@@ -150,7 +158,8 @@ public:
* @param lcid LCID
* @return Enb cellId
*/
uint32_t GetUlCellId (uint64_t imsi, uint8_t lcid);
uint32_t
GetUlCellId (uint64_t imsi, uint8_t lcid);
/**
* Gets the uplink RLC to RLC delay
@@ -158,7 +167,8 @@ public:
* @param lcid LCID
* @return RLC to RLC delay in seconds
*/
double GetUlDelay (uint64_t imsi, uint8_t lcid);
double
GetUlDelay (uint64_t imsi, uint8_t lcid);
/**
* Gets the uplink RLC to RLC statistics: average, min, max and standard deviation.
@@ -166,7 +176,8 @@ public:
* @param lcid LCID
* @return RLC to RLC delay statistics average, min, max and standard deviation in seconds
*/
std::vector<double> GetUlDelayStats (uint64_t imsi, uint8_t lcid);
std::vector<double>
GetUlDelayStats (uint64_t imsi, uint8_t lcid);
/**
* Gets the uplink PDU size statistics: average, min, max and standard deviation.
@@ -174,7 +185,8 @@ public:
* @param lcid LCID
* @return PDU size statistics average, min, max and standard deviation in seconds
*/
std::vector<double> GetUlPduSizeStats (uint64_t imsi, uint8_t lcid);
std::vector<double>
GetUlPduSizeStats (uint64_t imsi, uint8_t lcid);
/**
* Gets the number of transmitted downlink data bytes.
@@ -182,7 +194,8 @@ public:
* @param lcid LCID
* @return number of transmitted data bytes
*/
uint32_t GetDlTxPackets (uint64_t imsi, uint8_t lcid);
uint32_t
GetDlTxPackets (uint64_t imsi, uint8_t lcid);
/**
* Gets the number of received downlink data bytes.
@@ -190,7 +203,8 @@ public:
* @param lcid LCID
* @return number of received data bytes
*/
uint32_t GetDlRxPackets (uint64_t imsi, uint8_t lcid);
uint32_t
GetDlRxPackets (uint64_t imsi, uint8_t lcid);
/**
* Gets the number of transmitted downlink data bytes.
@@ -198,7 +212,8 @@ public:
* @param lcid LCID
* @return number of transmitted data bytes
*/
uint64_t GetDlTxData (uint64_t imsi, uint8_t lcid);
uint64_t
GetDlTxData (uint64_t imsi, uint8_t lcid);
/**
* Gets the number of received downlink data bytes.
@@ -206,7 +221,8 @@ public:
* @param lcid LCID
* @return number of received data bytes
*/
uint64_t GetDlRxData (uint64_t imsi, uint8_t lcid);
uint64_t
GetDlRxData (uint64_t imsi, uint8_t lcid);
/**
* Gets the attached Enb cellId.
@@ -214,7 +230,8 @@ public:
* @param lcid LCID
* @return Enb cellId
*/
uint32_t GetDlCellId (uint64_t imsi, uint8_t lcid);
uint32_t
GetDlCellId (uint64_t imsi, uint8_t lcid);
/**
* Gets the downlink RLC to RLC delay
@@ -222,7 +239,8 @@ public:
* @param lcid LCID
* @return RLC to RLC delay in seconds
*/
double GetDlDelay (uint64_t imsi, uint8_t lcid);
double
GetDlDelay (uint64_t imsi, uint8_t lcid);
/**
* Gets the downlink RLC to RLC statistics: average, min, max and standard deviation.
@@ -230,7 +248,8 @@ public:
* @param lcid LCID
* @return RLC to RLC delay statistics average, min, max and standard deviation in seconds
*/
std::vector<double> GetDlDelayStats (uint64_t imsi, uint8_t lcid);
std::vector<double>
GetDlDelayStats (uint64_t imsi, uint8_t lcid);
/**
* Gets the downlink PDU size statistics: average, min, max and standard deviation.
@@ -238,16 +257,23 @@ public:
* @param lcid LCID
* @return PDU size statistics average, min, max and standard deviation in seconds
*/
std::vector<double> GetDlPduSizeStats (uint64_t imsi, uint8_t lcid);
std::vector<double>
GetDlPduSizeStats (uint64_t imsi, uint8_t lcid);
private:
void ShowResults (void);
void WriteUlResults (std::ofstream& outFile);
void WriteDlResults (std::ofstream& outFile);
void ResetResults (void);
void
ShowResults (void);
void
WriteUlResults (std::ofstream& outFile);
void
WriteDlResults (std::ofstream& outFile);
void
ResetResults (void);
void StartEpoch (void);
void CheckEpoch (void);
void
StartEpoch (void);
void
CheckEpoch (void);
FlowIdMap m_flowId;