Loading...
Searching...
No Matches
ns3::SatGenericStreamEncapsulatorArq Class Reference

SatGenericStreamEncapsulatorArq class is inherited from the SatGenericStreamEncapsulator class, which is used in FWD link for encapsulation and fragmentation of higher layer packets. More...

#include "satellite-generic-stream-encapsulator-arq.h"

Inheritance diagram for ns3::SatGenericStreamEncapsulatorArq:
Collaboration diagram for ns3::SatGenericStreamEncapsulatorArq:

Public Member Functions

 SatGenericStreamEncapsulatorArq ()
 Default constructor, not used.
 SatGenericStreamEncapsulatorArq (Mac48Address encapAddress, Mac48Address decapAddress, Mac48Address sourceE2EAddress, Mac48Address destE2EAddress, uint8_t flowId, uint32_t additionalHeaderSize=0)
 Constructor.
virtual ~SatGenericStreamEncapsulatorArq ()
 Destructor for SatGenericStreamEncapsulatorArq.
virtual void DoDispose ()
 Dispose of this class instance.
virtual uint32_t GetTxBufferSizeInBytes () const
 Get the buffered packets for this encapsulator.
virtual void NotifyConstructionCompleted () override
 Notifier called once the ObjectBase is fully constructed.
virtual Ptr< Packet > NotifyTxOpportunity (uint32_t bytes, uint32_t &bytesLeft, uint32_t &nextMinTxO)
 Notify a Tx opportunity to this encapsulator.
virtual void ReceiveAck (Ptr< SatArqAckMessage > ack)
 Receive a control message (ARQ ACK).
virtual void ReceivePdu (Ptr< Packet > p)
 Receive a packet, thus decapsulate and defragment/deconcatenate if needed.
Public Member Functions inherited from ns3::SatGenericStreamEncapsulator
 SatGenericStreamEncapsulator ()
 Default constructor, not used.
 SatGenericStreamEncapsulator (Mac48Address encapAddress, Mac48Address decapAddress, Mac48Address sourceE2EAddress, Mac48Address destE2EAddress, uint8_t flowId, uint32_t additionalHeaderSize=0)
 Constructor.
virtual ~SatGenericStreamEncapsulator ()
 Destructor for SatGenericStreamEncapsulator.
virtual void EnquePdu (Ptr< Packet > p, Mac48Address dest)
 Enqueue a Higher Layer packet to txBuffer.
virtual uint32_t GetMinTxOpportunityInBytes () const
 Get minimum Tx opportunity in bytes, which takes the assumed header sizes into account.
Public Member Functions inherited from ns3::SatBaseEncapsulator
 SatBaseEncapsulator ()
 Default constructor not used.
 SatBaseEncapsulator (Mac48Address encapAddress, Mac48Address decapAddress, Mac48Address sourceE2EAddress, Mac48Address destE2EAddress, uint8_t flowId, uint32_t additionalHeaderSize=0)
 Constructor.
virtual ~SatBaseEncapsulator ()
 Destructor for SatBaseEncapsulator.
virtual Time GetHolDelay () const
 Get Head-of-Line packet buffering delay.
Ptr< SatQueueGetQueue ()
 Get the queue instance.
void SetCtrlMsgCallback (SatBaseEncapsulator::SendCtrlCallback cb)
void SetQueue (Ptr< SatQueue > queue)
 Set the used queue from outside.
void SetReceiveCallback (ReceiveCallback cb)
 Method to set receive callback.

Static Public Member Functions

static TypeId GetTypeId (void)
 Get the type ID.
Static Public Member Functions inherited from ns3::SatGenericStreamEncapsulator
static TypeId GetTypeId (void)
 Get the type ID.
Static Public Member Functions inherited from ns3::SatBaseEncapsulator
static TypeId GetTypeId (void)
 Get the type ID.

Private Member Functions

