7#include "nr-epc-gtpu-header.h"
10#include "ns3/packet.h"
15NS_LOG_COMPONENT_DEFINE(
"NrGtpuHeader");
21NS_OBJECT_ENSURE_REGISTERED(NrGtpuHeader);
26 static TypeId tid = TypeId(
"ns3::NrGtpuHeader")
33NrGtpuHeader::NrGtpuHeader()
36 m_extensionHeaderFlag(false),
37 m_sequenceNumberFlag(true),
38 m_nPduNumberFlag(true),
44 m_nextExtensionType(0)
48NrGtpuHeader::~NrGtpuHeader()
53NrGtpuHeader::GetInstanceTypeId()
const
59NrGtpuHeader::GetSerializedSize()
const
65NrGtpuHeader::Serialize(Buffer::Iterator start)
const
67 Buffer::Iterator i = start;
68 uint8_t firstByte = m_version << 5 | m_protocolType << 4 | 0x1 << 3;
69 firstByte |= m_extensionHeaderFlag << 2 | m_sequenceNumberFlag << 1 | m_nPduNumberFlag;
71 i.WriteU8(m_messageType);
72 i.WriteHtonU16(m_length);
73 i.WriteHtonU32(m_teid);
74 i.WriteHtonU16(m_sequenceNumber);
75 i.WriteU8(m_nPduNumber);
76 i.WriteU8(m_nextExtensionType);
80NrGtpuHeader::Deserialize(Buffer::Iterator start)
82 Buffer::Iterator i = start;
83 uint8_t firstByte = i.ReadU8();
84 m_version = firstByte >> 5 & 0x7;
85 m_protocolType = firstByte >> 4 & 0x1;
86 m_extensionHeaderFlag = firstByte >> 2 & 0x1;
87 m_sequenceNumberFlag = firstByte >> 1 & 0x1;
88 m_nPduNumberFlag = firstByte & 0x1;
89 m_messageType = i.ReadU8();
90 m_length = i.ReadNtohU16();
91 m_teid = i.ReadNtohU32();
92 m_sequenceNumber = i.ReadNtohU16();
93 m_nPduNumber = i.ReadU8();
94 m_nextExtensionType = i.ReadU8();
95 return GetSerializedSize();
99NrGtpuHeader::Print(std::ostream& os)
const
101 os <<
" version=" << (uint32_t)m_version <<
" [";
106 if (m_extensionHeaderFlag)
110 if (m_sequenceNumberFlag)
114 if (m_nPduNumberFlag)
118 os <<
"], messageType=" << (uint32_t)m_messageType <<
", length=" << (uint32_t)m_length;
119 os <<
", teid=" << (uint32_t)m_teid <<
", sequenceNumber=" << (uint32_t)m_sequenceNumber;
120 os <<
", nPduNumber=" << (uint32_t)m_nPduNumber
121 <<
", nextExtensionType=" << (uint32_t)m_nextExtensionType;
127 return m_extensionHeaderFlag;
139 return m_messageType;
151 return m_nPduNumberFlag;
157 return m_nextExtensionType;
163 return m_protocolType;
169 return m_sequenceNumber;
175 return m_sequenceNumberFlag;
193 this->m_extensionHeaderFlag = m_extensionHeaderFlag;
199 this->m_length = m_length;
205 this->m_messageType = m_messageType;
211 this->m_nPduNumber = m_nPduNumber;
217 this->m_nPduNumberFlag = m_nPduNumberFlag;
223 this->m_nextExtensionType = m_nextExtensionType;
229 this->m_protocolType = m_protocolType;
235 this->m_sequenceNumber = m_sequenceNumber;
241 this->m_sequenceNumberFlag = m_sequenceNumberFlag;
247 this->m_teid = m_teid;
254 this->m_version = m_version & 0x7;
260 return m_version == b.m_version && m_protocolType == b.m_protocolType &&
261 m_extensionHeaderFlag == b.m_extensionHeaderFlag &&
262 m_sequenceNumberFlag == b.m_sequenceNumberFlag &&
263 m_nPduNumberFlag == b.m_nPduNumberFlag && m_messageType == b.m_messageType &&
264 m_length == b.m_length && m_teid == b.m_teid && m_sequenceNumber == b.m_sequenceNumber &&
265 m_nPduNumber == b.m_nPduNumber && m_nextExtensionType == b.m_nextExtensionType;