merge
authorMarco Miozzo <marco.miozzo@cttc.es>
Fri, 14 Dec 2012 09:48:02 +0100
changeset 9536 da6e0a3c432b
parent 9535 999521532532 (current diff)
parent 9534 dd0e48ae0ab6 (diff)
child 9537 97d251292a2c
child 9539 8ae380bcb768
merge
src/lte/model/lte-ue-mac.cc
--- a/src/lte/model/epc-ue-nas.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/epc-ue-nas.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -216,7 +216,7 @@
 void 
 EpcUeNas::DoNotifyConnectionReleased ()
 {
-  NS_FATAL_ERROR ("connection failed, it should not happen with the current model");
+  NS_LOG_FUNCTION (this);
 }
 
 void 
--- a/src/lte/model/lte-enb-rrc.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/lte-enb-rrc.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -1097,6 +1097,11 @@
                    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 @@
 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
--- a/src/lte/model/lte-enb-rrc.h	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/lte-enb-rrc.h	Fri Dec 14 09:48:02 2012 +0100
@@ -574,6 +574,7 @@
                                    RLC_UM_ALWAYS = 2,
                                    RLC_AM_ALWAYS = 3,
                                    PER_BASED = 4};
+
 private:
 
 
@@ -725,6 +726,7 @@
   bool m_reconfigureUes;
 
   bool m_admitHandoverRequest;
+  bool m_admitRrcConnectionRequest;
 
   //             imsi      cellid    rnti   
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
--- a/src/lte/model/lte-rlc-am.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/lte-rlc-am.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -205,6 +205,48 @@
     {
       NS_LOG_LOGIC ("Sending data from Transmission Buffer");
     }
+  else if ( m_txedBufferSize > 0 )
+    {
+      NS_LOG_LOGIC ("Sending data from Transmitted Buffer");
+
+      NS_LOG_INFO ("VT(A)     = " << m_vtA);
+      NS_LOG_INFO ("VT(S)     = " << m_vtS);
+
+      uint16_t vta = m_vtA.GetValue ();
+      Ptr<Packet> packet = m_txedBuffer.at (vta)->Copy ();
+
+      if ( packet->GetSize () <= bytes )
+        {
+          NS_LOG_INFO ("Move SN = " << vta << " to retxBuffer");
+          m_retxBuffer.at (vta).m_pdu = m_txedBuffer.at (vta)->Copy ();
+          m_retxBuffer.at (vta).m_retxCount = 1;
+          m_retxBufferSize += m_retxBuffer.at (vta).m_pdu->GetSize ();
+
+          m_txedBufferSize -= m_txedBuffer.at (vta)->GetSize ();
+          m_txedBuffer.at (vta) = 0;
+
+          LteRlcAmHeader rlcAmHeader;
+          packet->PeekHeader (rlcAmHeader);
+          NS_LOG_LOGIC ("RLC header: " << rlcAmHeader);
+
+          // Send RLC PDU to MAC layer
+          LteMacSapProvider::TransmitPduParameters params;
+          params.pdu = packet;
+          params.rnti = m_rnti;
+          params.lcid = m_lcid;
+          params.layer = layer;
+          params.harqProcessId = harqId;
+
+          m_macSapProvider->TransmitPdu (params);
+          return;
+        }
+      else
+        {
+          NS_LOG_LOGIC ("Tx opportunity too small for retransmission of the packet (" << packet->GetSize () << " bytes)");
+          NS_LOG_LOGIC ("Waiting for bigger tx opportunity");
+          return;
+        }
+    }
   else
     {
       NS_LOG_LOGIC ("No data pending");
@@ -262,7 +304,7 @@
 
           NS_LOG_LOGIC ("    IF ( firstSegment > nextSegmentSize ||");
           NS_LOG_LOGIC ("         firstSegment > 2047 )");
-          
+
           // Segment txBuffer.FirstBuffer and
           // Give back the remaining segment to the transmission buffer
           Ptr<Packet> newSegment = firstSegment->CreateFragment (0, currSegmentSize);
@@ -1445,6 +1487,12 @@
 
   Time now = Simulator::Now ();
 
+  NS_LOG_LOGIC ("txonBufferSize = " << m_txonBufferSize);
+  NS_LOG_LOGIC ("retxBufferSize = " << m_retxBufferSize);
+  NS_LOG_LOGIC ("txedBufferSize = " << m_txedBufferSize);
+  NS_LOG_LOGIC ("VT(A) = " << m_vtA);
+  NS_LOG_LOGIC ("VT(S) = " << m_vtS);
+
   // Transmission Queue HOL time
   Time txonQueueHolDelay (0);
   if ( m_txonBufferSize > 0 )
@@ -1456,10 +1504,15 @@
 
   // Retransmission Queue HOL time
   Time retxQueueHolDelay (0);
+  RlcTag retxQueueHolTimeTag;
   if ( m_retxBufferSize > 0 )
     {
-      RlcTag retxQueueHolTimeTag;
-//       m_retxBuffer.front ().m_pdu->PeekPacketTag (retxQueueHolTimeTag);
+      m_retxBuffer.at (m_vtA.GetValue ()).m_pdu->PeekPacketTag (retxQueueHolTimeTag);
+      retxQueueHolDelay = now - retxQueueHolTimeTag.GetSenderTimestamp ();
+    }
+  else if ( m_txedBufferSize > 0 )
+    {
+      m_txedBuffer.at (m_vtA.GetValue ())->PeekPacketTag (retxQueueHolTimeTag);
       retxQueueHolDelay = now - retxQueueHolTimeTag.GetSenderTimestamp ();
     }
 
@@ -1468,7 +1521,7 @@
   r.lcid = m_lcid;
   r.txQueueSize = m_txonBufferSize;
   r.txQueueHolDelay = txonQueueHolDelay.GetMilliSeconds ();
-  r.retxQueueSize = m_retxBufferSize;
+  r.retxQueueSize = m_retxBufferSize + m_txedBufferSize;
   r.retxQueueHolDelay = retxQueueHolDelay.GetMilliSeconds ();
 
   if ( m_statusPduRequested && ! m_statusProhibitTimer.IsRunning () )
@@ -1536,9 +1589,7 @@
   NS_LOG_LOGIC ("txonBufferSize = " << m_txonBufferSize);
   NS_LOG_LOGIC ("retxBufferSize = " << m_retxBufferSize);
   NS_LOG_LOGIC ("txedBufferSize = " << m_txedBufferSize);
-
   NS_LOG_LOGIC ("statusPduRequested = " << m_statusPduRequested);
-  NS_LOG_LOGIC ("VT(S) = " << m_vtS);
 
   DoReportBufferStatus ();
 }