void ArqReTxTimerExpired (uint8_t seqNo)
 ARQ Tx timer has expired.
void CleanUp (uint8_t sequenceNumber)
 Clean-up a certain sequence number.
uint32_t ConvertSeqNo (uint8_t seqNo) const
 Convert the 8-bit sequence number value from ARQ header into 32-bit continuous sequence number stream at the receiver.
void ReassembleAndReceive ()
 Reassemble and receive the received PDUs if possible.
void RxWaitingTimerExpired (uint32_t sn)
 Rx waiting timer for a PDU has expired.
void SendAck (uint8_t seqNo) const
 Send ACK for a given sequence number.

Private Attributes

uint32_t m_arqHeaderSize
 ARQ header size in Bytes.
uint32_t m_arqWindowSize
 ARQ window size, i.e.
uint32_t m_maxNoOfRetransmissions
 Maximum number of retransmissions.
uint32_t m_nextExpectedSeqNo
 Next expected sequence number at the packet reception.
std::map< uint32_t, Ptr< SatArqBufferContext > > m_reorderingBuffer
 key = sequence number value = GSE packet
Time m_retransmissionTimer
 Retransmission timer, i.e.
std::map< uint8_t, Ptr< SatArqBufferContext > > m_retxBuffer
uint32_t m_retxBufferSize
Time m_rxWaitingTimer
 Waiting time for waiting a certain SN to be received.
Ptr< SatArqSequenceNumberm_seqNo
 Sequence number handler.
std::map< uint8_t, Ptr< SatArqBufferContext > > m_txedBuffer
 Transmitted and retransmission context buffer.
uint32_t m_txedBufferSize

Additional Inherited Members

Public Types inherited from ns3::SatBaseEncapsulator
typedef Callback< void, Ptr< Packet >, Mac48Address, Mac48Address > ReceiveCallback
 Callback to send packet to lower layer.
typedef Callback< bool, Ptr< SatControlMessage >, const Address & > SendCtrlCallback
 Control msg sending callback.
Protected Member Functions inherited from ns3::SatGenericStreamEncapsulator
Ptr< Packet > GetNewGsePdu (uint32_t txOpportunityBytes, uint32_t maxGsePduSize, uint32_t additionalHeaderSize=0)
 Get new packet performs the GSE fragmentation and encapsulation for a one single packet.
void IncreaseFragmentId ()
 Method increases the fragment id by one.
virtual void ProcessPdu (Ptr< Packet > p)
 Process the reception of individual GSE PDUs.
void Reset ()
 Reset defragmentation variables.
Protected Attributes inherited from ns3::SatGenericStreamEncapsulator
uint32_t m_currRxFragmentId
 Current fragment id in the reassembly process.
Ptr< Packet > m_currRxPacketFragment
 Current packet in the reassembly process.
uint32_t m_currRxPacketFragmentBytes
 Currently received bytes of the fragmented packet.
uint32_t m_currRxPacketSize
 The total size of the ALPDU size reassembly process.
uint32_t m_maxGsePduSize
 Maximum GSE PDU size.
uint32_t m_minGseTxOpportunity
 If the GSE opportunity is smaller than this, a NULL packet is returned.
uint32_t m_txFragmentId
 Fragment id used in the packet transmissions.
Protected Attributes inherited from ns3::SatBaseEncapsulator
uint32_t m_additionalHeaderSize
 Additional value in to take into account when pulling packets to represent E2E tags.
SendCtrlCallback m_ctrlCallback
 Callback to send control messages.
Mac48Address m_decapAddress
Mac48Address m_destE2EAddress
Mac48Address m_encapAddress
 Source and destination mac addresses.
uint8_t m_flowId
 Flow identifier.
ReceiveCallback m_rxCallback
 Receive callback.
Mac48Address m_sourceE2EAddress
Ptr< SatQueuem_txQueue
 Used queue in satellite encapsulator.
