--- 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));