21 #include <ns3/fatal-error.h>
66 .AddConstructor<EpcMme> ()
115 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
117 NS_ASSERT_MSG (it->second->bearerCounter < 11,
"too many bearers already! " << it->second->bearerCounter);
119 bearerInfo.
bearerId = ++(it->second->bearerCounter);
120 bearerInfo.
tft = tft;
121 bearerInfo.
bearer = bearer;
122 it->second->bearersToBeActivated.push_back (bearerInfo);
132 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
134 it->second->cellId = gci;
138 for (std::list<BearerInfo>::iterator bit = it->second->bearersToBeActivated.begin ();
139 bit != it->second->bearersToBeActivated.end ();
145 bearerContext.
tft = bit->tft;
159 EpcMme::DoPathSwitchRequest (uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t gci, std::list<EpcS1apSapMme::ErabSwitchedInDownlinkItem> erabToBeSwitchedInDownlinkList)
163 uint64_t imsi = mmeUeS1Id;
164 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
166 NS_LOG_INFO (
"IMSI " << imsi <<
" old eNB: " << it->second->cellId <<
", new eNB: " << gci);
167 it->second->cellId = gci;
168 it->second->enbUeS1Id = enbUeS1Id;
184 uint64_t imsi = msg.teid;
185 std::list<EpcS1apSapEnb::ErabToBeSetupItem> erabToBeSetupList;
186 for (std::list<EpcS11SapMme::BearerContextCreated>::iterator bit = msg.
bearerContextsCreated.begin ();
191 erab.
erabId = bit->epsBearerId;
194 erab.
sgwTeid = bit->sgwFteid.teid;
195 erabToBeSetupList.push_back (erab);
197 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
199 uint16_t cellId = it->second->cellId;
200 uint16_t enbUeS1Id = it->second->enbUeS1Id;
201 uint64_t mmeUeS1Id = it->second->mmeUeS1Id;
202 std::map<uint16_t, Ptr<EnbInfo> >::iterator jt =
m_enbInfoMap.find (cellId);
204 jt->second->s1apSapEnb->InitialContextSetupRequest (mmeUeS1Id, enbUeS1Id, erabToBeSetupList);
213 uint64_t imsi = msg.teid;
214 std::map<uint64_t, Ptr<UeInfo> >::iterator it =
m_ueInfoMap.find (imsi);
216 uint64_t enbUeS1Id = it->second->enbUeS1Id;
217 uint64_t mmeUeS1Id = it->second->mmeUeS1Id;
218 uint16_t cgi = it->second->cellId;
219 std::list<EpcS1apSapEnb::ErabSwitchedInUplinkItem> erabToBeSwitchedInUplinkList;
220 std::map<uint16_t, Ptr<EnbInfo> >::iterator jt =
m_enbInfoMap.find (it->second->cellId);
222 jt->second->s1apSapEnb->PathSwitchRequestAcknowledge (enbUeS1Id, mmeUeS1Id, cgi, erabToBeSwitchedInUplinkList);
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)
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...
void DoModifyBearerResponse(EpcS11SapMme::ModifyBearerResponseMessage msg)
NS_LOG_COMPONENT_DEFINE("EpcMme")
#define NS_ASSERT(condition)
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
std::map< uint16_t, Ptr< EnbInfo > > m_enbInfoMap
EnbInfo stored by EGCI.
EpcS1apSapMme * GetS1apSapMme()
void AddBearer(uint64_t imsi, Ptr< EpcTft > tft, EpsBearer bearer)
Add an EPS bearer to the list of bearers to be activated for this UE.
EpcS11SapSgw * m_s11SapSgw
#define NS_FATAL_ERROR(msg)
fatal error handling
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()
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< BearerContextCreated > bearerContextsCreated
virtual void CreateSessionRequest(CreateSessionRequestMessage msg)=0
send a Create Session Request message
EpsBearer erabLevelQosParameters
virtual void DoDispose()
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
#define NS_ASSERT_MSG(condition, message)
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 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 ...
TypeId SetParent(TypeId tid)
EpcS11SapMme * m_s11SapMme
void DoCreateSessionResponse(EpcS11SapMme::CreateSessionResponseMessage msg)
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.