Static Protected Attributes inherited from ns3::SatGenericStreamEncapsulator
static const uint32_t MAX_FRAGMENT_ID = 256
 The fragment is described with 8 bits, thus the maximum fragment id is 256.
static const uint32_t MAX_HL_PACKET_SIZE = 65536
 The maximum packet size is described with 16 bits, thus, the maximum HL packet size is 65536 bytes.

Detailed Description

SatGenericStreamEncapsulatorArq class is inherited from the SatGenericStreamEncapsulator class, which is used in FWD link for encapsulation and fragmentation of higher layer packets.

This class implements the ARQ retransmission logic in both transmission and reception side for GSE.

Implemented algorithm is based on Selective Repeat ARQ. Retransmission logic is based on a set of timers and added increasing sequence numbers for each sent packet. When a packet is received, and ACK is sent to the receiver with a proper sequence number.

Definition at line 52 of file satellite-generic-stream-encapsulator-arq.h.

Constructor & Destructor Documentation

◆ SatGenericStreamEncapsulatorArq() [1/2]

ns3::SatGenericStreamEncapsulatorArq::SatGenericStreamEncapsulatorArq ( )

Default constructor, not used.

Default constructor is not meant to be used!

Definition at line 46 of file satellite-generic-stream-encapsulator-arq.cc.

References m_arqHeaderSize, m_arqWindowSize, m_maxNoOfRetransmissions, m_nextExpectedSeqNo, m_retransmissionTimer, m_retxBuffer, m_retxBufferSize, m_seqNo, m_txedBuffer, and m_txedBufferSize.

◆ SatGenericStreamEncapsulatorArq() [2/2]

ns3::SatGenericStreamEncapsulatorArq::SatGenericStreamEncapsulatorArq ( Mac48Address encapAddress,
Mac48Address decapAddress,
Mac48Address sourceE2EAddress,
Mac48Address destE2EAddress,
uint8_t flowId,
uint32_t additionalHeaderSize = 0 )

Constructor.

Parameters
encapAddressMAC addressd of encapsulator
decapAddressMAC addressd of decapsulator
sourceE2EAddressE2E source MAC addressd of packets (used to set SatAddressE2ETag)
destE2EAddressE2E destination MAC addressd of packets (used to set SatAddressE2ETag)
flowIdFlow identifier
additionalHeaderSizeAdditional value in to take into account when pulling packets to represent E2E tags

Definition at line 66 of file satellite-generic-stream-encapsulator-arq.cc.

References ns3::SatGenericStreamEncapsulator::SatGenericStreamEncapsulator(), m_arqHeaderSize, m_arqWindowSize, m_maxNoOfRetransmissions, m_nextExpectedSeqNo, m_retransmissionTimer, m_retxBuffer, m_retxBufferSize, m_seqNo, m_txedBuffer, and m_txedBufferSize.

Here is the call graph for this function:

◆ ~SatGenericStreamEncapsulatorArq()

ns3::SatGenericStreamEncapsulatorArq::~SatGenericStreamEncapsulatorArq ( )
virtual

Destructor for SatGenericStreamEncapsulatorArq.

Definition at line 104 of file satellite-generic-stream-encapsulator-arq.cc.

References m_seqNo.

Member Function Documentation

◆ ArqReTxTimerExpired()

void ns3::SatGenericStreamEncapsulatorArq::ArqReTxTimerExpired ( uint8_t seqNo)
private

ARQ Tx timer has expired.

The PDU will be flushed, if the maximum retransmissions has been reached. Otherwise the packet will be resent.

Parameters
seqNoSequence number

Definition at line 344 of file satellite-generic-stream-encapsulator-arq.cc.

References CleanUp(), ns3::SatBaseEncapsulator::m_encapAddress, m_maxNoOfRetransmissions, m_retxBuffer, m_retxBufferSize, and m_txedBuffer.

Referenced by NotifyTxOpportunity().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CleanUp()

