aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bsc/bts_ipaccess_nanobts.c
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-09-30 13:42:04 +0200
committerlaforge <laforge@osmocom.org>2020-10-15 05:55:36 +0000
commit95486f248a37e66d6ae0baa1fd33e44317cce3ba (patch)
tree6761332de416b43b71cb1e05599646ea5bebfa78 /src/osmo-bsc/bts_ipaccess_nanobts.c
parent6adeb607d0a932fcbc07b1daada432e77490e7ce (diff)
Introduce NM BaseBand Transceiver FSM
Diffstat (limited to 'src/osmo-bsc/bts_ipaccess_nanobts.c')
-rw-r--r--src/osmo-bsc/bts_ipaccess_nanobts.c36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts.c b/src/osmo-bsc/bts_ipaccess_nanobts.c
index bb05236f3..a93183a96 100644
--- a/src/osmo-bsc/bts_ipaccess_nanobts.c
+++ b/src/osmo-bsc/bts_ipaccess_nanobts.c
@@ -131,6 +131,7 @@ static int nm_statechg_event(int evt, struct nm_statechg_signal_data *nsd)
struct gsm_bts_sm *bts_sm;
struct gsm_bts *bts;
struct gsm_bts_trx *trx;
+ struct gsm_bts_bb_trx *bb_transc;
struct gsm_bts_trx_ts *ts;
struct gsm_bts_gprs_nsvc *nsvc;
@@ -143,7 +144,9 @@ static int nm_statechg_event(int evt, struct nm_statechg_signal_data *nsd)
/* S_NM_STATECHG_ADM is called after we call chg_adm_state() and would create
* endless loop */
- if (obj_class != NM_OC_BTS && evt != S_NM_STATECHG_OPER)
+ if (obj_class != NM_OC_BTS &&
+ obj_class != NM_OC_BASEB_TRANSC &&
+ evt != S_NM_STATECHG_OPER)
return 0;
switch (obj_class) {
@@ -155,6 +158,10 @@ static int nm_statechg_event(int evt, struct nm_statechg_signal_data *nsd)
bts = obj;
osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_STATE_CHG_REP, nsd);
break;
+ case NM_OC_BASEB_TRANSC:
+ bb_transc = obj;
+ osmo_fsm_inst_dispatch(bb_transc->mo.fi, NM_EV_STATE_CHG_REP, nsd);
+ break;
case NM_OC_CHANNEL:
ts = obj;
trx = ts->trx;
@@ -262,14 +269,7 @@ static int sw_activ_rep(struct msgb *mb)
case NM_OC_BASEB_TRANSC:
if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr)))
return -EINVAL;
- abis_nm_chg_adm_state(trx->bts, foh->obj_class,
- trx->bts->bts_nr, trx->nr, 0xff,
- NM_STATE_UNLOCKED);
- abis_nm_opstart(trx->bts, foh->obj_class,
- trx->bts->bts_nr, trx->nr, 0xff);
- /* TRX software is active, tell it to initiate RSL Link */
- abis_nm_ipaccess_rsl_connect(trx, trx->bts->ip_access.rsl_ip,
- 3003, trx->rsl_tei);
+ osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_SW_ACT_REP, NULL);
break;
case NM_OC_RADIO_CARRIER: {
if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr)))
@@ -316,6 +316,8 @@ static void nm_rx_opstart_ack(struct msgb *oml_msg)
struct abis_om_fom_hdr *foh = msgb_l3(oml_msg);
struct e1inp_sign_link *sign_link = oml_msg->dst;
struct gsm_bts *bts = sign_link->trx->bts;
+ struct gsm_bts_trx *trx;
+
switch (foh->obj_class) {
case NM_OC_SITE_MANAGER:
osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);
@@ -323,6 +325,11 @@ static void nm_rx_opstart_ack(struct msgb *oml_msg)
case NM_OC_BTS:
osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);
break;
+ case NM_OC_BASEB_TRANSC:
+ if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr)))
+ return;
+ osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_OPSTART_ACK, NULL);
+ break;
case NM_OC_CHANNEL:
nm_rx_opstart_ack_chan(oml_msg);
break;
@@ -336,6 +343,8 @@ static void nm_rx_opstart_nack(struct msgb *oml_msg)
struct abis_om_fom_hdr *foh = msgb_l3(oml_msg);
struct e1inp_sign_link *sign_link = oml_msg->dst;
struct gsm_bts *bts = sign_link->trx->bts;
+ struct gsm_bts_trx *trx;
+
switch (foh->obj_class) {
case NM_OC_SITE_MANAGER:
osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_NACK, NULL);
@@ -343,6 +352,11 @@ static void nm_rx_opstart_nack(struct msgb *oml_msg)
case NM_OC_BTS:
osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);
break;
+ case NM_OC_BASEB_TRANSC:
+ if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr)))
+ return;
+ osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_OPSTART_NACK, NULL);
+ break;
default:
break;
}
@@ -480,8 +494,10 @@ void ipaccess_drop_oml(struct gsm_bts *bts, const char *reason)
osmo_stat_item_dec(bts->bts_statg->items[BTS_STAT_OML_CONNECTED], 1);
/* we have issues reconnecting RSL, drop everything. */
- llist_for_each_entry(trx, &bts->trx_list, list)
+ llist_for_each_entry(trx, &bts->trx_list, list) {
ipaccess_drop_rsl(trx, "OML link drop");
+ osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_OML_DOWN, NULL);
+ }
osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OML_DOWN, NULL);
osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OML_DOWN, NULL);