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  uint64_t GetImsi () const;
338  void SetImsi (uint64_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
iterator in a Buffer instance
Definition: buffer.h:99
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:92
std::list< BearerContextToBeCreated > m_bearerContextsToBeCreated
GtpcHeader::Fteid_t GetSenderCpFteid() const
virtual uint32_t GetMessageSize(void) const
virtual uint32_t GetSerializedSize(void) const
void SetBearerContextsToBeCreated(std::list< BearerContextToBeCreated > bearerContexts)
std::list< BearerContextToBeCreated > GetBearerContextsToBeCreated() const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
static TypeId GetTypeId(void)
Get the type ID.
virtual void Print(std::ostream &os) const
void SetSenderCpFteid(GtpcHeader::Fteid_t fteid)
virtual void Serialize(Buffer::Iterator start) const
virtual uint32_t GetMessageSize(void) const
void SetBearerContextsCreated(std::list< BearerContextCreated > bearerContexts)
virtual uint32_t GetSerializedSize(void) const
virtual void Print(std::ostream &os) const
virtual void Serialize(Buffer::Iterator start) const
static TypeId GetTypeId(void)
Get the type ID.
void SetSenderCpFteid(GtpcHeader::Fteid_t fteid)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
std::list< BearerContextCreated > m_bearerContextsCreated
std::list< BearerContextCreated > GetBearerContextsCreated() const
GtpcHeader::Fteid_t GetSenderCpFteid() const
static TypeId GetTypeId(void)
Get the type ID.
virtual void Print(std::ostream &os) const
std::list< BearerContext > GetBearerContexts() const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t GetSerializedSize(void) const
virtual void Serialize(Buffer::Iterator start) const
std::list< BearerContext > m_bearerContexts
void SetBearerContexts(std::list< BearerContext > bearerContexts)
virtual uint32_t GetMessageSize(void) const
virtual uint32_t GetSerializedSize(void) const
static TypeId GetTypeId(void)
Get the type ID.
virtual void Serialize(Buffer::Iterator start) const
virtual void Print(std::ostream &os) const
std::list< uint8_t > GetEpsBearerIds() const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t GetMessageSize(void) const
void SetEpsBearerIds(std::list< uint8_t > epsBearerIds)
virtual void Serialize(Buffer::Iterator start) const
virtual uint32_t GetSerializedSize(void) const
static TypeId GetTypeId(void)
Get the type ID.
std::list< uint8_t > GetEpsBearerIds() const
virtual uint32_t GetMessageSize(void) const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual void Print(std::ostream &os) const
void SetEpsBearerIds(std::list< uint8_t > epsBearerIds)
Header of the GTPv2-C protocol.
virtual void Serialize(Buffer::Iterator start) const
void PreSerialize(Buffer::Iterator &i) const
Serialize the GTP-C header in the GTP-C messages.
uint16_t m_messageLength
Message length field.
void SetMessageLength(uint16_t messageLength)
Set message length.
uint16_t GetMessageLength() const
Get message length.
uint8_t m_messageType
Message type field.
void ComputeMessageLength(void)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint8_t GetMessageType() const
Get message type.
void SetMessageType(uint8_t messageType)
Set message type.
InterfaceType_t
Interface Type enumeration.
uint32_t GetSequenceNumber() const
Get sequence number.
virtual ~GtpcHeader()
uint32_t m_sequenceNumber
GTP Sequence number field.
virtual void Print(std::ostream &os) const
uint32_t m_teid
Tunnel Endpoint Identifier (TEID) field.
bool m_teidFlag
TEID flag.
MessageType_t
Message Type enumeration.
void SetSequenceNumber(uint32_t sequenceNumber)
Set sequence number.
uint32_t PreDeserialize(Buffer::Iterator &i)
Deserialize the GTP-C header in the GTP-C messages.
void SetIesLength(uint16_t iesLength)
Set IEs length.
static TypeId GetTypeId(void)
Get the type ID.
virtual uint32_t GetSerializedSize(void) const
void SetTeid(uint32_t teid)
Set TEID.
virtual uint32_t GetMessageSize(void) const
uint32_t GetTeid() const
Get TEID.
void SerializeEbi(Buffer::Iterator &i, uint8_t epsBearerId) const
void SerializeBearerContextHeader(Buffer::Iterator &i, uint16_t length) const
uint32_t DeserializeCause(Buffer::Iterator &i, Cause_t &cause)
uint32_t DeserializeBearerContextHeader(Buffer::Iterator &i, uint16_t &length)
uint32_t DeserializeFteid(Buffer::Iterator &i, GtpcHeader::Fteid_t &fteid)
const uint32_t serializedSizeEbi
void WriteHtonU40(Buffer::Iterator &i, uint64_t data) const
void SerializeImsi(Buffer::Iterator &i, uint64_t imsi) const
const uint32_t serializedSizeBearerContextHeader
uint32_t GetSerializedSizeBearerTft(std::list< EpcTft::PacketFilter > packetFilters) const
void SerializeFteid(Buffer::Iterator &i, GtpcHeader::Fteid_t fteid) const
const uint32_t serializedSizePacketFilter
uint64_t ReadNtohU40(Buffer::Iterator &i)
uint32_t DeserializeBearerTft(Buffer::Iterator &i, Ptr< EpcTft > epcTft)
void SerializeUliEcgi(Buffer::Iterator &i, uint32_t uliEcgi) const
const uint32_t serializedSizeImsi
const uint32_t serializedSizeBearerQos
const uint32_t serializedSizeCause
void SerializeCause(Buffer::Iterator &i, Cause_t cause) const
uint32_t DeserializeImsi(Buffer::Iterator &i, uint64_t &imsi)
uint32_t DeserializeBearerQos(Buffer::Iterator &i, EpsBearer &bearerQos)
void SerializeBearerQos(Buffer::Iterator &i, EpsBearer bearerQos) const
const uint32_t serializedSizeUliEcgi
const uint32_t serializedSizeFteid
uint32_t DeserializeEbi(Buffer::Iterator &i, uint8_t &epsBearerId)
uint32_t DeserializeUliEcgi(Buffer::Iterator &i, uint32_t &uliEcgi)
void SerializeBearerTft(Buffer::Iterator &i, std::list< EpcTft::PacketFilter > packetFilters) const
void SetBearerContextsToBeModified(std::list< BearerContextToBeModified > bearerContexts)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual void Serialize(Buffer::Iterator start) const
std::list< BearerContextToBeModified > GetBearerContextsToBeModified() const
virtual void Print(std::ostream &os) const
virtual uint32_t GetMessageSize(void) const
std::list< BearerContextToBeModified > m_bearerContextsToBeModified
virtual uint32_t GetSerializedSize(void) const
static TypeId GetTypeId(void)
Get the type ID.
virtual void Print(std::ostream &os) const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual void Serialize(Buffer::Iterator start) const
virtual uint32_t GetMessageSize(void) const
static TypeId GetTypeId(void)
Get the type ID.
virtual uint32_t GetSerializedSize(void) const
Protocol header serialization and deserialization.
Definition: header.h:43
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:74
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.
def start()
Definition: core.py:1855
uint8_t data[writeSize]
Ptr< EpcTft > tft
Bearer traffic flow template.
InterfaceType_t interfaceType