From ac1081f276b10b31bdb4468a5f25b02474f8b034 Mon Sep 17 00:00:00 2001 From: Lluis Parcerisa Date: Thu, 13 Dec 2012 16:52:15 +0100 Subject: [PATCH 1/2] Add implementation of RRC Connection Reject in Ue Recv. --- src/lte/model/lte-enb-rrc.cc | 18 +++++++++++++++++- src/lte/model/lte-enb-rrc.h | 2 ++ src/lte/model/lte-rrc-protocol-real.cc | 6 +++++- src/lte/model/lte-ue-rrc.cc | 1 + 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/lte/model/lte-enb-rrc.cc b/src/lte/model/lte-enb-rrc.cc index 0f3a29584..66e828629 100644 --- a/src/lte/model/lte-enb-rrc.cc +++ b/src/lte/model/lte-enb-rrc.cc @@ -1097,6 +1097,11 @@ LteEnbRrc::GetTypeId (void) BooleanValue (true), MakeBooleanAccessor (&LteEnbRrc::m_admitHandoverRequest), MakeBooleanChecker ()) + .AddAttribute ("AdmitRrcConnectionRequest", + "Whether to admit a connection request from a Ue", + BooleanValue (true), + MakeBooleanAccessor (&LteEnbRrc::m_admitRrcConnectionRequest), + MakeBooleanChecker ()) .AddTraceSource ("ConnectionEstablished", "trace fired upon successful RRC connection establishment", MakeTraceSourceAccessor (&LteEnbRrc::m_connectionEstablishedTrace)) @@ -1273,7 +1278,18 @@ void LteEnbRrc::DoRecvRrcConnectionRequest (uint16_t rnti, LteRrcSap::RrcConnectionRequest msg) { NS_LOG_FUNCTION (this << rnti); - GetUeManager (rnti)->RecvRrcConnectionRequest (msg); + + if (m_admitRrcConnectionRequest == true) + { + GetUeManager (rnti)->RecvRrcConnectionRequest (msg); + } + else + { + NS_LOG_INFO ("rejecting connection request to rnti " << rnti); + LteRrcSap::RrcConnectionReject rejectMsg; + rejectMsg.waitTime = 3; + m_rrcSapUser->SendRrcConnectionReject (rnti, rejectMsg); + } } void diff --git a/src/lte/model/lte-enb-rrc.h b/src/lte/model/lte-enb-rrc.h index 42f933d42..48b8597f5 100644 --- a/src/lte/model/lte-enb-rrc.h +++ b/src/lte/model/lte-enb-rrc.h @@ -574,6 +574,7 @@ public: RLC_UM_ALWAYS = 2, RLC_AM_ALWAYS = 3, PER_BASED = 4}; + private: @@ -725,6 +726,7 @@ private: bool m_reconfigureUes; bool m_admitHandoverRequest; + bool m_admitRrcConnectionRequest; // imsi cellid rnti TracedCallback m_connectionEstablishedTrace; diff --git a/src/lte/model/lte-rrc-protocol-real.cc b/src/lte/model/lte-rrc-protocol-real.cc index 5284d76f8..ad1b9acba 100644 --- a/src/lte/model/lte-rrc-protocol-real.cc +++ b/src/lte/model/lte-rrc-protocol-real.cc @@ -288,11 +288,13 @@ LteUeRrcProtocolReal::DoReceivePdcpPdu (Ptr p) RrcConnectionReestablishmentHeader rrcConnectionReestablishmentHeader; RrcConnectionReestablishmentRejectHeader rrcConnectionReestablishmentRejectHeader; RrcConnectionSetupHeader rrcConnectionSetupHeader; + RrcConnectionRejectHeader rrcConnectionRejectHeader; // Declare possible messages LteRrcSap::RrcConnectionReestablishment rrcConnectionReestablishmentMsg; LteRrcSap::RrcConnectionReestablishmentReject rrcConnectionReestablishmentRejectMsg; LteRrcSap::RrcConnectionSetup rrcConnectionSetupMsg; + LteRrcSap::RrcConnectionReject rrcConnectionRejectMsg; // Deserialize packet and call member recv function with appropiate structure switch ( rrcDlCcchMessage.GetMessageType () ) @@ -311,7 +313,9 @@ LteUeRrcProtocolReal::DoReceivePdcpPdu (Ptr p) break; case 2: // RrcConnectionReject - // ... + p->RemoveHeader (rrcConnectionReestablishmentRejectHeader); + rrcConnectionReestablishmentRejectMsg = rrcConnectionReestablishmentRejectHeader.GetMessage (); + m_ueRrcSapProvider->RecvRrcConnectionReject (rrcConnectionRejectMsg); break; case 3: // RrcConnectionSetup diff --git a/src/lte/model/lte-ue-rrc.cc b/src/lte/model/lte-ue-rrc.cc index 9b7b5531a..12cba45dc 100644 --- a/src/lte/model/lte-ue-rrc.cc +++ b/src/lte/model/lte-ue-rrc.cc @@ -693,6 +693,7 @@ void LteUeRrc::DoRecvRrcConnectionReject (LteRrcSap::RrcConnectionReject msg) { NS_LOG_FUNCTION (this); + LeaveConnectedMode(); } From a059f89a8ba310d187882eeaa5808c874fd8893e Mon Sep 17 00:00:00 2001 From: Lluis Parcerisa Date: Thu, 13 Dec 2012 18:27:24 +0100 Subject: [PATCH 2/2] Add OFF state for Ue (switched to this state upon connection reject). Remove assert against connection failed. --- src/lte/model/epc-ue-nas.cc | 2 +- src/lte/model/lte-ue-rrc.cc | 5 +++-- src/lte/model/lte-ue-rrc.h | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lte/model/epc-ue-nas.cc b/src/lte/model/epc-ue-nas.cc index 08422446a..b603d4335 100644 --- a/src/lte/model/epc-ue-nas.cc +++ b/src/lte/model/epc-ue-nas.cc @@ -216,7 +216,7 @@ EpcUeNas::DoRecvData (Ptr packet) void EpcUeNas::DoNotifyConnectionReleased () { - NS_FATAL_ERROR ("connection failed, it should not happen with the current model"); + NS_LOG_FUNCTION (this); } void diff --git a/src/lte/model/lte-ue-rrc.cc b/src/lte/model/lte-ue-rrc.cc index 12cba45dc..3411f7d80 100644 --- a/src/lte/model/lte-ue-rrc.cc +++ b/src/lte/model/lte-ue-rrc.cc @@ -99,7 +99,8 @@ const char* g_ueRrcStateName[LteUeRrc::NUM_STATES] = "IDLE_CONNECTING", "CONNECTED_NORMALLY", "CONNECTED_REESTABLISHING", - "CONNECTED_HANDOVER" + "CONNECTED_HANDOVER", + "OFF" }; std::string ToString (LteUeRrc::State s) @@ -693,7 +694,7 @@ void LteUeRrc::DoRecvRrcConnectionReject (LteRrcSap::RrcConnectionReject msg) { NS_LOG_FUNCTION (this); - LeaveConnectedMode(); + SwitchToState (OFF); } diff --git a/src/lte/model/lte-ue-rrc.h b/src/lte/model/lte-ue-rrc.h index 46d04163d..0b7ff0a22 100644 --- a/src/lte/model/lte-ue-rrc.h +++ b/src/lte/model/lte-ue-rrc.h @@ -72,6 +72,7 @@ public: CONNECTED_NORMALLY, CONNECTED_REESTABLISHING, CONNECTED_HANDOVER, + OFF, NUM_STATES };