21 #include <ns3/fatal-error.h>
62 .AddConstructor<EpcMme> ()
111 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
113 NS_ASSERT_MSG (it->second->bearerCounter < 11,
"too many bearers already! " << it->second->bearerCounter);
115 bearerInfo.
bearerId = ++(it->second->bearerCounter);
116 bearerInfo.
tft = tft;
117 bearerInfo.
bearer = bearer;
118 it->second->bearersToBeActivated.push_back (bearerInfo);
129 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
131 it->second->cellId = gci;
135 for (std::list<BearerInfo>::iterator bit = it->second->bearersToBeActivated.begin ();
136 bit != it->second->bearersToBeActivated.end ();
142 bearerContext.
tft = bit->tft;
156 EpcMme::DoPathSwitchRequest (uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t gci, std::list<EpcS1apSapMme::ErabSwitchedInDownlinkItem> erabToBeSwitchedInDownlinkList)
160 uint64_t imsi = mmeUeS1Id;
161 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
163 NS_LOG_INFO (
"IMSI " << imsi <<
" old eNB: " << it->second->cellId <<
", new eNB: " << gci);
164 it->second->cellId = gci;
165 it->second->enbUeS1Id = enbUeS1Id;
181 uint64_t imsi = msg.teid;
182 std::list<EpcS1apSapEnb::ErabToBeSetupItem> erabToBeSetupList;
183 for (std::list<EpcS11SapMme::BearerContextCreated>::iterator bit = msg.
bearerContextsCreated.begin ();
188 erab.
erabId = bit->epsBearerId;
191 erab.
sgwTeid = bit->sgwFteid.teid;
192 erabToBeSetupList.push_back (erab);
194 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
196 uint16_t cellId = it->second->cellId;
197 uint16_t enbUeS1Id = it->second->enbUeS1Id;
198 uint64_t mmeUeS1Id = it->second->mmeUeS1Id;
199 std::map<uint16_t, Ptr<EnbInfo> >::iterator jt =
m_enbInfoMap.find (cellId);
201 jt->second->s1apSapEnb->InitialContextSetupRequest (mmeUeS1Id, enbUeS1Id, erabToBeSetupList);
210 uint64_t imsi = msg.teid;
211 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
213 uint64_t enbUeS1Id = it->second->enbUeS1Id;
214 uint64_t mmeUeS1Id = it->second->mmeUeS1Id;
215 uint16_t cgi = it->second->cellId;
216 std::list<EpcS1apSapEnb::ErabSwitchedInUplinkItem> erabToBeSwitchedInUplinkList;
217 std::map<uint16_t, Ptr<EnbInfo> >::iterator jt =
m_enbInfoMap.find (it->second->cellId);
219 jt->second->s1apSapEnb->PathSwitchRequestAcknowledge (enbUeS1Id, mmeUeS1Id, cgi, erabToBeSwitchedInUplinkList);
226 uint64_t imsi = mmeUeS1Id;
227 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
234 for (std::list<EpcS1apSapMme::ErabToBeReleasedIndication>::iterator bit = erabToBeReleaseIndication.begin (); bit != erabToBeReleaseIndication.end (); ++bit)
238 msg.bearerContextsToBeRemoved.push_back (bearerContext);
248 uint64_t imsi = msg.teid;
249 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
255 for (std::list<EpcS11SapMme::BearerContextRemoved>::iterator bit = msg.
bearerContextsRemoved.begin ();
261 res.bearerContextsRemoved.push_back (bearerContext);
276 if (bit->bearerId == epsBearerId)
std::list< BearerContextRemoved > bearerContextsRemoved
void DoDeleteBearerRequest(EpcS11SapMme::DeleteBearerRequestMessage msg)
void AddUe(uint64_t imsi)
Add a new UE to the MME.
enum ns3::EpcS11SapMme::ModifyBearerResponseMessage::Cause cause
Smart pointer class similar to boost::intrusive_ptr.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
Delete Bearer Command message, see 3GPP TS 29.274 Release 9 V9.3.0 section 7.2.17.1.
MME side of the S1-AP Service Access Point (SAP), provides the MME methods to be called when an S1-AP...
MME side of the S11 Service Access Point (SAP), provides the MME methods to be called when an S11 mes...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
void DoModifyBearerResponse(EpcS11SapMme::ModifyBearerResponseMessage msg)
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Delete Bearer Request message, see 3GPP TS 29.274 Release 9 V9.3.0 section 7.2.9.2.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
std::map< uint16_t, Ptr< EnbInfo > > m_enbInfoMap
EnbInfo stored by EGCI.
EpcS1apSapMme * GetS1apSapMme()
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
Fatal error handling.
void DoErabReleaseIndication(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list< EpcS1apSapMme::ErabToBeReleasedIndication > erabToBeReleaseIndication)
EpcS11SapSgw * m_s11SapSgw
Delete Bearer Response message, see 3GPP TS 29.274 Release 9 V9.3.0 section 7.2.10.2.
This class contains the specification of EPS Bearers.
eNB side of the S1-AP Service Access Point (SAP), provides the eNB methods to be called when an S1-AP...
EpcS11SapMme * GetS11SapMme()
uint8_t AddBearer(uint64_t imsi, Ptr< EpcTft > tft, EpsBearer bearer)
Add an EPS bearer to the list of bearers to be activated for this UE.
virtual void ModifyBearerRequest(ModifyBearerRequestMessage msg)=0
send a Modify Bearer Request message
virtual ~EpcMme()
Destructor.
Modify Bearer Request message, see 3GPP TS 29.274 7.2.7.
Ipv4Address transportLayerAddress
std::list< BearerInfo > bearersToBeActivated
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::list< BearerContextCreated > bearerContextsCreated
virtual void CreateSessionRequest(CreateSessionRequestMessage msg)=0
send a Create Session Request message
EpsBearer erabLevelQosParameters
virtual void DoDispose()
Destructor implementation.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
void DoInitialUeMessage(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t imsi, uint16_t ecgi)
Ipv4 addresses are stored in host order in this class.
SGW side of the S11 Service Access Point (SAP), provides the SGW methods to be called when an S11 mes...
std::list< BearerContextToBeCreated > bearerContextsToBeCreated
std::map< uint64_t, Ptr< UeInfo > > m_ueInfoMap
UeInfo stored by IMSI.
void DoInitialContextSetupResponse(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list< EpcS1apSapMme::ErabSetupItem > erabSetupList)
void AddEnb(uint16_t ecgi, Ipv4Address enbS1UAddr, EpcS1apSapEnb *enbS1apSap)
Add a new ENB to the MME.
void DoPathSwitchRequest(uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t cgi, std::list< EpcS1apSapMme::ErabSwitchedInDownlinkItem > erabToBeSwitchedInDownlinkList)
Template for the implementation of the EpcS1apSapMme as a member of an owner class of type C to which...
A base class which provides memory management and object aggregation.
Modify Bearer Response message, see 3GPP TS 29.274 7.2.7.
EpcS1apSapMme * m_s1apSapMme
void RemoveBearer(Ptr< UeInfo > ueInfo, uint8_t epsBearerId)
This Function erases all contexts of bearer from MME side.
void SetS11SapSgw(EpcS11SapSgw *s)
Set the SGW side of the S11 SAP.
a unique identifier for an interface.
Template for the implementation of the EpcS11SapMme as a member of an owner class of type C to which ...
virtual void DeleteBearerCommand(DeleteBearerCommandMessage msg)=0
As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command message shall be sent on the S11 inte...
TypeId SetParent(TypeId tid)
EpcS11SapMme * m_s11SapMme
void DoCreateSessionResponse(EpcS11SapMme::CreateSessionResponseMessage msg)
virtual void DeleteBearerResponse(DeleteBearerResponseMessage msg)=0
As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command message shall be sent on the S11 inte...
static TypeId GetTypeId(void)
Hold info on an EPS bearer to be activated.
Create Session Request message, see 3GPP TS 29.274 7.2.1.
EpcS1apSapEnb * s1apSapEnb
Create Session Response message, see 3GPP TS 29.274 7.2.2.