5G-LENA nr-v4.0-29-g6d8085cd
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-rlc-am-header.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_HEADER_H
8#define NR_RLC_AM_HEADER_H
9
10#include "nr-rlc-sequence-number.h"
11
12#include "ns3/header.h"
13
14#include <list>
15
16namespace ns3
17{
18
27class NrRlcAmHeader : public Header
28{
29 public:
36 ~NrRlcAmHeader() override;
37
39 void SetDataPdu();
45 void SetControlPdu(uint8_t controlPduType);
50 bool IsDataPdu() const;
55 bool IsControlPdu() const;
56
59 {
60 CONTROL_PDU = 0,
61 DATA_PDU = 1
62 };
63
65 static constexpr uint8_t STATUS_PDU{0};
66
67 //
68 // DATA PDU
69 //
70
76 void SetSequenceNumber(nr::SequenceNumber10 sequenceNumber);
83
89 void SetFramingInfo(uint8_t framingInfo);
95 uint8_t GetFramingInfo() const;
96
99 {
100 FIRST_BYTE = 0x00,
101 NO_FIRST_BYTE = 0x02,
102 LAST_BYTE = 0x00,
103 NO_LAST_BYTE = 0x01
104 };
105
111 void PushExtensionBit(uint8_t extensionBit);
117 void PushLengthIndicator(uint16_t lengthIndicator);
118
124 uint8_t PopExtensionBit();
130 uint16_t PopLengthIndicator();
131
134 {
135 DATA_FIELD_FOLLOWS = 0,
136 E_LI_FIELDS_FOLLOWS = 1
137 };
138
144 void SetResegmentationFlag(uint8_t resegFlag);
150 uint8_t GetResegmentationFlag() const;
151
154 {
155 PDU = 0,
156 SEGMENT = 1
157 };
158
164 void SetPollingBit(uint8_t pollingBit);
170 uint8_t GetPollingBit() const;
171
174 {
175 STATUS_REPORT_NOT_REQUESTED = 0,
176 STATUS_REPORT_IS_REQUESTED = 1
177 };
178
184 void SetLastSegmentFlag(uint8_t lsf);
190 uint8_t GetLastSegmentFlag() const;
191
194 {
195 NO_LAST_PDU_SEGMENT = 0,
196 LAST_PDU_SEGMENT = 1
197 };
198
204 void SetSegmentOffset(uint16_t segmentOffset);
210 uint16_t GetSegmentOffset() const;
216 uint16_t GetLastOffset() const;
217
218 //
219 // CONTROL PDU
220 //
221
227 void SetAckSn(nr::SequenceNumber10 ackSn);
234
239 static TypeId GetTypeId();
240 TypeId GetInstanceTypeId() const override;
241 void Print(std::ostream& os) const override;
242 uint32_t GetSerializedSize() const override;
243 void Serialize(Buffer::Iterator start) const override;
244 uint32_t Deserialize(Buffer::Iterator start) override;
245
253 bool OneMoreNackWouldFitIn(uint16_t bytes);
254
260 void PushNack(int nack);
261
270
277 int PopNack();
278
279 private:
280 uint16_t m_headerLength;
281 uint8_t m_dataControlBit;
282
283 // Data PDU fields
284 uint8_t m_resegmentationFlag;
285 uint8_t m_pollingBit;
286 uint8_t m_framingInfo;
287 nr::SequenceNumber10 m_sequenceNumber;
288 uint8_t m_lastSegmentFlag;
289 uint16_t m_segmentOffset;
290 uint16_t m_lastOffset;
291
292 std::list<uint8_t> m_extensionBits;
293 std::list<uint16_t> m_lengthIndicators;
294
295 // Control PDU fields
296 uint8_t m_controlPduType;
297
298 // Status PDU fields
299 nr::SequenceNumber10 m_ackSn;
300 std::list<int> m_nackSnList;
301
302 std::list<uint8_t> m_extensionBits1;
303 std::list<uint8_t> m_extensionBits2;
304};
305
306}; // namespace ns3
307
308#endif // NR_RLC_AM_HEADER_H
The packet header for the AM Radio Link Control (RLC) protocol packets.
ExtensionBit_t
ExtensionBit_t typedef.
void SetPollingBit(uint8_t pollingBit)
nr::SequenceNumber10 GetSequenceNumber() const
NrRlcAmHeader()
Constructor.
bool IsNackPresent(nr::SequenceNumber10 nack)
void SetResegmentationFlag(uint8_t resegFlag)
bool OneMoreNackWouldFitIn(uint16_t bytes)
ResegmentationFlag_t
ResegmentationFlag_t typedef.
void SetFramingInfo(uint8_t framingInfo)
bool IsControlPdu() const
nr::SequenceNumber10 GetAckSn() const
FramingInfoByte_t
FramingInfoByte_t enumeration.
static TypeId GetTypeId()
Get the type ID.
uint16_t GetLastOffset() const
void SetDataPdu()
Set data PDU function.
void PushNack(int nack)
uint8_t GetFramingInfo() const
uint8_t GetPollingBit() const
void SetAckSn(nr::SequenceNumber10 ackSn)
uint16_t GetSegmentOffset() const
static constexpr uint8_t STATUS_PDU
Control PDU type status.
PollingBit_t
PollingBit_t enumeration.
void SetSegmentOffset(uint16_t segmentOffset)
void SetControlPdu(uint8_t controlPduType)
uint8_t GetResegmentationFlag() const
DataControlPdu_t
DataControlPdu_t enumeration.
void SetSequenceNumber(nr::SequenceNumber10 sequenceNumber)
void PushLengthIndicator(uint16_t lengthIndicator)
void PushExtensionBit(uint8_t extensionBit)
void SetLastSegmentFlag(uint8_t lsf)
uint8_t GetLastSegmentFlag() const
LastSegmentFlag_t
LastSegmentFlag_t typedef.