diff --git a/srsepc/hdr/hss/hss.h b/srsepc/hdr/hss/hss.h index 7cafe21ce..2adc71545 100644 --- a/srsepc/hdr/hss/hss.h +++ b/srsepc/hdr/hss/hss.h @@ -65,7 +65,7 @@ enum hss_auth_algo { HSS_ALGO_MILENAGE }; -class hss : public srsepc::hss_interface_s1ap +class hss : public hss_interface_s1ap { public: static hss* get_instance(void); diff --git a/srsepc/hdr/mme/mme.h b/srsepc/hdr/mme/mme.h index 26296c2c6..c0eac0685 100644 --- a/srsepc/hdr/mme/mme.h +++ b/srsepc/hdr/mme/mme.h @@ -66,7 +66,7 @@ class mme: public: static mme* get_instance(void); static void cleanup(void); - int init(mme_args_t* args, srslte::log_filter *s1ap_log, srslte::log_filter *mme_gtpc_log); + int init(mme_args_t* args, srslte::log_filter *s1ap_log, srslte::log_filter *mme_gtpc_log, hss_interface_s1ap * hss_); void stop(); int get_s1_mme(); void run_thread(); diff --git a/srsepc/hdr/mme/s1ap.h b/srsepc/hdr/mme/s1ap.h index fc4dd3d49..963e8d51f 100644 --- a/srsepc/hdr/mme/s1ap.h +++ b/srsepc/hdr/mme/s1ap.h @@ -59,7 +59,7 @@ public: static void cleanup(); int enb_listen(); - int init(s1ap_args_t s1ap_args, srslte::log_filter *s1ap_log); + int init(s1ap_args_t s1ap_args, srslte::log_filter *s1ap_log, hss_interface_s1ap * hss_); void stop(); int get_s1_mme(); @@ -103,7 +103,7 @@ private: uint32_t m_plmn; srslte::byte_buffer_pool *m_pool; - hss *m_hss; + hss_interface_s1ap *m_hss; int m_s1mme; std::map m_active_enbs; std::map m_sctp_to_enb_id; diff --git a/srsepc/hdr/mme/s1ap_nas_transport.h b/srsepc/hdr/mme/s1ap_nas_transport.h index e37ce4d61..2e9a1a9a7 100644 --- a/srsepc/hdr/mme/s1ap_nas_transport.h +++ b/srsepc/hdr/mme/s1ap_nas_transport.h @@ -42,7 +42,7 @@ public: static s1ap_nas_transport* m_instance; static s1ap_nas_transport* get_instance(void); static void cleanup(void); - void init(void); + void init(hss_interface_s1ap * hss_); bool handle_initial_ue_message(LIBLTE_S1AP_MESSAGE_INITIALUEMESSAGE_STRUCT *init_ue, struct sctp_sndrcvinfo *enb_sri, srslte::byte_buffer_t *reply_buffer, bool *reply_flag); bool handle_uplink_nas_transport(LIBLTE_S1AP_MESSAGE_UPLINKNASTRANSPORT_STRUCT *ul_xport, struct sctp_sndrcvinfo *enb_sri, srslte::byte_buffer_t *reply_buffer, bool *reply_flag); @@ -97,7 +97,7 @@ private: srslte::byte_buffer_pool *m_pool; s1ap* m_s1ap; - hss* m_hss; + hss_interface_s1ap* m_hss; mme_gtpc* m_mme_gtpc; }; diff --git a/srsepc/src/main.cc b/srsepc/src/main.cc index 8e9db9259..365bcbf17 100644 --- a/srsepc/src/main.cc +++ b/srsepc/src/main.cc @@ -304,19 +304,20 @@ main (int argc,char * argv[] ) spgw_log.init("SPGW",logger); spgw_log.set_level(level(args.log_args.spgw_level)); spgw_log.set_hex_limit(args.log_args.spgw_hex_limit); - - mme *mme = mme::get_instance(); - if (mme->init(&args.mme_args, &s1ap_log, &mme_gtpc_log)) { - cout << "Error initializing MME" << endl; - exit(1); - } + hss *hss = hss::get_instance(); if (hss->init(&args.hss_args,&hss_log)) { cout << "Error initializing HSS" << endl; exit(1); } - + + mme *mme = mme::get_instance(); + if (mme->init(&args.mme_args, &s1ap_log, &mme_gtpc_log, hss)) { + cout << "Error initializing MME" << endl; + exit(1); + } + spgw *spgw = spgw::get_instance(); if (spgw->init(&args.spgw_args,&spgw_log)) { cout << "Error initializing SP-GW" << endl; diff --git a/srsepc/src/mme/mme.cc b/srsepc/src/mme/mme.cc index ab4778c20..eb247164c 100644 --- a/srsepc/src/mme/mme.cc +++ b/srsepc/src/mme/mme.cc @@ -70,7 +70,7 @@ mme::cleanup(void) } int -mme::init(mme_args_t* args, srslte::log_filter *s1ap_log, srslte::log_filter *mme_gtpc_log) +mme::init(mme_args_t* args, srslte::log_filter *s1ap_log, srslte::log_filter *mme_gtpc_log, hss_interface_s1ap * hss_) { /*Init logger*/ @@ -78,7 +78,7 @@ mme::init(mme_args_t* args, srslte::log_filter *s1ap_log, srslte::log_filter *mm m_mme_gtpc_log = mme_gtpc_log; /*Init S1AP*/ m_s1ap = s1ap::get_instance(); - if(m_s1ap->init(args->s1ap_args, s1ap_log)){ + if(m_s1ap->init(args->s1ap_args, s1ap_log, hss_)){ m_s1ap_log->error("Error initializing MME S1APP\n"); exit(-1); } diff --git a/srsepc/src/mme/s1ap.cc b/srsepc/src/mme/s1ap.cc index 07563e7ca..0d975ca61 100644 --- a/srsepc/src/mme/s1ap.cc +++ b/srsepc/src/mme/s1ap.cc @@ -67,7 +67,7 @@ s1ap::cleanup(void) } int -s1ap::init(s1ap_args_t s1ap_args, srslte::log_filter *s1ap_log) +s1ap::init(s1ap_args_t s1ap_args, srslte::log_filter *s1ap_log, hss_interface_s1ap * hss_) { m_pool = srslte::byte_buffer_pool::get_instance(); @@ -77,18 +77,18 @@ s1ap::init(s1ap_args_t s1ap_args, srslte::log_filter *s1ap_log) //Init log m_s1ap_log = s1ap_log; + //Get pointer to the HSS + m_hss = hss_; + //Init message handlers m_s1ap_mngmt_proc = s1ap_mngmt_proc::get_instance(); //Managment procedures m_s1ap_mngmt_proc->init(); m_s1ap_nas_transport = s1ap_nas_transport::get_instance(); //NAS Transport procedures - m_s1ap_nas_transport->init(); + m_s1ap_nas_transport->init(m_hss); m_s1ap_ctx_mngmt_proc = s1ap_ctx_mngmt_proc::get_instance(); //Context Management Procedures m_s1ap_ctx_mngmt_proc->init(); - //Get pointer to the HSS - m_hss = hss::get_instance(); - //Get pointer to GTP-C class m_mme_gtpc = mme_gtpc::get_instance(); diff --git a/srsepc/src/mme/s1ap_nas_transport.cc b/srsepc/src/mme/s1ap_nas_transport.cc index 092e92ae3..5aab70f16 100644 --- a/srsepc/src/mme/s1ap_nas_transport.cc +++ b/srsepc/src/mme/s1ap_nas_transport.cc @@ -64,13 +64,13 @@ s1ap_nas_transport::cleanup(void) } void -s1ap_nas_transport::init(void) +s1ap_nas_transport::init(hss_interface_s1ap * hss_) { m_s1ap = s1ap::get_instance(); m_s1ap_log = m_s1ap->m_s1ap_log; m_pool = srslte::byte_buffer_pool::get_instance(); - m_hss = hss::get_instance(); + m_hss = hss_; m_mme_gtpc = mme_gtpc::get_instance(); }