aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libbsc/abis_nm.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/libbsc/abis_nm.c')
-rw-r--r--openbsc/src/libbsc/abis_nm.c54
1 files changed, 34 insertions, 20 deletions
diff --git a/openbsc/src/libbsc/abis_nm.c b/openbsc/src/libbsc/abis_nm.c
index f2220a7b7..0c3fff56c 100644
--- a/openbsc/src/libbsc/abis_nm.c
+++ b/openbsc/src/libbsc/abis_nm.c
@@ -150,17 +150,17 @@ int nm_is_running(struct gsm_nm_state *s) {
);
}
-/* obtain the gsm_nm_state data structure for a given object instance */
-static struct gsm_nm_state *
-objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
- struct abis_om_obj_inst *obj_inst)
+/* obtain the MO structure for a given object instance */
+static struct gsm_abis_mo *
+objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
+ struct abis_om_obj_inst *obj_inst)
{
struct gsm_bts_trx *trx;
- struct gsm_nm_state *nm_state = NULL;
+ struct gsm_abis_mo *mo = NULL;
switch (obj_class) {
case NM_OC_BTS:
- nm_state = &bts->nm_state;
+ mo = &bts->mo;
break;
case NM_OC_RADIO_CARRIER:
if (obj_inst->trx_nr >= bts->num_trx) {
@@ -168,7 +168,7 @@ objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
return NULL;
}
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
- nm_state = &trx->nm_state;
+ mo = &trx->mo;
break;
case NM_OC_BASEB_TRANSC:
if (obj_inst->trx_nr >= bts->num_trx) {
@@ -176,7 +176,7 @@ objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
return NULL;
}
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
- nm_state = &trx->bb_transc.nm_state;
+ mo = &trx->bb_transc.mo;
break;
case NM_OC_CHANNEL:
if (obj_inst->trx_nr >= bts->num_trx) {
@@ -186,52 +186,66 @@ objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
if (obj_inst->ts_nr >= TRX_NR_TS)
return NULL;
- nm_state = &trx->ts[obj_inst->ts_nr].nm_state;
+ mo = &trx->ts[obj_inst->ts_nr].mo;
break;
case NM_OC_SITE_MANAGER:
- nm_state = &bts->site_mgr.nm_state;
+ mo = &bts->site_mgr.mo;
break;
case NM_OC_BS11:
switch (obj_inst->bts_nr) {
case BS11_OBJ_CCLK:
- nm_state = &bts->bs11.cclk.nm_state;
+ mo = &bts->bs11.cclk.mo;
break;
case BS11_OBJ_BBSIG:
if (obj_inst->ts_nr > bts->num_trx)
return NULL;
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
- nm_state = &trx->bs11.bbsig.nm_state;
+ mo = &trx->bs11.bbsig.mo;
break;
case BS11_OBJ_PA:
if (obj_inst->ts_nr > bts->num_trx)
return NULL;
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
- nm_state = &trx->bs11.pa.nm_state;
+ mo = &trx->bs11.pa.mo;
break;
default:
return NULL;
}
case NM_OC_BS11_RACK:
- nm_state = &bts->bs11.rack.nm_state;
+ mo = &bts->bs11.rack.mo;
break;
case NM_OC_BS11_ENVABTSE:
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->bs11.envabtse))
return NULL;
- nm_state = &bts->bs11.envabtse[obj_inst->trx_nr].nm_state;
+ mo = &bts->bs11.envabtse[obj_inst->trx_nr].mo;
break;
case NM_OC_GPRS_NSE:
- nm_state = &bts->gprs.nse.nm_state;
+ mo = &bts->gprs.nse.mo;
break;
case NM_OC_GPRS_CELL:
- nm_state = &bts->gprs.cell.nm_state;
+ mo = &bts->gprs.cell.mo;
break;
case NM_OC_GPRS_NSVC:
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
return NULL;
- nm_state = &bts->gprs.nsvc[obj_inst->trx_nr].nm_state;
+ mo = &bts->gprs.nsvc[obj_inst->trx_nr].mo;
break;
}
- return nm_state;
+ return mo;
+}
+
+/* obtain the gsm_nm_state data structure for a given object instance */
+static struct gsm_nm_state *
+objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
+ struct abis_om_obj_inst *obj_inst)
+{
+ struct gsm_abis_mo *mo;
+
+ mo = objclass2mo(bts, obj_class, obj_inst);
+ if (!mo)
+ return NULL;
+
+ return &mo->nm_state;
}
/* obtain the in-memory data structure of a given object instance */
@@ -2626,7 +2640,7 @@ void gsm_trx_lock_rf(struct gsm_bts_trx *trx, int locked)
{
int new_state = locked ? NM_STATE_LOCKED : NM_STATE_UNLOCKED;
- trx->nm_state.administrative = new_state;
+ trx->mo.nm_state.administrative = new_state;
if (!trx->bts || !trx->bts->oml_link)
return;