fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/34356?usp=email )
Change subject: oml: ipacc: parse Object Version from SW Activated Report ......................................................................
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; }