From 8b697c74c776ae439a76525f14f8d9325fae32cb Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 5 Jun 2009 19:18:45 +0000 Subject: [PATCH] BS11: add nm_state for EnveBTES, PA and BBSIG physical objects --- include/openbsc/gsm_data.h | 17 ++++++++++++++++- src/abis_nm.c | 21 +++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/include/openbsc/gsm_data.h b/include/openbsc/gsm_data.h index d8b4c3ef7..e85adf829 100644 --- a/include/openbsc/gsm_data.h +++ b/include/openbsc/gsm_data.h @@ -224,6 +224,17 @@ struct gsm_bts_trx { } bb_transc; u_int16_t arfcn; + + union { + struct { + struct { + struct gsm_nm_state nm_state; + } bbsig; + struct { + struct gsm_nm_state nm_state; + } pa; + } bs11; + }; struct gsm_bts_trx_ts ts[TRX_NR_TS]; }; @@ -274,6 +285,10 @@ struct gsm_bts_paging_state { u_int16_t available_slots; }; +struct gsm_envabtse { + struct gsm_nm_state nm_state; +}; + /* One BTS */ struct gsm_bts { struct gsm_network *network; @@ -323,7 +338,7 @@ struct gsm_bts { struct { struct gsm_nm_state nm_state; } rack; - + struct gsm_envabtse envabtse[4]; } bs11; }; diff --git a/src/abis_nm.c b/src/abis_nm.c index 57d415984..cd1f444f3 100644 --- a/src/abis_nm.c +++ b/src/abis_nm.c @@ -472,6 +472,8 @@ static const char *obj_class_name(u_int8_t oc) return "GPRS NSVC0"; case NM_OC_GPRS_NSVC1: return "GPRS NSVC1"; + case NM_OC_BS11: + return "SIEMENSHW"; } return "UNKNOWN"; @@ -566,12 +568,29 @@ objclass2nmstate(struct gsm_bts *bts, u_int8_t obj_class, case BS11_OBJ_CCLK: nm_state = &bts->bs11.cclk.nm_state; break; + case BS11_OBJ_BBSIG: + if (obj_inst->ts_nr > bts->num_trx) + return NULL; + trx = &bts->trx[obj_inst->ts_nr]; + nm_state = &trx->bs11.bbsig.nm_state; + break; + case BS11_OBJ_PA: + if (obj_inst->ts_nr > bts->num_trx) + return NULL; + trx = &bts->trx[obj_inst->ts_nr]; + nm_state = &trx->bs11.pa.nm_state; + break; default: return NULL; } case NM_OC_BS11_RACK: nm_state = &bts->bs11.rack.nm_state; 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; + break; } return nm_state; } @@ -650,6 +669,8 @@ static int abis_nm_rx_statechg_rep(struct msgb *mb) DEBUGPC(DNM, "STATE CHG: "); + memset(&new_state, 0, sizeof(new_state)); + nm_state = objclass2nmstate(bts, foh->obj_class, &foh->obj_inst); if (!nm_state) { DEBUGPC(DNM, "\n");