void ns3::SatGenericStreamEncapsulatorArq::CleanUp ( uint8_t sequenceNumber)
private

Clean-up a certain sequence number.

Parameters
sequenceNumberSequence number

Definition at line 389 of file satellite-generic-stream-encapsulator-arq.cc.

References m_retxBuffer, m_retxBufferSize, m_seqNo, m_txedBuffer, and m_txedBufferSize.

Referenced by ArqReTxTimerExpired(), and ReceiveAck().

Here is the caller graph for this function:

◆ ConvertSeqNo()

uint32_t ns3::SatGenericStreamEncapsulatorArq::ConvertSeqNo ( uint8_t seqNo) const
private

Convert the 8-bit sequence number value from ARQ header into 32-bit continuous sequence number stream at the receiver.

Parameters
seqNo8-bit sequence number
Returns
uint32_t 32-bit sequence number

Definition at line 551 of file satellite-generic-stream-encapsulator-arq.cc.

References m_arqWindowSize, and m_nextExpectedSeqNo.

Referenced by ReceivePdu().

Here is the caller graph for this function:

◆ DoDispose()

void ns3::SatGenericStreamEncapsulatorArq::DoDispose ( )
virtual

Dispose of this class instance.

Reimplemented from ns3::SatGenericStreamEncapsulator.

Definition at line 150 of file satellite-generic-stream-encapsulator-arq.cc.

References ns3::SatGenericStreamEncapsulator::DoDispose(), m_reorderingBuffer, m_retxBuffer, m_seqNo, and m_txedBuffer.

Here is the call graph for this function:

◆ GetTxBufferSizeInBytes()

uint32_t ns3::SatGenericStreamEncapsulatorArq::GetTxBufferSizeInBytes ( ) const
virtual

Get the buffered packets for this encapsulator.

Returns
uint32_t buffered bytes

Reimplemented from ns3::SatBaseEncapsulator.

Definition at line 653 of file satellite-generic-stream-encapsulator-arq.cc.

References m_retxBufferSize, and ns3::SatBaseEncapsulator::m_txQueue.

Referenced by NotifyTxOpportunity().

Here is the caller graph for this function:

◆ GetTypeId()

TypeId ns3::SatGenericStreamEncapsulatorArq::GetTypeId ( void )
static

Get the type ID.

Returns
the object TypeId

Definition at line 111 of file satellite-generic-stream-encapsulator-arq.cc.

References ns3::SatGenericStreamEncapsulator::SatGenericStreamEncapsulator(), m_arqHeaderSize, m_arqWindowSize, m_maxNoOfRetransmissions, m_retransmissionTimer, and m_rxWaitingTimer.

Here is the call graph for this function:

◆ NotifyConstructionCompleted()

void ns3::SatGenericStreamEncapsulatorArq::NotifyConstructionCompleted ( )
overridevirtual

Notifier called once the ObjectBase is fully constructed.

This method is invoked once all member attributes have been initialized. Subclasses can override this method to be notified of this event but if they do this, they must chain up to their parent's NotifyConstructionCompleted method.

Definition at line 94 of file satellite-generic-stream-encapsulator-arq.cc.

References m_arqWindowSize, and m_seqNo.

◆ NotifyTxOpportunity()

Ptr< Packet > ns3::SatGenericStreamEncapsulatorArq::NotifyTxOpportunity ( uint32_t bytes,
uint32_t & bytesLeft,
uint32_t & nextMinTxO )
virtual

Notify a Tx opportunity to this encapsulator.

Parameters
bytesNotified tx opportunity bytes from lower layer
&bytesLeftBytes left after this TxOpportunity in SatQueue
&nextMinTxOMinimum TxO after this TxO
Returns
A GSE PDU

Give priority to the retransmissions. Whenever, the retransmission timer is expired, packet is moved to the retransmission buffer from the transmitted buffer.

Reimplemented from ns3::SatGenericStreamEncapsulator.

