233 lines
16 KiB
C
233 lines
16 KiB
C
/*******************************************************************************
|
|
|
|
Eurecom OpenAirInterface
|
|
Copyright(c) 1999 - 2012 Eurecom
|
|
|
|
This program is free software; you can redistribute it and/or modify it
|
|
under the terms and conditions of the GNU General Public License,
|
|
version 2, as published by the Free Software Foundation.
|
|
|
|
This program is distributed in the hope it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
The full GNU General Public License is included in this distribution in
|
|
the file called "COPYING".
|
|
|
|
Contact Information
|
|
Openair Admin: openair_admin@eurecom.fr
|
|
Openair Tech : openair_tech@eurecom.fr
|
|
Forums : http://forums.eurecom.fr/openairinterface
|
|
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
|
|
06410 Biot FRANCE
|
|
|
|
*******************************************************************************/
|
|
#ifndef SGW_LITE_CONTEXT_MANAGER_H_
|
|
#define SGW_LITE_CONTEXT_MANAGER_H_
|
|
|
|
#include "commonDef.h"
|
|
#include "common_types.h"
|
|
#include "mme_app_ue_context.h" // for cgi_t
|
|
#include "hashtable.h"
|
|
#include "obj_hashtable.h"
|
|
|
|
/********************************
|
|
* P-GW contexts *
|
|
*********************************/
|
|
typedef struct pgw_eps_bearer_entry_gtp_based_S5_S8_only_s {
|
|
ebi_t eps_bearer_id; ///< An EPS bearer identity uniquely identifies an EPS bearer for one UE accessing via E-UTRAN
|
|
// TO DO traffic_flow_template_t tft; ///< Traffic Flow Template
|
|
|
|
ip_address_t s_gw_address_in_use_up; ///< The IP address of the S-GW currently used for sending user plane traffic.
|
|
Teid_t s_gw_teid_for_S5_S8_up; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 interface for the user plane.
|
|
|
|
ip_address_t p_gw_ip_address_for_S5_S8_up; ///< P-GW IP address for user plane data received from PDN GW.
|
|
Teid_t p_gw_teid_for_S5_S8_up; ///< P-GW Tunnel Endpoint Identifier for the GTP Based S5/S8 interface for user plane.
|
|
|
|
// TO BE CHECKED
|
|
BearerQOS_t eps_bearer_qos; ///< ARP, GBR, MBR, QCI.
|
|
// NOT NEEDED charging_id ///< Charging identifier, identifies charging records generated by S-GW and PDN GW.
|
|
|
|
} pgw_eps_bearer_entry_t;
|
|
|
|
typedef struct pgw_pdn_connection_s {
|
|
//ip_addresses; ///< IPv4 address and/or IPv6 prefix
|
|
pdn_type_t pdn_type; ///< IPv4, IPv6, or IPv4v6
|
|
ip_address_t s_gw_address_in_use_cp; ///< The IP address of the S-GW currently used for sending control plane signalling.
|
|
Teid_t s_gw_teid_for_S5_S8_cp; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 interface for the control plane. (For GTP-based S5/S8 only).
|
|
ip_address_t s_gw_address_in_use_up; ///< The IP address of the S-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only).
|
|
// NOT NEEDED s_gw_gre_key_for_dl_traffic_up ///< Serving GW assigned GRE Key for the S5/S8 interface for the user plane for downlink traffic. (For PMIP-based S5/S8 only).
|
|
ip_address_t p_gw_ip_address_for_S5_S8_cp; ///< P-GW IP address for the S5/S8 for the control plane signalling.
|
|
Teid_t p_gw_teid_for_S5_S8_cp; ///< P-GW Tunnel Endpoint Identifier for the S5/S8 control plane interface. (For GTP-based S5/S8 only).
|
|
ip_address_t p_gw_address_in_use_up; ///< The IP address of the P-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only).
|
|
// NOT NEEDED p_gw_gre_key_for_uplink_traffic_up ///< PDN GW assigned GRE Key for the S5/S8 interface for the user plane for uplink traffic. (For PMIP-based S5/S8 only).
|
|
// NOT NEEDED MS Info Change Reporting Action ///< Denotes whether the MME and/or the SGSN is/are requested to send changes in User Location Information change for this bearer.
|
|
// NOT NEEDED CSG Information Reporting Action ///< Denotes whether the MME and/or the SGSN is/are requested to send changes in User CSG Information change for this bearer.
|
|
/// This field denotes separately whether the MME/SGSN are requested to send changes in User CSG Information for (a) CSG cells,
|
|
/// (b) hybrid cells in which the subscriber is a CSG member, and (c) hybrid cells in which the subscriber is not a CSG member, or any combination of the above.
|
|
ebi_t default_bearer; ///< Identifies the default bearer within the PDN connection by its EPS Bearer Id. The default bearer is the one which is established first within the PDN connection. (For GTP based
|
|
/// S5/S8 or for PMIP based S5/S8 if multiple PDN connections to the same APN are supported).
|
|
|
|
hash_table_t *pgw_eps_bearers;
|
|
} pgw_pdn_connection_t;
|
|
|
|
|
|
typedef struct pgw_apn_s {
|
|
APN_t apn_in_use; ///< The APN currently used, as received from the S-GW.
|
|
ambr_t apn_ambr; ///< The maximum aggregated uplink and downlink MBR values to be shared across all Non-GBR bearers,
|
|
/// which are established for this APN.
|
|
obj_hash_table_t *pdn_connections; ///< For each PDN Connection within the APN
|
|
|
|
} pgw_apn_t;
|
|
|
|
|
|
// The PDN GW maintains the following EPS bearer context information for UEs.
|
|
// For emergency attached UEs which are not authenticated, IMEI is stored in context.
|
|
typedef struct pgw_eps_bearer_context_information_s {
|
|
Imsi_t imsi; ///< IMSI (International Mobile Subscriber Identity) is the subscriber permanent identity.
|
|
int8_t imsi_unauthenticated_indicator; ///< This is an IMSI indicator to show the IMSI is unauthenticated.
|
|
// TO BE CHECKED me_identity_t me_identity; ///< Mobile Equipment Identity (e.g. IMEI/IMEISV).
|
|
char msisdn[MSISDN_LENGTH]; ///< The basic MSISDN of the UE. The presence is dictated by its storage in the HSS.
|
|
// NOT NEEDED selected_cn_operator_id ///< Selected core network operator identity (to support networksharing as defined in TS 23.251
|
|
rat_type_t rat_type; ///< Current RAT
|
|
// NOT NEEDED Trace reference ///< Identifies a record or a collection of records for a particular trace.
|
|
// NOT NEEDED Trace type ///< Indicates the type of trace
|
|
// NOT NEEDED Trigger id ///< Identifies the entity that initiated the trace
|
|
// NOT NEEDED OMC identity ///< Identifies the OMC that shall receive the trace record(s).
|
|
|
|
// TO BE CONTINUED...
|
|
obj_hash_table_t *apns;
|
|
} pgw_eps_bearer_context_information_t;
|
|
|
|
/********************************
|
|
* S-GW contexts *
|
|
*********************************/
|
|
//--------------------------------
|
|
// EPS Bearer entry
|
|
//--------------------------------
|
|
|
|
// A primary key for a EPS Bearer entry can be a tuple (eps bearer id, imsi)
|
|
typedef struct sgw_eps_bearer_entry_s {
|
|
ebi_t eps_bearer_id; ///< An EPS bearer identity uniquely identifies an EPS bearer for one UE accessing via E-UTRAN
|
|
// TO DO traffic_flow_template_t tft; ///< Traffic Flow Template
|
|
|
|
ip_address_t p_gw_address_in_use_up; ///< The IP address of the P-GW currently used for sending user plane traffic. (For GTP-based S5/S8 only).
|
|
Teid_t p_gw_teid_for_S5_S8_up; ///< P-GW Tunnel Endpoint Identifier for the S5/S8 interface for the user plane. (For GTP-based S5/S8 only).
|
|
|
|
ip_address_t s_gw_ip_address_for_S5_S8_up; ///< S-GW IP address for user plane data received from PDN GW. (For GTP-based S5/S8 only).
|
|
Teid_t s_gw_teid_for_S5_S8_up; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 interface for the user plane. (For GTP-based S5/S8 only).
|
|
|
|
ip_address_t s_gw_ip_address_for_S1u_S12_S4_up; ///< S-GW IP address for the S1-u interface (Used by the eNodeB), for the S12 interface (used by the RNC) and for the S4 interface (used by the SGSN).
|
|
Teid_t s_gw_teid_for_S1u_S12_S4_up; ///< S-GW Tunnel Endpoint Identifier for the S1-u interface, for the S12 interface (used by the RNC) and for the S4 interface (used by the SGSN).
|
|
|
|
ip_address_t enb_ip_address_for_S1u; ///< eNodeB IP address for the S1-u interface (Used by the S-GW).
|
|
Teid_t enb_teid_for_S1u; ///< eNodeB Tunnel Endpoint Identifier for the S1-u interface.
|
|
|
|
// TO BE CHECKED
|
|
BearerQOS_t eps_bearer_qos; ///< ARP, GBR, MBR, QCI.
|
|
// NOT NEEDED charging_id ///< Charging identifier, identifies charging records generated by S-GW and PDN GW.
|
|
|
|
} sgw_eps_bearer_entry_t;
|
|
|
|
|
|
typedef struct sgw_pdn_connection_s {
|
|
APN_t apn_in_use; ///< The APN currently used, as received from the MME or S4 SGSN.
|
|
// NOT NEEDED NOW eps_pdn_charging ///< The charging characteristics of this PDN connection, e.g.normal, prepaid, flat-rate and/or hot billing.
|
|
// NOT IMPLEMENTED NOW
|
|
ip_address_t p_gw_address_in_use_cp; ///< The IP address of the P-GW currently used for sending control plane signalling.
|
|
// NOT IMPLEMENTED NOW
|
|
Teid_t p_gw_teid_for_S5_S8_cp; ///< P-GW Tunnel Endpoint Identifier for the S5/S8 interface for the control plane. (For GTP-based S5/S8 only).
|
|
// NOT IMPLEMENTED NOW
|
|
ip_address_t p_gw_address_in_use_up; ///< The IP address of the P-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only)
|
|
// NOT NEEDED p_gw_gre_key_for_uplink_traffic_up ///< PDN GW assigned GRE Key for the S5/S8 interface for the user plane for uplink traffic. (For PMIP-based S5/S8 only)
|
|
ip_address_t s_gw_ip_address_for_S5_S8_cp; ///< S-GW IP address for the S5/S8 for the control plane signalling.
|
|
Teid_t s_gw_teid_for_S5_S8_cp; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 control plane interface. (For GTP-based S5/S8 only).
|
|
ip_address_t s_gw_address_in_use_up; ///< The IP address of the S-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only)
|
|
// NOT NEEDED s_gw_gre_key_for_dl_traffic_up ///< user plane for downlink traffic. (For PMIP-based S5/S8 only)
|
|
ebi_t default_bearer; ///< Identifies the default bearer within the PDN connection by its EPS Bearer Id. (For PMIP based S5/S8.)
|
|
|
|
// eps bearers
|
|
hash_table_t *sgw_eps_bearers;
|
|
|
|
} sgw_pdn_connection_t;
|
|
|
|
// The Serving GW maintains the following EPS bearer context information for UEs.
|
|
// Struct sgw_eps_bearer_context_information_t contain the context fields for one UE.
|
|
typedef struct sgw_eps_bearer_context_information_s {
|
|
Imsi_t imsi; ///< IMSI (International Mobile Subscriber Identity) is the subscriber permanent identity.
|
|
int8_t imsi_unauthenticated_indicator; /// This is an IMSI indicator to show the IMSI is unauthenticated.
|
|
// TO BE CHECKED me_identity_t me_identity; ///< Mobile Equipment Identity (e.g. IMEI/IMEISV).
|
|
char msisdn[MSISDN_LENGTH]; ///< The basic MSISDN of the UE. The presence is dictated by its storage in the HSS.
|
|
// NOT NEEDED selected_cn_operator_id ///< Selected core network operator identity (to support networksharing as defined in TS 23.251
|
|
Teid_t mme_teid_for_S11; ///< MME Tunnel Endpoint Identifier for the S11 interface
|
|
ip_address_t mme_ip_address_for_S11; ///< MME IP address the S11 interface.
|
|
Teid_t s_gw_teid_for_S11_S4; ///< S-GW Tunnel Endpoint Identifier for the S11 Interface and the S4 Interface (control plane)
|
|
ip_address_t s_gw_ip_address_for_S11_S4; ///< S-GW IP address for the S11 interface and the S4 Interface (control plane).
|
|
// NOT NEEDED Trace reference ///< Identifies a record or a collection of records for a particular trace.
|
|
// NOT NEEDED Trace type ///< Indicates the type of trace
|
|
// NOT NEEDED Trigger id ///< Identifies the entity that initiated the trace
|
|
// NOT NEEDED OMC identity ///< Identifies the OMC that shall receive the trace record(s).
|
|
cgi_t last_known_cell_Id; ///< This is the last location of the UE known by the network
|
|
// NOT NEEDED NOW Last known Cell Id age ///< This is the age of the above UE location information
|
|
|
|
// ONLY ONE PDN CONNECTION
|
|
// Do not know now what is the key for this hashtable
|
|
//obj_hash_table_t *pdn_connections;
|
|
sgw_pdn_connection_t pdn_connection;
|
|
|
|
/* S11 specific parameter. Not used in standalone mode */
|
|
void *trxn;
|
|
uint32_t peer_ip;
|
|
|
|
MessageDef* initial_message_p;
|
|
} sgw_eps_bearer_context_information_t;
|
|
|
|
/********************************
|
|
* Paired contexts *
|
|
*********************************/
|
|
// data entry for s11_bearer_context_information_hashtable
|
|
// like this if needed in future, the split of S and P GW should be easier.
|
|
typedef struct s_plus_p_gw_eps_bearer_context_information_s {
|
|
sgw_eps_bearer_context_information_t sgw_eps_bearer_context_information;
|
|
pgw_eps_bearer_context_information_t pgw_eps_bearer_context_information;
|
|
} s_plus_p_gw_eps_bearer_context_information_t;
|
|
|
|
|
|
// data entry for s11teid2mme_hashtable
|
|
typedef struct mme_sgw_tunnel_s {
|
|
uint32_t local_teid; ///< Tunnel endpoint Identifier
|
|
uint32_t remote_teid; ///< Tunnel endpoint Identifier
|
|
} mme_sgw_tunnel_t;
|
|
|
|
// data entry for s1uteid2enb_hashtable
|
|
typedef struct enb_sgw_s1u_tunnel_s {
|
|
uint32_t local_teid; ///< S-GW Tunnel endpoint Identifier
|
|
uint32_t remote_teid; ///< eNB Tunnel endpoint Identifier
|
|
ip_address_t enb_ip_address_for_S11; ///< eNB IP address the S1U interface.
|
|
} enb_sgw_s1u_tunnel_t;
|
|
|
|
|
|
void sgw_lite_display_s11teid2mme_mappings(void);
|
|
void sgw_lite_display_s11_bearer_context_information_mapping(void);
|
|
void pgw_lite_cm_free_apn(pgw_apn_t *apnP);
|
|
|
|
|
|
Teid_t sgw_lite_get_new_S11_tunnel_id(void);
|
|
mme_sgw_tunnel_t * sgw_lite_cm_create_s11_tunnel(Teid_t remote_teid, Teid_t local_teid);
|
|
int sgw_lite_cm_remove_s11_tunnel(Teid_t local_teid);
|
|
sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry(void);
|
|
sgw_pdn_connection_t * sgw_lite_cm_create_pdn_connection(void);
|
|
void sgw_lite_cm_free_pdn_connection(sgw_pdn_connection_t *pdn_connectionP);
|
|
s_plus_p_gw_eps_bearer_context_information_t * sgw_lite_cm_create_bearer_context_information_in_collection(Teid_t teid);
|
|
void sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information(s_plus_p_gw_eps_bearer_context_information_t *contextP);
|
|
int sgw_lite_cm_remove_bearer_context_information(Teid_t teid);
|
|
sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry_in_collection(hash_table_t *eps_bearersP, ebi_t eps_bearer_idP);
|
|
int sgw_lite_cm_remove_eps_bearer_entry(hash_table_t *eps_bearersP, ebi_t eps_bearer_idP);
|
|
|
|
#endif /* SGW_LITE_CONTEXT_MANAGER_H_ */
|