5#include "nr-mac-rx-trace.h"
8#include "ns3/simulator.h"
15NS_LOG_COMPONENT_DEFINE(
"NrMacRxTrace");
17NS_OBJECT_ENSURE_REGISTERED(NrMacRxTrace);
19std::ofstream NrMacRxTrace::m_rxedGnbMacCtrlMsgsFile;
20std::string NrMacRxTrace::m_rxedGnbMacCtrlMsgsFileName;
21std::ofstream NrMacRxTrace::m_txedGnbMacCtrlMsgsFile;
22std::string NrMacRxTrace::m_txedGnbMacCtrlMsgsFileName;
24std::ofstream NrMacRxTrace::m_rxedUeMacCtrlMsgsFile;
25std::string NrMacRxTrace::m_rxedUeMacCtrlMsgsFileName;
26std::ofstream NrMacRxTrace::m_txedUeMacCtrlMsgsFile;
27std::string NrMacRxTrace::m_txedUeMacCtrlMsgsFileName;
29NrMacRxTrace::NrMacRxTrace()
33NrMacRxTrace::~NrMacRxTrace()
35 if (m_rxedGnbMacCtrlMsgsFile.is_open())
37 m_rxedGnbMacCtrlMsgsFile.close();
40 if (m_txedGnbMacCtrlMsgsFile.is_open())
42 m_txedGnbMacCtrlMsgsFile.close();
45 if (m_rxedUeMacCtrlMsgsFile.is_open())
47 m_rxedUeMacCtrlMsgsFile.close();
50 if (m_txedUeMacCtrlMsgsFile.is_open())
52 m_txedUeMacCtrlMsgsFile.close();
57NrMacRxTrace::GetTypeId()
60 TypeId(
"ns3::NrMacRxTrace").SetParent<Object>().AddConstructor<NrMacRxTrace>();
71 Ptr<const NrControlMessage> msg)
73 if (!m_rxedGnbMacCtrlMsgsFile.is_open())
75 m_rxedGnbMacCtrlMsgsFileName =
"RxedGnbMacCtrlMsgsTrace.txt";
76 m_rxedGnbMacCtrlMsgsFile.open(m_rxedGnbMacCtrlMsgsFileName.c_str());
77 m_rxedGnbMacCtrlMsgsFile <<
"Time"
95 <<
"MsgType" << std::endl;
97 if (!m_rxedGnbMacCtrlMsgsFile.is_open())
99 NS_FATAL_ERROR(
"Could not open tracefile");
103 m_rxedGnbMacCtrlMsgsFile << Simulator::Now().GetNanoSeconds() / (double)1e9 <<
"\t"
106 <<
static_cast<uint32_t
>(sfn.
GetSubframe()) <<
"\t"
107 <<
static_cast<uint32_t
>(sfn.
GetSlot()) <<
"\t" << nodeId <<
"\t"
108 << rnti <<
"\t" <<
static_cast<uint32_t
>(bwpId) <<
"\t";
112 m_rxedGnbMacCtrlMsgsFile <<
"SR";
116 m_rxedGnbMacCtrlMsgsFile <<
"DL_CQI";
120 m_rxedGnbMacCtrlMsgsFile <<
"BSR";
124 m_rxedGnbMacCtrlMsgsFile <<
"DL_HARQ";
128 m_rxedGnbMacCtrlMsgsFile <<
"RACH_PREAMBLE";
132 m_rxedGnbMacCtrlMsgsFile <<
"Other";
134 m_rxedGnbMacCtrlMsgsFile << std::endl;
144 Ptr<const NrControlMessage> msg)
146 if (!m_txedGnbMacCtrlMsgsFile.is_open())
148 m_txedGnbMacCtrlMsgsFileName =
"TxedGnbMacCtrlMsgsTrace.txt";
149 m_txedGnbMacCtrlMsgsFile.open(m_txedGnbMacCtrlMsgsFileName.c_str());
150 m_txedGnbMacCtrlMsgsFile <<
"Time"
168 <<
"MsgType" << std::endl;
170 if (!m_txedGnbMacCtrlMsgsFile.is_open())
172 NS_FATAL_ERROR(
"Could not open tracefile");
176 m_txedGnbMacCtrlMsgsFile << Simulator::Now().GetNanoSeconds() / (double)1e9 <<
"\t"
179 <<
static_cast<uint32_t
>(sfn.
GetSubframe()) <<
"\t"
180 <<
static_cast<uint32_t
>(sfn.
GetSlot()) <<
"\t" << nodeId <<
"\t"
181 << rnti <<
"\t" <<
static_cast<uint32_t
>(bwpId) <<
"\t";
185 m_txedGnbMacCtrlMsgsFile <<
"RAR";
189 m_txedGnbMacCtrlMsgsFile <<
"DL_CQI";
193 m_txedGnbMacCtrlMsgsFile <<
"Other";
196 m_txedGnbMacCtrlMsgsFile << std::endl;
206 Ptr<const NrControlMessage> msg)
208 if (!m_rxedUeMacCtrlMsgsFile.is_open())
210 m_rxedUeMacCtrlMsgsFileName =
"RxedUeMacCtrlMsgsTrace.txt";
211 m_rxedUeMacCtrlMsgsFile.open(m_rxedUeMacCtrlMsgsFileName.c_str());
212 m_rxedUeMacCtrlMsgsFile <<
"Time"
230 <<
"MsgType" << std::endl;
232 if (!m_rxedUeMacCtrlMsgsFile.is_open())
234 NS_FATAL_ERROR(
"Could not open tracefile");
238 m_rxedUeMacCtrlMsgsFile << Simulator::Now().GetNanoSeconds() / (double)1e9 <<
"\t"
241 <<
static_cast<uint32_t
>(sfn.
GetSubframe()) <<
"\t"
242 <<
static_cast<uint32_t
>(sfn.
GetSlot()) <<
"\t" << nodeId <<
"\t"
243 << rnti <<
"\t" <<
static_cast<uint32_t
>(bwpId) <<
"\t";
247 m_rxedUeMacCtrlMsgsFile <<
"UL_DCI";
251 m_rxedUeMacCtrlMsgsFile <<
"DL_DCI";
255 m_rxedUeMacCtrlMsgsFile <<
"RAR";
259 m_rxedUeMacCtrlMsgsFile <<
"Other";
261 m_rxedUeMacCtrlMsgsFile << std::endl;
271 Ptr<const NrControlMessage> msg)
273 if (!m_txedUeMacCtrlMsgsFile.is_open())
275 m_txedUeMacCtrlMsgsFileName =
"TxedUeMacCtrlMsgsTrace.txt";
276 m_txedUeMacCtrlMsgsFile.open(m_txedUeMacCtrlMsgsFileName.c_str());
277 m_txedUeMacCtrlMsgsFile <<
"Time"
295 <<
"MsgType" << std::endl;
297 if (!m_txedUeMacCtrlMsgsFile.is_open())
299 NS_FATAL_ERROR(
"Could not open tracefile");
303 m_txedUeMacCtrlMsgsFile << Simulator::Now().GetNanoSeconds() / (double)1e9 <<
"\t"
306 <<
static_cast<uint32_t
>(sfn.
GetSubframe()) <<
"\t"
307 <<
static_cast<uint32_t
>(sfn.
GetSlot()) <<
"\t" << nodeId <<
"\t"
308 << rnti <<
"\t" <<
static_cast<uint32_t
>(bwpId) <<
"\t";
312 m_txedUeMacCtrlMsgsFile <<
"BSR";
316 m_txedUeMacCtrlMsgsFile <<
"SR";
320 m_txedUeMacCtrlMsgsFile <<
"RACH_PREAMBLE";
324 m_txedUeMacCtrlMsgsFile <<
"Other";
326 m_txedUeMacCtrlMsgsFile << std::endl;
@ UL_DCI
The resources allocation map from the BS to the attached UEs (UL)
@ DL_HARQ
DL HARQ feedback.
@ RACH_PREAMBLE
Random Access Preamble.
@ SR
Scheduling Request: asking for space.
@ BSR
Buffer Status Report.
@ RAR
Random Access Response.
@ DL_DCI
The resources allocation map from the BS to the attached UEs (DL)
static void RxedGnbMacCtrlMsgsCallback(Ptr< NrMacRxTrace > macStats, std::string path, SfnSf sfn, uint16_t nodeId, uint16_t rnti, uint8_t bwpId, Ptr< const NrControlMessage > msg)
static void TxedGnbMacCtrlMsgsCallback(Ptr< NrMacRxTrace > macStats, std::string path, SfnSf sfn, uint16_t nodeId, uint16_t rnti, uint8_t bwpId, Ptr< const NrControlMessage > msg)
static void RxedUeMacCtrlMsgsCallback(Ptr< NrMacRxTrace > macStats, std::string path, SfnSf sfn, uint16_t nodeId, uint16_t rnti, uint8_t bwpId, Ptr< const NrControlMessage > msg)
static void TxedUeMacCtrlMsgsCallback(Ptr< NrMacRxTrace > macStats, std::string path, SfnSf sfn, uint16_t nodeId, uint16_t rnti, uint8_t bwpId, Ptr< const NrControlMessage > msg)
uint8_t GetSubframe() const
GetSubframe.
uint8_t GetSlot() const
GetSlot.
uint32_t GetFrame() const
GetFrame.