A Discrete-Event Network Simulator
API
epc-pgw-application.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  * (based on epc-sgw-pgw-application.h)
20  */
21 
22 #ifndef EPC_PGW_APPLICATION_H
23 #define EPC_PGW_APPLICATION_H
24 
25 #include "ns3/virtual-net-device.h"
26 #include "ns3/socket.h"
27 #include "ns3/application.h"
28 #include "ns3/epc-tft-classifier.h"
29 #include "ns3/epc-gtpc-header.h"
30 
31 namespace ns3 {
32 
52 {
53 public:
54 
59  static TypeId GetTypeId (void);
60  virtual void DoDispose ();
61 
72  EpcPgwApplication (const Ptr<VirtualNetDevice> tunDevice, Ipv4Address s5Addr,
73  const Ptr<Socket> s5uSocket, const Ptr<Socket> s5cSocket);
74 
76  virtual ~EpcPgwApplication (void);
77 
90  bool RecvFromTunDevice (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
91 
99  void RecvFromS5uSocket (Ptr<Socket> socket);
100 
107  void RecvFromS5cSocket (Ptr<Socket> socket);
108 
115  void SendToTunDevice (Ptr<Packet> packet, uint32_t teid);
116 
124  void SendToS5uSocket (Ptr<Packet> packet, Ipv4Address sgwS5uAddress, uint32_t teid);
125 
126 
132  void AddSgw (Ipv4Address sgwS5Addr);
133 
139  void AddUe (uint64_t imsi);
140 
147  void SetUeAddress (uint64_t imsi, Ipv4Address ueAddr);
148 
155  void SetUeAddress6 (uint64_t imsi, Ipv6Address ueAddr);
156 
162  typedef void (* RxTracedCallback)
163  (Ptr<Packet> packet);
164 
165 private:
166 
172 
178 
184 
190 
191 
195  class UeInfo : public SimpleRefCount<UeInfo>
196  {
197  public:
198  UeInfo ();
199 
207  void AddBearer (uint8_t bearerId, uint32_t teid, Ptr<EpcTft> tft);
208 
214  void RemoveBearer (uint8_t bearerId);
215 
227  uint32_t Classify (Ptr<Packet> p, uint16_t protocolNumber);
228 
235 
241  void SetSgwAddr (Ipv4Address addr);
242 
249 
255  void SetUeAddr (Ipv4Address addr);
256 
263 
269  void SetUeAddr6 (Ipv6Address addr);
270 
271  private:
276  std::map<uint8_t, uint32_t> m_teidByBearerIdMap;
277  };
278 
283 
288 
293 
299 
303  std::map<Ipv4Address, Ptr<UeInfo> > m_ueInfoByAddrMap;
304 
308  std::map<Ipv6Address, Ptr<UeInfo> > m_ueInfoByAddrMap6;
309 
313  std::map<uint64_t, Ptr<UeInfo> > m_ueInfoByImsiMap;
314 
318  uint16_t m_gtpuUdpPort;
319 
323  uint16_t m_gtpcUdpPort;
324 
329 
334 
339 };
340 
341 } // namespace ns3
342 
343 #endif // EPC_PGW_APPLICATION_H
void SetUeAddr(Ipv4Address addr)
Set the IPv4 address of the UE.
void DoRecvDeleteBearerResponse(Ptr< Packet > packet)
Process Delete Bearer Response message.
This application implements the Packet Data Network (PDN) Gateway Entity (PGW) according to the 3GPP ...
void SetUeAddress6(uint64_t imsi, Ipv6Address ueAddr)
set the address of a previously added UE
void SendToS5uSocket(Ptr< Packet > packet, Ipv4Address sgwS5uAddress, uint32_t teid)
Send a data packet to the SGW via the S5-U interface.
Ptr< VirtualNetDevice > m_tunDevice
TUN VirtualNetDevice used for tunneling/detunneling IP packets from/to the internet over GTP-U/UDP/IP...
Ipv4Address m_sgwAddr
SGW IPv4 address.
Ipv4Address m_sgwS5Addr
SGW address of the S5 interface.
std::map< Ipv6Address, Ptr< UeInfo > > m_ueInfoByAddrMap6
UeInfo stored by UE IPv6 address.
void AddUe(uint64_t imsi)
Let the PGW be aware of a new UE.
virtual ~EpcPgwApplication(void)
Destructor.
uint32_t Classify(Ptr< Packet > p, uint16_t protocolNumber)
Classify the packet according to TFTs of this UE.
Forward calls to a chain of Callback.
classifies IP packets according to Traffic Flow Templates (TFTs)
EpcPgwApplication(const Ptr< VirtualNetDevice > tunDevice, Ipv4Address s5Addr, const Ptr< Socket > s5uSocket, const Ptr< Socket > s5cSocket)
Constructor that binds the tap device to the callback methods.
std::map< Ipv4Address, Ptr< UeInfo > > m_ueInfoByAddrMap
UeInfo stored by UE IPv4 address.
TracedCallback< Ptr< Packet > > m_rxS5PktTrace
Callback to trace received data packets from S5 socket.
TracedCallback< Ptr< Packet > > m_rxTunPktTrace
Callback to trace received data packets at Tun NetDevice from internet.
std::map< uint8_t, uint32_t > m_teidByBearerIdMap
TEID By bearer ID Map.
Ipv4Address m_pgwS5Addr
PGW address of the S5 interface.
void SendToTunDevice(Ptr< Packet > packet, uint32_t teid)
Send a data packet to the internet via the SGi interface of the PGW.
uint16_t m_gtpcUdpPort
UDP port to be used for GTPv2-C.
void RecvFromS5cSocket(Ptr< Socket > socket)
Method to be assigned to the receiver callback of the S5-C socket.
a polymophic address class
Definition: address.h:90
uint16_t m_gtpuUdpPort
UDP port to be used for GTP-U.
Ipv4Address m_ueAddr
UE IPv4 address.
void RemoveBearer(uint8_t bearerId)
Delete context of bearer for this UE on PGW side.
void SetSgwAddr(Ipv4Address addr)
Set the address of the eNB to which the UE is connected.
static TypeId GetTypeId(void)
Get the type ID.
The base class for all ns3 applications.
Definition: application.h:60
void SetUeAddr6(Ipv6Address addr)
Set the IPv6 address of the UE.
bool RecvFromTunDevice(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
Method to be assigned to the callback of the SGi TUN VirtualNetDevice.
void DoRecvModifyBearerRequest(Ptr< Packet > packet)
Process Modify Bearer Request message.
Ipv4Address GetUeAddr()
Get the IPv4 address of the UE.
void AddBearer(uint8_t bearerId, uint32_t teid, Ptr< EpcTft > tft)
Add a bearer for this UE on PGW side.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual void DoDispose()
Destructor implementation.
store info for each UE connected to this PGW
void DoRecvDeleteBearerCommand(Ptr< Packet > packet)
Process Delete Bearer Command message.
Ipv6Address m_ueAddr6
UE IPv6 address.
Ptr< Socket > m_s5cSocket
UDP socket to send/receive GTPv2-C packets to/from the S5 interface.
EpcTftClassifier m_tftClassifier
TFT classifier.
void RecvFromS5uSocket(Ptr< Socket > socket)
Method to be assigned to the receiver callback of the S5-U socket.
void AddSgw(Ipv4Address sgwS5Addr)
Let the PGW be aware of a new SGW.
Describes an IPv6 address.
Definition: ipv6-address.h:49
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
void SetUeAddress(uint64_t imsi, Ipv4Address ueAddr)
Set the address of a previously added UE.
void DoRecvCreateSessionRequest(Ptr< Packet > packet)
Process Create Session Request message.
void(* RxTracedCallback)(Ptr< Packet > packet)
TracedCallback signature for data Packet reception event.
Ptr< Socket > m_s5uSocket
UDP socket to send/receive GTP-U packets to/from the S5 interface.
Ipv4Address GetSgwAddr()
Get the address of the SGW to which the UE is connected.
A template-based reference counting class.
a unique identifier for an interface.
Definition: type-id.h:58
Ipv6Address GetUeAddr6()
Get the IPv6 address of the UE.
std::map< uint64_t, Ptr< UeInfo > > m_ueInfoByImsiMap
UeInfo stored by IMSI.