5G-LENA nr-v4.0-29-g6d8085cd
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-rlc-am.h
1// Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
2//
3// SPDX-License-Identifier: GPL-2.0-only
4//
5// Author: Manuel Requena <manuel.requena@cttc.es>
6
7#ifndef NR_RLC_AM_H
8#define NR_RLC_AM_H
9
10#include "nr-rlc-sequence-number.h"
11#include "nr-rlc.h"
12
13#include "ns3/event-id.h"
14
15#include <map>
16#include <vector>
17
18namespace ns3
19{
20
24class NrRlcAm : public NrRlc
25{
26 public:
27 NrRlcAm();
28 ~NrRlcAm() override;
33 static TypeId GetTypeId();
34 void DoDispose() override;
35
41 void DoTransmitPdcpPdu(Ptr<Packet> p) override;
42
52 void DoNotifyHarqDeliveryFailure() override;
53 void DoReceivePdu(NrMacSapUser::ReceivePduParameters rxPduParams) override;
54
55 private:
61 void ExpireReorderingTimer();
63 void ExpirePollRetransmitTimer();
65 void ExpireBsrTimer();
66
71 void ExpireStatusProhibitTimer();
72
79 bool IsInsideReceivingWindow(nr::SequenceNumber10 seqNumber);
80 //
81 // void ReassembleOutsideWindow ();
82 // void ReassembleSnLessThan (uint16_t seqNumber);
83 //
84
90 void ReassembleAndDeliver(Ptr<Packet> packet);
91
95 void DoTransmitBufferStatusReport();
96
97 private:
101 struct TxPdu
102 {
108 TxPdu(const Ptr<Packet>& pdu, const Time& time)
109 : m_pdu(pdu),
110 m_waitingSince(time)
111 {
112 }
113
114 TxPdu() = delete;
115
116 Ptr<Packet> m_pdu;
117 Time m_waitingSince;
118 };
119
120 std::vector<TxPdu> m_txonBuffer;
121
123 struct RetxPdu
124 {
125 Ptr<Packet> m_pdu;
126 uint16_t m_retxCount;
127 Time m_waitingSince;
128 };
129
130 std::vector<RetxPdu> m_txedBuffer;
133 std::vector<RetxPdu> m_retxBuffer;
134
135 uint32_t m_maxTxBufferSize;
136 uint32_t m_txonBufferSize;
137 uint32_t m_retxBufferSize;
138 uint32_t m_txedBufferSize;
139
140 bool m_statusPduRequested;
141 uint32_t m_statusPduBufferSize;
142
144 struct PduBuffer
145 {
146 nr::SequenceNumber10 m_seqNumber;
147 std::list<Ptr<Packet>> m_byteSegments;
148
149 bool m_pduComplete;
150 };
151
152 std::map<uint16_t, PduBuffer> m_rxonBuffer;
153
154 Ptr<Packet> m_controlPduBuffer;
155
156 // SDU reassembly
157 // std::vector < Ptr<Packet> > m_reasBuffer; // Reassembling buffer
158 //
159 std::list<Ptr<Packet>> m_sdusBuffer;
160
164 // Transmitting side
166 nr::SequenceNumber10 m_vtMs;
168 nr::SequenceNumber10 m_pollSn;
169
170 // Receiving side
172 nr::SequenceNumber10 m_vrMr;
174 nr::SequenceNumber10 m_vrMs;
176
180 uint32_t m_pduWithoutPoll;
181 uint32_t m_byteWithoutPoll;
182
186 uint16_t m_windowSize;
187
191 EventId m_pollRetransmitTimer;
192 Time m_pollRetransmitTimerValue;
193 EventId m_reorderingTimer;
194 Time m_reorderingTimerValue;
195 EventId m_statusProhibitTimer;
196 Time m_statusProhibitTimerValue;
197 EventId m_bsrTimer;
198 Time m_bsrTimerValue;
199
203 uint16_t m_maxRetxThreshold;
204 uint16_t m_pollPdu;
205 uint16_t m_pollByte;
206
207 bool m_txOpportunityForRetxAlwaysBigEnough;
208 bool m_pollRetransmitTimerJustExpired;
209
213 enum ReassemblingState_t
214 {
215 NONE = 0,
216 WAITING_S0_FULL = 1,
217 WAITING_SI_SF = 2
218 };
219
220 ReassemblingState_t m_reassemblingState;
221 Ptr<Packet> m_keepS0;
222
226 nr::SequenceNumber10 m_expectedSeqNumber;
227};
228
229} // namespace ns3
230
231#endif // NR_RLC_AM_H
void DoNotifyHarqDeliveryFailure() override
Definition nr-rlc-am.cc:768
static TypeId GetTypeId()
Get the type ID.
Definition nr-rlc-am.cc:74
void DoNotifyTxOpportunity(NrMacSapUser::TxOpportunityParameters txOpParams) override
Definition nr-rlc-am.cc:186
void DoReceivePdu(NrMacSapUser::ReceivePduParameters rxPduParams) override
Definition nr-rlc-am.cc:774
void DoTransmitPdcpPdu(Ptr< Packet > p) override
Definition nr-rlc-am.cc:148