fixeria has uploaded this change for review.
oml: ipacc: parse Object Version from SW Activated Report
Change-Id: I39105096a6b29bd7e4fb15287653074527c3e024
Related: OS#4505
---
M include/osmocom/bsc/gsm_data.h
M src/osmo-bsc/bts_ipaccess_nanobts.c
2 files changed, 46 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/56/34356/1
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 7d36baa..01fbf69 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -538,6 +538,12 @@
bool rsl_connect_sent;
bool rsl_connect_ack_received;
bool force_rf_lock;
+ /* vendor specific fields below */
+ union {
+ struct {
+ uint8_t obj_version;
+ } ipaccess;
+ };
};
/* Ericsson OM2000 Managed Object */
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts.c b/src/osmo-bsc/bts_ipaccess_nanobts.c
index 8669d64..374b82d 100644
--- a/src/osmo-bsc/bts_ipaccess_nanobts.c
+++ b/src/osmo-bsc/bts_ipaccess_nanobts.c
@@ -201,44 +201,66 @@
struct gsm_bts_trx *trx;
struct gsm_gprs_nsvc *nsvc;
struct gsm_bts_trx_ts *ts;
+ struct gsm_abis_mo *mo;
+ struct tlv_parsed tp;
if (!is_ipa_abisip_bts(bts))
return 0;
switch (foh->obj_class) {
case NM_OC_SITE_MANAGER:
- osmo_fsm_inst_dispatch(bts->site_mgr->mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &bts->site_mgr->mo;
break;
case NM_OC_BTS:
- osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &bts->mo;
break;
case NM_OC_BASEB_TRANSC:
if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr)))
return -EINVAL;
- osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &trx->bb_transc.mo;
break;
case NM_OC_RADIO_CARRIER:
if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr)))
return -EINVAL;
- osmo_fsm_inst_dispatch(trx->mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &trx->mo;
break;
case NM_OC_CHANNEL:
if (!(ts = abis_nm_get_ts(mb)))
return -EINVAL;
- osmo_fsm_inst_dispatch(ts->mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &ts->mo;
break;
case NM_OC_GPRS_NSE:
- osmo_fsm_inst_dispatch(bts->site_mgr->gprs.nse.mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &bts->site_mgr->gprs.nse.mo;
break;
case NM_OC_GPRS_CELL:
- osmo_fsm_inst_dispatch(bts->gprs.cell.mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &bts->gprs.cell.mo;
break;
case NM_OC_GPRS_NSVC:
if (!(nsvc = gsm_bts_sm_nsvc_num(bts->site_mgr, foh->obj_inst.trx_nr)))
return -EINVAL;
- osmo_fsm_inst_dispatch(nsvc->mo.fi, NM_EV_SW_ACT_REP, NULL);
+ mo = &nsvc->mo;
break;
+ default:
+ LOGPFOH(DNM, LOGL_NOTICE, foh, "%s(): unknown Object Class\n", __func__);
+ return -ENODEV;
}
+
+ if (abis_nm_tlv_parse(&tp, bts, &foh->data[0], msgb_l3len(mb) - sizeof(*foh)) < 0) {
+ LOGPFOH(DNM, LOGL_ERROR, foh, "%s(): tlv_parse failed\n", __func__);
+ return -EINVAL;
+ }
+
+ mo->ipaccess.obj_version = 0; /* implicit default */
+ if (TLVP_PRES_LEN(&tp, NM_ATT_IPACC_OBJ_VERSION, 1)) {
+ /* nanoBTS may report several Object Versions; the first one will
+ * be used by default unless requested explicitly before OPSTARTing. */
+ mo->ipaccess.obj_version = *TLVP_VAL(&tp, NM_ATT_IPACC_OBJ_VERSION);
+ LOGPFOH(DNM, LOGL_INFO, foh, "IPA Object Version is %u (default)\n",
+ mo->ipaccess.obj_version);
+ }
+
+ osmo_fsm_inst_dispatch(mo->fi, NM_EV_SW_ACT_REP, NULL);
+
return 0;
}
To view, visit change 34356. To unsubscribe, or for help writing mail filters, visit settings.