A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
epc-enb-application.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Jaume Nin <jnin@cttc.cat>
18 * Nicola Baldo <nbaldo@cttc.cat>
19 */
20
21#ifndef EPC_ENB_APPLICATION_H
22#define EPC_ENB_APPLICATION_H
23
24#include "epc-enb-s1-sap.h"
25#include "epc-s1ap-sap.h"
26
27#include <ns3/address.h>
28#include <ns3/application.h>
29#include <ns3/callback.h>
30#include <ns3/object.h>
31#include <ns3/ptr.h>
32#include <ns3/socket.h>
33#include <ns3/traced-callback.h>
34#include <ns3/virtual-net-device.h>
35
36#include <map>
37
38namespace ns3
39{
40class EpcEnbS1SapUser;
42
50{
55
56 public:
61 static TypeId GetTypeId();
62
63 protected:
64 void DoDispose() override;
65
66 public:
76 EpcEnbApplication(Ptr<Socket> lteSocket, Ptr<Socket> lteSocket6, uint16_t cellId);
77
87 void AddS1Interface(Ptr<Socket> s1uSocket,
88 Ipv4Address enbS1uAddress,
89 Ipv4Address sgwS1uAddress);
90
95 ~EpcEnbApplication() override;
96
103
109
116
122
129 void RecvFromLteSocket(Ptr<Socket> socket);
130
137 void RecvFromS1uSocket(Ptr<Socket> socket);
138
144 typedef void (*RxTracedCallback)(Ptr<Packet> packet);
145
150 {
151 uint16_t m_rnti;
152 uint8_t m_bid;
153
154 public:
155 EpsFlowId_t();
162 EpsFlowId_t(const uint16_t a, const uint8_t b);
163
171 friend bool operator==(const EpsFlowId_t& a, const EpsFlowId_t& b);
179 friend bool operator<(const EpsFlowId_t& a, const EpsFlowId_t& b);
180 };
181
182 private:
183 // ENB S1 SAP provider methods
189 void DoInitialUeMessage(uint64_t imsi, uint16_t rnti);
199 void DoUeContextRelease(uint16_t rnti);
200
201 // S1-AP SAP ENB methods
209 uint64_t mmeUeS1Id,
210 uint16_t enbUeS1Id,
211 std::list<EpcS1apSapEnb::ErabToBeSetupItem> erabToBeSetupList);
220 uint64_t enbUeS1Id,
221 uint64_t mmeUeS1Id,
222 uint16_t cgi,
223 std::list<EpcS1apSapEnb::ErabSwitchedInUplinkItem> erabToBeSwitchedInUplinkList);
224
232 void DoReleaseIndication(uint64_t imsi, uint16_t rnti, uint8_t bearerId);
233
241 void SendToLteSocket(Ptr<Packet> packet, uint16_t rnti, uint8_t bid);
242
249 void SendToS1uSocket(Ptr<Packet> packet, uint32_t teid);
250
258 void SetupS1Bearer(uint32_t teid, uint16_t rnti, uint8_t bid);
259
264
269
274
279
284
289 std::map<uint16_t, std::map<uint8_t, uint32_t>> m_rbidTeidMap;
290
295 std::map<uint32_t, EpsFlowId_t> m_teidRbidMap;
296
301
306
311
317
323
328 std::map<uint64_t, uint16_t> m_imsiRntiMap;
329
330 uint16_t m_cellId;
331
336
341};
342
343} // namespace ns3
344
345#endif /* EPC_ENB_APPLICATION_H */
The base class for all ns3 applications.
Definition: application.h:61
This application is installed inside eNBs and provides the bridge functionality for user data plane p...
std::map< uint16_t, std::map< uint8_t, uint32_t > > m_rbidTeidMap
map of maps telling for each RNTI and BID the corresponding S1-U TEID
EpcS1apSapEnb * m_s1apSapEnb
ENB side of the S1-AP SAP.
Ipv4Address m_enbS1uAddress
address of the eNB for S1-U communications
Ptr< Socket > m_s1uSocket
UDP socket to send and receive GTP-U the packets to and from the S1-U interface.
void DoReleaseIndication(uint64_t imsi, uint16_t rnti, uint8_t bearerId)
This function accepts bearer id corresponding to a particular UE and schedules indication of bearer r...
void DoPathSwitchRequestAcknowledge(uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t cgi, std::list< EpcS1apSapEnb::ErabSwitchedInUplinkItem > erabToBeSwitchedInUplinkList)
Path Switch Request Acknowledge.
void RecvFromLteSocket(Ptr< Socket > socket)
Method to be assigned to the recv callback of the LTE socket.
void AddS1Interface(Ptr< Socket > s1uSocket, Ipv4Address enbS1uAddress, Ipv4Address sgwS1uAddress)
Add a S1-U interface to the eNB.
void DoInitialContextSetupRequest(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list< EpcS1apSapEnb::ErabToBeSetupItem > erabToBeSetupList)
Initial Context Setup Request.
void DoDispose() override
Destructor implementation.
void DoUeContextRelease(uint16_t rnti)
UE Context Release function.
Ipv4Address m_sgwS1uAddress
address of the SGW which terminates all S1-U tunnels
Ptr< Socket > m_lteSocket
raw packet socket to send and receive the packets to and from the LTE radio interface
void SendToS1uSocket(Ptr< Packet > packet, uint32_t teid)
Send a packet to the SGW via the S1-U interface.
void SetS1apSapMme(EpcS1apSapMme *s)
Set the MME side of the S1-AP SAP.
EpcEnbS1SapProvider * GetS1SapProvider()
static TypeId GetTypeId()
Get the type ID.
void SendToLteSocket(Ptr< Packet > packet, uint16_t rnti, uint8_t bid)
Send a packet to the UE via the LTE radio interface of the eNB.
EpcS1apSapEnb * GetS1apSapEnb()
TracedCallback< Ptr< Packet > > m_rxLteSocketPktTrace
Callback to trace RX (reception) data packets from LTE Socket.
void RecvFromS1uSocket(Ptr< Socket > socket)
Method to be assigned to the recv callback of the S1-U socket.
std::map< uint64_t, uint16_t > m_imsiRntiMap
UE context info.
EpcEnbS1SapUser * m_s1SapUser
User for the S1 SAP.
Ptr< Socket > m_lteSocket6
raw packet socket to send and receive the packets to and from the LTE radio interface
void SetupS1Bearer(uint32_t teid, uint16_t rnti, uint8_t bid)
internal method used for the actual setup of the S1 Bearer
void DoPathSwitchRequest(EpcEnbS1SapProvider::PathSwitchRequestParameters params)
Path switch request function.
uint16_t m_gtpuUdpPort
UDP port to be used for GTP.
void DoInitialUeMessage(uint64_t imsi, uint16_t rnti)
Initial UE message function.
std::map< uint32_t, EpsFlowId_t > m_teidRbidMap
map telling for each S1-U TEID the corresponding RNTI,BID
EpcS1apSapMme * m_s1apSapMme
MME side of the S1-AP SAP.
EpcEnbS1SapProvider * m_s1SapProvider
Provider for the S1 SAP.
void(* RxTracedCallback)(Ptr< Packet > packet)
TracedCallback signature for data Packet reception event.
void SetS1SapUser(EpcEnbS1SapUser *s)
Set the S1 SAP User.
~EpcEnbApplication() override
Destructor.
TracedCallback< Ptr< Packet > > m_rxS1uSocketPktTrace
Callback to trace RX (reception) data packets from S1-U Socket.
This class implements the Service Access Point (SAP) between the LteEnbRrc and the EpcEnbApplication.
This class implements the Service Access Point (SAP) between the LteEnbRrc and the EpcEnbApplication.
eNB side of the S1-AP Service Access Point (SAP), provides the eNB methods to be called when an S1-AP...
Definition: epc-s1ap-sap.h:144
MME side of the S1-AP Service Access Point (SAP), provides the MME methods to be called when an S1-AP...
Definition: epc-s1ap-sap.h:53
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:42
Template for the implementation of the EpcEnbS1SapProvider as a member of an owner class of type C to...
Template for the implementation of the EpcS1apSapEnb as a member of an owner class of type C to which...
Definition: epc-s1ap-sap.h:310
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
Forward calls to a chain of Callback.
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.
friend bool operator==(const EpsFlowId_t &a, const EpsFlowId_t &b)
Comparison operator.
uint8_t m_bid
Bid, the EPS Bearer Identifier.
friend bool operator<(const EpsFlowId_t &a, const EpsFlowId_t &b)
Less than operator.
PathSwitchRequestParameters structure.