From bfdbffc215d4fe4d76fde34b9cc50d0c38c6754a Mon Sep 17 00:00:00 2001 From: Vignesh Babu Date: Fri, 12 Apr 2019 14:30:10 +0200 Subject: [PATCH] lte: Extend EpcMme, EpcSgw and EpcPgw App to remove UE context --- src/lte/model/epc-mme-application.cc | 14 +++++++++++++- src/lte/model/epc-pgw-application.cc | 2 ++ src/lte/model/epc-sgw-application.cc | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/lte/model/epc-mme-application.cc b/src/lte/model/epc-mme-application.cc index d205d3e62..d71bb3cfe 100644 --- a/src/lte/model/epc-mme-application.cc +++ b/src/lte/model/epc-mme-application.cc @@ -236,6 +236,7 @@ EpcMmeApplication::RemoveBearer (Ptr ueInfo, uint8_t epsBearerId) if (bit->bearerId == epsBearerId) { ueInfo->bearersToBeActivated.erase (bit); + ueInfo->bearerCounter = ueInfo->bearerCounter - 1; break; } ++bit; @@ -352,7 +353,18 @@ EpcMmeApplication::DoRecvDeleteBearerRequest (GtpcHeader &header, Ptr pa for (auto &ebid : msg.GetEpsBearerIds ()) { epsBearerIds.push_back (ebid); - RemoveBearer (it->second, ebid); //schedules function to erase, context of de-activated bearer + /* + * This condition is added to not remove bearer info at MME + * when UE gets disconnected since the bearers are only added + * at beginning of simulation at MME and if it is removed the + * bearers cannot be activated again unless scheduled for + * addition of the bearer during simulation + * + */ + if (it->second->cellId == 0) + { + RemoveBearer (it->second, ebid); //schedules function to erase, context of de-activated bearer + } } msgOut.SetEpsBearerIds (epsBearerIds); msgOut.SetTeid (imsi); diff --git a/src/lte/model/epc-pgw-application.cc b/src/lte/model/epc-pgw-application.cc index 0819037ff..d50cc680b 100644 --- a/src/lte/model/epc-pgw-application.cc +++ b/src/lte/model/epc-pgw-application.cc @@ -57,6 +57,8 @@ void EpcPgwApplication::UeInfo::RemoveBearer (uint8_t bearerId) { NS_LOG_FUNCTION (this << (uint16_t) bearerId); + std::map::iterator it = m_teidByBearerIdMap.find (bearerId); + m_tftClassifier.Delete (it->second); //delete tft m_teidByBearerIdMap.erase (bearerId); } diff --git a/src/lte/model/epc-sgw-application.cc b/src/lte/model/epc-sgw-application.cc index cfc89d76b..7029fca12 100644 --- a/src/lte/model/epc-sgw-application.cc +++ b/src/lte/model/epc-sgw-application.cc @@ -369,7 +369,7 @@ EpcSgwApplication::DoRecvDeleteBearerCommand (Ptr packet) Ptr packetOut = Create (); packetOut->AddHeader (msgOut); NS_LOG_DEBUG ("Send DeleteBearerCommand to PGW " << m_pgwAddr); - m_s11Socket->SendTo (packetOut, 0, InetSocketAddress (m_pgwAddr, m_gtpcUdpPort)); + m_s5cSocket->SendTo (packetOut, 0, InetSocketAddress (m_pgwAddr, m_gtpcUdpPort)); } void