merge
This commit is contained in:
@@ -216,7 +216,7 @@ EpcUeNas::DoRecvData (Ptr<Packet> packet)
|
||||
void
|
||||
EpcUeNas::DoNotifyConnectionReleased ()
|
||||
{
|
||||
NS_FATAL_ERROR ("connection failed, it should not happen with the current model");
|
||||
NS_LOG_FUNCTION (this);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
|
||||
|
||||
@@ -205,6 +205,48 @@ LteRlcAm::DoNotifyTxOpportunity (uint32_t bytes, uint8_t layer, uint8_t harqId)
|
||||
{
|
||||
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 @@ LteRlcAm::DoNotifyTxOpportunity (uint32_t bytes, uint8_t layer, uint8_t harqId)
|
||||
|
||||
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 @@ LteRlcAm::DoReportBufferStatus (void)
|
||||
|
||||
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 @@ LteRlcAm::DoReportBufferStatus (void)
|
||||
|
||||
// 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 @@ LteRlcAm::DoReportBufferStatus (void)
|
||||
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 @@ LteRlcAm::ExpirePollRetransmitTimer (void)
|
||||
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 ();
|
||||
}
|
||||
|
||||
@@ -288,11 +288,13 @@ LteUeRrcProtocolReal::DoReceivePdcpPdu (Ptr<Packet> 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<Packet> p)
|
||||
break;
|
||||
case 2:
|
||||
// RrcConnectionReject
|
||||
// ...
|
||||
p->RemoveHeader (rrcConnectionReestablishmentRejectHeader);
|
||||
rrcConnectionReestablishmentRejectMsg = rrcConnectionReestablishmentRejectHeader.GetMessage ();
|
||||
m_ueRrcSapProvider->RecvRrcConnectionReject (rrcConnectionRejectMsg);
|
||||
break;
|
||||
case 3:
|
||||
// RrcConnectionSetup
|
||||
|
||||
@@ -588,11 +588,10 @@ LteUeMac::DoReceiveLteControlMessage (Ptr<LteControlMessage> msg)
|
||||
}
|
||||
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
|
||||
{
|
||||
|
||||
@@ -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,6 +694,7 @@ void
|
||||
LteUeRrc::DoRecvRrcConnectionReject (LteRrcSap::RrcConnectionReject msg)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
SwitchToState (OFF);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ public:
|
||||
CONNECTED_NORMALLY,
|
||||
CONNECTED_REESTABLISHING,
|
||||
CONNECTED_HANDOVER,
|
||||
OFF,
|
||||
NUM_STATES
|
||||
};
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
|
||||
}
|
||||
|
||||
|
||||
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 @@ LenaPfFfMacSchedulerTestCase2::DoRun (void)
|
||||
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 ();
|
||||
|
||||
@@ -63,7 +63,7 @@ LteRlcAmE2eTestSuite::LteRlcAmE2eTestSuite ()
|
||||
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]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,7 +203,7 @@ LenaRrFfMacSchedulerTestCase::DoRun (void)
|
||||
* 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 @@ LenaRrFfMacSchedulerTestCase::DoRun (void)
|
||||
}
|
||||
|
||||
|
||||
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));
|
||||
|
||||
Reference in New Issue
Block a user