aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-09-15 13:41:02 +0200
committerpespin <pespin@sysmocom.de>2023-09-19 09:15:08 +0000
commit852b2cbadc132750014147dfbd87bb8f100962ee (patch)
tree79fa9e298ac4d7b43c5e27c789dc3221b6aff27d
parentMove trx->rsl_link to trx->bb_transc.rsl.link (diff)
downloadOsmoBTS-852b2cbadc132750014147dfbd87bb8f100962ee.tar.xz
OsmoBTS-852b2cbadc132750014147dfbd87bb8f100962ee.zip
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.c16
-rw-r--r--src/common/oml.c12
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 */