added CONNECTION_REJECTED state at LteEnbRrc
authorNicola Baldo <nbaldo@cttc.es>
Wed, 19 Dec 2012 13:59:51 +0100
changeset 9593 d1da1374c434
parent 9592 35619c251e91
child 9594 63d9b752f99c
added CONNECTION_REJECTED state at LteEnbRrc
src/lte/doc/source/figures/lte-enb-rrc-states.dot
src/lte/model/lte-enb-rrc.cc
src/lte/model/lte-enb-rrc.h
src/lte/test/test-lte-rrc.cc
--- a/src/lte/doc/source/figures/lte-enb-rrc-states.dot	Wed Dec 19 12:20:08 2012 +0100
+++ b/src/lte/doc/source/figures/lte-enb-rrc-states.dot	Wed Dec 19 13:59:51 2012 +0100
@@ -5,7 +5,8 @@
 
 NO_CONTEXT [shape="ellipse", label="no context"]
 INITIAL_RANDOM_ACCESS  [shape="box",width=5]
-CONNECTION_SETUP [shape="box",width=5] 
+CONNECTION_SETUP [shape="box",width=5]
+CONNECTION_REJECTED [shape="box",width=5] 
 CONNECTED_NORMALLY [shape="box",width=5] 
 CONNECTION_RECONFIGURATION [shape="box",width=5] 
 HANDOVER_PREPARATION [shape="box",width=5] 
@@ -15,8 +16,11 @@
 CONTEXT_DESTROYED [shape="ellipse", label="context destroyed"]
 
 NO_CONTEXT -> INITIAL_RANDOM_ACCESS [label="rx RA preamble",labeldistance=0]
-INITIAL_RANDOM_ACCESS -> CONNECTION_SETUP [label="rx RRC CONNECTION REQUEST"]
-CONNECTION_SETUP -> CONNECTED_NORMALLY [label="rx RRC CONNECTION SETUP COMPLETED"]
+INITIAL_RANDOM_ACCESS -> CONNECTION_REJECTED [label="rx RRC CONN REQUEST, AdmitRrcConnectionRequest = false"]
+CONNECTION_REJECTED -> CONTEXT_DESTROYED [label="maxConnectionDelay timeout"]
+INITIAL_RANDOM_ACCESS -> CONTEXT_DESTROYED [label="maxRecvConnRejectDelay timeout"]
+INITIAL_RANDOM_ACCESS -> CONNECTION_SETUP [label="rx RRC CONN REQUEST, AdmitRrcConnectionRequest = true"]
+CONNECTION_SETUP -> CONNECTED_NORMALLY [label="rx RRC CONN SETUP COMPLETED"]
 CONNECTED_NORMALLY -> CONNECTION_RECONFIGURATION [label="reconfiguration trigger"]
 CONNECTION_RECONFIGURATION -> CONNECTED_NORMALLY [label="rx RRC CONN RECONF COMPLETED"]
 CONNECTED_NORMALLY -> HANDOVER_PREPARATION [label="handover trigger"]
