From 73d42fac712538b0afb0d41a7d22cccd3188b54b Mon Sep 17 00:00:00 2001 From: ZorazeAli Date: Tue, 23 Apr 2019 16:21:07 +0200 Subject: [PATCH] lte: Discard packets arriving after UE context removal at EpcEnbApplication Due to RLF the UE context deletion might get triggered during the reception of a packet by EpcEnbApplication from EpcSgwApplication. This patch will enable EpcEnbApplication to discard such packets. --- src/lte/model/epc-enb-application.cc | 15 +++++++++++---- src/lte/model/epc-pgw-application.cc | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lte/model/epc-enb-application.cc b/src/lte/model/epc-enb-application.cc index 8805e1c86..becae00ec 100644 --- a/src/lte/model/epc-enb-application.cc +++ b/src/lte/model/epc-enb-application.cc @@ -197,8 +197,10 @@ EpcEnbApplication::DoUeContextRelease (uint16_t rnti) { uint32_t teid = bidIt->second; m_teidRbidMap.erase (teid); + NS_LOG_INFO ("TEID: " << teid << " erased"); } m_rbidTeidMap.erase (rntiIt); + NS_LOG_INFO ("RNTI: " << rntiIt->first << " erased"); } } @@ -295,10 +297,15 @@ EpcEnbApplication::RecvFromS1uSocket (Ptr socket) packet->RemoveHeader (gtpu); uint32_t teid = gtpu.GetTeid (); std::map::iterator it = m_teidRbidMap.find (teid); - NS_ASSERT_MSG (it != m_teidRbidMap.end (), "cell id = " << m_cellId); - - m_rxS1uSocketPktTrace (packet->Copy ()); - SendToLteSocket (packet, it->second.m_rnti, it->second.m_bid); + if (it == m_teidRbidMap.end ()) + { + NS_LOG_WARN ("UE context at cell id " << m_cellId << " not found, discarding packet"); + } + else + { + m_rxS1uSocketPktTrace (packet->Copy ()); + SendToLteSocket (packet, it->second.m_rnti, it->second.m_bid); + } } void diff --git a/src/lte/model/epc-pgw-application.cc b/src/lte/model/epc-pgw-application.cc index d50cc680b..85231f4a5 100644 --- a/src/lte/model/epc-pgw-application.cc +++ b/src/lte/model/epc-pgw-application.cc @@ -423,6 +423,7 @@ EpcPgwApplication::DoRecvDeleteBearerResponse (Ptr packet) for (auto &epsBearerId : msg.GetEpsBearerIds ()) { // Remove de-activated bearer contexts from PGW side + NS_LOG_INFO ("PGW removing bearer " << (uint16_t) epsBearerId << " of IMSI " << imsi); ueit->second->RemoveBearer (epsBearerId); } }