Definition at line 189 of file satellite-generic-stream-encapsulator-arq.cc.

References ArqReTxTimerExpired(), ns3::SatGenericStreamEncapsulator::GetMinTxOpportunityInBytes(), ns3::SatGenericStreamEncapsulator::GetNewGsePdu(), GetTxBufferSizeInBytes(), m_arqHeaderSize, ns3::SatBaseEncapsulator::m_decapAddress, ns3::SatBaseEncapsulator::m_destE2EAddress, ns3::SatBaseEncapsulator::m_encapAddress, ns3::SatBaseEncapsulator::m_flowId, m_retransmissionTimer, m_retxBuffer, m_retxBufferSize, m_seqNo, ns3::SatBaseEncapsulator::m_sourceE2EAddress, m_txedBuffer, m_txedBufferSize, ns3::SatBaseEncapsulator::m_txQueue, ns3::SatMacTag::SetDestAddress(), ns3::SatAddressE2ETag::SetE2EDestAddress(), ns3::SatAddressE2ETag::SetE2ESourceAddress(), ns3::SatFlowIdTag::SetFlowId(), ns3::SatArqHeader::SetSeqNo(), and ns3::SatMacTag::SetSourceAddress().

Here is the call graph for this function:

◆ ReassembleAndReceive()

void ns3::SatGenericStreamEncapsulatorArq::ReassembleAndReceive ( )
private

Reassemble and receive the received PDUs if possible.

As long as the PDU is the next expected one, process the PDU and erase it.

Definition at line 589 of file satellite-generic-stream-encapsulator-arq.cc.

References m_nextExpectedSeqNo, m_reorderingBuffer, and ns3::SatGenericStreamEncapsulator::ProcessPdu().

Referenced by ReceivePdu(), and RxWaitingTimerExpired().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReceiveAck()

void ns3::SatGenericStreamEncapsulatorArq::ReceiveAck ( Ptr< SatArqAckMessage > ack)
virtual

Receive a control message (ARQ ACK).

Parameters
ackControl message pointer received from lower layer

Take the packet away from the transmitted or retransmission buffer and release the sequence number for further use.

Reimplemented from ns3::SatBaseEncapsulator.

Definition at line 420 of file satellite-generic-stream-encapsulator-arq.cc.

References CleanUp(), and ns3::SatBaseEncapsulator::m_encapAddress.

Here is the call graph for this function:

◆ ReceivePdu()

void ns3::SatGenericStreamEncapsulatorArq::ReceivePdu ( Ptr< Packet > p)
virtual

Receive a packet, thus decapsulate and defragment/deconcatenate if needed.

The decapsuled/defragmented HL PDU is forwarded back to LLC and to upper layer.

Parameters
pA packet pointer received from lower layer

Reimplemented from ns3::SatGenericStreamEncapsulator.

Definition at line 437 of file satellite-generic-stream-encapsulator-arq.cc.

References ConvertSeqNo(), ns3::SatMacTag::GetDestAddress(), ns3::SatArqHeader::GetSeqNo(), ns3::SatBaseEncapsulator::m_decapAddress, ns3::SatBaseEncapsulator::m_encapAddress, m_nextExpectedSeqNo, m_reorderingBuffer, m_rxWaitingTimer, ReassembleAndReceive(), RxWaitingTimerExpired(), and SendAck().

Here is the call graph for this function:

◆ RxWaitingTimerExpired()

void ns3::SatGenericStreamEncapsulatorArq::RxWaitingTimerExpired ( uint32_t sn)
private

Rx waiting timer for a PDU has expired.

Parameters
snSequence number

Definition at line 630 of file satellite-generic-stream-encapsulator-arq.cc.

References ns3::SatBaseEncapsulator::m_encapAddress, m_reorderingBuffer, and ReassembleAndReceive().

Referenced by ReceivePdu().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SendAck()

