diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2023-09-15 13:41:02 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2023-09-19 09:15:08 +0000 |
commit | 852b2cbadc132750014147dfbd87bb8f100962ee (patch) | |
tree | 79fa9e298ac4d7b43c5e27c789dc3221b6aff27d | |
parent | c4e836838dc7a18971132569c6bb9291aa2c6d65 (diff) |
nm: delay RSL connect until BBTRANSC object is OPSTARTed
Have same behavior as nanoBTS.
Related: OS#5253
Change-Id: Idefc65a8812abd49fb5f0cd7b0bef423536b86e0
-rw-r--r-- | src/common/nm_bb_transc_fsm.c | 16 | ||||
-rw-r--r-- | src/common/oml.c | 12 |
2 files changed, 16 insertions, 12 deletions
diff --git a/src/common/nm_bb_transc_fsm.c b/src/common/nm_bb_transc_fsm.c index 12493e42..c668efff 100644 --- a/src/common/nm_bb_transc_fsm.c +++ b/src/common/nm_bb_transc_fsm.c @@ -119,6 +119,7 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi { struct gsm_bts_bb_trx *bb_transc = (struct gsm_bts_bb_trx *)fi->priv; struct gsm_bts_trx *trx = gsm_bts_bb_trx_get_trx(bb_transc); + struct gsm_bts *bts = trx->bts; struct nm_fsm_ev_setattr_data *setattr_data; bool phy_state_connected; bool rsl_link_connected; @@ -145,6 +146,19 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi return; } #endif + /* Connect RSL link: */ + if (bts->variant == BTS_OSMO_OMLDUMMY) { + LOGPFSML(fi, LOGL_NOTICE, "Not connecting RSL in OML-DUMMY!\n"); + } else { + rc = e1inp_ipa_bts_rsl_connect_n(bts->oml_link->ts->line, + bb_transc->rsl.rem_addrstr.ip, + bb_transc->rsl.rem_addrstr.port, trx->nr); + if (rc < 0) { + LOGPFSML(fi, LOGL_NOTICE, "Error connecting IPA RSL: %d\n", rc); + oml_mo_opstart_nack(&bb_transc->mo, NM_NACK_CANT_PERFORM); + return; + } + } bts_model_opstart(trx->bts, &bb_transc->mo, bb_transc); return; case NM_EV_OPSTART_ACK: @@ -170,7 +184,7 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi } - if (trx->bts->variant != BTS_OSMO_OMLDUMMY) { /* In OMLDUMMY, phy=NULL */ + if (bts->variant != BTS_OSMO_OMLDUMMY) { /* In OMLDUMMY, phy=NULL */ struct phy_instance *pinst = trx_phy_instance(trx); phy_state_connected = phy_link_state_get(pinst->phy_link) == PHY_LINK_CONNECTED; rsl_link_connected = !!trx->bb_transc.rsl.link; diff --git a/src/common/oml.c b/src/common/oml.c index f78790aa..4565e9a8 100644 --- a/src/common/oml.c +++ b/src/common/oml.c @@ -1512,17 +1512,7 @@ static int rx_oml_ipa_rsl_connect(struct gsm_bts *bts, struct msgb *msg, trx_name, bb_transc->rsl.rem_addrstr.ip, bb_transc->rsl.rem_addrstr.port, bb_transc->rsl.tei); - if (bts->variant == BTS_OSMO_OMLDUMMY) { - rc = 0; - LOGP(DOML, LOGL_NOTICE, "%s: Not connecting RSL in OML-DUMMY!\n", trx_name); - } else { - rc = e1inp_ipa_bts_rsl_connect_n(oml_link->ts->line, bb_transc->rsl.rem_addrstr.ip, - bb_transc->rsl.rem_addrstr.port, trx->nr); - if (rc < 0) { - LOGP(DOML, LOGL_NOTICE, "%s: Error connecting IPA RSL: %d\n", trx_name, rc); - rc = NM_NACK_CANT_PERFORM; - } - } + rc = 0; tx_ack_nack: /* The ACK/NACK is expected to contain all IEs */ |