5G-LENA nr-v4.0
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-pdcp-header.cc
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#include "nr-pdcp-header.h"
8
9#include "ns3/log.h"
10
11namespace ns3
12{
13
14NS_LOG_COMPONENT_DEFINE("NrPdcpHeader");
15
16NS_OBJECT_ENSURE_REGISTERED(NrPdcpHeader);
17
19 : m_dcBit(0xff),
20 m_sequenceNumber(0xfffa)
21{
22}
23
24NrPdcpHeader::~NrPdcpHeader()
25{
26 m_dcBit = 0xff;
27 m_sequenceNumber = 0xfffb;
28}
29
30void
32{
33 m_dcBit = dcBit & 0x01;
34}
35
36void
37NrPdcpHeader::SetSequenceNumber(uint16_t sequenceNumber)
38{
39 m_sequenceNumber = sequenceNumber & 0x0FFF;
40}
41
42uint8_t
44{
45 return m_dcBit;
46}
47
48uint16_t
50{
51 return m_sequenceNumber;
52}
53
54TypeId
56{
57 static TypeId tid = TypeId("ns3::NrPdcpHeader")
58 .SetParent<Header>()
59 .SetGroupName("Nr")
60 .AddConstructor<NrPdcpHeader>();
61 return tid;
62}
63
64TypeId
65NrPdcpHeader::GetInstanceTypeId() const
66{
67 return GetTypeId();
68}
69
70void
71NrPdcpHeader::Print(std::ostream& os) const
72{
73 os << "D/C=" << (uint16_t)m_dcBit;
74 os << " SN=" << m_sequenceNumber;
75}
76
77uint32_t
78NrPdcpHeader::GetSerializedSize() const
79{
80 return 2;
81}
82
83void
84NrPdcpHeader::Serialize(Buffer::Iterator start) const
85{
86 Buffer::Iterator i = start;
87
88 i.WriteU8((m_dcBit << 7) | (m_sequenceNumber & 0x0F00) >> 8);
89 i.WriteU8(m_sequenceNumber & 0x00FF);
90}
91
92uint32_t
93NrPdcpHeader::Deserialize(Buffer::Iterator start)
94{
95 Buffer::Iterator i = start;
96 uint8_t byte_1;
97 uint8_t byte_2;
98
99 byte_1 = i.ReadU8();
100 byte_2 = i.ReadU8();
101 m_dcBit = (byte_1 & 0x80) > 7;
102 // For now, we just support DATA PDUs
103 NS_ASSERT(m_dcBit == DATA_PDU);
104 m_sequenceNumber = ((byte_1 & 0x0F) << 8) | byte_2;
105
106 return GetSerializedSize();
107}
108
109}; // namespace ns3
The packet header for the Packet Data Convergence Protocol (PDCP) packets.
void SetSequenceNumber(uint16_t sequenceNumber)
Set sequence number.
static TypeId GetTypeId()
Get the type ID.
uint8_t GetDcBit() const
Get DC bit.
uint16_t GetSequenceNumber() const
Get sequence number.
NrPdcpHeader()
Constructor.
void SetDcBit(uint8_t dcBit)
Set DC bit.