A Discrete-Event Network Simulator
API
epc-gtpc-header.h
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Manuel Requena <manuel.requena@cttc.es>
19  */
20 
21 #ifndef EPC_GTPC_HEADER_H
22 #define EPC_GTPC_HEADER_H
23 
24 #include "ns3/header.h"
25 #include "ns3/epc-tft.h"
26 #include "ns3/eps-bearer.h"
27 
28 namespace ns3 {
29 
38 class GtpcHeader : public Header
39 {
40 public:
41  GtpcHeader ();
42  virtual ~GtpcHeader ();
47  static TypeId GetTypeId (void);
48  virtual TypeId GetInstanceTypeId (void) const;
49  virtual uint32_t GetSerializedSize (void) const;
50  virtual void Serialize (Buffer::Iterator start) const;
51  virtual uint32_t Deserialize (Buffer::Iterator start);
52  virtual void Print (std::ostream &os) const;
53 
54  virtual uint32_t GetMessageSize (void) const;
55 
60  uint8_t GetMessageType () const;
65  uint16_t GetMessageLength () const;
70  uint32_t GetTeid () const;
75  uint32_t GetSequenceNumber () const;
76 
81  void SetMessageType (uint8_t messageType);
86  void SetMessageLength (uint16_t messageLength);
91  void SetTeid (uint32_t teid);
96  void SetSequenceNumber (uint32_t sequenceNumber);
101  void SetIesLength (uint16_t iesLength);
102 
103  void ComputeMessageLength (void);
104 
107  {
114  };
115 
117  struct Fteid_t
118  {
121  uint32_t teid;
122  };
123 
126  {
127  Reserved = 0,
137  };
138 
139 
140 private:
150  uint8_t m_messageType;
156  uint16_t m_messageLength;
160  uint32_t m_teid;
165 
166 
167 protected:
172  void PreSerialize (Buffer::Iterator &i) const;
177  uint32_t PreDeserialize (Buffer::Iterator &i);
178 
179 };
180 
181 
182 class GtpcIes
183 {
184 public:
185  enum Cause_t
186  {
187  RESERVED = 0,
189  };
190 
191  const uint32_t serializedSizeImsi = 12;
192  const uint32_t serializedSizeCause = 6;
193  const uint32_t serializedSizeEbi = 5;
194  const uint32_t serializedSizeBearerQos = 26;
195  const uint32_t serializedSizePacketFilter = 3 + 9 + 9 + 5 + 5 + 3;
196  uint32_t GetSerializedSizeBearerTft (std::list<EpcTft::PacketFilter> packetFilters) const;
197  const uint32_t serializedSizeUliEcgi = 12;
198  const uint32_t serializedSizeFteid = 13;
200 
201 
202  void SerializeImsi (Buffer::Iterator &i, uint64_t imsi) const;
203  uint32_t DeserializeImsi (Buffer::Iterator &i, uint64_t &imsi);
204 
205  void SerializeCause (Buffer::Iterator &i, Cause_t cause) const;
206  uint32_t DeserializeCause (Buffer::Iterator &i, Cause_t &cause);
207 
208  void SerializeEbi (Buffer::Iterator &i, uint8_t epsBearerId) const;
209  uint32_t DeserializeEbi (Buffer::Iterator &i, uint8_t &epsBearerId);
210 
211  void WriteHtonU40 (Buffer::Iterator &i, uint64_t data) const;
212  uint64_t ReadNtohU40 (Buffer::Iterator &i);
213 
214  void SerializeBearerQos (Buffer::Iterator &i, EpsBearer bearerQos) const;
215  uint32_t DeserializeBearerQos (Buffer::Iterator &i, EpsBearer &bearerQos);
216 
217  void SerializeBearerTft (Buffer::Iterator &i, std::list<EpcTft::PacketFilter> packetFilters) const;
218  uint32_t DeserializeBearerTft (Buffer::Iterator &i, Ptr<EpcTft> epcTft);
219 
220  void SerializeUliEcgi (Buffer::Iterator &i, uint32_t uliEcgi) const;
221  uint32_t DeserializeUliEcgi (Buffer::Iterator &i, uint32_t &uliEcgi);
222 
223  void SerializeFteid (Buffer::Iterator &i, GtpcHeader::Fteid_t fteid) const;
225 
226  void SerializeBearerContextHeader (Buffer::Iterator &i, uint16_t length) const;
227  uint32_t DeserializeBearerContextHeader (Buffer::Iterator &i, uint16_t &length);
228 };
229 
230 
232 {
233 public:
240  static TypeId GetTypeId (void);
241  virtual TypeId GetInstanceTypeId (void) const;
242  virtual uint32_t GetSerializedSize (void) const;
243  virtual void Serialize (Buffer::Iterator start) const;
244  virtual uint32_t Deserialize (Buffer::Iterator start);
245  virtual void Print (std::ostream &os) const;
246  virtual uint32_t GetMessageSize (void) const;
247 
248  uint64_t GetImsi () const;
249  void SetImsi (uint64_t imsi);
250 
251  uint32_t GetUliEcgi () const;
252  void SetUliEcgi (uint32_t uliEcgi);
253 
256 
258  {
260  uint8_t epsBearerId;
263  };
264 
265  std::list<BearerContextToBeCreated> GetBearerContextsToBeCreated () const;
266  void SetBearerContextsToBeCreated (std::list<BearerContextToBeCreated> bearerContexts);
267 
268 private:
269  uint64_t m_imsi;
270  uint32_t m_uliEcgi;
272 
273  std::list<BearerContextToBeCreated> m_bearerContextsToBeCreated;
274 };
275 
276 
278 {
279 public:
286  static TypeId GetTypeId (void);
287  virtual TypeId GetInstanceTypeId (void) const;
288  virtual uint32_t GetSerializedSize (void) const;
289  virtual void Serialize (Buffer::Iterator start) const;
290  virtual uint32_t Deserialize (Buffer::Iterator start);
291  virtual void Print (std::ostream &os) const;
292  virtual uint32_t GetMessageSize (void) const;
293 
294  Cause_t GetCause () const;
295  void SetCause (Cause_t cause);
296 
299 
301  {
302  uint8_t epsBearerId;
303  uint8_t cause;
307  };
308 
309  std::list<BearerContextCreated> GetBearerContextsCreated () const;
310  void SetBearerContextsCreated (std::list<BearerContextCreated> bearerContexts);
311 
312 private:
315 
316  std::list<BearerContextCreated> m_bearerContextsCreated;
317 };
318 
319 
321 {
322 public:
329  static TypeId GetTypeId (void);
330  virtual TypeId GetInstanceTypeId (void) const;
331  virtual uint32_t GetSerializedSize (void) const;
332  virtual void Serialize (Buffer::Iterator start) const;
333  virtual uint32_t Deserialize (Buffer::Iterator start);
334  virtual void Print (std::ostream &os) const;
335  virtual uint32_t GetMessageSize (void) const;
336 
337  uint8_t GetImsi () const;
338  void SetImsi (uint8_t imsi);
339 
340  uint32_t GetUliEcgi () const;
341  void SetUliEcgi (uint32_t uliEcgi);
342 
344  {
345  uint8_t epsBearerId;
347  };
348 
349  std::list<BearerContextToBeModified> GetBearerContextsToBeModified () const;
350  void SetBearerContextsToBeModified (std::list<BearerContextToBeModified> bearerContexts);
351 
352 private:
353  uint64_t m_imsi;
354  uint32_t m_uliEcgi;
355 
356  std::list<BearerContextToBeModified> m_bearerContextsToBeModified;
357 };
358 
359 
361 {
362 public:
369  static TypeId GetTypeId (void);
370  virtual TypeId GetInstanceTypeId (void) const;
371  virtual uint32_t GetSerializedSize (void) const;
372  virtual void Serialize (Buffer::Iterator start) const;
373  virtual uint32_t Deserialize (Buffer::Iterator start);
374  virtual void Print (std::ostream &os) const;
375  virtual uint32_t GetMessageSize (void) const;
376 
377  Cause_t GetCause () const;
378  void SetCause (Cause_t cause);
379 
380 private:
382 };
383 
384 
386 {
387 public:
394  static TypeId GetTypeId (void);
395  virtual TypeId GetInstanceTypeId (void) const;
396  virtual uint32_t GetSerializedSize (void) const;
397  virtual void Serialize (Buffer::Iterator start) const;
398  virtual uint32_t Deserialize (Buffer::Iterator start);
399  virtual void Print (std::ostream &os) const;
400  virtual uint32_t GetMessageSize (void) const;
401 
403  {
404  uint8_t m_epsBearerId;
405  };
406 
407  std::list<BearerContext> GetBearerContexts () const;
408  void SetBearerContexts (std::list<BearerContext> bearerContexts);
409 
410 private:
411  std::list<BearerContext> m_bearerContexts;
412 };
413 
414 
416 {
417 public:
424  static TypeId GetTypeId (void);
425  virtual TypeId GetInstanceTypeId (void) const;
426  virtual uint32_t GetSerializedSize (void) const;
427  virtual void Serialize (Buffer::Iterator start) const;
428  virtual uint32_t Deserialize (Buffer::Iterator start);
429  virtual void Print (std::ostream &os) const;
430  virtual uint32_t GetMessageSize (void) const;
431 
432  std::list<uint8_t> GetEpsBearerIds () const;
433  void SetEpsBearerIds (std::list<uint8_t> epsBearerIds);
434 
435 private:
436  std::list<uint8_t> m_epsBearerIds;
437 };
438 
439 
441 {
442 public:
449  static TypeId GetTypeId (void);
450  virtual TypeId GetInstanceTypeId (void) const;
451  virtual uint32_t GetSerializedSize (void) const;
452  virtual void Serialize (Buffer::Iterator start) const;
453  virtual uint32_t Deserialize (Buffer::Iterator start);
454  virtual void Print (std::ostream &os) const;
455  virtual uint32_t GetMessageSize (void) const;
456 
457  Cause_t GetCause () const;
458  void SetCause (Cause_t cause);
459 
460  std::list<uint8_t> GetEpsBearerIds () const;
461  void SetEpsBearerIds (std::list<uint8_t> epsBearerIds);
462 
463 private:
465  std::list<uint8_t> m_epsBearerIds;
466 };
467 
468 } // namespace ns3
469 
470 #endif // EPC_GTPC_HEADER_H
std::list< BearerContextToBeCreated > m_bearerContextsToBeCreated
Protocol header serialization and deserialization.
Definition: header.h:42
static TypeId GetTypeId(void)
Get the type ID.
void SetMessageLength(uint16_t messageLength)
Set message length.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t GetMessageSize(void) const
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
uint16_t GetMessageLength() const
Get message length.
std::list< BearerContextToBeModified > GetBearerContextsToBeModified() const
void SerializeEbi(Buffer::Iterator &i, uint8_t epsBearerId) const
static TypeId GetTypeId(void)
Get the type ID.
static TypeId GetTypeId(void)
Get the type ID.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
InterfaceType_t
Interface Type enumeration.
virtual uint32_t GetMessageSize(void) const
void SetBearerContextsToBeCreated(std::list< BearerContextToBeCreated > bearerContexts)
std::list< BearerContextToBeCreated > GetBearerContextsToBeCreated() const
def start()
Definition: core.py:1858
uint32_t DeserializeFteid(Buffer::Iterator &i, GtpcHeader::Fteid_t &fteid)
virtual void Print(std::ostream &os) const
virtual uint32_t GetSerializedSize(void) const
virtual uint32_t GetSerializedSize(void) const
static TypeId GetTypeId(void)
Get the type ID.
virtual void Print(std::ostream &os) const
virtual uint32_t GetMessageSize(void) const
void SerializeCause(Buffer::Iterator &i, Cause_t cause) const
void ComputeMessageLength(void)
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual uint32_t GetMessageSize(void) const
uint32_t DeserializeUliEcgi(Buffer::Iterator &i, uint32_t &uliEcgi)
std::list< BearerContext > m_bearerContexts
virtual uint32_t GetMessageSize(void) const
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual void Print(std::ostream &os) const
virtual void Print(std::ostream &os) const
virtual uint32_t GetSerializedSize(void) const
uint32_t DeserializeEbi(Buffer::Iterator &i, uint8_t &epsBearerId)
iterator in a Buffer instance
Definition: buffer.h:98
std::list< BearerContext > GetBearerContexts() const
virtual void Print(std::ostream &os) const
void SerializeBearerQos(Buffer::Iterator &i, EpsBearer bearerQos) const
virtual uint32_t GetMessageSize(void) const
void SetSenderCpFteid(GtpcHeader::Fteid_t fteid)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t Deserialize(Buffer::Iterator start)
const uint32_t serializedSizeFteid
virtual void Serialize(Buffer::Iterator start) const
uint32_t DeserializeCause(Buffer::Iterator &i, Cause_t &cause)
uint64_t ReadNtohU40(Buffer::Iterator &i)
virtual void Serialize(Buffer::Iterator start) const
static TypeId GetTypeId(void)
Get the type ID.
void SetEpsBearerIds(std::list< uint8_t > epsBearerIds)
uint32_t PreDeserialize(Buffer::Iterator &i)
Deserialize the GTP-C header in the GTP-C messages.
uint8_t data[writeSize]
uint32_t DeserializeBearerQos(Buffer::Iterator &i, EpsBearer &bearerQos)
virtual void Serialize(Buffer::Iterator start) const
uint32_t DeserializeBearerContextHeader(Buffer::Iterator &i, uint16_t &length)
std::list< BearerContextCreated > GetBearerContextsCreated() const
const uint32_t serializedSizeEbi
uint32_t m_sequenceNumber
GTP Sequence number field.
virtual void Print(std::ostream &os) const
const uint32_t serializedSizePacketFilter
void PreSerialize(Buffer::Iterator &i) const
Serialize the GTP-C header in the GTP-C messages.
void SerializeBearerContextHeader(Buffer::Iterator &i, uint16_t length) const
virtual void Serialize(Buffer::Iterator start) const
const uint32_t serializedSizeUliEcgi
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t Deserialize(Buffer::Iterator start)
void SetIesLength(uint16_t iesLength)
Set IEs length.
InterfaceType_t interfaceType
virtual void Print(std::ostream &os) const
void WriteHtonU40(Buffer::Iterator &i, uint64_t data) const
virtual uint32_t GetSerializedSize(void) const
static TypeId GetTypeId(void)
Get the type ID.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void SetBearerContexts(std::list< BearerContext > bearerContexts)
void SerializeImsi(Buffer::Iterator &i, uint64_t imsi) const
virtual uint32_t Deserialize(Buffer::Iterator start)
GtpcHeader::Fteid_t GetSenderCpFteid() const
static TypeId GetTypeId(void)
Get the type ID.
const uint32_t serializedSizeBearerContextHeader
virtual uint32_t Deserialize(Buffer::Iterator start)
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
MessageType_t
Message Type enumeration.
void SetSequenceNumber(uint32_t sequenceNumber)
Set sequence number.
uint8_t GetMessageType() const
Get message type.
virtual uint32_t GetMessageSize(void) const
void SerializeUliEcgi(Buffer::Iterator &i, uint32_t uliEcgi) const
uint8_t m_messageType
Message type field.
Ptr< EpcTft > tft
Bearer traffic flow template.
virtual void Serialize(Buffer::Iterator start) const
virtual void Serialize(Buffer::Iterator start) const
virtual uint32_t GetSerializedSize(void) const
virtual ~GtpcHeader()
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual uint32_t GetSerializedSize(void) const
const uint32_t serializedSizeCause
std::list< BearerContextToBeModified > m_bearerContextsToBeModified
void SetTeid(uint32_t teid)
Set TEID.
uint32_t DeserializeImsi(Buffer::Iterator &i, uint64_t &imsi)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
static TypeId GetTypeId(void)
Get the type ID.
void SetSenderCpFteid(GtpcHeader::Fteid_t fteid)
virtual uint32_t GetSerializedSize(void) const
const uint32_t serializedSizeImsi
uint32_t DeserializeBearerTft(Buffer::Iterator &i, Ptr< EpcTft > epcTft)
virtual uint32_t GetMessageSize(void) const
virtual void Serialize(Buffer::Iterator start) const
uint32_t m_teid
Tunnel Endpoint Identifier (TEID) field.
std::list< BearerContextCreated > m_bearerContextsCreated
virtual void Print(std::ostream &os) const
virtual void Serialize(Buffer::Iterator start) const
void SerializeBearerTft(Buffer::Iterator &i, std::list< EpcTft::PacketFilter > packetFilters) const
uint32_t GetSequenceNumber() const
Get sequence number.
virtual uint32_t Deserialize(Buffer::Iterator start)
Header of the GTPv2-C protocol.
void SetBearerContextsCreated(std::list< BearerContextCreated > bearerContexts)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint32_t GetTeid() const
Get TEID.
std::list< uint8_t > GetEpsBearerIds() const
std::list< uint8_t > GetEpsBearerIds() const
a unique identifier for an interface.
Definition: type-id.h:58
void SerializeFteid(Buffer::Iterator &i, GtpcHeader::Fteid_t fteid) const
GtpcHeader::Fteid_t GetSenderCpFteid() const
void SetMessageType(uint8_t messageType)
Set message type.
const uint32_t serializedSizeBearerQos
void SetBearerContextsToBeModified(std::list< BearerContextToBeModified > bearerContexts)
bool m_teidFlag
TEID flag.
uint16_t m_messageLength
Message length field.
void SetEpsBearerIds(std::list< uint8_t > epsBearerIds)
uint32_t GetSerializedSizeBearerTft(std::list< EpcTft::PacketFilter > packetFilters) const
virtual uint32_t GetSerializedSize(void) const