#include <lte-rlc-um.h>
Public Member Functions | |
LteRlcUm () | |
virtual | ~LteRlcUm () |
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 | DoReportBufferStatus () |
void | ExpireRbsTimer (void) |
void | ExpireReorderingTimer (void) |
bool | IsInsideReorderingWindow (SequenceNumber10 seqNumber) |
void | ReassembleAndDeliver (Ptr< Packet > packet) |
void | ReassembleOutsideWindow (void) |
void | ReassembleSnInterval (SequenceNumber10 lowSeqNumber, SequenceNumber10 highSeqNumber) |
Private Attributes | |
SequenceNumber10 | m_expectedSeqNumber |
Ptr< Packet > | m_keepS0 |
uint32_t | m_maxTxBufferSize |
EventId | m_rbsTimer |
std::vector< Ptr< Packet > > | m_reasBuffer |
ReassemblingState_t | m_reassemblingState |
EventId | m_reorderingTimer |
std::map< uint16_t, Ptr< Packet > > | m_rxBuffer |
std::list< Ptr< Packet > > | m_sdusBuffer |
SequenceNumber10 | m_sequenceNumber |
std::vector< Ptr< Packet > > | m_txBuffer |
uint32_t | m_txBufferSize |
SequenceNumber10 | m_vrUh |
SequenceNumber10 | m_vrUr |
SequenceNumber10 | m_vrUx |
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 Unacknowledged Mode (UM), see 3GPP TS 36.322
ns3::LteRlcUm is accessible through the following paths with Config::Set and Config::Connect:
No TraceSources are defined for this type.
Definition at line 35 of file lte-rlc-um.h.
|
private |
Reassembling state
Definition at line 101 of file lte-rlc-um.h.
ns3::LteRlcUm::LteRlcUm | ( | ) |
Definition at line 35 of file lte-rlc-um.cc.
References m_reassemblingState, NS_LOG_FUNCTION, ns3::Simulator::ScheduleNow(), Start(), and WAITING_S0_FULL.
|
virtual |
Definition at line 51 of file lte-rlc-um.cc.
|
virtual |
|
virtual |
MAC SAP
Implements ns3::LteRlc.
Definition at line 118 of file lte-rlc-um.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::AddByteTag(), ns3::Packet::AddHeader(), ns3::Packet::AddPacketTag(), ns3::EventId::Cancel(), ns3::Packet::Copy(), ns3::Packet::CreateFragment(), ns3::LteRlcHeader::DATA_FIELD_FOLLOWS, ns3::LteRlcHeader::E_LI_FIELDS_FOLLOWS, ExpireRbsTimer(), ns3::LteRlcHeader::FIRST_BYTE, ns3::LteRlcSduStatusTag::FIRST_SEGMENT, ns3::LteRlcSduStatusTag::FULL_SDU, ns3::Packet::GetSize(), ns3::LteRlcSduStatusTag::GetStatus(), ns3::LteRlcHeader::LAST_BYTE, ns3::LteRlcSduStatusTag::LAST_SEGMENT, ns3::LteRlc::m_lcid, ns3::LteRlc::m_macSapProvider, m_rbsTimer, ns3::LteRlc::m_rnti, m_sequenceNumber, m_txBuffer, m_txBufferSize, ns3::LteRlc::m_txPdu, ns3::LteRlcSduStatusTag::MIDDLE_SEGMENT, ns3::MilliSeconds(), ns3::LteRlcHeader::NO_FIRST_BYTE, ns3::LteRlcHeader::NO_LAST_BYTE, ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::LteMacSapProvider::TransmitPduParameters::pdu, ns3::Packet::RemoveAtStart(), ns3::Packet::RemovePacketTag(), ns3::Simulator::Schedule(), and ns3::LteMacSapProvider::TransmitPdu().
Implements ns3::LteRlc.
Definition at line 392 of file lte-rlc-um.cc.
References ns3::EventId::Cancel(), ExpireReorderingTimer(), ns3::Packet::FindFirstMatchingByteTag(), ns3::Time::GetNanoSeconds(), ns3::Packet::GetSize(), ns3::SequenceNumber10::GetValue(), IsInsideReorderingWindow(), ns3::EventId::IsRunning(), ns3::LteRlc::m_lcid, m_reorderingTimer, ns3::LteRlc::m_rnti, m_rxBuffer, ns3::LteRlc::m_rxPdu, m_vrUh, m_vrUr, m_vrUx, m_windowSize, ns3::Now(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Packet::PeekHeader(), ReassembleOutsideWindow(), ReassembleSnInterval(), ns3::Simulator::Schedule(), and ns3::SequenceNumber10::SetModulusBase().
|
private |
Definition at line 1111 of file lte-rlc-um.cc.
References ns3::Time::GetMilliSeconds(), ns3::RlcTag::GetSenderTimestamp(), ns3::LteMacSapProvider::ReportBufferStatusParameters::lcid, ns3::LteRlc::m_lcid, ns3::LteRlc::m_macSapProvider, ns3::LteRlc::m_rnti, m_txBuffer, m_txBufferSize, ns3::Now(), NS_LOG_LOGIC, 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 DoTransmitPdcpPdu(), ExpireRbsTimer(), and Start().
RLC SAP
Store arrival time
Store PDCP PDU
Report Buffer Status
Implements ns3::LteRlc.
Definition at line 76 of file lte-rlc-um.cc.
References ns3::Packet::AddPacketTag(), ns3::EventId::Cancel(), DoReportBufferStatus(), ns3::LteRlcSduStatusTag::FULL_SDU, ns3::Packet::GetSize(), ns3::LteRlc::m_lcid, m_maxTxBufferSize, m_rbsTimer, ns3::LteRlc::m_rnti, m_txBuffer, m_txBufferSize, ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_LOGIC, and ns3::LteRlcSduStatusTag::SetStatus().
|
private |
Definition at line 1179 of file lte-rlc-um.cc.
References DoReportBufferStatus(), m_rbsTimer, m_txBuffer, ns3::MilliSeconds(), NS_LOG_LOGIC, and ns3::Simulator::Schedule().
Referenced by DoNotifyTxOpportunity().
|
private |
Definition at line 1140 of file lte-rlc-um.cc.
References ns3::SequenceNumber10::GetValue(), ns3::LteRlc::m_lcid, m_reorderingTimer, ns3::LteRlc::m_rnti, m_rxBuffer, m_vrUh, m_vrUr, m_vrUx, NS_LOG_FUNCTION, NS_LOG_LOGIC, ReassembleSnInterval(), and ns3::Simulator::Schedule().
Referenced by DoReceivePdu().
|
static |
Reimplemented from ns3::LteRlc.
Definition at line 56 of file lte-rlc-um.cc.
References m_maxTxBufferSize, and ns3::TypeId::SetParent().
|
private |
Definition at line 564 of file lte-rlc-um.cc.
References m_vrUh, m_windowSize, NS_LOG_FUNCTION, NS_LOG_LOGIC, and ns3::SequenceNumber10::SetModulusBase().
Referenced by DoReceivePdu(), and ReassembleOutsideWindow().
Deliver one or multiple PDUs
Deliver full PDUs
Keep S0
Discard SI or SN
Deliver zero, one or multiple PDUs
Discard SI or SN
Deliver zero, one or multiple 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 587 of file lte-rlc-um.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::CreateFragment(), ns3::LteRlcHeader::FIRST_BYTE, ns3::LteRlcHeader::GetFramingInfo(), ns3::LteRlcHeader::GetSequenceNumber(), ns3::Packet::GetSize(), ns3::LteRlcHeader::LAST_BYTE, m_expectedSeqNumber, m_keepS0, m_reassemblingState, ns3::LteRlc::m_rlcSapUser, m_sdusBuffer, ns3::LteRlcHeader::NO_FIRST_BYTE, ns3::LteRlcHeader::NO_LAST_BYTE, NS_LOG_LOGIC, ns3::LteRlcHeader::PopExtensionBit(), ns3::LteRlcHeader::PopLengthIndicator(), ns3::LteRlcSapUser::ReceivePdcpPdu(), ns3::Packet::RemoveAtStart(), ns3::Packet::RemoveHeader(), WAITING_S0_FULL, and WAITING_SI_SF.
Referenced by ReassembleOutsideWindow(), and ReassembleSnInterval().
|
private |
Definition at line 1054 of file lte-rlc-um.cc.
References IsInsideReorderingWindow(), m_rxBuffer, NS_LOG_LOGIC, and ReassembleAndDeliver().
Referenced by DoReceivePdu().
|
private |
Definition at line 1080 of file lte-rlc-um.cc.
References ns3::SequenceNumber10::GetValue(), m_rxBuffer, NS_LOG_LOGIC, and ReassembleAndDeliver().
Referenced by DoReceivePdu(), and ExpireReorderingTimer().
void ns3::LteRlcUm::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 555 of file lte-rlc-um.cc.
References DoReportBufferStatus(), and NS_LOG_FUNCTION.
Referenced by LteRlcUm().
|
private |
Expected Sequence Number
Definition at line 110 of file lte-rlc-um.h.
Referenced by ReassembleAndDeliver().
Definition at line 105 of file lte-rlc-um.h.
Referenced by ReassembleAndDeliver().
|
private |
Definition at line 70 of file lte-rlc-um.h.
Referenced by DoTransmitPdcpPdu(), and GetTypeId().
|
private |
Definition at line 96 of file lte-rlc-um.h.
Referenced by DoNotifyTxOpportunity(), DoTransmitPdcpPdu(), and ExpireRbsTimer().
Definition at line 74 of file lte-rlc-um.h.
|
private |
Definition at line 104 of file lte-rlc-um.h.
Referenced by LteRlcUm(), and ReassembleAndDeliver().
|
private |
Timers. See section 7.3 in TS 36.322
Definition at line 95 of file lte-rlc-um.h.
Referenced by DoReceivePdu(), and ExpireReorderingTimer().
Definition at line 73 of file lte-rlc-um.h.
Referenced by DoReceivePdu(), ExpireReorderingTimer(), ReassembleOutsideWindow(), and ReassembleSnInterval().
Definition at line 76 of file lte-rlc-um.h.
Referenced by ReassembleAndDeliver().
|
private |
State variables. See section 7.1 in TS 36.322
Definition at line 81 of file lte-rlc-um.h.
Referenced by DoNotifyTxOpportunity().
Definition at line 72 of file lte-rlc-um.h.
Referenced by DoNotifyTxOpportunity(), DoReportBufferStatus(), DoTransmitPdcpPdu(), and ExpireRbsTimer().
|
private |
Definition at line 71 of file lte-rlc-um.h.
Referenced by DoNotifyTxOpportunity(), DoReportBufferStatus(), and DoTransmitPdcpPdu().
|
private |
Definition at line 85 of file lte-rlc-um.h.
Referenced by DoReceivePdu(), ExpireReorderingTimer(), and IsInsideReorderingWindow().
|
private |
Definition at line 83 of file lte-rlc-um.h.
Referenced by DoReceivePdu(), and ExpireReorderingTimer().
|
private |
Definition at line 84 of file lte-rlc-um.h.
Referenced by DoReceivePdu(), and ExpireReorderingTimer().
|
private |
Constants. See section 7.2 in TS 36.322
Definition at line 90 of file lte-rlc-um.h.
Referenced by DoReceivePdu(), and IsInsideReorderingWindow().