#include <lte-rlc-am.h>
Classes | |
struct | PduBuffer |
struct | RetxBuffer |
Public Member Functions | |
LteRlcAm () | |
virtual | ~LteRlcAm () |
virtual void | DoNotifyHarqDeliveryFailure () |
virtual void | DoNotifyTxOpportunity (uint32_t bytes, uint8_t layer) |
virtual void | DoReceivePdu (Ptr< Packet > p) |
virtual void | DoTransmitPdcpPdu (Ptr< Packet > p) |
void | Start () |
![]() | |
LteRlc () | |
virtual | ~LteRlc () |
LteMacSapUser * | GetLteMacSapUser () |
LteRlcSapProvider * | GetLteRlcSapProvider () |
void | SetLcId (uint8_t lcId) |
void | SetLteMacSapProvider (LteMacSapProvider *s) |
void | SetLteRlcSapUser (LteRlcSapUser *s) |
void | SetRnti (uint16_t rnti) |
![]() | |
Object () | |
virtual | ~Object () |
void | AggregateObject (Ptr< Object > other) |
void | Dispose (void) |
AggregateIterator | GetAggregateIterator (void) const |
virtual TypeId | GetInstanceTypeId (void) const |
template<typename T > | |
Ptr< T > | GetObject (void) const |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
![]() | |
SimpleRefCount () | |
SimpleRefCount (const SimpleRefCount &o) | |
uint32_t | GetReferenceCount (void) const |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
void | Ref (void) const |
void | Unref (void) const |
![]() | |
virtual | ~ObjectBase () |
void | GetAttribute (std::string name, AttributeValue &value) const |
bool | GetAttributeFailSafe (std::string name, AttributeValue &attribute) const |
void | SetAttribute (std::string name, const AttributeValue &value) |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Static Public Member Functions | |
static TypeId | GetTypeId (void) |
Private Types | |
enum | ReassemblingState_t { NONE = 0, WAITING_S0_FULL = 1, WAITING_SI_SF = 2 } |
Private Member Functions | |
void | ExpirePollRetransmitTimer (void) |
void | ExpireReorderingTimer (void) |
bool | IsInsideReceivingWindow (SequenceNumber10 seqNumber) |
void | ReassembleAndDeliver (Ptr< Packet > packet) |
Private Attributes | |
uint32_t | m_byteWithoutPoll |
Ptr< Packet > | m_controlPduBuffer |
SequenceNumber10 | m_expectedSeqNumber |
Ptr< Packet > | m_keepS0 |
uint16_t | m_maxRetxThreshold |
uint32_t | m_pduWithoutPoll |
uint16_t | m_pollByte |
uint16_t | m_pollPdu |
EventId | m_pollRetransmitTimer |
SequenceNumber10 | m_pollSn |
ReassemblingState_t | m_reassemblingState |
EventId | m_reorderingTimer |
std::vector< RetxBuffer > | m_retxBuffer |
uint32_t | m_retxBufferSize |
std::map< uint16_t, PduBuffer > | m_rxonBuffer |
std::list< Ptr< Packet > > | m_sdusBuffer |
uint32_t | m_statusPduBufferSize |
bool | m_statusPduRequested |
EventId | m_statusProhibitTimer |
std::vector< Ptr< Packet > > | m_txedBuffer |
uint32_t | m_txedBufferSize |
std::vector< Ptr< Packet > > | m_txonBuffer |
uint32_t | m_txonBufferSize |
SequenceNumber10 | m_vrH |
SequenceNumber10 | m_vrMr |
SequenceNumber10 | m_vrMs |
SequenceNumber10 | m_vrR |
SequenceNumber10 | m_vrX |
SequenceNumber10 | m_vtA |
SequenceNumber10 | m_vtMs |
SequenceNumber10 | m_vtS |
uint16_t | m_windowSize |
Additional Inherited Members | |
![]() | |
Object (const Object &o) | |
virtual void | DoDispose (void) |
virtual void | DoStart (void) |
virtual void | NotifyNewAggregate (void) |
![]() | |
uint8_t | m_lcid |
LteMacSapProvider * | m_macSapProvider |
LteMacSapUser * | m_macSapUser |
LteRlcSapProvider * | m_rlcSapProvider |
LteRlcSapUser * | m_rlcSapUser |
uint16_t | m_rnti |
TracedCallback< uint16_t, uint8_t, uint32_t, uint64_t > | m_rxPdu |
TracedCallback< uint16_t, uint8_t, uint32_t > | m_txPdu |
LTE RLC Acknowledged Mode (AM), see 3GPP TS 36.322
ns3::LteRlcAm is accessible through the following paths with Config::Set and Config::Connect:
No Attributes are defined for this type.
No TraceSources are defined for this type.
Definition at line 36 of file lte-rlc-am.h.
|
private |
SDU Reassembling state
Definition at line 155 of file lte-rlc-am.h.
ns3::LteRlcAm::LteRlcAm | ( | ) |
Definition at line 35 of file lte-rlc-am.cc.
References m_byteWithoutPoll, m_expectedSeqNumber, m_maxRetxThreshold, m_pduWithoutPoll, m_pollByte, m_pollPdu, m_pollSn, m_reassemblingState, m_retxBuffer, m_retxBufferSize, m_statusPduBufferSize, m_statusPduRequested, m_txedBuffer, m_txedBufferSize, m_txonBufferSize, m_vrH, m_vrMr, m_vrMs, m_vrR, m_vrX, m_vtA, m_vtMs, m_vtS, m_windowSize, NS_LOG_FUNCTION, ns3::Simulator::ScheduleNow(), Start(), and WAITING_S0_FULL.
|
virtual |
Definition at line 79 of file lte-rlc-am.cc.
|
virtual |
|
virtual |
MAC SAP
Implements ns3::LteRlc.
Definition at line 165 of file lte-rlc-am.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::AddByteTag(), ns3::Packet::AddHeader(), ns3::Packet::AddPacketTag(), ns3::EventId::Cancel(), ns3::Packet::Copy(), ns3::Packet::CreateFragment(), ns3::LteRlcAmHeader::DATA_FIELD_FOLLOWS, ns3::LteRlcAmHeader::E_LI_FIELDS_FOLLOWS, ExpirePollRetransmitTimer(), ns3::LteRlcAmHeader::FIRST_BYTE, ns3::LteRlcSduStatusTag::FIRST_SEGMENT, ns3::LteRlcSduStatusTag::FULL_SDU, ns3::Packet::GetSize(), ns3::LteRlcSduStatusTag::GetStatus(), ns3::SequenceNumber10::GetValue(), ns3::EventId::IsRunning(), ns3::LteRlcAmHeader::LAST_BYTE, ns3::LteRlcAmHeader::LAST_PDU_SEGMENT, ns3::LteRlcSduStatusTag::LAST_SEGMENT, ns3::LteMacSapProvider::TransmitPduParameters::lcid, m_byteWithoutPoll, ns3::LteRlc::m_lcid, ns3::LteRlc::m_macSapProvider, m_pduWithoutPoll, m_pollByte, m_pollPdu, m_pollRetransmitTimer, m_pollSn, m_retxBuffer, m_retxBufferSize, ns3::LteRlc::m_rnti, m_statusPduRequested, m_statusProhibitTimer, m_txedBuffer, m_txedBufferSize, m_txonBuffer, m_txonBufferSize, ns3::LteRlc::m_txPdu, m_vrR, m_vtA, m_vtMs, m_vtS, ns3::LteRlcSduStatusTag::MIDDLE_SEGMENT, ns3::LteRlcAmHeader::NO_FIRST_BYTE, ns3::LteRlcAmHeader::NO_LAST_BYTE, ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::LteMacSapProvider::TransmitPduParameters::pdu, ns3::LteRlcAmHeader::PDU, ns3::Packet::PeekHeader(), ns3::Packet::RemoveAtStart(), ns3::Packet::RemovePacketTag(), ns3::LteMacSapProvider::TransmitPduParameters::rnti, ns3::Simulator::Schedule(), ns3::LteRlcAmHeader::SetControlPdu(), ns3::LteRlcAmHeader::SetDataPdu(), ns3::LteRlcAmHeader::STATUS_PDU, ns3::LteRlcAmHeader::STATUS_REPORT_IS_REQUESTED, ns3::LteRlcAmHeader::STATUS_REPORT_NOT_REQUESTED, and ns3::LteMacSapProvider::TransmitPdu().
Implements ns3::LteRlc.
Definition at line 553 of file lte-rlc-am.cc.
References ns3::EventId::Cancel(), ExpireReorderingTimer(), ns3::Packet::FindFirstMatchingByteTag(), ns3::Time::GetMilliSeconds(), ns3::Time::GetNanoSeconds(), ns3::RlcTag::GetSenderTimestamp(), ns3::Packet::GetSize(), ns3::SequenceNumber10::GetValue(), IsInsideReceivingWindow(), ns3::EventId::IsRunning(), ns3::LteMacSapProvider::ReportBufferStatusParameters::lcid, ns3::LteRlc::m_lcid, ns3::LteRlc::m_macSapProvider, m_maxRetxThreshold, m_reorderingTimer, m_retxBuffer, m_retxBufferSize, ns3::LteRlc::m_rnti, m_rxonBuffer, ns3::LteRlc::m_rxPdu, m_statusPduBufferSize, m_statusPduRequested, m_statusProhibitTimer, m_txedBuffer, m_txedBufferSize, m_txonBuffer, m_txonBufferSize, m_vrH, m_vrMr, m_vrMs, m_vrR, m_vrX, m_vtA, m_vtS, m_windowSize, ns3::Now(), NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, NS_LOG_WARN, ns3::LteRlcAmHeader::PDU, ns3::Packet::PeekHeader(), ReassembleAndDeliver(), ns3::LteMacSapProvider::ReportBufferStatus(), ns3::LteMacSapProvider::ReportBufferStatusParameters::retxQueueHolDelay, ns3::LteMacSapProvider::ReportBufferStatusParameters::retxQueueSize, ns3::LteMacSapProvider::ReportBufferStatusParameters::rnti, ns3::Simulator::Schedule(), ns3::LteRlcAmHeader::SEGMENT, ns3::LteRlcAmHeader::STATUS_REPORT_IS_REQUESTED, ns3::LteMacSapProvider::ReportBufferStatusParameters::statusPduSize, ns3::LteMacSapProvider::ReportBufferStatusParameters::txQueueHolDelay, and ns3::LteMacSapProvider::ReportBufferStatusParameters::txQueueSize.
RLC SAP
Store arrival time
Store PDCP PDU
Report Buffer Status
Implements ns3::LteRlc.
Definition at line 99 of file lte-rlc-am.cc.
References ns3::Packet::AddPacketTag(), ns3::LteRlcSduStatusTag::FULL_SDU, ns3::Time::GetMilliSeconds(), ns3::RlcTag::GetSenderTimestamp(), ns3::Packet::GetSize(), ns3::EventId::IsRunning(), ns3::LteMacSapProvider::ReportBufferStatusParameters::lcid, ns3::LteRlc::m_lcid, ns3::LteRlc::m_macSapProvider, m_retxBufferSize, ns3::LteRlc::m_rnti, m_statusPduBufferSize, m_statusPduRequested, m_statusProhibitTimer, m_txonBuffer, m_txonBufferSize, ns3::Now(), NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, ns3::LteMacSapProvider::ReportBufferStatus(), ns3::LteMacSapProvider::ReportBufferStatusParameters::retxQueueHolDelay, ns3::LteMacSapProvider::ReportBufferStatusParameters::retxQueueSize, ns3::LteMacSapProvider::ReportBufferStatusParameters::rnti, ns3::LteRlcSduStatusTag::SetStatus(), ns3::LteMacSapProvider::ReportBufferStatusParameters::statusPduSize, ns3::LteMacSapProvider::ReportBufferStatusParameters::txQueueHolDelay, and ns3::LteMacSapProvider::ReportBufferStatusParameters::txQueueSize.
|
private |
Definition at line 1556 of file lte-rlc-am.cc.
References NS_LOG_LOGIC.
Referenced by DoNotifyTxOpportunity().
|
private |
This method will schedule a timeout at WaitReplyTimeout interval in the future, unless a timer is already running for the cache, in which case this method does nothing.
Definition at line 1520 of file lte-rlc-am.cc.
References ns3::SequenceNumber10::GetValue(), m_reorderingTimer, m_rxonBuffer, m_vrH, m_vrMs, m_vrX, NS_ASSERT_MSG, NS_LOG_LOGIC, and ns3::Simulator::Schedule().
Referenced by DoReceivePdu().
|
static |
Reimplemented from ns3::LteRlc.
Definition at line 84 of file lte-rlc-am.cc.
References ns3::TypeId::SetParent().
|
private |
Definition at line 1025 of file lte-rlc-am.cc.
References m_vrMr, m_vrR, NS_LOG_FUNCTION, NS_LOG_LOGIC, and ns3::SequenceNumber10::SetModulusBase().
Referenced by DoReceivePdu().
Deliver one or multiple PDUs
Deliver full PDUs
Keep S0
ERROR: Transition not possible
Deliver (Kept)S0 + SN
Deliver zero, one or multiple PDUs
Keep SI
Deliver (Kept)S0 + SN
Deliver zero, one or multiple PDUs
Keep S0
ERROR: Transition not possible
Deliver one or multiple PDUs
Deliver full PDUs
Keep S0
Discard SN
Deliver zero, one or multiple PDUs
Discard SI or SN
Deliver zero, one or multiple PDUs
Keep S0
ERROR: Transition not possible
Discard S0
Deliver one or multiple PDUs
Discard S0
Deliver zero, one or multiple PDUs
Keep S0
Discard S0
Discard SI or SN
Deliver zero, one or multiple PDUs
Discard S0
Discard SI or SN
Deliver zero, one or multiple PDUs
Keep S0
ERROR: Transition not possible
Definition at line 1049 of file lte-rlc-am.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::CreateFragment(), ns3::LteRlcAmHeader::FIRST_BYTE, ns3::LteRlcAmHeader::GetFramingInfo(), ns3::LteRlcAmHeader::GetSequenceNumber(), ns3::Packet::GetSize(), ns3::LteRlcAmHeader::LAST_BYTE, m_expectedSeqNumber, m_keepS0, m_reassemblingState, ns3::LteRlc::m_rlcSapUser, m_sdusBuffer, ns3::LteRlcAmHeader::NO_FIRST_BYTE, ns3::LteRlcAmHeader::NO_LAST_BYTE, NS_LOG_LOGIC, ns3::LteRlcAmHeader::PopExtensionBit(), ns3::LteRlcAmHeader::PopLengthIndicator(), ns3::LteRlcSapUser::ReceivePdcpPdu(), ns3::Packet::RemoveAtStart(), ns3::Packet::RemoveHeader(), WAITING_S0_FULL, and WAITING_SI_SF.
Referenced by DoReceivePdu().
void ns3::LteRlcAm::Start | ( | void | ) |
This method calls the virtual DoStart method on all the objects aggregated to this object. DoStart will be called only once over the lifetime of an object, just like DoDispose is called only once.
Note: the code here is a bit tricky because we need to protect ourselves from modifications in the aggregate array while DoStart is called. The user's implementation of the DoStart method could call GetObject (which could reorder the array) and it could call AggregateObject which would add an object at the end of the array. To be safe, we restart iteration over the array whenever we call some user code, just in case.
Reimplemented from ns3::Object.
Definition at line 1007 of file lte-rlc-am.cc.
References ns3::LteMacSapProvider::ReportBufferStatusParameters::lcid, ns3::LteRlc::m_lcid, ns3::LteRlc::m_macSapProvider, ns3::LteRlc::m_rnti, NS_LOG_FUNCTION, ns3::LteMacSapProvider::ReportBufferStatus(), ns3::LteMacSapProvider::ReportBufferStatusParameters::retxQueueHolDelay, ns3::LteMacSapProvider::ReportBufferStatusParameters::retxQueueSize, ns3::LteMacSapProvider::ReportBufferStatusParameters::rnti, ns3::LteMacSapProvider::ReportBufferStatusParameters::statusPduSize, ns3::LteMacSapProvider::ReportBufferStatusParameters::txQueueHolDelay, and ns3::LteMacSapProvider::ReportBufferStatusParameters::txQueueSize.
Referenced by LteRlcAm().
|
private |
Definition at line 131 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), and LteRlcAm().
Definition at line 104 of file lte-rlc-am.h.
|
private |
Expected Sequence Number
Definition at line 164 of file lte-rlc-am.h.
Referenced by LteRlcAm(), and ReassembleAndDeliver().
Definition at line 159 of file lte-rlc-am.h.
Referenced by ReassembleAndDeliver().
|
private |
Configurable parameters. See section 7.4 in TS 36.322
Definition at line 148 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), and LteRlcAm().
|
private |
Counters. See section 7.1 in TS 36.322
Definition at line 130 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), and LteRlcAm().
|
private |
Definition at line 150 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), and LteRlcAm().
|
private |
Definition at line 149 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), and LteRlcAm().
|
private |
Timers. See section 7.3 in TS 36.322
Definition at line 141 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity().
|
private |
Definition at line 118 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), and LteRlcAm().
|
private |
Definition at line 158 of file lte-rlc-am.h.
Referenced by LteRlcAm(), and ReassembleAndDeliver().
|
private |
Definition at line 142 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), and ExpireReorderingTimer().
|
private |
Definition at line 83 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), and LteRlcAm().
|
private |
Definition at line 86 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), DoTransmitPdcpPdu(), and LteRlcAm().
|
private |
Definition at line 102 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), and ExpireReorderingTimer().
Definition at line 109 of file lte-rlc-am.h.
Referenced by ReassembleAndDeliver().
|
private |
Definition at line 90 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), DoTransmitPdcpPdu(), and LteRlcAm().
|
private |
Definition at line 89 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), DoTransmitPdcpPdu(), and LteRlcAm().
|
private |
Definition at line 143 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), and DoTransmitPdcpPdu().
Definition at line 75 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), and LteRlcAm().
|
private |
Definition at line 87 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), and LteRlcAm().
Definition at line 74 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), and DoTransmitPdcpPdu().
|
private |
Definition at line 85 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), DoTransmitPdcpPdu(), and LteRlcAm().
|
private |
Definition at line 125 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), ExpireReorderingTimer(), and LteRlcAm().
|
private |
Definition at line 122 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), IsInsideReceivingWindow(), and LteRlcAm().
|
private |
Definition at line 124 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), ExpireReorderingTimer(), and LteRlcAm().
|
private |
Definition at line 121 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), IsInsideReceivingWindow(), and LteRlcAm().
|
private |
Definition at line 123 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), ExpireReorderingTimer(), and LteRlcAm().
|
private |
State variables. See section 7.1 in TS 36.322
Definition at line 115 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), and LteRlcAm().
|
private |
Definition at line 116 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), and LteRlcAm().
|
private |
Definition at line 117 of file lte-rlc-am.h.
Referenced by DoNotifyTxOpportunity(), DoReceivePdu(), and LteRlcAm().
|
private |
Constants. See section 7.2 in TS 36.322
Definition at line 136 of file lte-rlc-am.h.
Referenced by DoReceivePdu(), and LteRlcAm().