void ns3::SatGenericStreamEncapsulatorArq::SendAck ( uint8_t seqNo) const
private

Send ACK for a given sequence number.

Parameters
seqNoSequence number

GSE sends the ACK control message via a callback to SatNetDevice of the GW to the RLE control buffer. The transmission assumptions for the control messages are currently

  • Default (most robust) MODCOD
  • Strict priority

Definition at line 661 of file satellite-generic-stream-encapsulator-arq.cc.

References ns3::SatBaseEncapsulator::m_ctrlCallback, ns3::SatBaseEncapsulator::m_decapAddress, ns3::SatBaseEncapsulator::m_encapAddress, and ns3::SatBaseEncapsulator::m_flowId.

Referenced by ReceivePdu().

Here is the caller graph for this function:

Member Data Documentation

◆ m_arqHeaderSize

uint32_t ns3::SatGenericStreamEncapsulatorArq::m_arqHeaderSize
private

◆ m_arqWindowSize

uint32_t ns3::SatGenericStreamEncapsulatorArq::m_arqWindowSize
private

ARQ window size, i.e.

how many sequential sequence numbers may be in use simultaneously.

Definition at line 201 of file satellite-generic-stream-encapsulator-arq.h.

Referenced by SatGenericStreamEncapsulatorArq(), SatGenericStreamEncapsulatorArq(), ConvertSeqNo(), GetTypeId(), and NotifyConstructionCompleted().

◆ m_maxNoOfRetransmissions

uint32_t ns3::SatGenericStreamEncapsulatorArq::m_maxNoOfRetransmissions
private

◆ m_nextExpectedSeqNo

uint32_t ns3::SatGenericStreamEncapsulatorArq::m_nextExpectedSeqNo
private

Next expected sequence number at the packet reception.

Definition at line 211 of file satellite-generic-stream-encapsulator-arq.h.

Referenced by SatGenericStreamEncapsulatorArq(), SatGenericStreamEncapsulatorArq(), ConvertSeqNo(), ReassembleAndReceive(), and ReceivePdu().

◆ m_reorderingBuffer

std::map<uint32_t, Ptr<SatArqBufferContext> > ns3::SatGenericStreamEncapsulatorArq::m_reorderingBuffer
private

key = sequence number value = GSE packet

Definition at line 222 of file satellite-generic-stream-encapsulator-arq.h.

Referenced by DoDispose(), ReassembleAndReceive(), ReceivePdu(), and RxWaitingTimerExpired().

◆ m_retransmissionTimer

Time ns3::SatGenericStreamEncapsulatorArq::m_retransmissionTimer
private

Retransmission timer, i.e.

when to retransmit a packet if a ACK has not been received.

Definition at line 195 of file satellite-generic-stream-encapsulator-arq.h.

Referenced by SatGenericStreamEncapsulatorArq(), SatGenericStreamEncapsulatorArq(), GetTypeId(), and NotifyTxOpportunity().

◆ m_retxBuffer

std::map<uint8_t, Ptr<SatArqBufferContext> > ns3::SatGenericStreamEncapsulatorArq::m_retxBuffer
private

◆ m_retxBufferSize

uint32_t ns3::SatGenericStreamEncapsulatorArq::m_retxBufferSize
private

◆ m_rxWaitingTimer

Time ns3::SatGenericStreamEncapsulatorArq::m_rxWaitingTimer
private

Waiting time for waiting a certain SN to be received.

Definition at line 216 of file satellite-generic-stream-encapsulator-arq.h.

Referenced by GetTypeId(), and ReceivePdu().

◆ m_seqNo

◆ m_txedBuffer

std::map<uint8_t, Ptr<SatArqBufferContext> > ns3::SatGenericStreamEncapsulatorArq::m_txedBuffer
private

◆ m_txedBufferSize

uint32_t ns3::SatGenericStreamEncapsulatorArq::m_txedBufferSize
private

The documentation for this class was generated from the following files: