5G-LENA nr-v4.0
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-epc-gtpc-header.h
1// Copyright (c) 2018 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_EPC_GTPC_HEADER_H
8#define NR_EPC_GTPC_HEADER_H
9
10#include "nr-epc-tft.h"
11#include "nr-eps-bearer.h"
12
13#include "ns3/header.h"
14
15namespace ns3
16{
17
26class NrGtpcHeader : public Header
27{
28 public:
30 ~NrGtpcHeader() override;
35 static TypeId GetTypeId();
36 TypeId GetInstanceTypeId() const override;
37 uint32_t GetSerializedSize() const override;
38 void Serialize(Buffer::Iterator start) const override;
39 uint32_t Deserialize(Buffer::Iterator start) override;
40 void Print(std::ostream& os) const override;
41
49 virtual uint32_t GetMessageSize() const;
50
55 uint8_t GetMessageType() const;
60 uint16_t GetMessageLength() const;
65 uint32_t GetTeid() const;
70 uint32_t GetSequenceNumber() const;
71
76 void SetMessageType(uint8_t messageType);
81 void SetMessageLength(uint16_t messageLength);
86 void SetTeid(uint32_t teid);
91 void SetSequenceNumber(uint32_t sequenceNumber);
96 void SetIesLength(uint16_t iesLength);
97
102
105 {
106 S1U_GNB_GTPU = 0,
107 S5_SGW_GTPU = 4,
108 S5_PGW_GTPU = 5,
109 S5_SGW_GTPC = 6,
110 S5_PGW_GTPC = 7,
111 S11_MME_GTPC = 10,
112 };
113
115 struct Fteid_t
116 {
118 Ipv4Address addr;
119 uint32_t teid;
120 };
121
124 {
125 Reserved = 0,
126 CreateSessionRequest = 32,
127 CreateSessionResponse = 33,
128 ModifyBearerRequest = 34,
129 ModifyBearerResponse = 35,
130 DeleteSessionRequest = 36,
131 DeleteSessionResponse = 37,
132 DeleteBearerCommand = 66,
133 DeleteBearerRequest = 99,
134 DeleteBearerResponse = 100,
135 };
136
137 private:
142 bool m_teidFlag;
147 uint8_t m_messageType;
153 uint16_t m_messageLength;
157 uint32_t m_teid;
161 uint32_t m_sequenceNumber;
162
163 protected:
168 void PreSerialize(Buffer::Iterator& i) const;
174 uint32_t PreDeserialize(Buffer::Iterator& i);
175};
176
182{
183 public:
188 {
189 RESERVED = 0,
190 REQUEST_ACCEPTED = 16,
191 };
192
193 const uint32_t serializedSizeImsi = 12;
194 const uint32_t serializedSizeCause = 6;
195 const uint32_t serializedSizeEbi = 5;
196 const uint32_t serializedSizeBearerQos = 26;
198 3 + 9 + 9 + 5 + 5 + 3;
203 uint32_t GetSerializedSizeBearerTft(std::list<NrEpcTft::PacketFilter> packetFilters) const;
204 const uint32_t serializedSizeUliEcgi = 12;
205 const uint32_t serializedSizeFteid = 13;
207
213 void SerializeImsi(Buffer::Iterator& i, uint64_t imsi) const;
220 uint32_t DeserializeImsi(Buffer::Iterator& i, uint64_t& imsi) const;
221
227 void SerializeCause(Buffer::Iterator& i, Cause_t cause) const;
234 uint32_t DeserializeCause(Buffer::Iterator& i, Cause_t& cause) const;
235
241 void SerializeEbi(Buffer::Iterator& i, uint8_t epsBearerId) const;
248 uint32_t DeserializeEbi(Buffer::Iterator& i, uint8_t& epsBearerId) const;
249
258 void WriteHtonU40(Buffer::Iterator& i, uint64_t data) const;
267 uint64_t ReadNtohU40(Buffer::Iterator& i);
268
274 void SerializeBearerQos(Buffer::Iterator& i, NrEpsBearer bearerQos) const;
281 uint32_t DeserializeBearerQos(Buffer::Iterator& i, NrEpsBearer& bearerQos);
282
288 void SerializeBearerTft(Buffer::Iterator& i,
289 std::list<NrEpcTft::PacketFilter> packetFilters) const;
296 uint32_t DeserializeBearerTft(Buffer::Iterator& i, Ptr<NrEpcTft> epcTft) const;
297
303 void SerializeUliEcgi(Buffer::Iterator& i, uint32_t uliEcgi) const;
310 uint32_t DeserializeUliEcgi(Buffer::Iterator& i, uint32_t& uliEcgi) const;
311
317 void SerializeFteid(Buffer::Iterator& i, NrGtpcHeader::Fteid_t fteid) const;
324 uint32_t DeserializeFteid(Buffer::Iterator& i, NrGtpcHeader::Fteid_t& fteid) const;
325
331 void SerializeBearerContextHeader(Buffer::Iterator& i, uint16_t length) const;
338 uint32_t DeserializeBearerContextHeader(Buffer::Iterator& i, uint16_t& length) const;
339};
340
346{
347 public:
354 static TypeId GetTypeId();
355 TypeId GetInstanceTypeId() const override;
356 uint32_t GetSerializedSize() const override;
357 void Serialize(Buffer::Iterator start) const override;
358 uint32_t Deserialize(Buffer::Iterator start) override;
359 void Print(std::ostream& os) const override;
360 uint32_t GetMessageSize() const override;
361
366 uint64_t GetImsi() const;
371 void SetImsi(uint64_t imsi);
372
377 uint32_t GetUliEcgi() const;
382 void SetUliEcgi(uint32_t uliEcgi);
383
394
405
410 std::list<BearerContextToBeCreated> GetBearerContextsToBeCreated() const;
415 void SetBearerContextsToBeCreated(std::list<BearerContextToBeCreated> bearerContexts);
416
417 private:
418 uint64_t m_imsi;
419 uint32_t m_uliEcgi;
420 NrGtpcHeader::Fteid_t m_senderCpFteid;
421
423 std::list<BearerContextToBeCreated> m_bearerContextsToBeCreated;
424};
425
431{
432 public:
439 static TypeId GetTypeId();
440 TypeId GetInstanceTypeId() const override;
441 uint32_t GetSerializedSize() const override;
442 void Serialize(Buffer::Iterator start) const override;
443 uint32_t Deserialize(Buffer::Iterator start) override;
444 void Print(std::ostream& os) const override;
445 uint32_t GetMessageSize() const override;
446
451 Cause_t GetCause() const;
456 void SetCause(Cause_t cause);
457
468
480
485 std::list<BearerContextCreated> GetBearerContextsCreated() const;
490 void SetBearerContextsCreated(std::list<BearerContextCreated> bearerContexts);
491
492 private:
493 Cause_t m_cause;
494 NrGtpcHeader::Fteid_t m_senderCpFteid;
496 std::list<BearerContextCreated> m_bearerContextsCreated;
497};
498
504{
505 public:
512 static TypeId GetTypeId();
513 TypeId GetInstanceTypeId() const override;
514 uint32_t GetSerializedSize() const override;
515 void Serialize(Buffer::Iterator start) const override;
516 uint32_t Deserialize(Buffer::Iterator start) override;
517 void Print(std::ostream& os) const override;
518 uint32_t GetMessageSize() const override;
519
524 uint64_t GetImsi() const;
529 void SetImsi(uint64_t imsi);
530
535 uint32_t GetUliEcgi() const;
540 void SetUliEcgi(uint32_t uliEcgi);
541
550
555 std::list<BearerContextToBeModified> GetBearerContextsToBeModified() const;
560 void SetBearerContextsToBeModified(std::list<BearerContextToBeModified> bearerContexts);
561
562 private:
563 uint64_t m_imsi;
564 uint32_t m_uliEcgi;
565
567 std::list<BearerContextToBeModified> m_bearerContextsToBeModified;
568};
569
575{
576 public:
583 static TypeId GetTypeId();
584 TypeId GetInstanceTypeId() const override;
585 uint32_t GetSerializedSize() const override;
586 void Serialize(Buffer::Iterator start) const override;
587 uint32_t Deserialize(Buffer::Iterator start) override;
588 void Print(std::ostream& os) const override;
589 uint32_t GetMessageSize() const override;
590
595 Cause_t GetCause() const;
600 void SetCause(Cause_t cause);
601
602 private:
603 Cause_t m_cause;
604};
605
611{
612 public:
619 static TypeId GetTypeId();
620 TypeId GetInstanceTypeId() const override;
621 uint32_t GetSerializedSize() const override;
622 void Serialize(Buffer::Iterator start) const override;
623 uint32_t Deserialize(Buffer::Iterator start) override;
624 void Print(std::ostream& os) const override;
625 uint32_t GetMessageSize() const override;
626
629 {
631 };
632
637 std::list<BearerContext> GetBearerContexts() const;
642 void SetBearerContexts(std::list<BearerContext> bearerContexts);
643
644 private:
645 std::list<BearerContext> m_bearerContexts;
646};
647
653{
654 public:
661 static TypeId GetTypeId();
662 TypeId GetInstanceTypeId() const override;
663 uint32_t GetSerializedSize() const override;
664 void Serialize(Buffer::Iterator start) const override;
665 uint32_t Deserialize(Buffer::Iterator start) override;
666 void Print(std::ostream& os) const override;
667 uint32_t GetMessageSize() const override;
668
673 std::list<uint8_t> GetEpsBearerIds() const;
678 void SetEpsBearerIds(std::list<uint8_t> epsBearerIds);
679
680 private:
681 std::list<uint8_t> m_epsBearerIds;
682};
683
689{
690 public:
697 static TypeId GetTypeId();
698 TypeId GetInstanceTypeId() const override;
699 uint32_t GetSerializedSize() const override;
700 void Serialize(Buffer::Iterator start) const override;
701 uint32_t Deserialize(Buffer::Iterator start) override;
702 void Print(std::ostream& os) const override;
703 uint32_t GetMessageSize() const override;
704
709 Cause_t GetCause() const;
714 void SetCause(Cause_t cause);
715
720 std::list<uint8_t> GetEpsBearerIds() const;
725 void SetEpsBearerIds(std::list<uint8_t> epsBearerIds);
726
727 private:
728 Cause_t m_cause;
729 std::list<uint8_t> m_epsBearerIds;
730};
731
732} // namespace ns3
733
734#endif // NR_EPC_GTPC_HEADER_H
This class contains the specification of EPS Bearers.
NrGtpcHeader::Fteid_t GetSenderCpFteid() const
void SetSenderCpFteid(NrGtpcHeader::Fteid_t fteid)
std::list< BearerContextToBeCreated > GetBearerContextsToBeCreated() const
void SetBearerContextsToBeCreated(std::list< BearerContextToBeCreated > bearerContexts)
static TypeId GetTypeId()
Get the type ID.
static TypeId GetTypeId()
Get the type ID.
void SetBearerContextsCreated(std::list< BearerContextCreated > bearerContexts)
std::list< BearerContextCreated > GetBearerContextsCreated() const
void SetSenderCpFteid(NrGtpcHeader::Fteid_t fteid)
NrGtpcHeader::Fteid_t GetSenderCpFteid() const
void SetBearerContexts(std::list< BearerContext > bearerContexts)
static TypeId GetTypeId()
Get the type ID.
std::list< BearerContext > GetBearerContexts() const
void SetEpsBearerIds(std::list< uint8_t > epsBearerIds)
std::list< uint8_t > GetEpsBearerIds() const
static TypeId GetTypeId()
Get the type ID.
std::list< uint8_t > GetEpsBearerIds() const
static TypeId GetTypeId()
Get the type ID.
void SetEpsBearerIds(std::list< uint8_t > epsBearerIds)
Header of the GTPv2-C protocol.
uint8_t GetMessageType() const
static TypeId GetTypeId()
Get the type ID.
void SetMessageType(uint8_t messageType)
uint32_t GetTeid() const
void SetIesLength(uint16_t iesLength)
uint16_t GetMessageLength() const
virtual uint32_t GetMessageSize() const
InterfaceType_t
Interface Type enumeration.
void SetMessageLength(uint16_t messageLength)
void PreSerialize(Buffer::Iterator &i) const
void SetTeid(uint32_t teid)
uint32_t PreDeserialize(Buffer::Iterator &i)
uint32_t GetSequenceNumber() const
MessageType_t
Message Type enumeration.
void SetSequenceNumber(uint32_t sequenceNumber)
uint32_t DeserializeUliEcgi(Buffer::Iterator &i, uint32_t &uliEcgi) const
const uint32_t serializedSizeEbi
EBI serialized size.
void SerializeEbi(Buffer::Iterator &i, uint8_t epsBearerId) const
void SerializeUliEcgi(Buffer::Iterator &i, uint32_t uliEcgi) const
uint32_t DeserializeBearerQos(Buffer::Iterator &i, NrEpsBearer &bearerQos)
uint32_t DeserializeEbi(Buffer::Iterator &i, uint8_t &epsBearerId) const
uint32_t DeserializeImsi(Buffer::Iterator &i, uint64_t &imsi) const
const uint32_t serializedSizeCause
Cause serialized size.
void SerializeCause(Buffer::Iterator &i, Cause_t cause) const
const uint32_t serializedSizeFteid
Fteid serialized size.
void SerializeBearerTft(Buffer::Iterator &i, std::list< NrEpcTft::PacketFilter > packetFilters) const
uint64_t ReadNtohU40(Buffer::Iterator &i)
const uint32_t serializedSizeUliEcgi
UliEcgi serialized size.
uint32_t DeserializeCause(Buffer::Iterator &i, Cause_t &cause) const
void SerializeBearerQos(Buffer::Iterator &i, NrEpsBearer bearerQos) const
uint32_t DeserializeFteid(Buffer::Iterator &i, NrGtpcHeader::Fteid_t &fteid) const
void SerializeFteid(Buffer::Iterator &i, NrGtpcHeader::Fteid_t fteid) const
const uint32_t serializedSizePacketFilter
Packet filter serialized size.
const uint32_t serializedSizeBearerContextHeader
Fteid serialized size.
void SerializeImsi(Buffer::Iterator &i, uint64_t imsi) const
const uint32_t serializedSizeImsi
IMSI serialized size.
uint32_t GetSerializedSizeBearerTft(std::list< NrEpcTft::PacketFilter > packetFilters) const
void SerializeBearerContextHeader(Buffer::Iterator &i, uint16_t length) const
const uint32_t serializedSizeBearerQos
Bearer QoS serialized size.
uint32_t DeserializeBearerContextHeader(Buffer::Iterator &i, uint16_t &length) const
uint32_t DeserializeBearerTft(Buffer::Iterator &i, Ptr< NrEpcTft > epcTft) const
void WriteHtonU40(Buffer::Iterator &i, uint64_t data) const
void SetBearerContextsToBeModified(std::list< BearerContextToBeModified > bearerContexts)
std::list< BearerContextToBeModified > GetBearerContextsToBeModified() const
static TypeId GetTypeId()
Get the type ID.
static TypeId GetTypeId()
Get the type ID.
Ipv4Address addr
IPv4 address.
InterfaceType_t interfaceType
Interface type.