5G-LENA nr-v4.0
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-epc-pgw-application.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// (based on epc-sgw-pgw-application.h)
7
8#ifndef NR_EPC_PGW_APPLICATION_H
9#define NR_EPC_PGW_APPLICATION_H
10
11#include "nr-epc-gtpc-header.h"
12#include "nr-epc-tft-classifier.h"
13
14#include "ns3/application.h"
15#include "ns3/socket.h"
16#include "ns3/virtual-net-device.h"
17
18namespace ns3
19{
20
39class NrEpcPgwApplication : public Application
40{
41 public:
46 static TypeId GetTypeId();
47 void DoDispose() override;
48
59 NrEpcPgwApplication(const Ptr<VirtualNetDevice> tunDevice,
60 Ipv4Address s5Addr,
61 const Ptr<Socket> s5uSocket,
62 const Ptr<Socket> s5cSocket);
63
65 ~NrEpcPgwApplication() override;
66
79 bool RecvFromTunDevice(Ptr<Packet> packet,
80 const Address& source,
81 const Address& dest,
82 uint16_t protocolNumber);
83
91 void RecvFromS5uSocket(Ptr<Socket> socket);
92
99 void RecvFromS5cSocket(Ptr<Socket> socket);
100
107 void SendToTunDevice(Ptr<Packet> packet, uint32_t teid);
108
116 void SendToS5uSocket(Ptr<Packet> packet, Ipv4Address sgwS5uAddress, uint32_t teid);
117
123 void AddSgw(Ipv4Address sgwS5Addr);
124
130 void AddUe(uint64_t imsi);
131
138 void SetUeAddress(uint64_t imsi, Ipv4Address ueAddr);
139
146 void SetUeAddress6(uint64_t imsi, Ipv6Address ueAddr);
147
153 typedef void (*RxTracedCallback)(Ptr<Packet> packet);
154
155 private:
160 void DoRecvCreateSessionRequest(Ptr<Packet> packet);
161
166 void DoRecvModifyBearerRequest(Ptr<Packet> packet);
167
172 void DoRecvDeleteBearerCommand(Ptr<Packet> packet);
173
178 void DoRecvDeleteBearerResponse(Ptr<Packet> packet);
179
183 class NrUeInfo : public SimpleRefCount<NrUeInfo>
184 {
185 public:
186 NrUeInfo();
187
195 void AddBearer(uint8_t bearerId, uint32_t teid, Ptr<NrEpcTft> tft);
196
202 void RemoveBearer(uint8_t bearerId);
203
215 uint32_t Classify(Ptr<Packet> p, uint16_t protocolNumber);
216
222 Ipv4Address GetSgwAddr();
223
229 void SetSgwAddr(Ipv4Address addr);
230
236 Ipv4Address GetUeAddr();
237
243 void SetUeAddr(Ipv4Address addr);
244
250 Ipv6Address GetUeAddr6();
251
257 void SetUeAddr6(Ipv6Address addr);
258
259 private:
260 Ipv4Address m_ueAddr;
261 Ipv6Address m_ueAddr6;
262 Ipv4Address m_sgwAddr;
263 NrEpcTftClassifier m_tftClassifier;
264 std::map<uint8_t, uint32_t> m_teidByBearerIdMap;
265 };
266
270 Ipv4Address m_pgwS5Addr;
271
275 Ptr<Socket> m_s5uSocket;
276
280 Ptr<Socket> m_s5cSocket;
281
286 Ptr<VirtualNetDevice> m_tunDevice;
287
291 std::map<Ipv4Address, Ptr<NrUeInfo>> m_ueInfoByAddrMap;
292
296 std::map<Ipv6Address, Ptr<NrUeInfo>> m_ueInfoByAddrMap6;
297
301 std::map<uint64_t, Ptr<NrUeInfo>> m_ueInfoByImsiMap;
302
306 uint16_t m_gtpuUdpPort;
307
311 uint16_t m_gtpcUdpPort;
312
316 Ipv4Address m_sgwS5Addr;
317
321 TracedCallback<Ptr<Packet>> m_rxTunPktTrace;
322
326 TracedCallback<Ptr<Packet>> m_rxS5PktTrace;
327};
328
329} // namespace ns3
330
331#endif // NR_EPC_PGW_APPLICATION_H
static TypeId GetTypeId()
Get the type ID.
void(* RxTracedCallback)(Ptr< Packet > packet)
void RecvFromS5cSocket(Ptr< Socket > socket)
bool RecvFromTunDevice(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
void SetUeAddress(uint64_t imsi, Ipv4Address ueAddr)
void SendToTunDevice(Ptr< Packet > packet, uint32_t teid)
void AddSgw(Ipv4Address sgwS5Addr)
void SetUeAddress6(uint64_t imsi, Ipv6Address ueAddr)
void RecvFromS5uSocket(Ptr< Socket > socket)
void SendToS5uSocket(Ptr< Packet > packet, Ipv4Address sgwS5uAddress, uint32_t teid)
classifies IP packets according to Traffic Flow Templates (TFTs)