diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/osmo-bts-litecell15/oml.c | 12 | ||||
-rw-r--r-- | src/osmo-bts-oc2g/oml.c | 12 | ||||
-rw-r--r-- | src/osmo-bts-octphy/l1_oml.c | 12 | ||||
-rw-r--r-- | src/osmo-bts-omldummy/bts_model.c | 13 | ||||
-rw-r--r-- | src/osmo-bts-sysmo/oml.c | 12 | ||||
-rw-r--r-- | src/osmo-bts-trx/l1_if.c | 9 | ||||
-rw-r--r-- | src/osmo-bts-virtual/bts_model.c | 13 |
7 files changed, 83 insertions, 0 deletions
diff --git a/src/osmo-bts-litecell15/oml.c b/src/osmo-bts-litecell15/oml.c index f14f8084..194ba7f7 100644 --- a/src/osmo-bts-litecell15/oml.c +++ b/src/osmo-bts-litecell15/oml.c @@ -268,6 +268,8 @@ static int opstart_compl(struct gsm_abis_mo *mo, struct msgb *l1_msg) { GsmL1_Prim_t *l1p = msgb_l1prim(l1_msg); GsmL1_Status_t status = prim_status(l1p); + struct gsm_bts_trx *trx = gsm_bts_trx_num(mo->bts, mo->obj_inst.trx_nr); + uint8_t tn; if (status != GsmL1_Status_Success) { LOGP(DL1C, LOGL_ERROR, "Rx %s, status: %s\n", @@ -282,6 +284,16 @@ static int opstart_compl(struct gsm_abis_mo *mo, struct msgb *l1_msg) /* Set to Operational State: Enabled */ oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK); + if (mo->obj_class == NM_OC_RADIO_CARRIER) { + /* Mark Dependency TS as Offline (ready to be Opstarted) */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + if (trx->ts[tn].mo.nm_state.operational == NM_OPSTATE_DISABLED && + trx->ts[tn].mo.nm_state.availability == NM_AVSTATE_DEPENDENCY) { + oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); + } + } + } + /* ugly hack to auto-activate all SAPIs for the BCCH/CCCH on TS0 */ if (mo->obj_class == NM_OC_CHANNEL && mo->obj_inst.trx_nr == 0 && mo->obj_inst.ts_nr == 0) { diff --git a/src/osmo-bts-oc2g/oml.c b/src/osmo-bts-oc2g/oml.c index f9faacf1..695850c8 100644 --- a/src/osmo-bts-oc2g/oml.c +++ b/src/osmo-bts-oc2g/oml.c @@ -268,6 +268,8 @@ static int opstart_compl(struct gsm_abis_mo *mo, struct msgb *l1_msg) { GsmL1_Prim_t *l1p = msgb_l1prim(l1_msg); GsmL1_Status_t status = prim_status(l1p); + struct gsm_bts_trx *trx = gsm_bts_trx_num(mo->bts, mo->obj_inst.trx_nr); + uint8_t tn; if (status != GsmL1_Status_Success) { LOGP(DL1C, LOGL_ERROR, "Rx %s, status: %s\n", @@ -282,6 +284,16 @@ static int opstart_compl(struct gsm_abis_mo *mo, struct msgb *l1_msg) /* Set to Operational State: Enabled */ oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK); + if (mo->obj_class == NM_OC_RADIO_CARRIER) { + /* Mark Dependency TS as Offline (ready to be Opstarted) */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + if (trx->ts[tn].mo.nm_state.operational == NM_OPSTATE_DISABLED && + trx->ts[tn].mo.nm_state.availability == NM_AVSTATE_DEPENDENCY) { + oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); + } + } + } + /* ugly hack to auto-activate all SAPIs for the BCCH/CCCH on TS0 */ if (mo->obj_class == NM_OC_CHANNEL && mo->obj_inst.trx_nr == 0 && mo->obj_inst.ts_nr == 0) { diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c index 300d618b..7c203eb7 100644 --- a/src/osmo-bts-octphy/l1_oml.c +++ b/src/osmo-bts-octphy/l1_oml.c @@ -185,11 +185,23 @@ extern uint8_t rach_detected_Other_g; static int opstart_compl(struct gsm_abis_mo *mo) { + struct gsm_bts_trx *trx = gsm_bts_trx_num(mo->bts, mo->obj_inst.trx_nr); + uint8_t tn; /* TODO: Send NACK in case of error! */ /* Set to Operational State: Enabled */ oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK); + if (mo->obj_class == NM_OC_RADIO_CARRIER) { + /* Mark Dependency TS as Offline (ready to be Opstarted) */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + if (trx->ts[tn].mo.nm_state.operational == NM_OPSTATE_DISABLED && + trx->ts[tn].mo.nm_state.availability == NM_AVSTATE_DEPENDENCY) { + oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); + } + } + } + /* hack to auto-activate all SAPIs for the BCCH/CCCH on TS0 */ if (mo->obj_class == NM_OC_CHANNEL && mo->obj_inst.trx_nr == 0 && mo->obj_inst.ts_nr == 7) { diff --git a/src/osmo-bts-omldummy/bts_model.c b/src/osmo-bts-omldummy/bts_model.c index edf3e6b9..8a541074 100644 --- a/src/osmo-bts-omldummy/bts_model.c +++ b/src/osmo-bts-omldummy/bts_model.c @@ -122,9 +122,22 @@ int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, int bts_model_opstart(struct gsm_bts *bts, struct gsm_abis_mo *mo, void *obj) { int rc; + struct gsm_bts_trx* trx; + uint8_t tn; switch (mo->obj_class) { case NM_OC_RADIO_CARRIER: + trx = (struct gsm_bts_trx*) obj; + /* Mark Dependency TS as Offline (ready to be Opstarted) */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + if (trx->ts[tn].mo.nm_state.operational == NM_OPSTATE_DISABLED && + trx->ts[tn].mo.nm_state.availability == NM_AVSTATE_DEPENDENCY) { + oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); + } + } + oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK); + rc = oml_mo_opstart_ack(mo); + break; case NM_OC_CHANNEL: case NM_OC_SITE_MANAGER: case NM_OC_BASEB_TRANSC: diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c index 472a7ae1..cc53d72f 100644 --- a/src/osmo-bts-sysmo/oml.c +++ b/src/osmo-bts-sysmo/oml.c @@ -267,6 +267,8 @@ static int opstart_compl(struct gsm_abis_mo *mo, struct msgb *l1_msg) { GsmL1_Prim_t *l1p = msgb_l1prim(l1_msg); GsmL1_Status_t status = prim_status(l1p); + struct gsm_bts_trx *trx = gsm_bts_trx_num(mo->bts, mo->obj_inst.trx_nr); + uint8_t tn; if (status != GsmL1_Status_Success) { LOGP(DL1C, LOGL_ERROR, "Rx %s, status: %s\n", @@ -281,6 +283,16 @@ static int opstart_compl(struct gsm_abis_mo *mo, struct msgb *l1_msg) /* Set to Operational State: Enabled */ oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK); + if (mo->obj_class == NM_OC_RADIO_CARRIER) { + /* Mark Dependency TS as Offline (ready to be Opstarted) */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + if (trx->ts[tn].mo.nm_state.operational == NM_OPSTATE_DISABLED && + trx->ts[tn].mo.nm_state.availability == NM_AVSTATE_DEPENDENCY) { + oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); + } + } + } + /* ugly hack to auto-activate all SAPIs for the BCCH/CCCH on TS0 */ if (mo->obj_class == NM_OC_CHANNEL && mo->obj_inst.trx_nr == 0 && mo->obj_inst.ts_nr == 0) { diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c index bd3661c4..8ad004e4 100644 --- a/src/osmo-bts-trx/l1_if.c +++ b/src/osmo-bts-trx/l1_if.c @@ -199,6 +199,7 @@ static int trx_init(struct gsm_bts_trx *trx) struct phy_instance *pinst = trx_phy_instance(trx); struct trx_l1h *l1h = pinst->u.osmotrx.hdl; int rc; + uint8_t tn; rc = osmo_fsm_inst_dispatch(l1h->provision_fi, TRX_PROV_EV_CFG_ENABLE, (void*)(intptr_t)true); if (rc != 0) @@ -207,6 +208,14 @@ static int trx_init(struct gsm_bts_trx *trx) if (trx == trx->bts->c0) lchan_init_lapdm(&trx->ts[0].lchan[CCCH_LCHAN]); + /* Mark Dependency TS as Offline (ready to be Opstarted) */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + if (trx->ts[tn].mo.nm_state.operational == NM_OPSTATE_DISABLED && + trx->ts[tn].mo.nm_state.availability == NM_AVSTATE_DEPENDENCY) { + oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); + } + } + /* Send OPSTART ack */ return oml_mo_opstart_ack(&trx->mo); } diff --git a/src/osmo-bts-virtual/bts_model.c b/src/osmo-bts-virtual/bts_model.c index dfce81f6..74ad31d0 100644 --- a/src/osmo-bts-virtual/bts_model.c +++ b/src/osmo-bts-virtual/bts_model.c @@ -139,9 +139,22 @@ int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, int bts_model_opstart(struct gsm_bts *bts, struct gsm_abis_mo *mo, void *obj) { int rc; + struct gsm_bts_trx* trx; + uint8_t tn; switch (mo->obj_class) { case NM_OC_RADIO_CARRIER: + trx = (struct gsm_bts_trx*) obj; + /* Mark Dependency TS as Offline (ready to be Opstarted) */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + if (trx->ts[tn].mo.nm_state.operational == NM_OPSTATE_DISABLED && + trx->ts[tn].mo.nm_state.availability == NM_AVSTATE_DEPENDENCY) { + oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); + } + } + oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK); + rc = oml_mo_opstart_ack(mo); + break; case NM_OC_CHANNEL: case NM_OC_SITE_MANAGER: case NM_OC_BASEB_TRANSC: |