diff --git a/srsenb/hdr/stack/upper/gtpu.h b/srsenb/hdr/stack/upper/gtpu.h index 2e5591732..e9b6b948d 100644 --- a/srsenb/hdr/stack/upper/gtpu.h +++ b/srsenb/hdr/stack/upper/gtpu.h @@ -39,7 +39,7 @@ class gtpu final : public gtpu_interface_rrc, public gtpu_interface_pdcp public: gtpu(); - bool init(std::string gtp_bind_addr_, + int init(std::string gtp_bind_addr_, std::string mme_addr_, std::string m1u_multiaddr_, std::string m1u_if_addr_, diff --git a/srsenb/hdr/stack/upper/s1ap.h b/srsenb/hdr/stack/upper/s1ap.h index 5f40fb16f..a2adcf9b8 100644 --- a/srsenb/hdr/stack/upper/s1ap.h +++ b/srsenb/hdr/stack/upper/s1ap.h @@ -56,7 +56,7 @@ public: static const uint32_t ts1_reloc_overall_timeout_ms = 10000; s1ap(); - bool init(s1ap_args_t args_, + int init(s1ap_args_t args_, rrc_interface_s1ap* rrc_, srslte::timer_handler* timers_, srsenb::stack_interface_s1ap_lte* stack_); diff --git a/srsenb/src/enb.cc b/srsenb/src/enb.cc index e0b4dc10b..395417cb9 100644 --- a/srsenb/src/enb.cc +++ b/srsenb/src/enb.cc @@ -42,6 +42,7 @@ enb::~enb() int enb::init(const all_args_t& args_, srslte::logger* logger_) { + int ret = SRSLTE_SUCCESS; logger = logger_; // Init UE log @@ -81,17 +82,17 @@ int enb::init(const all_args_t& args_, srslte::logger* logger_) // Init layers if (lte_radio->init(args.rf, lte_phy.get())) { log.console("Error initializing radio.\n"); - return SRSLTE_ERROR; + ret = SRSLTE_ERROR; } if (lte_phy->init(args.phy, phy_cfg, lte_radio.get(), lte_stack.get())) { log.console("Error initializing PHY.\n"); - return SRSLTE_ERROR; + ret = SRSLTE_ERROR; } if (lte_stack->init(args.stack, rrc_cfg, lte_phy.get())) { log.console("Error initializing stack.\n"); - return SRSLTE_ERROR; + ret = SRSLTE_ERROR; } stack = std::move(lte_stack); @@ -101,9 +102,9 @@ int enb::init(const all_args_t& args_, srslte::logger* logger_) log.console("\n==== eNodeB started ===\n"); log.console("Type to view trace\n"); - started = true; + started = (ret == SRSLTE_SUCCESS); - return SRSLTE_SUCCESS; + return ret; } void enb::stop() diff --git a/srsenb/src/stack/enb_stack_lte.cc b/srsenb/src/stack/enb_stack_lte.cc index 81f05d334..0544f5c6a 100644 --- a/srsenb/src/stack/enb_stack_lte.cc +++ b/srsenb/src/stack/enb_stack_lte.cc @@ -107,14 +107,20 @@ int enb_stack_lte::init(const stack_args_t& args_, const rrc_cfg_t& rrc_cfg_) rlc.init(&pdcp, &rrc, &mac, &timers, rlc_log); pdcp.init(&rlc, &rrc, >pu); rrc.init(rrc_cfg, phy, &mac, &rlc, &pdcp, &s1ap, >pu, &timers); - s1ap.init(args.s1ap, &rrc, &timers, this); - gtpu.init(args.s1ap.gtp_bind_addr, - args.s1ap.mme_addr, - args.embms.m1u_multiaddr, - args.embms.m1u_if_addr, - &pdcp, - this, - args.embms.enable); + if (s1ap.init(args.s1ap, &rrc, &timers, this) != SRSLTE_SUCCESS) { + stack_log->error("Couldn't initialize S1AP\n"); + return SRSLTE_ERROR; + } + if (gtpu.init(args.s1ap.gtp_bind_addr, + args.s1ap.mme_addr, + args.embms.m1u_multiaddr, + args.embms.m1u_if_addr, + &pdcp, + this, + args.embms.enable)) { + stack_log->error("Couldn't initialize GTPU\n"); + return SRSLTE_ERROR; + } started = true; start(STACK_MAIN_THREAD_PRIO); diff --git a/srsenb/src/stack/upper/gtpu.cc b/srsenb/src/stack/upper/gtpu.cc index 24e6feb9f..78661529d 100644 --- a/srsenb/src/stack/upper/gtpu.cc +++ b/srsenb/src/stack/upper/gtpu.cc @@ -33,13 +33,13 @@ namespace srsenb { gtpu::gtpu() : m1u(this), gtpu_log("GTPU") {} -bool gtpu::init(std::string gtp_bind_addr_, - std::string mme_addr_, - std::string m1u_multiaddr_, - std::string m1u_if_addr_, - srsenb::pdcp_interface_gtpu* pdcp_, - stack_interface_gtpu_lte* stack_, - bool enable_mbsfn_) +int gtpu::init(std::string gtp_bind_addr_, + std::string mme_addr_, + std::string m1u_multiaddr_, + std::string m1u_if_addr_, + srsenb::pdcp_interface_gtpu* pdcp_, + stack_interface_gtpu_lte* stack_, + bool enable_mbsfn_) { pdcp = pdcp_; gtp_bind_addr = gtp_bind_addr_; @@ -47,13 +47,13 @@ bool gtpu::init(std::string gtp_bind_addr_, pool = byte_buffer_pool::get_instance(); stack = stack_; - char errbuf[128]; + char errbuf[128] = {}; // Set up socket fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd < 0) { gtpu_log->error("Failed to create socket\n"); - return false; + return SRSLTE_ERROR; } int enable = 1; #if defined(SO_REUSEADDR) @@ -75,7 +75,7 @@ bool gtpu::init(std::string gtp_bind_addr_, snprintf(errbuf, sizeof(errbuf), "%s", strerror(errno)); gtpu_log->error("Failed to bind on address %s, port %d: %s\n", gtp_bind_addr.c_str(), GTPU_PORT, errbuf); gtpu_log->console("Failed to bind on address %s, port %d: %s\n", gtp_bind_addr.c_str(), GTPU_PORT, errbuf); - return false; + return SRSLTE_ERROR; } stack->add_gtpu_s1u_socket_handler(fd); @@ -84,10 +84,10 @@ bool gtpu::init(std::string gtp_bind_addr_, enable_mbsfn = enable_mbsfn_; if (enable_mbsfn) { if (not m1u.init(m1u_multiaddr_, m1u_if_addr_)) { - return false; + return SRSLTE_ERROR; } } - return true; + return SRSLTE_SUCCESS; } void gtpu::stop() diff --git a/srsenb/src/stack/upper/s1ap.cc b/srsenb/src/stack/upper/s1ap.cc index 04d73cd6b..0fe0d0c0a 100644 --- a/srsenb/src/stack/upper/s1ap.cc +++ b/srsenb/src/stack/upper/s1ap.cc @@ -221,10 +221,10 @@ void s1ap::s1_setup_proc_t::then(const srslte::proc_state_t& result) const s1ap::s1ap() : s1setup_proc(this) {} -bool s1ap::init(s1ap_args_t args_, - rrc_interface_s1ap* rrc_, - srslte::timer_handler* timers_, - srsenb::stack_interface_s1ap_lte* stack_) +int s1ap::init(s1ap_args_t args_, + rrc_interface_s1ap* rrc_, + srslte::timer_handler* timers_, + srsenb::stack_interface_s1ap_lte* stack_) { rrc = rrc_; args = args_; @@ -259,7 +259,7 @@ bool s1ap::init(s1ap_args_t args_, s1ap_log->error("Failed to initiate S1Setup procedure.\n"); } - return true; + return SRSLTE_SUCCESS; } void s1ap::stop()