fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/34421?usp=email )
Change subject: bts_ipaccess_nanobts: clean up, use gsm_objclass2mo() ...................................................................... bts_ipaccess_nanobts: clean up, use gsm_objclass2mo() Change-Id: Ic6c0dfe950459d07a8f506b5007a65fea1950c18 --- M src/osmo-bsc/bts_ipaccess_nanobts.c 1 file changed, 31 insertions(+), 128 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/21/34421/1 diff --git a/src/osmo-bsc/bts_ipaccess_nanobts.c b/src/osmo-bsc/bts_ipaccess_nanobts.c index 8669d64..1ceed7b 100644 --- a/src/osmo-bsc/bts_ipaccess_nanobts.c +++ b/src/osmo-bsc/bts_ipaccess_nanobts.c @@ -195,156 +195,50 @@ /* Callback function to be called every time we receive a 12.21 SW activated report */ static int sw_activ_rep(struct msgb *mb) { - struct abis_om_fom_hdr *foh = msgb_l3(mb); + const struct abis_om_fom_hdr *foh = msgb_l3(mb); struct e1inp_sign_link *sign_link = mb->dst; struct gsm_bts *bts = sign_link->trx->bts; - struct gsm_bts_trx *trx; - struct gsm_gprs_nsvc *nsvc; - struct gsm_bts_trx_ts *ts; + struct gsm_abis_mo *mo; 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); - break; - case NM_OC_BTS: - osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_SW_ACT_REP, NULL); - 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); - 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); - 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); - break; - case NM_OC_GPRS_NSE: - osmo_fsm_inst_dispatch(bts->site_mgr->gprs.nse.mo.fi, NM_EV_SW_ACT_REP, NULL); - break; - case NM_OC_GPRS_CELL: - osmo_fsm_inst_dispatch(bts->gprs.cell.mo.fi, NM_EV_SW_ACT_REP, NULL); - 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); - break; + mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); + if (mo == NULL) { + LOGPFOH(DNM, LOGL_ERROR, foh, "Rx SW activated report for non-existent MO\n"); + return -ENOENT; } - return 0; -} -static void nm_rx_opstart_ack_chan(struct msgb *oml_msg) -{ - struct gsm_bts_trx_ts *ts; - ts = abis_nm_get_ts(oml_msg); - if (!ts) - /* error already logged in abis_nm_get_ts() */ - return; - if (!ts->fi) { - LOG_TS(ts, LOGL_ERROR, "Channel OPSTART ACK for uninitialized TS\n"); - return; - } - osmo_fsm_inst_dispatch(ts->mo.fi, NM_EV_OPSTART_ACK, NULL); + osmo_fsm_inst_dispatch(mo->fi, NM_EV_SW_ACT_REP, NULL); + return 0; } static void nm_rx_opstart_ack(struct msgb *oml_msg) { - struct abis_om_fom_hdr *foh = msgb_l3(oml_msg); + const struct abis_om_fom_hdr *foh = msgb_l3(oml_msg); struct e1inp_sign_link *sign_link = oml_msg->dst; struct gsm_bts *bts = sign_link->trx->bts; - struct gsm_bts_trx *trx; - struct gsm_gprs_nsvc *nsvc; + struct gsm_abis_mo *mo; - switch (foh->obj_class) { - case NM_OC_SITE_MANAGER: - osmo_fsm_inst_dispatch(bts->site_mgr->mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - case NM_OC_BTS: - osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - case NM_OC_RADIO_CARRIER: - if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr))) - return; - osmo_fsm_inst_dispatch(trx->mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - case NM_OC_BASEB_TRANSC: - if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr))) - return; - osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - case NM_OC_CHANNEL: - nm_rx_opstart_ack_chan(oml_msg); - break; - case NM_OC_GPRS_NSE: - osmo_fsm_inst_dispatch(bts->site_mgr->gprs.nse.mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - case NM_OC_GPRS_CELL: - osmo_fsm_inst_dispatch(bts->gprs.cell.mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - case NM_OC_GPRS_NSVC: - if (!(nsvc = gsm_bts_sm_nsvc_num(bts->site_mgr, foh->obj_inst.trx_nr))) - return; - osmo_fsm_inst_dispatch(nsvc->mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - default: - break; - } + mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); + if (mo == NULL) + LOGPFOH(DNM, LOGL_ERROR, foh, "Rx OPSTART ACK for non-existent MO\n"); + else + osmo_fsm_inst_dispatch(mo->fi, NM_EV_OPSTART_ACK, NULL); } static void nm_rx_opstart_nack(struct msgb *oml_msg) { - struct abis_om_fom_hdr *foh = msgb_l3(oml_msg); + const struct abis_om_fom_hdr *foh = msgb_l3(oml_msg); struct e1inp_sign_link *sign_link = oml_msg->dst; struct gsm_bts *bts = sign_link->trx->bts; - struct gsm_bts_trx *trx; - struct gsm_bts_trx_ts *ts; - struct gsm_gprs_nsvc *nsvc; + struct gsm_abis_mo *mo; - switch (foh->obj_class) { - case NM_OC_SITE_MANAGER: - osmo_fsm_inst_dispatch(bts->site_mgr->mo.fi, NM_EV_OPSTART_NACK, NULL); - break; - case NM_OC_BTS: - osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL); - break; - case NM_OC_RADIO_CARRIER: - if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr))) - return; - osmo_fsm_inst_dispatch(trx->mo.fi, NM_EV_OPSTART_NACK, NULL); - break; - case NM_OC_BASEB_TRANSC: - if (!(trx = gsm_bts_trx_num(bts, foh->obj_inst.trx_nr))) - return; - osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_OPSTART_NACK, NULL); - break; - case NM_OC_CHANNEL: - if (!(ts = abis_nm_get_ts(oml_msg))) - return; - osmo_fsm_inst_dispatch(ts->mo.fi, NM_EV_OPSTART_NACK, NULL); - break; - case NM_OC_GPRS_NSE: - osmo_fsm_inst_dispatch(bts->site_mgr->gprs.nse.mo.fi, NM_EV_OPSTART_NACK, NULL); - break; - case NM_OC_GPRS_CELL: - osmo_fsm_inst_dispatch(bts->gprs.cell.mo.fi, NM_EV_OPSTART_NACK, NULL); - break; - case NM_OC_GPRS_NSVC: - if (!(nsvc = gsm_bts_sm_nsvc_num(bts->site_mgr, foh->obj_inst.trx_nr))) - return; - osmo_fsm_inst_dispatch(nsvc->mo.fi, NM_EV_OPSTART_NACK, NULL); - break; - default: - break; - } + mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); + if (mo == NULL) + LOGPFOH(DNM, LOGL_ERROR, foh, "Rx OPSTART NACK for non-existent MO\n"); + else + osmo_fsm_inst_dispatch(mo->fi, NM_EV_OPSTART_ACK, NULL); } static void nm_rx_get_attr_rep(struct msgb *oml_msg) -- To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/34421?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Change-Id: Ic6c0dfe950459d07a8f506b5007a65fea1950c18 Gerrit-Change-Number: 34421 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanits...@sysmocom.de> Gerrit-MessageType: newchange