A Discrete-Event Network Simulator
API
epc-enb-application.h
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 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: Jaume Nin <jnin@cttc.cat>
19  * Nicola Baldo <nbaldo@cttc.cat>
20  */
21 
22 #ifndef EPC_ENB_APPLICATION_H
23 #define EPC_ENB_APPLICATION_H
24 
25 #include <ns3/address.h>
26 #include <ns3/socket.h>
27 #include <ns3/virtual-net-device.h>
28 #include <ns3/traced-callback.h>
29 #include <ns3/callback.h>
30 #include <ns3/ptr.h>
31 #include <ns3/object.h>
32 #include <ns3/lte-common.h>
33 #include <ns3/application.h>
34 #include <ns3/eps-bearer.h>
35 #include <ns3/epc-enb-s1-sap.h>
36 #include <ns3/epc-s1ap-sap.h>
37 #include <map>
38 
39 namespace ns3 {
40 class EpcEnbS1SapUser;
41 class EpcEnbS1SapProvider;
42 
43 
50 {
51 
56 
57 
58 public:
63  static TypeId GetTypeId (void);
64 protected:
65  void DoDispose (void);
66 
67 public:
68 
69 
70 
81  EpcEnbApplication (Ptr<Socket> lteSocket, Ptr<Socket> s1uSocket, Ipv4Address enbS1uAddress, Ipv4Address sgwS1uAddress, uint16_t cellId);
82 
87  virtual ~EpcEnbApplication (void);
88 
89 
95  void SetS1SapUser (EpcEnbS1SapUser * s);
96 
102 
108  void SetS1apSapMme (EpcS1apSapMme * s);
109 
115 
121  void RecvFromLteSocket (Ptr<Socket> socket);
122 
123 
129  void RecvFromS1uSocket (Ptr<Socket> socket);
130 
131 
135  struct EpsFlowId_t
136  {
137  uint16_t m_rnti;
138  uint8_t m_bid;
139 
140  public:
141  EpsFlowId_t ();
148  EpsFlowId_t (const uint16_t a, const uint8_t b);
149 
157  friend bool operator == (const EpsFlowId_t &a, const EpsFlowId_t &b);
165  friend bool operator < (const EpsFlowId_t &a, const EpsFlowId_t &b);
166  };
167 
168 
169 private:
170 
171  // ENB S1 SAP provider methods
177  void DoInitialUeMessage (uint64_t imsi, uint16_t rnti);
187  void DoUeContextRelease (uint16_t rnti);
188 
189  // S1-AP SAP ENB methods
196  void DoInitialContextSetupRequest (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<EpcS1apSapEnb::ErabToBeSetupItem> erabToBeSetupList);
204  void DoPathSwitchRequestAcknowledge (uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t cgi, std::list<EpcS1apSapEnb::ErabSwitchedInUplinkItem> erabToBeSwitchedInUplinkList);
205 
212  void DoReleaseIndication (uint64_t imsi, uint16_t rnti, uint8_t bearerId);
213 
214 
222  void SendToLteSocket (Ptr<Packet> packet, uint16_t rnti, uint8_t bid);
223 
224 
231  void SendToS1uSocket (Ptr<Packet> packet, uint32_t teid);
232 
233 
241  void SetupS1Bearer (uint32_t teid, uint16_t rnti, uint8_t bid);
242 
247 
252 
257 
262 
267  std::map<uint16_t, std::map<uint8_t, uint32_t> > m_rbidTeidMap;
268 
273  std::map<uint32_t, EpsFlowId_t> m_teidRbidMap;
274 
278  uint16_t m_gtpuUdpPort;
279 
284 
289 
295 
301 
306  std::map<uint64_t, uint16_t> m_imsiRntiMap;
307 
308  uint16_t m_cellId;
309 
310 };
311 
312 } //namespace ns3
313 
314 #endif /* EPC_ENB_APPLICATION_H */
315 
This class implements the Service Access Point (SAP) between the LteEnbRrc and the EpcEnbApplication...
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
EpcEnbApplication(Ptr< Socket > lteSocket, Ptr< Socket > s1uSocket, Ipv4Address enbS1uAddress, Ipv4Address sgwS1uAddress, uint16_t cellId)
Constructor.
This class implements the Service Access Point (SAP) between the LteEnbRrc and the EpcEnbApplication...
void DoPathSwitchRequest(EpcEnbS1SapProvider::PathSwitchRequestParameters params)
Path switch request function.
Ipv4Address m_enbS1uAddress
address of the eNB for S1-U communications
void DoDispose(void)
Destructor implementation.
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 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()
void SendToS1uSocket(Ptr< Packet > packet, uint32_t teid)
Send a packet to the SGW via the S1-U interface.
void SetS1SapUser(EpcEnbS1SapUser *s)
Set the S1 SAP User.
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:141
uint16_t m_gtpuUdpPort
UDP port to be used for GTP.
The base class for all ns3 applications.
Definition: application.h:60
EpcS1apSapMme * m_s1apSapMme
MME side of the S1-AP SAP.
void DoInitialUeMessage(uint64_t imsi, uint16_t rnti)
Initial UE message function.
PathSwitchRequestParameters structure.
virtual ~EpcEnbApplication(void)
Destructor.
void RecvFromLteSocket(Ptr< Socket > socket)
Method to be assigned to the recv callback of the LTE socket.
void DoInitialContextSetupRequest(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list< EpcS1apSapEnb::ErabToBeSetupItem > erabToBeSetupList)
Initial Context Setup Request.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static TypeId GetTypeId(void)
Get the type ID.
Template for the implementation of the EpcEnbS1SapProvider as a member of an owner class of type C to...
EpcEnbS1SapProvider * GetS1SapProvider()
void RecvFromS1uSocket(Ptr< Socket > socket)
Method to be assigned to the recv callback of the S1-U socket.
EpcEnbS1SapUser * m_s1SapUser
User for the S1 SAP.
void DoUeContextRelease(uint16_t rnti)
UE Context Release function.
std::map< uint32_t, EpsFlowId_t > m_teidRbidMap
map telling for each S1-U TEID the corresponding RNTI,BID
void SetupS1Bearer(uint32_t teid, uint16_t rnti, uint8_t bid)
internal method used for the actual setup of the S1 Bearer
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
This application is installed inside eNBs and provides the bridge functionality for user data plane p...
friend bool operator<(const EpsFlowId_t &a, const EpsFlowId_t &b)
Less than operator.
friend bool operator==(const EpsFlowId_t &a, const EpsFlowId_t &b)
Comparison operator.
void DoPathSwitchRequestAcknowledge(uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t cgi, std::list< EpcS1apSapEnb::ErabSwitchedInUplinkItem > erabToBeSwitchedInUplinkList)
Path Switch Request Acknowledge.
EpcS1apSapEnb * m_s1apSapEnb
ENB side of the S1-AP SAP.
void SetS1apSapMme(EpcS1apSapMme *s)
Set the MME side of the S1-AP SAP.
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...
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
a unique identifier for an interface.
Definition: type-id.h:58
std::map< uint64_t, uint16_t > m_imsiRntiMap
UE context info.
Ptr< Socket > m_s1uSocket
UDP socket to send and receive GTP-U the packets to and from the S1-U interface.
uint8_t m_bid
Bid, the EPS Bearer IDentifier.
Template for the implementation of the EpcS1apSapEnb as a member of an owner class of type C to which...
Definition: epc-s1ap-sap.h:298
EpcEnbS1SapProvider * m_s1SapProvider
Provider for the S1 SAP.