2020-11-26 01:25:22 -08:00
|
|
|
/**
|
2021-03-28 14:12:42 -07:00
|
|
|
* Copyright 2013-2021 Software Radio Systems Limited
|
2018-07-18 11:25:59 -07:00
|
|
|
*
|
2021-04-22 01:59:40 -07:00
|
|
|
* This file is part of srsRAN.
|
2018-07-18 11:25:59 -07:00
|
|
|
*
|
2021-04-22 01:59:40 -07:00
|
|
|
* srsRAN is free software: you can redistribute it and/or modify
|
2021-03-28 14:12:42 -07:00
|
|
|
* it under the terms of the GNU Affero General Public License as
|
|
|
|
* published by the Free Software Foundation, either version 3 of
|
|
|
|
* the License, or (at your option) any later version.
|
|
|
|
*
|
2021-04-22 01:59:40 -07:00
|
|
|
* srsRAN is distributed in the hope that it will be useful,
|
2021-03-28 14:12:42 -07:00
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
2018-07-18 11:25:59 -07:00
|
|
|
*
|
2021-03-28 14:12:42 -07:00
|
|
|
* A copy of the GNU Affero General Public License can be found in
|
|
|
|
* the LICENSE file in the top-level directory of this distribution
|
|
|
|
* and at http://www.gnu.org/licenses/.
|
2018-07-18 11:25:59 -07:00
|
|
|
*
|
|
|
|
*/
|
2019-04-23 01:53:11 -07:00
|
|
|
|
2021-03-19 03:45:56 -07:00
|
|
|
#ifndef SRSRAN_EPC_INTERFACES_H
|
|
|
|
#define SRSRAN_EPC_INTERFACES_H
|
2019-03-21 10:03:46 -07:00
|
|
|
|
2021-03-19 03:45:56 -07:00
|
|
|
#include "srsran/asn1/gtpc_ies.h"
|
|
|
|
#include "srsran/common/common.h"
|
2018-08-21 07:17:08 -07:00
|
|
|
#include <netinet/sctp.h>
|
2019-04-08 05:22:01 -07:00
|
|
|
#include <queue>
|
2018-01-28 07:46:35 -08:00
|
|
|
|
|
|
|
namespace srsepc {
|
|
|
|
|
2018-07-23 07:30:19 -07:00
|
|
|
class nas;
|
|
|
|
|
2019-04-04 05:02:00 -07:00
|
|
|
enum nas_timer_type {
|
|
|
|
T_3413,
|
|
|
|
};
|
|
|
|
|
2019-03-19 06:53:58 -07:00
|
|
|
/******************
|
|
|
|
* MME Interfaces *
|
|
|
|
******************/
|
2019-04-23 01:53:11 -07:00
|
|
|
class gtpc_interface_nas // NAS -> GTP-C
|
2018-07-18 11:25:59 -07:00
|
|
|
{
|
|
|
|
public:
|
2019-03-19 06:53:58 -07:00
|
|
|
virtual bool send_create_session_request(uint64_t imsi) = 0;
|
2021-03-19 03:45:56 -07:00
|
|
|
virtual bool send_modify_bearer_request(uint64_t imsi, uint16_t erab_to_modify, srsran::gtp_fteid_t* enb_fteid) = 0;
|
2019-03-19 06:53:58 -07:00
|
|
|
virtual bool send_delete_session_request(uint64_t imsi) = 0;
|
2019-04-08 05:22:01 -07:00
|
|
|
virtual bool send_downlink_data_notification_failure_indication(uint64_t imsi,
|
2021-03-19 03:45:56 -07:00
|
|
|
enum srsran::gtpc_cause_value cause) = 0;
|
2018-07-18 11:25:59 -07:00
|
|
|
};
|
|
|
|
|
2019-03-19 06:53:58 -07:00
|
|
|
class s1ap_interface_gtpc // GTP-C -> S1AP
|
2018-07-16 05:50:12 -07:00
|
|
|
{
|
|
|
|
public:
|
2018-07-18 09:25:37 -07:00
|
|
|
virtual bool send_initial_context_setup_request(uint64_t imsi, uint16_t erab_to_setup) = 0;
|
2018-07-16 05:50:12 -07:00
|
|
|
};
|
|
|
|
|
2019-03-19 06:53:58 -07:00
|
|
|
class s1ap_interface_nas // NAS -> S1AP
|
2018-07-16 05:50:12 -07:00
|
|
|
{
|
|
|
|
public:
|
2019-03-19 06:53:58 -07:00
|
|
|
virtual uint32_t allocate_m_tmsi(uint64_t imsi) = 0;
|
|
|
|
virtual uint32_t get_next_mme_ue_s1ap_id() = 0;
|
|
|
|
virtual bool add_nas_ctx_to_imsi_map(nas* nas_ctx) = 0;
|
|
|
|
virtual bool add_nas_ctx_to_mme_ue_s1ap_id_map(nas* nas_ctx) = 0;
|
|
|
|
virtual bool add_ue_to_enb_set(int32_t enb_assoc, uint32_t mme_ue_s1ap_id) = 0;
|
|
|
|
virtual bool release_ue_ecm_ctx(uint32_t mme_ue_s1ap_id) = 0;
|
|
|
|
virtual bool delete_ue_ctx(uint64_t imsi) = 0;
|
|
|
|
virtual uint64_t find_imsi_from_m_tmsi(uint32_t m_tmsi) = 0;
|
|
|
|
virtual nas* find_nas_ctx_from_imsi(uint64_t imsi) = 0;
|
2018-07-23 07:30:19 -07:00
|
|
|
virtual bool send_initial_context_setup_request(uint64_t imsi, uint16_t erab_to_setup) = 0;
|
2019-03-19 06:53:58 -07:00
|
|
|
virtual bool send_ue_context_release_command(uint32_t mme_ue_s1ap_id) = 0;
|
2020-12-09 06:51:24 -08:00
|
|
|
virtual bool send_erab_release_command(uint32_t enb_ue_s1ap_id,
|
|
|
|
uint32_t mme_ue_s1ap_id,
|
|
|
|
std::vector<uint16_t> erabs_to_release,
|
|
|
|
struct sctp_sndrcvinfo enb_sri) = 0;
|
2020-12-10 12:21:07 -08:00
|
|
|
virtual bool send_erab_modify_request(uint32_t enb_ue_s1ap_id,
|
|
|
|
uint32_t mme_ue_s1ap_id,
|
|
|
|
std::map<uint16_t, uint16_t> erabs_to_modify,
|
2021-03-19 03:45:56 -07:00
|
|
|
srsran::byte_buffer_t* nas_msg,
|
2020-12-10 12:21:07 -08:00
|
|
|
struct sctp_sndrcvinfo enb_sri) = 0;
|
2019-03-19 06:53:58 -07:00
|
|
|
virtual bool send_downlink_nas_transport(uint32_t enb_ue_s1ap_id,
|
|
|
|
uint32_t mme_ue_s1ap_id,
|
2021-03-19 03:45:56 -07:00
|
|
|
srsran::byte_buffer_t* nas_msg,
|
2019-03-19 06:53:58 -07:00
|
|
|
struct sctp_sndrcvinfo enb_sri) = 0;
|
2018-07-16 05:50:12 -07:00
|
|
|
};
|
|
|
|
|
2019-03-19 06:53:58 -07:00
|
|
|
class hss_interface_nas // NAS -> HSS
|
2018-01-28 07:46:35 -08:00
|
|
|
{
|
|
|
|
public:
|
2019-03-19 06:53:58 -07:00
|
|
|
virtual bool gen_auth_info_answer(uint64_t imsi, uint8_t* k_asme, uint8_t* autn, uint8_t* rand, uint8_t* xres) = 0;
|
|
|
|
virtual bool gen_update_loc_answer(uint64_t imsi, uint8_t* qci) = 0;
|
|
|
|
virtual bool resync_sqn(uint64_t imsi, uint8_t* auts) = 0;
|
2018-01-28 07:46:35 -08:00
|
|
|
};
|
|
|
|
|
2019-12-16 07:04:22 -08:00
|
|
|
class mme_interface_nas // NAS -> MME
|
2019-04-04 05:02:00 -07:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual bool add_nas_timer(int timer_fd, enum nas_timer_type type, uint64_t imsi) = 0;
|
|
|
|
virtual bool is_nas_timer_running(enum nas_timer_type type, uint64_t imsi) = 0;
|
|
|
|
virtual bool remove_nas_timer(enum nas_timer_type type, uint64_t imsi) = 0;
|
|
|
|
};
|
|
|
|
|
2019-12-16 07:04:22 -08:00
|
|
|
class s1ap_interface_mme // MME -> S1AP
|
2019-04-04 05:02:00 -07:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual bool expire_nas_timer(enum nas_timer_type type, uint64_t imsi) = 0;
|
|
|
|
};
|
|
|
|
|
2019-03-21 10:03:46 -07:00
|
|
|
/*******************
|
|
|
|
* SPGW Interfaces *
|
|
|
|
*******************/
|
2019-04-23 01:53:11 -07:00
|
|
|
class gtpu_interface_gtpc // GTP-C -> GTP-U
|
2019-03-21 10:03:46 -07:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual in_addr_t get_s1u_addr() = 0;
|
|
|
|
|
2021-03-19 03:45:56 -07:00
|
|
|
virtual bool modify_gtpu_tunnel(in_addr_t ue_ipv4, srsran::gtpc_f_teid_ie dw_user_fteid, uint32_t up_ctrl_teid) = 0;
|
2019-03-21 10:03:46 -07:00
|
|
|
virtual bool delete_gtpu_tunnel(in_addr_t ue_ipv4) = 0;
|
2019-04-08 05:22:01 -07:00
|
|
|
virtual bool delete_gtpc_tunnel(in_addr_t ue_ipv4) = 0;
|
2021-03-19 03:45:56 -07:00
|
|
|
virtual void send_all_queued_packets(srsran::gtp_fteid_t dw_user_fteid,
|
|
|
|
std::queue<srsran::unique_byte_buffer_t>& pkt_queue) = 0;
|
2019-04-08 05:22:01 -07:00
|
|
|
};
|
|
|
|
|
2019-12-16 07:04:22 -08:00
|
|
|
class gtpc_interface_gtpu // GTP-U -> GTP-C
|
2019-04-08 05:22:01 -07:00
|
|
|
{
|
|
|
|
public:
|
2021-03-19 03:45:56 -07:00
|
|
|
virtual bool queue_downlink_packet(uint32_t spgw_ctr_teid, srsran::unique_byte_buffer_t msg) = 0;
|
2021-02-07 13:30:31 -08:00
|
|
|
virtual bool send_downlink_data_notification(uint32_t spgw_ctr_teid) = 0;
|
2019-03-21 10:03:46 -07:00
|
|
|
};
|
|
|
|
|
2019-03-19 06:53:58 -07:00
|
|
|
} // namespace srsepc
|
2021-03-19 03:45:56 -07:00
|
|
|
#endif // SRSRAN_EPC_INTERFACES_H
|