move objclass2{nmstate,mo,}obj() to gsm_data_shared.c (and prefix)
This commit is contained in:
parent
28307643d7
commit
978714d752
|
@ -496,10 +496,10 @@ struct gsm_bts {
|
|||
/* do we use static (user-defined) system information messages? (bitmask) */
|
||||
uint32_t si_mode_static;
|
||||
#endif /* ROLE_BSC */
|
||||
void *role;
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct gsm_bts *gsm_bts_alloc(void *talloc_ctx);
|
||||
struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts);
|
||||
|
||||
|
@ -515,4 +515,15 @@ char *gsm_lchan_name(struct gsm_lchan *lchan);
|
|||
const char *gsm_lchans_name(enum gsm_lchan_state s);
|
||||
|
||||
|
||||
struct gsm_abis_mo *
|
||||
gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst);
|
||||
|
||||
struct gsm_nm_state *
|
||||
gsm_objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst);
|
||||
void *
|
||||
gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -150,160 +150,6 @@ int nm_is_running(struct gsm_nm_state *s) {
|
|||
);
|
||||
}
|
||||
|
||||
/* obtain the MO structure for a given object instance */
|
||||
static struct gsm_abis_mo *
|
||||
objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst)
|
||||
{
|
||||
struct gsm_bts_trx *trx;
|
||||
struct gsm_abis_mo *mo = NULL;
|
||||
|
||||
switch (obj_class) {
|
||||
case NM_OC_BTS:
|
||||
mo = &bts->mo;
|
||||
break;
|
||||
case NM_OC_RADIO_CARRIER:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
DEBUGPC(DNM, "TRX %u does not exist ", obj_inst->trx_nr);
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->mo;
|
||||
break;
|
||||
case NM_OC_BASEB_TRANSC:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
DEBUGPC(DNM, "TRX %u does not exist ", obj_inst->trx_nr);
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->bb_transc.mo;
|
||||
break;
|
||||
case NM_OC_CHANNEL:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
DEBUGPC(DNM, "TRX %u does not exist ", obj_inst->trx_nr);
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
if (obj_inst->ts_nr >= TRX_NR_TS)
|
||||
return NULL;
|
||||
mo = &trx->ts[obj_inst->ts_nr].mo;
|
||||
break;
|
||||
case NM_OC_SITE_MANAGER:
|
||||
mo = &bts->site_mgr.mo;
|
||||
break;
|
||||
case NM_OC_BS11:
|
||||
switch (obj_inst->bts_nr) {
|
||||
case BS11_OBJ_CCLK:
|
||||
mo = &bts->bs11.cclk.mo;
|
||||
break;
|
||||
case BS11_OBJ_BBSIG:
|
||||
if (obj_inst->ts_nr > bts->num_trx)
|
||||
return NULL;
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->bs11.bbsig.mo;
|
||||
break;
|
||||
case BS11_OBJ_PA:
|
||||
if (obj_inst->ts_nr > bts->num_trx)
|
||||
return NULL;
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->bs11.pa.mo;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
case NM_OC_BS11_RACK:
|
||||
mo = &bts->bs11.rack.mo;
|
||||
break;
|
||||
case NM_OC_BS11_ENVABTSE:
|
||||
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->bs11.envabtse))
|
||||
return NULL;
|
||||
mo = &bts->bs11.envabtse[obj_inst->trx_nr].mo;
|
||||
break;
|
||||
case NM_OC_GPRS_NSE:
|
||||
mo = &bts->gprs.nse.mo;
|
||||
break;
|
||||
case NM_OC_GPRS_CELL:
|
||||
mo = &bts->gprs.cell.mo;
|
||||
break;
|
||||
case NM_OC_GPRS_NSVC:
|
||||
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
|
||||
return NULL;
|
||||
mo = &bts->gprs.nsvc[obj_inst->trx_nr].mo;
|
||||
break;
|
||||
}
|
||||
return mo;
|
||||
}
|
||||
|
||||
/* obtain the gsm_nm_state data structure for a given object instance */
|
||||
static struct gsm_nm_state *
|
||||
objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst)
|
||||
{
|
||||
struct gsm_abis_mo *mo;
|
||||
|
||||
mo = objclass2mo(bts, obj_class, obj_inst);
|
||||
if (!mo)
|
||||
return NULL;
|
||||
|
||||
return &mo->nm_state;
|
||||
}
|
||||
|
||||
/* obtain the in-memory data structure of a given object instance */
|
||||
static void *
|
||||
objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst)
|
||||
{
|
||||
struct gsm_bts_trx *trx;
|
||||
void *obj = NULL;
|
||||
|
||||
switch (obj_class) {
|
||||
case NM_OC_BTS:
|
||||
obj = bts;
|
||||
break;
|
||||
case NM_OC_RADIO_CARRIER:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
DEBUGPC(DNM, "TRX %u does not exist ", obj_inst->trx_nr);
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
obj = trx;
|
||||
break;
|
||||
case NM_OC_BASEB_TRANSC:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
DEBUGPC(DNM, "TRX %u does not exist ", obj_inst->trx_nr);
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
obj = &trx->bb_transc;
|
||||
break;
|
||||
case NM_OC_CHANNEL:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
DEBUGPC(DNM, "TRX %u does not exist ", obj_inst->trx_nr);
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
if (obj_inst->ts_nr >= TRX_NR_TS)
|
||||
return NULL;
|
||||
obj = &trx->ts[obj_inst->ts_nr];
|
||||
break;
|
||||
case NM_OC_SITE_MANAGER:
|
||||
obj = &bts->site_mgr;
|
||||
break;
|
||||
case NM_OC_GPRS_NSE:
|
||||
obj = &bts->gprs.nse;
|
||||
break;
|
||||
case NM_OC_GPRS_CELL:
|
||||
obj = &bts->gprs.cell;
|
||||
break;
|
||||
case NM_OC_GPRS_NSVC:
|
||||
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
|
||||
return NULL;
|
||||
obj = &bts->gprs.nsvc[obj_inst->trx_nr];
|
||||
break;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/* Update the administrative state of a given object in our in-memory data
|
||||
* structures and send an event to the higher layer */
|
||||
static int update_admstate(struct gsm_bts *bts, uint8_t obj_class,
|
||||
|
@ -314,10 +160,10 @@ static int update_admstate(struct gsm_bts *bts, uint8_t obj_class,
|
|||
|
||||
memset(&nsd, 0, sizeof(nsd));
|
||||
|
||||
nsd.obj = objclass2obj(bts, obj_class, obj_inst);
|
||||
nsd.obj = gsm_objclass2obj(bts, obj_class, obj_inst);
|
||||
if (!nsd.obj)
|
||||
return -EINVAL;
|
||||
nm_state = objclass2nmstate(bts, obj_class, obj_inst);
|
||||
nm_state = gsm_objclass2nmstate(bts, obj_class, obj_inst);
|
||||
if (!nm_state)
|
||||
return -1;
|
||||
|
||||
|
@ -348,7 +194,7 @@ static int abis_nm_rx_statechg_rep(struct msgb *mb)
|
|||
|
||||
memset(&new_state, 0, sizeof(new_state));
|
||||
|
||||
nm_state = objclass2nmstate(bts, foh->obj_class, &foh->obj_inst);
|
||||
nm_state = gsm_objclass2nmstate(bts, foh->obj_class, &foh->obj_inst);
|
||||
if (!nm_state) {
|
||||
DEBUGPC(DNM, "unknown object class\n");
|
||||
return -EINVAL;
|
||||
|
@ -386,7 +232,7 @@ static int abis_nm_rx_statechg_rep(struct msgb *mb)
|
|||
/* Update the operational state of a given object in our in-memory data
|
||||
* structures and send an event to the higher layer */
|
||||
struct nm_statechg_signal_data nsd;
|
||||
nsd.obj = objclass2obj(bts, foh->obj_class, &foh->obj_inst);
|
||||
nsd.obj = gsm_objclass2obj(bts, foh->obj_class, &foh->obj_inst);
|
||||
nsd.obj_class = foh->obj_class;
|
||||
nsd.old_state = nm_state;
|
||||
nsd.new_state = &new_state;
|
||||
|
|
|
@ -227,3 +227,151 @@ char *gsm_lchan_name(struct gsm_lchan *lchan)
|
|||
|
||||
return ts2str;
|
||||
}
|
||||
|
||||
/* obtain the MO structure for a given object instance */
|
||||
struct gsm_abis_mo *
|
||||
gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst)
|
||||
{
|
||||
struct gsm_bts_trx *trx;
|
||||
struct gsm_abis_mo *mo = NULL;
|
||||
|
||||
switch (obj_class) {
|
||||
case NM_OC_BTS:
|
||||
mo = &bts->mo;
|
||||
break;
|
||||
case NM_OC_RADIO_CARRIER:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->mo;
|
||||
break;
|
||||
case NM_OC_BASEB_TRANSC:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->bb_transc.mo;
|
||||
break;
|
||||
case NM_OC_CHANNEL:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
if (obj_inst->ts_nr >= TRX_NR_TS)
|
||||
return NULL;
|
||||
mo = &trx->ts[obj_inst->ts_nr].mo;
|
||||
break;
|
||||
case NM_OC_SITE_MANAGER:
|
||||
mo = &bts->site_mgr.mo;
|
||||
break;
|
||||
case NM_OC_BS11:
|
||||
switch (obj_inst->bts_nr) {
|
||||
case BS11_OBJ_CCLK:
|
||||
mo = &bts->bs11.cclk.mo;
|
||||
break;
|
||||
case BS11_OBJ_BBSIG:
|
||||
if (obj_inst->ts_nr > bts->num_trx)
|
||||
return NULL;
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->bs11.bbsig.mo;
|
||||
break;
|
||||
case BS11_OBJ_PA:
|
||||
if (obj_inst->ts_nr > bts->num_trx)
|
||||
return NULL;
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
mo = &trx->bs11.pa.mo;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
case NM_OC_BS11_RACK:
|
||||
mo = &bts->bs11.rack.mo;
|
||||
break;
|
||||
case NM_OC_BS11_ENVABTSE:
|
||||
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->bs11.envabtse))
|
||||
return NULL;
|
||||
mo = &bts->bs11.envabtse[obj_inst->trx_nr].mo;
|
||||
break;
|
||||
case NM_OC_GPRS_NSE:
|
||||
mo = &bts->gprs.nse.mo;
|
||||
break;
|
||||
case NM_OC_GPRS_CELL:
|
||||
mo = &bts->gprs.cell.mo;
|
||||
break;
|
||||
case NM_OC_GPRS_NSVC:
|
||||
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
|
||||
return NULL;
|
||||
mo = &bts->gprs.nsvc[obj_inst->trx_nr].mo;
|
||||
break;
|
||||
}
|
||||
return mo;
|
||||
}
|
||||
|
||||
/* obtain the gsm_nm_state data structure for a given object instance */
|
||||
struct gsm_nm_state *
|
||||
gsm_objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst)
|
||||
{
|
||||
struct gsm_abis_mo *mo;
|
||||
|
||||
mo = gsm_objclass2mo(bts, obj_class, obj_inst);
|
||||
if (!mo)
|
||||
return NULL;
|
||||
|
||||
return &mo->nm_state;
|
||||
}
|
||||
|
||||
/* obtain the in-memory data structure of a given object instance */
|
||||
void *
|
||||
gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
|
||||
struct abis_om_obj_inst *obj_inst)
|
||||
{
|
||||
struct gsm_bts_trx *trx;
|
||||
void *obj = NULL;
|
||||
|
||||
switch (obj_class) {
|
||||
case NM_OC_BTS:
|
||||
obj = bts;
|
||||
break;
|
||||
case NM_OC_RADIO_CARRIER:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
obj = trx;
|
||||
break;
|
||||
case NM_OC_BASEB_TRANSC:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
obj = &trx->bb_transc;
|
||||
break;
|
||||
case NM_OC_CHANNEL:
|
||||
if (obj_inst->trx_nr >= bts->num_trx) {
|
||||
return NULL;
|
||||
}
|
||||
trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
|
||||
if (obj_inst->ts_nr >= TRX_NR_TS)
|
||||
return NULL;
|
||||
obj = &trx->ts[obj_inst->ts_nr];
|
||||
break;
|
||||
case NM_OC_SITE_MANAGER:
|
||||
obj = &bts->site_mgr;
|
||||
break;
|
||||
case NM_OC_GPRS_NSE:
|
||||
obj = &bts->gprs.nse;
|
||||
break;
|
||||
case NM_OC_GPRS_CELL:
|
||||
obj = &bts->gprs.cell;
|
||||
break;
|
||||
case NM_OC_GPRS_NSVC:
|
||||
if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
|
||||
return NULL;
|
||||
obj = &bts->gprs.nsvc[obj_inst->trx_nr];
|
||||
break;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue