aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/osmo-bts-litecell15/oml.c12
-rw-r--r--src/osmo-bts-oc2g/oml.c12
-rw-r--r--src/osmo-bts-octphy/l1_oml.c12
-rw-r--r--src/osmo-bts-omldummy/bts_model.c13
-rw-r--r--src/osmo-bts-sysmo/oml.c12
-rw-r--r--src/osmo-bts-trx/l1_if.c9
-rw-r--r--src/osmo-bts-virtual/bts_model.c13
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: