21 #include <ns3/fatal-error.h>
23 #include <ns3/object-map.h>
24 #include <ns3/object-factory.h>
25 #include <ns3/node-list.h>
27 #include <ns3/simulator.h>
96 "IDLE_CELL_SELECTION",
97 "IDLE_WAIT_SYSTEM_INFO",
98 "IDLE_CAMPED_NORMALLY",
101 "CONNECTED_NORMALLY",
102 "CONNECTED_REESTABLISHING",
120 : m_cphySapProvider (0),
121 m_cmacSapProvider (0),
123 m_macSapProvider (0),
125 m_state (IDLE_CELL_SELECTION),
130 m_connectionPending (0),
166 .AddConstructor<LteUeRrc> ()
167 .AddAttribute (
"DataRadioBearerMap",
"List of UE RadioBearerInfo for Data Radio Bearers by LCID.",
170 MakeObjectMapChecker<LteDataRadioBearerInfo> ())
171 .AddAttribute (
"Srb0",
"SignalingRadioBearerInfo for SRB0",
174 MakePointerChecker<LteSignalingRadioBearerInfo> ())
175 .AddAttribute (
"Srb1",
"SignalingRadioBearerInfo for SRB1",
178 MakePointerChecker<LteSignalingRadioBearerInfo> ())
179 .AddAttribute (
"CellId",
180 "Serving cell identifier",
183 MakeUintegerChecker<uint16_t> ())
184 .AddAttribute (
"C-RNTI",
185 "Cell Radio Network Temporary Identifier",
188 MakeUintegerChecker<uint16_t> ())
189 .AddTraceSource (
"StateTransition",
190 "trace fired upon every UE RRC state transition",
192 .AddTraceSource (
"RandomAccessSuccessful",
193 "trace fired upon successful completion of the random access procedure",
195 .AddTraceSource (
"ConnectionEstablished",
196 "trace fired upon successful RRC connection establishment",
198 .AddTraceSource (
"ConnectionReconfiguration",
199 "trace fired upon RRC connection reconfiguration",
201 .AddTraceSource (
"HandoverStart",
202 "trace fired upon start of a handover procedure",
204 .AddTraceSource (
"HandoverEndOk",
205 "trace fired upon successful termination of a handover procedure",
352 Ptr<LteRlc> rlc = CreateObject<LteRlcTm> ()->GetObject<LteRlc> ();
357 m_srb0 = CreateObject<LteSignalingRadioBearerInfo> ();
385 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =
m_drbMap.find (drbid);
391 params.lcid = it->second->m_logicalChannelIdentity;
393 NS_LOG_LOGIC (
this <<
" RNTI=" <<
m_rnti <<
" sending " << packet <<
"on DRBID " << (uint32_t) drbid <<
" (LCID" << params.lcid <<
")" <<
" (" << packet->
GetSize () <<
" bytes)");
394 it->second->m_pdcp->GetLtePdcpSapProvider ()->TransmitPdcpSdu (params);
410 NS_LOG_INFO (
"aborting connection setup procedure");
744 std::list<LteRrcSap::SrbToAddMod>::const_iterator stamIt = rrcd.
srbToAddModList.begin ();
752 NS_ASSERT_MSG (stamIt->srbIdentity == 1,
"only SRB1 supported");
754 const uint8_t lcid = 1;
768 m_srb1 = CreateObject<LteSignalingRadioBearerInfo> ();
779 lcConfig.
priority = stamIt->logicalChannelConfig.priority;
796 NS_LOG_INFO (
"request to modify SRB1 (skipping as currently not implemented)");
802 std::list<LteRrcSap::DrbToAddMod>::const_iterator dtamIt;
807 NS_LOG_INFO (
this <<
" IMSI " <<
m_imsi <<
" adding/modifying DRBID " << (uint32_t) dtamIt->drbIdentity <<
" LC " << (uint32_t) dtamIt->logicalChannelIdentity);
808 NS_ASSERT_MSG (dtamIt->logicalChannelIdentity > 2,
"LCID value " << dtamIt->logicalChannelIdentity <<
" is reserved for SRBs");
810 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator drbMapIt =
m_drbMap.find (dtamIt->drbIdentity);
822 switch (dtamIt->rlcConfig.choice)
843 rlc->
SetLcId (dtamIt->logicalChannelIdentity);
846 drbInfo->
m_rlc = rlc;
857 pdcp->
SetLcId (dtamIt->logicalChannelIdentity);
870 lcConfig.
priority = dtamIt->logicalChannelConfig.priority;
888 std::list<uint8_t>::iterator dtdmIt;
893 uint8_t drbid = *dtdmIt;
894 NS_LOG_INFO (
this <<
" IMSI " <<
m_imsi <<
" releasing DRB " << (uint32_t) drbid << drbid);
895 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =
m_drbMap.find (drbid);
918 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it;
939 std::map<uint8_t, uint8_t>::iterator it =
m_bid2DrbidMap.find (bid);