From d910efc37c87acf4132937f1edd3f2d7d4c20aa6 Mon Sep 17 00:00:00 2001 From: ZorazeAli Date: Fri, 22 May 2020 19:02:31 +0200 Subject: [PATCH] lte: Use ConnectFailSafe to connect PDCP traces It also reverts back the change done to DrbCreatedTrace TraceSource in 59276b0d see merge request !302 --- src/lte/doc/source/lte-design.rst | 1 + src/lte/doc/source/lte-user.rst | 2 ++ .../helper/radio-bearer-stats-connector.cc | 36 +++++++++++-------- src/lte/helper/radio-bearer-stats-connector.h | 12 +++---- src/lte/model/lte-enb-rrc.cc | 2 +- src/lte/model/lte-enb-rrc.h | 5 ++- src/lte/model/lte-ue-rrc.cc | 2 +- src/lte/model/lte-ue-rrc.h | 5 ++- 8 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/lte/doc/source/lte-design.rst b/src/lte/doc/source/lte-design.rst index ef45c6d19..c7279c801 100644 --- a/src/lte/doc/source/lte-design.rst +++ b/src/lte/doc/source/lte-design.rst @@ -1832,6 +1832,7 @@ all packets in the transmission buffer, thus notifying to the MAC the exact buffer size. +.. _sec-sm-rlc: SM RLC ++++++ diff --git a/src/lte/doc/source/lte-user.rst b/src/lte/doc/source/lte-user.rst index 9ecee89cb..f0884bd58 100644 --- a/src/lte/doc/source/lte-user.rst +++ b/src/lte/doc/source/lte-user.rst @@ -342,6 +342,8 @@ for uplink and downlink): 18. Maximum PDCP PDU size +**Note:** The PDCP traces for data radio bearers are not generated when +:ref:`sec-sm-rlc` is used. MAC KPIs are basically a trace of the resource allocation reported by the scheduler upon the start of every subframe. They are stored in diff --git a/src/lte/helper/radio-bearer-stats-connector.cc b/src/lte/helper/radio-bearer-stats-connector.cc index 6201749f3..f5f2c152c 100644 --- a/src/lte/helper/radio-bearer-stats-connector.cc +++ b/src/lte/helper/radio-bearer-stats-connector.cc @@ -189,10 +189,10 @@ RadioBearerStatsConnector::NotifyRandomAccessSuccessfulUe (RadioBearerStatsConne } void -RadioBearerStatsConnector::CreatedDrbEnb (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid, std::string rlcType) +RadioBearerStatsConnector::CreatedDrbEnb (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid) { - NS_LOG_FUNCTION (c << context << imsi << cellId << rnti << (uint16_t)lcid << rlcType); - c->ConnectTracesDrbEnb (context, imsi, cellId, rnti, lcid, rlcType); + NS_LOG_FUNCTION (c << context << imsi << cellId << rnti << (uint16_t)lcid); + c->ConnectTracesDrbEnb (context, imsi, cellId, rnti, lcid); } void @@ -203,10 +203,10 @@ RadioBearerStatsConnector::CreatedSrb1Ue (RadioBearerStatsConnector* c, std::str } void -RadioBearerStatsConnector::CreatedDrbUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid, std::string rlcType) +RadioBearerStatsConnector::CreatedDrbUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid) { - NS_LOG_FUNCTION (c << context << imsi << cellId << rnti << (uint16_t)lcid << rlcType); - c->ConnectTracesDrbUe (context, imsi, cellId, rnti, lcid, rlcType); + NS_LOG_FUNCTION (c << context << imsi << cellId << rnti << (uint16_t)lcid); + c->ConnectTracesDrbUe (context, imsi, cellId, rnti, lcid); } void @@ -285,7 +285,7 @@ RadioBearerStatsConnector::ConnectTracesSrb1 (std::string context, uint64_t imsi } void -RadioBearerStatsConnector::ConnectTracesDrbEnb (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid, std::string rlcType) +RadioBearerStatsConnector::ConnectTracesDrbEnb (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid) { NS_LOG_FUNCTION (this << context << imsi << cellId << rnti << (uint16_t)lcid); NS_LOG_LOGIC ("expected context should match /NodeList/*/DeviceList/*/LteEnbRrc/"); @@ -303,21 +303,25 @@ RadioBearerStatsConnector::ConnectTracesDrbEnb (std::string context, uint64_t im Config::Connect (basePath + "/LteRlc/RxPDU", MakeBoundCallback (&UlRxPduCallback, arg)); } - if (m_pdcpStats && rlcType != "ns3::LteRlcSm") + if (m_pdcpStats) { Ptr arg = Create (); arg->imsi = imsi; arg->cellId = cellId; arg->stats = m_pdcpStats; - Config::Connect (basePath + "/LtePdcp/TxPDU", + bool foundTxPdcp = Config::ConnectFailSafe (basePath + "/LtePdcp/TxPDU", MakeBoundCallback (&DlTxPduCallback, arg)); - Config::Connect (basePath + "/LtePdcp/RxPDU", + bool foundRxPdcp = Config::ConnectFailSafe (basePath + "/LtePdcp/RxPDU", MakeBoundCallback (&UlRxPduCallback, arg)); + if (!foundTxPdcp && !foundRxPdcp) + { + NS_LOG_WARN ("Unable to connect PDCP traces. This may happen if RlcSm is used"); + } } } void -RadioBearerStatsConnector::ConnectTracesDrbUe (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid, std::string rlcType) +RadioBearerStatsConnector::ConnectTracesDrbUe (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid) { NS_LOG_FUNCTION (this << context << imsi << cellId << rnti << (uint16_t)lcid); NS_LOG_LOGIC ("expected context should match /NodeList/*/DeviceList/*/LteUeRrc/"); @@ -335,16 +339,20 @@ RadioBearerStatsConnector::ConnectTracesDrbUe (std::string context, uint64_t ims Config::Connect (basePath + "/LteRlc/RxPDU", MakeBoundCallback (&DlRxPduCallback, arg)); } - if (m_pdcpStats && rlcType != "ns3::LteRlcSm") + if (m_pdcpStats) { Ptr arg = Create (); arg->imsi = imsi; arg->cellId = cellId; arg->stats = m_pdcpStats; - Config::Connect (basePath + "/LtePdcp/TxPDU", + bool foundTxPdcp = Config::ConnectFailSafe (basePath + "/LtePdcp/TxPDU", MakeBoundCallback (&UlTxPduCallback, arg)); - Config::Connect (basePath + "/LtePdcp/RxPDU", + bool foundRxPdcp = Config::ConnectFailSafe (basePath + "/LtePdcp/RxPDU", MakeBoundCallback (&DlRxPduCallback, arg)); + if (!foundTxPdcp && !foundRxPdcp) + { + NS_LOG_WARN ("Unable to connect PDCP traces. This may happen if RlcSm is used"); + } } } diff --git a/src/lte/helper/radio-bearer-stats-connector.h b/src/lte/helper/radio-bearer-stats-connector.h index 70b11f8c2..2a639f755 100644 --- a/src/lte/helper/radio-bearer-stats-connector.h +++ b/src/lte/helper/radio-bearer-stats-connector.h @@ -117,9 +117,8 @@ public: * \param cellid * \param rnti * \param lcid - * \param rlcType */ - static void CreatedDrbEnb (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint8_t lcid, std::string rlcType); + static void CreatedDrbEnb (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint8_t lcid); /** * Function hooked to DrbCreated trace source at UE RRC, @@ -131,9 +130,8 @@ public: * \param cellid * \param rnti * \param lcid - * \param rlcType */ - static void CreatedDrbUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint8_t lcid, std::string rlcType); + static void CreatedDrbUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint8_t lcid); /** * Disconnects all trace sources at eNB to RLC and PDCP calculators. @@ -190,9 +188,8 @@ private: * \param cellId * \param rnti * \param lcid - * \param rlcType */ - void ConnectTracesDrbEnb (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid, std::string rlcType); + void ConnectTracesDrbEnb (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid); /** * Connects DRB trace sources at UE to RLC and PDCP calculators @@ -201,9 +198,8 @@ private: * \param cellId * \param rnti * \param lcid - * \param rlcType */ - void ConnectTracesDrbUe (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid, std::string rlcType); + void ConnectTracesDrbUe (std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t lcid); Ptr m_rlcStats; //!< Calculator for RLC Statistics Ptr m_pdcpStats; //!< Calculator for PDCP Statistics diff --git a/src/lte/model/lte-enb-rrc.cc b/src/lte/model/lte-enb-rrc.cc index 739ef4bdd..23ed0de3f 100644 --- a/src/lte/model/lte-enb-rrc.cc +++ b/src/lte/model/lte-enb-rrc.cc @@ -444,7 +444,7 @@ UeManager::SetupDataRadioBearer (EpsBearer bearer, uint8_t bearerId, uint32_t gt drbInfo->m_pdcp = pdcp; } - m_drbCreatedTrace (m_imsi, m_rrc->ComponentCarrierToCellId (m_componentCarrierId), m_rnti, lcid, rlcTypeId.GetName ()); + m_drbCreatedTrace (m_imsi, m_rrc->ComponentCarrierToCellId (m_componentCarrierId), m_rnti, lcid); std::vector lcOnCcMapping = m_rrc->m_ccmRrcSapProvider->SetupDataRadioBearer (bearer, bearerId, m_rnti, lcid, m_rrc->GetLogicalChannelGroup (bearer), rlc->GetLteMacSapUser ()); // LteEnbCmacSapProvider::LcInfo lcinfo; diff --git a/src/lte/model/lte-enb-rrc.h b/src/lte/model/lte-enb-rrc.h index d96577022..6f7514c3d 100644 --- a/src/lte/model/lte-enb-rrc.h +++ b/src/lte/model/lte-enb-rrc.h @@ -559,10 +559,9 @@ private: /** * The `DrbCreated` trace source. Fired when DRB is created, i.e. * the RLC and PDCP entities are created for one logical channel. - * Exporting IMSI, cell ID, RNTI, LCID, and the TypeId of the RLC - * entity. + * Exporting IMSI, cell ID, RNTI, LCID. */ - TracedCallback m_drbCreatedTrace; + TracedCallback m_drbCreatedTrace; uint16_t m_sourceX2apId; ///< source X2 ap ID uint16_t m_targetX2apId; ///< target X2 ap ID diff --git a/src/lte/model/lte-ue-rrc.cc b/src/lte/model/lte-ue-rrc.cc index 40885648d..450de8495 100644 --- a/src/lte/model/lte-ue-rrc.cc +++ b/src/lte/model/lte-ue-rrc.cc @@ -1526,7 +1526,7 @@ LteUeRrc::ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedic m_drbMap.insert (std::pair > (dtamIt->drbIdentity, drbInfo)); - m_drbCreatedTrace (m_imsi, m_cellId, m_rnti, dtamIt->drbIdentity, rlcTypeId.GetName ()); + m_drbCreatedTrace (m_imsi, m_cellId, m_rnti, dtamIt->drbIdentity); struct LteUeCmacSapProvider::LogicalChannelConfig lcConfig; diff --git a/src/lte/model/lte-ue-rrc.h b/src/lte/model/lte-ue-rrc.h index bb510d6e8..d18bf4f98 100644 --- a/src/lte/model/lte-ue-rrc.h +++ b/src/lte/model/lte-ue-rrc.h @@ -917,10 +917,9 @@ private: /** * The `DrbCreated` trace source. Fired when DRB is created, i.e. * the RLC and PDCP entities are created for one logical channel. - * Exporting IMSI, cell ID, RNTI, LCID, and the TypeId of the RLC - * entity. + * Exporting IMSI, cell ID, RNTI, LCID. */ - TracedCallback m_drbCreatedTrace; + TracedCallback m_drbCreatedTrace; /** * The 'PhySyncDetection' trace source. Fired when UE RRC * receives in-sync or out-of-sync indications from UE PHY