--- a/src/lte/model/lte-rrc-protocol-real.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/lte-rrc-protocol-real.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -288,11 +288,13 @@
   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 @@
       break;
     case 2:
       // RrcConnectionReject
-      // ...
+      p->RemoveHeader (rrcConnectionReestablishmentRejectHeader);
+      rrcConnectionReestablishmentRejectMsg = rrcConnectionReestablishmentRejectHeader.GetMessage ();
+      m_ueRrcSapProvider->RecvRrcConnectionReject (rrcConnectionRejectMsg);
       break;
     case 3:
       // RrcConnectionSetup
--- a/src/lte/model/lte-ue-mac.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/lte-ue-mac.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -588,11 +588,10 @@
                         }
                       else if ((*itBsr).second.txQueueSize > 0)
                         {
-                          bytesForThisLc -= 2; // remove RLC header
                           (*it).second.macSapUser->NotifyTxOpportunity (bytesForThisLc, 0, 0);
-                          if ((*itBsr).second.txQueueSize >= bytesForThisLc)
+                          if ((*itBsr).second.txQueueSize >= bytesForThisLc - 2)
                             {
-                              (*itBsr).second.txQueueSize -= bytesForThisLc;
+                              (*itBsr).second.txQueueSize -= bytesForThisLc - 2;
                             }
                           else
                             {
--- a/src/lte/model/lte-ue-rrc.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/lte-ue-rrc.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -99,7 +99,8 @@
     "IDLE_CONNECTING",
     "CONNECTED_NORMALLY",
     "CONNECTED_REESTABLISHING",
-    "CONNECTED_HANDOVER"
+    "CONNECTED_HANDOVER",
+    "OFF"
   };
 
 std::string ToString (LteUeRrc::State s)
@@ -693,6 +694,7 @@
 LteUeRrc::DoRecvRrcConnectionReject (LteRrcSap::RrcConnectionReject msg)
 {
   NS_LOG_FUNCTION (this);
+  SwitchToState (OFF);
 }
 
 
--- a/src/lte/model/lte-ue-rrc.h	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/model/lte-ue-rrc.h	Fri Dec 14 09:48:02 2012 +0100
@@ -72,6 +72,7 @@
       CONNECTED_NORMALLY,
       CONNECTED_REESTABLISHING,
       CONNECTED_HANDOVER,
+      OFF,
       NUM_STATES
     };
 
--- a/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -268,7 +268,7 @@
     }
 
 
-  double statsStartTime = 0.100; // need to allow for RRC connection establishment + SRS
+  double statsStartTime = 0.300; // need to allow for RRC connection establishment + SRS
   double statsDuration = 0.6;
   double tolerance = 0.1;
   Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.000001));
@@ -428,10 +428,10 @@
       uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
     }
 
-  double statsStartTime = 0.100; // need to allow for RRC connection establishment + SRS
+  double statsStartTime = 0.300; // need to allow for RRC connection establishment + SRS
   double statsDuration = 0.4;
   double tolerance = 0.1;
-  Simulator::Stop (Seconds (statsStartTime + statsDuration + 0.000001));
+  Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.000001));
 
   lteHelper->EnableRlcTraces ();
   Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
--- a/src/lte/test/lte-test-rlc-am-e2e.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/test/lte-test-rlc-am-e2e.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -63,7 +63,7 @@
       for ( uint32_t s = 0 ; s < (sizeof (seeds) / sizeof (uint32_t)) ; s++ )
         {
           std::ostringstream name;
-          name << " Losses = " << losses[l] << "%. Seed = " << seeds[s];
+          name << " Losses = " << losses[l] * 100 << "%. Seed = " << seeds[s];
           AddTestCase (new LteRlcAmE2eTestCase (name.str (), seeds[s], losses[l]));
         }
     }
--- a/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	Fri Dec 14 09:33:46 2012 +0100
+++ b/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	Fri Dec 14 09:48:02 2012 +0100
@@ -203,7 +203,7 @@
    * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
    */
 
-
+LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL);
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
   
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
@@ -254,7 +254,7 @@
     }
 
 
-  double statsStartTime = 0.100; // need to allow for RRC connection establishment + SRS
+  double statsStartTime = 0.300; // need to allow for RRC connection establishment + SRS
   double statsDuration = 0.4;
   double tolerance = 0.1;
   Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));