From 186285ffd3b435d8a4711fcfbbd79a58dacd5fd3 Mon Sep 17 00:00:00 2001 From: Francisco Date: Thu, 25 Feb 2021 15:57:24 +0000 Subject: [PATCH] move ue usim interfaces to separate interfaces header file --- lib/include/srslte/interfaces/ue_interfaces.h | 50 ++------------ .../srslte/interfaces/ue_usim_interfaces.h | 65 +++++++++++++++++++ srsue/hdr/stack/rrc/rrc.h | 27 ++++---- srsue/hdr/stack/rrc/rrc_nr.h | 2 + srsue/hdr/stack/upper/nas.h | 2 + srsue/hdr/stack/upper/usim_base.h | 2 +- srsue/src/stack/rrc/rrc.cc | 27 ++++---- srsue/src/stack/rrc/rrc_procedures.cc | 7 +- srsue/src/stack/upper/nas.cc | 5 +- 9 files changed, 106 insertions(+), 81 deletions(-) create mode 100644 lib/include/srslte/interfaces/ue_usim_interfaces.h diff --git a/lib/include/srslte/interfaces/ue_interfaces.h b/lib/include/srslte/interfaces/ue_interfaces.h index 8f2900244..84d1d299a 100644 --- a/lib/include/srslte/interfaces/ue_interfaces.h +++ b/lib/include/srslte/interfaces/ue_interfaces.h @@ -39,41 +39,6 @@ namespace srsue { -typedef enum { AUTH_OK, AUTH_FAILED, AUTH_SYNCH_FAILURE } auth_result_t; - -// USIM interface for NAS -class usim_interface_nas -{ -public: - virtual std::string get_imsi_str() = 0; - virtual std::string get_imei_str() = 0; - virtual bool get_imsi_vec(uint8_t* imsi_, uint32_t n) = 0; - virtual bool get_imei_vec(uint8_t* imei_, uint32_t n) = 0; - virtual bool get_home_plmn_id(srslte::plmn_id_t* home_plmn_id) = 0; - virtual auth_result_t generate_authentication_response(uint8_t* rand, - uint8_t* autn_enb, - uint16_t mcc, - uint16_t mnc, - uint8_t* res, - int* res_len, - uint8_t* k_asme) = 0; - virtual void generate_nas_keys(uint8_t* k_asme, - uint8_t* k_nas_enc, - uint8_t* k_nas_int, - srslte::CIPHERING_ALGORITHM_ID_ENUM cipher_algo, - srslte::INTEGRITY_ALGORITHM_ID_ENUM integ_algo) = 0; -}; - -// USIM interface for RRC -class usim_interface_rrc -{ -public: - virtual void generate_as_keys(uint8_t* k_asme, uint32_t count_ul, srslte::as_security_config_t* sec_cfg) = 0; - virtual void generate_as_keys_ho(uint32_t pci, uint32_t earfcn, int ncc, srslte::as_security_config_t* sec_cfg) = 0; - virtual void store_keys_before_ho(const srslte::as_security_config_t& as_cfg) = 0; - virtual void restore_keys_from_failed_ho(srslte::as_security_config_t* as_cfg) = 0; -}; - // GW interface for NAS class gw_interface_nas { @@ -247,8 +212,8 @@ public: virtual uint32_t get_ipv4_addr() = 0; virtual bool get_ipv6_addr(uint8_t* ipv6_addr) = 0; virtual void - plmn_search_completed(const rrc_interface_nas::found_plmn_t found_plmns[rrc_interface_nas::MAX_FOUND_PLMNS], - int nof_plmns) = 0; + plmn_search_completed(const rrc_interface_nas::found_plmn_t found_plmns[rrc_interface_nas::MAX_FOUND_PLMNS], + int nof_plmns) = 0; virtual bool connection_request_completed(bool outcome) = 0; }; @@ -288,13 +253,6 @@ public: virtual bool is_config_pending() = 0; }; -class usim_interface_rrc_nr -{ -public: - virtual void generate_nr_context(uint16_t sk_counter, srslte::as_security_config_t* sec_cfg) = 0; - virtual void update_nr_context(srslte::as_security_config_t* sec_cfg) = 0; -}; - // PDCP interface for RLC class pdcp_interface_rlc { @@ -626,8 +584,8 @@ public: } prach_info_t; virtual void - prach_send(uint32_t preamble_idx, int allowed_subframe, float target_power_dbm, float ta_base_sec = 0.0f) = 0; - virtual prach_info_t prach_get_info() = 0; + prach_send(uint32_t preamble_idx, int allowed_subframe, float target_power_dbm, float ta_base_sec = 0.0f) = 0; + virtual prach_info_t prach_get_info() = 0; /* Indicates the transmission of a SR signal in the next opportunity */ virtual void sr_send() = 0; diff --git a/lib/include/srslte/interfaces/ue_usim_interfaces.h b/lib/include/srslte/interfaces/ue_usim_interfaces.h new file mode 100644 index 000000000..ecb0a4a84 --- /dev/null +++ b/lib/include/srslte/interfaces/ue_usim_interfaces.h @@ -0,0 +1,65 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2020 Software Radio Systems Limited + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the distribution. + * + */ + +#ifndef SRSLTE_UE_USIM_INTERFACES_H +#define SRSLTE_UE_USIM_INTERFACES_H + +#include "rrc_interface_types.h" +#include + +namespace srsue { + +enum auth_result_t { AUTH_OK, AUTH_FAILED, AUTH_SYNCH_FAILURE }; + +// USIM interface for NAS +class usim_interface_nas +{ +public: + virtual std::string get_imsi_str() = 0; + virtual std::string get_imei_str() = 0; + virtual bool get_imsi_vec(uint8_t* imsi_, uint32_t n) = 0; + virtual bool get_imei_vec(uint8_t* imei_, uint32_t n) = 0; + virtual bool get_home_plmn_id(srslte::plmn_id_t* home_plmn_id) = 0; + virtual auth_result_t generate_authentication_response(uint8_t* rand, + uint8_t* autn_enb, + uint16_t mcc, + uint16_t mnc, + uint8_t* res, + int* res_len, + uint8_t* k_asme) = 0; + virtual void generate_nas_keys(uint8_t* k_asme, + uint8_t* k_nas_enc, + uint8_t* k_nas_int, + srslte::CIPHERING_ALGORITHM_ID_ENUM cipher_algo, + srslte::INTEGRITY_ALGORITHM_ID_ENUM integ_algo) = 0; +}; + +// USIM interface for RRC +class usim_interface_rrc +{ +public: + virtual void generate_as_keys(uint8_t* k_asme, uint32_t count_ul, srslte::as_security_config_t* sec_cfg) = 0; + virtual void generate_as_keys_ho(uint32_t pci, uint32_t earfcn, int ncc, srslte::as_security_config_t* sec_cfg) = 0; + virtual void store_keys_before_ho(const srslte::as_security_config_t& as_cfg) = 0; + virtual void restore_keys_from_failed_ho(srslte::as_security_config_t* as_cfg) = 0; +}; + +class usim_interface_rrc_nr +{ +public: + virtual void generate_nr_context(uint16_t sk_counter, srslte::as_security_config_t* sec_cfg) = 0; + virtual void update_nr_context(srslte::as_security_config_t* sec_cfg) = 0; +}; + +} // namespace srsue + +#endif // SRSLTE_UE_USIM_INTERFACES_H diff --git a/srsue/hdr/stack/rrc/rrc.h b/srsue/hdr/stack/rrc/rrc.h index 755e3093f..20d938a3f 100644 --- a/srsue/hdr/stack/rrc/rrc.h +++ b/srsue/hdr/stack/rrc/rrc.h @@ -58,6 +58,7 @@ using srslte::byte_buffer_t; namespace srsue { class phy_controller; +class usim_interface_rrc; class rrc : public rrc_interface_nas, public rrc_interface_phy_lte, @@ -78,8 +79,8 @@ public: nas_interface_rrc* nas_, usim_interface_rrc* usim_, gw_interface_rrc* gw_, - rrc_nr_interface_rrc* rrc_nr_, - const rrc_args_t& args_); + rrc_nr_interface_rrc* rrc_nr_, + const rrc_args_t& args_); void stop(); @@ -165,17 +166,17 @@ private: void process_pcch(srslte::unique_byte_buffer_t pdu); - stack_interface_rrc* stack = nullptr; - srslte::task_sched_handle task_sched; - srslog::basic_logger& logger; - phy_interface_rrc_lte* phy = nullptr; - mac_interface_rrc* mac = nullptr; - rlc_interface_rrc* rlc = nullptr; - pdcp_interface_rrc* pdcp = nullptr; - nas_interface_rrc* nas = nullptr; - usim_interface_rrc* usim = nullptr; - gw_interface_rrc* gw = nullptr; - rrc_nr_interface_rrc* rrc_nr = nullptr; + stack_interface_rrc* stack = nullptr; + srslte::task_sched_handle task_sched; + srslog::basic_logger& logger; + phy_interface_rrc_lte* phy = nullptr; + mac_interface_rrc* mac = nullptr; + rlc_interface_rrc* rlc = nullptr; + pdcp_interface_rrc* pdcp = nullptr; + nas_interface_rrc* nas = nullptr; + usim_interface_rrc* usim = nullptr; + gw_interface_rrc* gw = nullptr; + rrc_nr_interface_rrc* rrc_nr = nullptr; srslte::unique_byte_buffer_t dedicated_info_nas; void send_ul_ccch_msg(const asn1::rrc::ul_ccch_msg_s& msg); diff --git a/srsue/hdr/stack/rrc/rrc_nr.h b/srsue/hdr/stack/rrc/rrc_nr.h index d476e1804..b23507984 100644 --- a/srsue/hdr/stack/rrc/rrc_nr.h +++ b/srsue/hdr/stack/rrc/rrc_nr.h @@ -24,6 +24,8 @@ namespace srsue { +class usim_interface_rrc_nr; + // Expert arguments to create GW without proper RRC struct core_less_args_t { std::string ip_addr; diff --git a/srsue/hdr/stack/upper/nas.h b/srsue/hdr/stack/upper/nas.h index dae5ec7a4..b0bbfd988 100644 --- a/srsue/hdr/stack/upper/nas.h +++ b/srsue/hdr/stack/upper/nas.h @@ -31,6 +31,8 @@ using srslte::byte_buffer_t; namespace srsue { +class usim_interface_nas; + class nas : public nas_interface_rrc, public srslte::timer_callback { public: diff --git a/srsue/hdr/stack/upper/usim_base.h b/srsue/hdr/stack/upper/usim_base.h index ad97ee52d..993ec89ac 100644 --- a/srsue/hdr/stack/upper/usim_base.h +++ b/srsue/hdr/stack/upper/usim_base.h @@ -16,7 +16,7 @@ #include "srslte/common/common.h" #include "srslte/common/log.h" #include "srslte/common/security.h" -#include "srslte/interfaces/ue_interfaces.h" +#include "srslte/interfaces/ue_usim_interfaces.h" #include "srslte/srslog/srslog.h" #include diff --git a/srsue/src/stack/rrc/rrc.cc b/srsue/src/stack/rrc/rrc.cc index 77b9664e0..c59666284 100644 --- a/srsue/src/stack/rrc/rrc.cc +++ b/srsue/src/stack/rrc/rrc.cc @@ -14,6 +14,7 @@ #include "srslte/asn1/rrc.h" #include "srslte/common/bcd_helpers.h" #include "srslte/common/security.h" +#include "srslte/interfaces/ue_usim_interfaces.h" #include "srsue/hdr/stack/rrc/phy_controller.h" #include "srsue/hdr/stack/rrc/rrc_meas.h" #include "srsue/hdr/stack/rrc/rrc_procedures.h" @@ -97,18 +98,18 @@ void rrc::init(phy_interface_rrc_lte* phy_, nas_interface_rrc* nas_, usim_interface_rrc* usim_, gw_interface_rrc* gw_, - rrc_nr_interface_rrc* rrc_nr_, - const rrc_args_t& args_) + rrc_nr_interface_rrc* rrc_nr_, + const rrc_args_t& args_) { - phy = phy_; - mac = mac_; - rlc = rlc_; - pdcp = pdcp_; - nas = nas_; - usim = usim_; - gw = gw_; + phy = phy_; + mac = mac_; + rlc = rlc_; + pdcp = pdcp_; + nas = nas_; + usim = usim_; + gw = gw_; rrc_nr = rrc_nr_; - args = args_; + args = args_; auto on_every_cell_selection = [this](uint32_t earfcn, uint32_t pci, bool csel_result) { if (not csel_result) { @@ -2057,8 +2058,7 @@ void rrc::handle_ue_capability_enquiry(const ue_cap_enquiry_s& enquiry) memcpy(info->ue_cap_rat_container_list[rat_idx].ue_cap_rat_container.data(), buf, cap_len); rat_idx++; - } - else if (enquiry.crit_exts.c1().ue_cap_enquiry_r8().ue_cap_request[i] == rat_type_e::eutra_nr && has_nr_dc()) { + } else if (enquiry.crit_exts.c1().ue_cap_enquiry_r8().ue_cap_request[i] == rat_type_e::eutra_nr && has_nr_dc()) { info->ue_cap_rat_container_list[rat_idx] = get_eutra_nr_capabilities(); logger.info("Including EUTRA-NR capabilities in UE Capability Info (%d B)", info->ue_cap_rat_container_list[rat_idx].ue_cap_rat_container.size()); @@ -2068,8 +2068,7 @@ void rrc::handle_ue_capability_enquiry(const ue_cap_enquiry_s& enquiry) logger.info("Including NR capabilities in UE Capability Info (%d B)", info->ue_cap_rat_container_list[rat_idx].ue_cap_rat_container.size()); rat_idx++; - } - else { + } else { logger.error("RAT Type of UE Cap request not supported or not configured"); } } diff --git a/srsue/src/stack/rrc/rrc_procedures.cc b/srsue/src/stack/rrc/rrc_procedures.cc index 8b559412b..062e4e387 100644 --- a/srsue/src/stack/rrc/rrc_procedures.cc +++ b/srsue/src/stack/rrc/rrc_procedures.cc @@ -14,6 +14,7 @@ #include "srslte/common/security.h" #include "srslte/common/standard_streams.h" #include "srslte/common/tti_point.h" +#include "srslte/interfaces/ue_usim_interfaces.h" #include "srsue/hdr/stack/rrc/rrc_meas.h" #include // for printing uint64_t @@ -1321,9 +1322,9 @@ proc_outcome_t rrc::connection_reest_proc::init(asn1::rrc::reest_cause_e cause) reest_cellid = rrc_ptr->meas_cells.find_cell(reest_source_freq, reest_source_pci)->get_cell_id(); Info("Starting... cause: \"%s\", UE context: {C-RNTI=0x%x, PCI=%d, CELL ID=%d}", - reest_cause == asn1::rrc::reest_cause_opts::recfg_fail ? "Reconfiguration failure" - : cause == asn1::rrc::reest_cause_opts::ho_fail ? "Handover failure" - : "Other failure", + reest_cause == asn1::rrc::reest_cause_opts::recfg_fail + ? "Reconfiguration failure" + : cause == asn1::rrc::reest_cause_opts::ho_fail ? "Handover failure" : "Other failure", reest_rnti, reest_source_pci, reest_cellid); diff --git a/srsue/src/stack/upper/nas.cc b/srsue/src/stack/upper/nas.cc index 2e2786d34..ffae2b950 100644 --- a/srsue/src/stack/upper/nas.cc +++ b/srsue/src/stack/upper/nas.cc @@ -16,14 +16,11 @@ #include #include #include -#include -#include #include #include "srslte/asn1/liblte_mme.h" -#include "srslte/common/bcd_helpers.h" #include "srslte/common/logmap.h" -#include "srslte/common/security.h" +#include "srslte/interfaces/ue_usim_interfaces.h" #include "srsue/hdr/stack/upper/nas.h" #include "srsue/hdr/stack/upper/nas_idle_procedures.h"