From 0a6a72832a5e9d6fa99c107d6d587508b780e685 Mon Sep 17 00:00:00 2001 From: Andre Puschmann Date: Thu, 12 Apr 2018 11:29:09 +0200 Subject: [PATCH] add return value to USIM init and exit UE if reader wasn't found --- srsue/hdr/upper/pcsc_usim.h | 2 +- srsue/hdr/upper/usim.h | 2 +- srsue/hdr/upper/usim_base.h | 2 +- srsue/src/ue.cc | 10 ++++++++-- srsue/src/upper/pcsc_usim.cc | 10 +++++++--- srsue/src/upper/usim.cc | 4 +++- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/srsue/hdr/upper/pcsc_usim.h b/srsue/hdr/upper/pcsc_usim.h index e5892b35e..877a33983 100644 --- a/srsue/hdr/upper/pcsc_usim.h +++ b/srsue/hdr/upper/pcsc_usim.h @@ -65,7 +65,7 @@ class pcsc_usim public: pcsc_usim(); ~pcsc_usim(); - void init(usim_args_t *args, srslte::log *usim_log_); + int init(usim_args_t *args, srslte::log *usim_log_); void stop(); // NAS interface diff --git a/srsue/hdr/upper/usim.h b/srsue/hdr/upper/usim.h index 8e47f2456..a95d0cf8a 100644 --- a/srsue/hdr/upper/usim.h +++ b/srsue/hdr/upper/usim.h @@ -41,7 +41,7 @@ class usim { public: usim(); - void init(usim_args_t *args, srslte::log *usim_log_); + int init(usim_args_t *args, srslte::log *usim_log_); void stop(); // NAS interface diff --git a/srsue/hdr/upper/usim_base.h b/srsue/hdr/upper/usim_base.h index 125c31771..e8583bd46 100644 --- a/srsue/hdr/upper/usim_base.h +++ b/srsue/hdr/upper/usim_base.h @@ -59,7 +59,7 @@ public: virtual ~usim_base(); static usim_base* get_instance(usim_args_t *args, srslte::log *usim_log_); - virtual void init(usim_args_t *args, srslte::log *usim_log_) = 0; + virtual int init(usim_args_t *args, srslte::log *usim_log_) = 0; virtual void stop() = 0; // NAS interface diff --git a/srsue/src/ue.cc b/srsue/src/ue.cc index 650b22af9..ea73c3f13 100644 --- a/srsue/src/ue.cc +++ b/srsue/src/ue.cc @@ -133,6 +133,13 @@ bool ue::init(all_args_t *args_) { // Init layers + // Init USIM first to allow early exit in case reader couldn't be found + usim = usim_base::get_instance(&args->usim, &usim_log); + if (usim->init(&args->usim, &usim_log)) { + usim_log.console("Failed to initialize USIM.\n"); + return false; + } + // PHY inits in background, start before radio args->expert.phy.nof_rx_ant = args->rf.nof_rx_ant; phy.init(&radio, &mac, &rrc, phy_log, &args->expert.phy); @@ -197,8 +204,7 @@ bool ue::init(all_args_t *args_) { mac.init(&phy, &rlc, &rrc, &mac_log); rlc.init(&pdcp, &rrc, this, &rlc_log, &mac, 0 /* RB_ID_SRB0 */); pdcp.init(&rlc, &rrc, &gw, &pdcp_log, 0 /* RB_ID_SRB0 */, SECURITY_DIRECTION_UPLINK); - usim = usim_base::get_instance(&args->usim, &usim_log); - usim->init(&args->usim, &usim_log); + srslte_nas_config_t nas_cfg(1, args->apn); /* RB_ID_SRB1 */ nas.init(usim, &rrc, &gw, &nas_log, nas_cfg); gw.init(&pdcp, &nas, &gw_log, 3 /* RB_ID_DRB1 */); diff --git a/srsue/src/upper/pcsc_usim.cc b/srsue/src/upper/pcsc_usim.cc index e3573059f..86eb6f2c3 100644 --- a/srsue/src/upper/pcsc_usim.cc +++ b/srsue/src/upper/pcsc_usim.cc @@ -45,12 +45,12 @@ pcsc_usim::~pcsc_usim() sc.deinit(); } -void pcsc_usim::init(usim_args_t *args, srslte::log *log_) +int pcsc_usim::init(usim_args_t *args, srslte::log *log_) { log = log_; - if (sc.init(args, log_) == SRSLTE_SUCCESS) { - initiated = true; + if (sc.init(args, log_) != SRSLTE_SUCCESS) { + return SRSLTE_ERROR; } // Read IMSI from SIM card @@ -92,6 +92,10 @@ void pcsc_usim::init(usim_args_t *args, srslte::log *log_) // Get MNC length mnc_length = sc.get_mnc_len(); log->debug("MNC length %d\n", mnc_length); + + initiated = true; + + return SRSLTE_SUCCESS; } void pcsc_usim::stop() diff --git a/srsue/src/upper/usim.cc b/srsue/src/upper/usim.cc index fcbd24361..644f955fa 100644 --- a/srsue/src/upper/usim.cc +++ b/srsue/src/upper/usim.cc @@ -36,7 +36,7 @@ namespace srsue{ usim::usim() : initiated(false) {} -void usim::init(usim_args_t *args, srslte::log *usim_log_) +int usim::init(usim_args_t *args, srslte::log *usim_log_) { usim_log = usim_log_; imsi_str = args->imsi; @@ -89,6 +89,8 @@ void usim::init(usim_args_t *args, srslte::log *usim_log_) auth_algo = auth_algo_xor; } initiated = true; + + return SRSLTE_SUCCESS; } void usim::stop()