21 #include <ns3/fatal-error.h>
24 #include <ns3/epc-helper.h>
26 #include "lte-enb-net-device.h"
27 #include "epc-ue-nas.h"
28 #include "lte-as-sap.h"
38 const char* g_ueNasStateName[EpcUeNas::NUM_STATES] =
49 return std::string (g_ueNasStateName[s]);
55 NS_OBJECT_ENSURE_REGISTERED (EpcUeNas);
80 EpcUeNas::GetTypeId (
void)
84 .AddConstructor<EpcUeNas> ()
85 .AddTraceSource (
"StateTransition",
86 "fired upon every UE NAS state transition",
119 m_forwardUpCallback = cb;
152 NS_FATAL_ERROR (
"the necessary NAS signaling to activate a bearer after the initial context has already been setup is not implemented");
157 btba.bearer = bearer;
159 m_bearersToBeActivatedList.push_back (btba);
173 uint32_t
id = m_tftClassifier.
Classify (packet, EpcTft::UPLINK);
175 uint8_t bid = (uint8_t) (
id & 0x000000FF);
182 m_asSapProvider->
SendData (packet, bid);
189 NS_LOG_WARN (
this <<
" NAS OFF, discarding packet");
196 EpcUeNas::DoNotifyConnectionSuccessful ()
200 SwitchToState (ACTIVE);
204 EpcUeNas::DoNotifyConnectionFailed ()
206 NS_FATAL_ERROR (
"connection failed, it should not happen with the current model");
210 EpcUeNas::DoRecvData (Ptr<Packet> packet)
213 m_forwardUpCallback (packet);
217 EpcUeNas::DoNotifyConnectionReleased ()
224 EpcUeNas::DoActivateEpsBearer (EpsBearer bearer, Ptr<EpcTft> tft)
227 NS_ASSERT_MSG (m_bidCounter < 11,
"cannot have more than 11 EPS bearers");
228 uint8_t bid = ++m_bidCounter;
229 m_tftClassifier.
Add (tft, bid);
233 EpcUeNas::SwitchToState (State newState)
236 State oldState = m_state;
238 NS_LOG_INFO (
"IMSI " << m_imsi <<
" NAS " << ToString (oldState) <<
" --> " << ToString (newState));
239 m_stateTransitionCallback (oldState, newState);
245 for (std::list<BearerToBeActivated>::iterator it = m_bearersToBeActivatedList.begin ();
246 it != m_bearersToBeActivatedList.end ();
247 m_bearersToBeActivatedList.erase (it++))
249 DoActivateEpsBearer (it->bearer, it->tft);
void ActivateEpsBearer(EpsBearer bearer, Ptr< EpcTft > tft)
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
void Add(Ptr< EpcTft > tft, uint32_t id)
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
uint32_t Classify(Ptr< Packet > p, EpcTft::Direction direction)
virtual void SendData(Ptr< Packet > packet, uint8_t bid)=0
#define NS_FATAL_ERROR(msg)
fatal error handling
LteAsSapUser * GetAsSapUser()
void SetDevice(Ptr< NetDevice > dev)
virtual void ForceCampedOnEnb(uint16_t cellId, uint16_t earfcn)=0
void Connect(uint16_t cellId, uint16_t earfcn)
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
bool Send(Ptr< Packet > p)
#define NS_ASSERT_MSG(condition, message)
void SetForwardUpCallback(Callback< void, Ptr< Packet > > cb)
virtual void Disconnect()=0
void SetAsSapProvider(LteAsSapProvider *s)
virtual void Connect(void)=0
a base class which provides memory management and object aggregation
void SetImsi(uint64_t imsi)
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
virtual void DoDispose(void)