diff options
-rw-r--r-- | include/osmo-bts/bts.h | 7 | ||||
-rw-r--r-- | src/common/bts.c | 28 | ||||
-rw-r--r-- | src/common/oml.c | 10 | ||||
-rw-r--r-- | src/common/pcu_sock.c | 12 | ||||
-rw-r--r-- | src/common/vty.c | 9 |
5 files changed, 35 insertions, 31 deletions
diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h index 03a29e4e..6a4d23e2 100644 --- a/include/osmo-bts/bts.h +++ b/include/osmo-bts/bts.h @@ -125,9 +125,10 @@ struct gsm_bts_sm { }; /* GPRS NSVC; ip.access specific NM Object */ -struct gsm_bts_gprs_nsvc { +struct gsm_gprs_nse; +struct gsm_gprs_nsvc { struct gsm_abis_mo mo; - struct gsm_bts *bts; + struct gsm_gprs_nse *nse; /* data read via VTY config file, to configure the BTS * via OML from BSC */ int id; @@ -141,6 +142,7 @@ struct gsm_gprs_nse { struct gsm_abis_mo mo; uint16_t nsei; uint8_t timer[7]; + struct gsm_gprs_nsvc nsvc[2]; }; /* GPRS CELL; ip.access specific NM Object */ @@ -241,7 +243,6 @@ struct gsm_bts { struct { struct gsm_gprs_nse nse; struct gsm_gprs_cell cell; - struct gsm_bts_gprs_nsvc nsvc[2]; uint8_t rac; } gprs; diff --git a/src/common/bts.c b/src/common/bts.c index 5845fb28..23e4456f 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -232,6 +232,7 @@ static int gsm_bts_talloc_destructor(struct gsm_bts *bts) struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num) { struct gsm_bts *bts = talloc_zero(ctx, struct gsm_bts); + struct gsm_gprs_nse *nse = &bts->gprs.nse; int i; if (!bts) @@ -264,12 +265,11 @@ struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num) gsm_mo_init(&bts->mo, bts, NM_OC_BTS, bts->nr, 0xff, 0xff); /* NM GPRS NSE */ - bts->gprs.nse.mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nse_fsm, bts, &bts->gprs.nse, + nse->mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nse_fsm, bts, nse, LOGL_INFO, NULL); - osmo_fsm_inst_update_id_f(bts->gprs.nse.mo.fi, "gprs_nse%d", bts->nr); - gsm_mo_init(&bts->gprs.nse.mo, bts, NM_OC_GPRS_NSE, bts->nr, 0xff, 0xff); - memcpy(&bts->gprs.nse.timer, bts_nse_timer_default, - sizeof(bts->gprs.nse.timer)); + osmo_fsm_inst_update_id_f(nse->mo.fi, "gprs_nse%d", bts->nr); + gsm_mo_init(&nse->mo, bts, NM_OC_GPRS_NSE, bts->nr, 0xff, 0xff); + memcpy(&nse->timer, bts_nse_timer_default, sizeof(nse->timer)); /* NM GPRS CELL */ bts->gprs.cell.mo.fi = osmo_fsm_inst_alloc(&nm_gprs_cell_fsm, bts, &bts->gprs.cell, @@ -279,11 +279,11 @@ struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num) memcpy(&bts->gprs.cell.rlc_cfg, &rlc_cfg_default, sizeof(bts->gprs.cell.rlc_cfg)); memcpy(&bts->gprs.cell.timer, bts_cell_timer_default, sizeof(bts->gprs.cell.timer)); - for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) { - bts->gprs.nsvc[i].bts = bts; - bts->gprs.nsvc[i].id = i; - gsm_mo_init(&bts->gprs.nsvc[i].mo, bts, NM_OC_GPRS_NSVC, - bts->nr, i, 0xff); + for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) { + struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i]; + nsvc->nse = nse; + nsvc->id = i; + gsm_mo_init(&nsvc->mo, bts, NM_OC_GPRS_NSVC, nse->mo.obj_inst.bts_nr, i, 0xff); } /* create our primary TRX. It will be initialized during bts_init() */ @@ -384,8 +384,8 @@ int bts_init(struct gsm_bts *bts) oml_mo_state_init(&bts->gprs.cell.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED); /* set BTS attr to dependency */ - oml_mo_state_init(&bts->gprs.nsvc[0].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY); - oml_mo_state_init(&bts->gprs.nsvc[1].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY); + oml_mo_state_init(&bts->gprs.nse.nsvc[0].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY); + oml_mo_state_init(&bts->gprs.nse.nsvc[1].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY); /* allocate a talloc pool for ORTP to ensure it doesn't have to go back * to the libc malloc all the time */ @@ -460,8 +460,8 @@ int bts_link_estab(struct gsm_bts *bts) osmo_fsm_inst_dispatch(bts->gprs.nse.mo.fi, NM_EV_SW_ACT, NULL); /* those should all be in DEPENDENCY */ - oml_tx_state_changed(&bts->gprs.nsvc[0].mo); - oml_tx_state_changed(&bts->gprs.nsvc[1].mo); + oml_tx_state_changed(&bts->gprs.nse.nsvc[0].mo); + oml_tx_state_changed(&bts->gprs.nse.nsvc[1].mo); /* All other objects start off-line until the BTS Model code says otherwise */ for (i = 0; i < bts->num_trx; i++) { diff --git a/src/common/oml.c b/src/common/oml.c index e23a0876..fd8c22c2 100644 --- a/src/common/oml.c +++ b/src/common/oml.c @@ -1373,7 +1373,7 @@ static int oml_ipa_mo_set_attr_cell(void *obj, return 0; } -static int oml_ipa_mo_set_attr_nsvc(struct gsm_bts_gprs_nsvc *nsvc, +static int oml_ipa_mo_set_attr_nsvc(struct gsm_gprs_nsvc *nsvc, const struct tlv_parsed *tp) { if (TLVP_PRES_LEN(tp, NM_ATT_IPACC_NSVCI, 2)) @@ -1746,9 +1746,9 @@ gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class, mo = &bts->gprs.cell.mo; break; case NM_OC_GPRS_NSVC: - if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc)) + if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nse.nsvc)) return NULL; - mo = &bts->gprs.nsvc[obj_inst->trx_nr].mo; + mo = &bts->gprs.nse.nsvc[obj_inst->trx_nr].mo; break; } return mo; @@ -1813,9 +1813,9 @@ gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class, obj = &bts->gprs.cell; break; case NM_OC_GPRS_NSVC: - if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc)) + if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nse.nsvc)) return NULL; - obj = &bts->gprs.nsvc[obj_inst->trx_nr]; + obj = &bts->gprs.nse.nsvc[obj_inst->trx_nr]; break; } return obj; diff --git a/src/common/pcu_sock.c b/src/common/pcu_sock.c index 5e4b06b7..bce067a4 100644 --- a/src/common/pcu_sock.c +++ b/src/common/pcu_sock.c @@ -239,11 +239,13 @@ int pcu_tx_info_ind(void) struct gprs_rlc_cfg *rlcc; struct gsm_bts_trx *trx; int i; + struct gsm_gprs_nse *nse; LOGP(DPCU, LOGL_INFO, "Sending info\n"); /* FIXME: allow multiple BTS */ bts = llist_entry(net->bts_list.next, struct gsm_bts, list); + nse = &bts->gprs.nse; rlcc = &bts->gprs.cell.rlc_cfg; msg = pcu_msgb_alloc(PCU_IF_MSG_INFO_IND, bts->nr); @@ -271,8 +273,8 @@ int pcu_tx_info_ind(void) info_ind->rac = bts->gprs.rac; /* NSE */ - info_ind->nsei = bts->gprs.nse.nsei; - memcpy(info_ind->nse_timer, bts->gprs.nse.timer, 7); + info_ind->nsei = nse->nsei; + memcpy(info_ind->nse_timer, nse->timer, 7); memcpy(info_ind->cell_timer, bts->gprs.cell.timer, 11); /* cell attributes */ @@ -323,8 +325,8 @@ int pcu_tx_info_ind(void) info_ind->initial_mcs = rlcc->initial_mcs; /* NSVC */ - for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) { - const struct gsm_bts_gprs_nsvc *nsvc = &bts->gprs.nsvc[i]; + for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) { + const struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i]; info_ind->nsvci[i] = nsvc->nsvci; /* PCUIF beauty: the NSVC addresses are sent in the network byte order, * while the port numbers need to be send in the host order. Sigh. */ @@ -363,7 +365,7 @@ static int pcu_if_signal_cb(unsigned int subsys, unsigned int signal, void *hdlr_data, void *signal_data) { struct gsm_network *net = &bts_gsmnet; - struct gsm_bts_gprs_nsvc *nsvc; + struct gsm_gprs_nsvc *nsvc; struct gsm_bts *bts; struct gsm48_system_information_type_3 *si3; int id; diff --git a/src/common/vty.c b/src/common/vty.c index 1ef79f06..bc2afb65 100644 --- a/src/common/vty.c +++ b/src/common/vty.c @@ -1361,21 +1361,22 @@ DEFUN(show_bts, show_bts_cmd, "show bts [<0-255>]", static void gprs_dump_vty(struct vty *vty, const struct gsm_bts *bts) { unsigned int i; + const struct gsm_gprs_nse *nse = &bts->gprs.nse; /* GPRS parameters received from the BSC */ vty_out(vty, "BTS %u, RAC %u, NSEI %u, BVCI %u%s", bts->nr, bts->gprs.rac, - bts->gprs.nse.nsei, + nse->nsei, bts->gprs.cell.bvci, VTY_NEWLINE); vty_out(vty, " Cell NM state: "); net_dump_nmstate(vty, &bts->gprs.cell.mo.nm_state); vty_out(vty, " NSE NM state: "); - net_dump_nmstate(vty, &bts->gprs.nse.mo.nm_state); + net_dump_nmstate(vty, &nse->mo.nm_state); - for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) { - const struct gsm_bts_gprs_nsvc *nsvc = &bts->gprs.nsvc[i]; + for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) { + const struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i]; vty_out(vty, " NSVC%u (NSVCI %u) NM state: ", i, nsvc->nsvci); net_dump_nmstate(vty, &nsvc->mo.nm_state); |