properly reset the MO state of all MO on Abis disconnect
When we loose the A-bis link, we should properly re-set the administrative, operational and availability state of all MOs
This commit is contained in:
parent
c7921c9205
commit
b7849987e5
|
@ -568,6 +568,8 @@ char *gsm_lchan_name(struct gsm_lchan *lchan);
|
|||
const char *gsm_lchans_name(enum gsm_lchan_state s);
|
||||
|
||||
|
||||
void gsm_abis_mo_reset(struct gsm_abis_mo *mo);
|
||||
|
||||
struct gsm_abis_mo *
|
||||
gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst);
|
||||
|
@ -579,6 +581,9 @@ void *
|
|||
gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst);
|
||||
|
||||
/* reset the state of all MO in the BTS */
|
||||
void gsm_bts_mo_reset(struct gsm_bts *bts);
|
||||
|
||||
uint8_t gsm_ts2chan_nr(const struct gsm_bts_trx_ts *ts, uint8_t lchan_nr);
|
||||
uint8_t gsm_lchan2chan_nr(const struct gsm_lchan *lchan);
|
||||
|
||||
|
|
|
@ -292,15 +292,9 @@ static int inp_sig_cb(unsigned int subsys, unsigned int signal,
|
|||
lchan_free(&ts->lchan[lchan_no]);
|
||||
lchan_reset(&ts->lchan[lchan_no]);
|
||||
}
|
||||
|
||||
ts->mo.nm_state.operational = 0;
|
||||
ts->mo.nm_state.availability = 0;
|
||||
}
|
||||
|
||||
trx->mo.nm_state.operational = 0;
|
||||
trx->mo.nm_state.availability = 0;
|
||||
trx->bb_transc.mo.nm_state.operational = 0;
|
||||
trx->bb_transc.mo.nm_state.availability = 0;
|
||||
gsm_bts_mo_reset(trx->bts);
|
||||
|
||||
abis_nm_clear_queue(trx->bts);
|
||||
break;
|
||||
|
|
|
@ -34,6 +34,13 @@
|
|||
|
||||
#include <openbsc/gsm_data.h>
|
||||
|
||||
void gsm_abis_mo_reset(struct gsm_abis_mo *mo)
|
||||
{
|
||||
mo->nm_state.administrative = NM_STATE_NULL;
|
||||
mo->nm_state.operational = NM_OPSTATE_NULL;
|
||||
mo->nm_state.availability = NM_AVSTATE_POWER_OFF;
|
||||
}
|
||||
|
||||
static void gsm_mo_init(struct gsm_abis_mo *mo, struct gsm_bts *bts,
|
||||
uint8_t obj_class, uint8_t p1, uint8_t p2, uint8_t p3)
|
||||
{
|
||||
|
@ -42,9 +49,7 @@ static void gsm_mo_init(struct gsm_abis_mo *mo, struct gsm_bts *bts,
|
|||
mo->obj_inst.bts_nr = p1;
|
||||
mo->obj_inst.trx_nr = p2;
|
||||
mo->obj_inst.ts_nr = p3;
|
||||
mo->nm_state.administrative = NM_STATE_NULL;
|
||||
mo->nm_state.operational = NM_OPSTATE_NULL;
|
||||
mo->nm_state.availability = NM_AVSTATE_POWER_OFF;
|
||||
gsm_abis_mo_reset(mo);
|
||||
}
|
||||
|
||||
static const struct value_string pchan_names[] = {
|
||||
|
@ -217,6 +222,30 @@ struct gsm_bts *gsm_bts_alloc(void *ctx)
|
|||
return bts;
|
||||
}
|
||||
|
||||
/* reset the state of all MO in the BTS */
|
||||
void gsm_bts_mo_reset(struct gsm_bts *bts)
|
||||
{
|
||||
struct gsm_bts_trx *trx;
|
||||
unsigned int i;
|
||||
|
||||
gsm_abis_mo_reset(&bts->mo);
|
||||
gsm_abis_mo_reset(&bts->site_mgr.mo);
|
||||
for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++)
|
||||
gsm_abis_mo_reset(&bts->gprs.nsvc[i].mo);
|
||||
gsm_abis_mo_reset(&bts->gprs.nse.mo);
|
||||
gsm_abis_mo_reset(&bts->gprs.cell.mo);
|
||||
|
||||
llist_for_each_entry(trx, &bts->trx_list, list) {
|
||||
gsm_abis_mo_reset(&trx->mo);
|
||||
gsm_abis_mo_reset(&trx->bb_transc.mo);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
|
||||
struct gsm_bts_trx_ts *ts = &trx->ts[i];
|
||||
gsm_abis_mo_reset(&ts->mo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct gsm_bts_trx *gsm_bts_trx_num(struct gsm_bts *bts, int num)
|
||||
{
|
||||
struct gsm_bts_trx *trx;
|
||||
|
|
Loading…
Reference in New Issue