--- a/src/lte/model/lte-enb-rrc.cc	Wed Dec 19 12:20:08 2012 +0100
+++ b/src/lte/model/lte-enb-rrc.cc	Wed Dec 19 13:59:51 2012 +0100
@@ -99,6 +99,7 @@
   {
     "INITIAL_RANDOM_ACCESS",
     "CONNECTION_SETUP",
+    "CONNECTION_REJECTED",
     "CONNECTED_NORMALLY",
     "CONNECTION_RECONFIGURATION",
     "CONNECTION_REESTABLISHMENT",
@@ -686,18 +687,32 @@
     {
     case INITIAL_RANDOM_ACCESS:      
       {      
-        m_connectionTimeout.Cancel ();
-        m_imsi = msg.ueIdentity;      
-        if (m_rrc->m_s1SapProvider != 0)
+        if (m_rrc->m_admitRrcConnectionRequest == true)
           {
-            m_rrc->m_s1SapProvider->InitialUeMessage (m_imsi, m_rnti);
-          }      
-        LteRrcSap::RrcConnectionSetup msg2;
-        msg2.rrcTransactionIdentifier = GetNewRrcTransactionIdentifier ();
-        msg2.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
-        m_rrc->m_rrcSapUser->SendRrcConnectionSetup (m_rnti, msg2);
-        RecordDataRadioBearersToBeStarted ();
-        SwitchToState (CONNECTION_SETUP);
+            m_connectionTimeout.Cancel ();
+            m_imsi = msg.ueIdentity;      
+            if (m_rrc->m_s1SapProvider != 0)
+              {
+                m_rrc->m_s1SapProvider->InitialUeMessage (m_imsi, m_rnti);
+              }      
+            LteRrcSap::RrcConnectionSetup msg2;
+            msg2.rrcTransactionIdentifier = GetNewRrcTransactionIdentifier ();
+            msg2.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
+            m_rrc->m_rrcSapUser->SendRrcConnectionSetup (m_rnti, msg2);
+            RecordDataRadioBearersToBeStarted ();
+            SwitchToState (CONNECTION_SETUP);
+          }
+        else
+          {
+            m_connectionTimeout.Cancel ();
+            NS_LOG_INFO ("rejecting connection request for RNTI " << m_rnti);
+            LteRrcSap::RrcConnectionReject rejectMsg;
+            rejectMsg.waitTime = 3;
+            m_rrc->m_rrcSapUser->SendRrcConnectionReject (m_rnti, rejectMsg);
+            Time maxRecvConnRejectDelay = MilliSeconds (30);
+            m_connectionTimeout = Simulator::Schedule (maxRecvConnRejectDelay, &LteEnbRrc::ConnectionTimeout, m_rrc, m_rnti);
+            SwitchToState (CONNECTION_REJECTED);
+          }        
       }
       break;
       
@@ -1331,17 +1346,7 @@
 {
   NS_LOG_FUNCTION (this << rnti);
   
-  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
--- a/src/lte/model/lte-enb-rrc.h	Wed Dec 19 12:20:08 2012 +0100
+++ b/src/lte/model/lte-enb-rrc.h	Wed Dec 19 13:59:51 2012 +0100
@@ -69,6 +69,7 @@
     {
       INITIAL_RANDOM_ACCESS = 0,
       CONNECTION_SETUP,
+      CONNECTION_REJECTED,
       CONNECTED_NORMALLY,
       CONNECTION_RECONFIGURATION,
       CONNECTION_REESTABLISHMENT,
--- a/src/lte/test/test-lte-rrc.cc	Wed Dec 19 12:20:08 2012 +0100
+++ b/src/lte/test/test-lte-rrc.cc	Wed Dec 19 13:59:51 2012 +0100
@@ -320,12 +320,10 @@
 {
   NS_LOG_FUNCTION (this);
 
-  //AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 50,        0,         0,              0,             1, 0, true));
-
   for (uint32_t useIdealRrc = 0; useIdealRrc <= 1; ++useIdealRrc)
     {
       //         <----- all times in ms ----------------->
-      // nUes, nBearers, tConnBase, tConnIncrPerUe, delayDiscStart, useIdealRrc, admitRrcConnectionRequest
+      //                                                     nUes, nBearers, tConnBase, tConnIncrPerUe, delayDiscStart, useIdealRrc, admitRrcConnectionRequest
       AddTestCase (new LteRrcConnectionEstablishmentTestCase (  1,        0,         0,              0,             1, useIdealRrc, true));
       AddTestCase (new LteRrcConnectionEstablishmentTestCase (  1,        0,       100,              0,             1, useIdealRrc, true));
       AddTestCase (new LteRrcConnectionEstablishmentTestCase (  1,        1,         0,              0,             1, useIdealRrc, true));
@@ -347,12 +345,13 @@
       AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 20,        0,        10,              1,             1, useIdealRrc, true));
       AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 50,        0,         0,              0,             1, useIdealRrc, true));
 
-      // Test cases to check admitRrcConnectionRequest=false
-      //AddTestCase (new LteRrcConnectionEstablishmentTestCase (  1,        0,         0,              0,             1, useIdealRrc, false));
-      //AddTestCase (new LteRrcConnectionEstablishmentTestCase (  1,        2,       100,              0,             1, useIdealRrc, false));
-      //AddTestCase (new LteRrcConnectionEstablishmentTestCase (  2,        0,        20,              0,             1, useIdealRrc, false));
-      //AddTestCase (new LteRrcConnectionEstablishmentTestCase (  2,        1,        20,              0,             1, useIdealRrc, false));
-      //AddTestCase (new LteRrcConnectionEstablishmentTestCase (  3,        0,        20,              0,             1, useIdealRrc, false));
+      //Test cases to check admitRrcConnectionRequest=false
+      //                                                     nUes, nBearers, tConnBase, tConnIncrPerUe, delayDiscStart, useIdealRrc, admitRrcConnectionRequest
+      AddTestCase (new LteRrcConnectionEstablishmentTestCase (  1,        0,         0,              0,             1, useIdealRrc, false));
+      AddTestCase (new LteRrcConnectionEstablishmentTestCase (  1,        2,       100,              0,             1, useIdealRrc, false));
+      AddTestCase (new LteRrcConnectionEstablishmentTestCase (  2,        0,        20,              0,             1, useIdealRrc, false));
+      AddTestCase (new LteRrcConnectionEstablishmentTestCase (  2,        1,        20,              0,             1, useIdealRrc, false));
+      AddTestCase (new LteRrcConnectionEstablishmentTestCase (  3,        0,        20,              0,             1, useIdealRrc, false));
 
       // // time consuming tests with a lot of UEs
       // AddTestCase (new LteRrcConnectionEstablishmentTestCase (100,        0,        10,              0,             1, useIdealRrc, true));