From 1729041aeda9a4b1e3ebb84a6fac4f177cde78e2 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 15 Nov 2016 21:18:35 +0100 Subject: HACK: Don't require TRX numbers to start at 0 Change-Id: I6c5fcb06bdbe0377e2ebc46ecd73d11e834a6d99 --- openbsc/src/libbsc/abis_om2000.c | 2 +- openbsc/src/libbsc/bsc_vty.c | 47 +++++++++++++++++---------------- openbsc/src/libcommon/gsm_data_shared.c | 44 +++++++++++++----------------- 3 files changed, 43 insertions(+), 50 deletions(-) diff --git a/openbsc/src/libbsc/abis_om2000.c b/openbsc/src/libbsc/abis_om2000.c index 82a14b269..2ec28d8e0 100644 --- a/openbsc/src/libbsc/abis_om2000.c +++ b/openbsc/src/libbsc/abis_om2000.c @@ -2212,7 +2212,7 @@ static void om2k_bts_s_wait_is(struct osmo_fsm_inst *fi, uint32_t event, void *d osmo_fsm_inst_state_chg(fi, OM2K_BTS_S_WAIT_TRX, BTS_FSM_TIMEOUT, 0); - obfp->next_trx_nr = 0; + obfp->next_trx_nr = 1; trx = gsm_bts_trx_num(obfp->bts, obfp->next_trx_nr++); om2k_trx_fsm_start(fi, trx, OM2K_BTS_EVT_TRX_DONE); } diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c index b1747aa33..12b03531b 100644 --- a/openbsc/src/libbsc/bsc_vty.c +++ b/openbsc/src/libbsc/bsc_vty.c @@ -883,29 +883,31 @@ DEFUN(show_trx, } if (argc >= 2) { trx_nr = atoi(argv[1]); - if (trx_nr >= bts->num_trx) { + trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) { vty_out(vty, "%% can't find TRX '%s'%s", argv[1], VTY_NEWLINE); return CMD_WARNING; } - trx = gsm_bts_trx_num(bts, trx_nr); trx_dump_vty(vty, trx); return CMD_SUCCESS; } if (bts) { /* print all TRX in this BTS */ - for (trx_nr = 0; trx_nr < bts->num_trx; trx_nr++) { + for (trx_nr = 0; trx_nr < 255; trx_nr++) { trx = gsm_bts_trx_num(bts, trx_nr); - trx_dump_vty(vty, trx); + if (trx) + trx_dump_vty(vty, trx); } return CMD_SUCCESS; } for (bts_nr = 0; bts_nr < net->num_bts; bts_nr++) { bts = gsm_bts_num(net, bts_nr); - for (trx_nr = 0; trx_nr < bts->num_trx; trx_nr++) { + for (trx_nr = 0; trx_nr < 255; trx_nr++) { trx = gsm_bts_trx_num(bts, trx_nr); - trx_dump_vty(vty, trx); + if (trx) + trx_dump_vty(vty, trx); } } @@ -954,12 +956,12 @@ DEFUN(show_ts, } if (argc >= 2) { trx_nr = atoi(argv[1]); - if (trx_nr >= bts->num_trx) { + trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) { vty_out(vty, "%% can't find TRX '%s'%s", argv[1], VTY_NEWLINE); return CMD_WARNING; } - trx = gsm_bts_trx_num(bts, trx_nr); } if (argc >= 3) { ts_nr = atoi(argv[2]); @@ -982,8 +984,10 @@ DEFUN(show_ts, } } else if (bts) { /* Iterate over all TRX in this BTS, TS in each TRX */ - for (trx_nr = 0; trx_nr < bts->num_trx; trx_nr++) { + for (trx_nr = 0; trx_nr < 255; trx_nr++) { trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) + continue; for (ts_nr = 0; ts_nr < TRX_NR_TS; ts_nr++) { ts = &trx->ts[ts_nr]; ts_dump_vty(vty, ts); @@ -993,8 +997,10 @@ DEFUN(show_ts, /* Iterate over all BTS, TRX in each BTS, TS in each TRX */ for (bts_nr = 0; bts_nr < net->num_bts; bts_nr++) { bts = gsm_bts_num(net, bts_nr); - for (trx_nr = 0; trx_nr < bts->num_trx; trx_nr++) { + for (trx_nr = 0; trx_nr < 255; trx_nr++) { trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) + continue; for (ts_nr = 0; ts_nr < TRX_NR_TS; ts_nr++) { ts = &trx->ts[ts_nr]; ts_dump_vty(vty, ts); @@ -1226,9 +1232,10 @@ static int dump_lchan_bts(struct gsm_bts *bts, struct vty *vty, { int trx_nr; - for (trx_nr = 0; trx_nr < bts->num_trx; trx_nr++) { + for (trx_nr = 0; trx_nr < 255; trx_nr++) { struct gsm_bts_trx *trx = gsm_bts_trx_num(bts, trx_nr); - dump_lchan_trx(trx, vty, dump_cb); + if (trx) + dump_lchan_trx(trx, vty, dump_cb); } return CMD_SUCCESS; @@ -1259,13 +1266,12 @@ static int lchan_summary(struct vty *vty, int argc, const char **argv, } if (argc >= 2) { trx_nr = atoi(argv[1]); - if (trx_nr >= bts->num_trx) { + trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) { vty_out(vty, "%% can't find TRX %s%s", argv[1], VTY_NEWLINE); return CMD_WARNING; } - trx = gsm_bts_trx_num(bts, trx_nr); - if (argc == 2) return dump_lchan_trx(trx, vty, dump_cb); } @@ -3373,16 +3379,11 @@ DEFUN(cfg_trx, struct gsm_bts *bts = vty->index; struct gsm_bts_trx *trx; - if (trx_nr > bts->num_trx) { - vty_out(vty, "%% The next unused TRX number in this BTS is %u%s", - bts->num_trx, VTY_NEWLINE); - return CMD_WARNING; - } else if (trx_nr == bts->num_trx) { + trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) { /* we need to allocate a new one */ trx = gsm_bts_trx_alloc(bts); - } else - trx = gsm_bts_trx_num(bts, trx_nr); - + } if (!trx) return CMD_WARNING; diff --git a/openbsc/src/libcommon/gsm_data_shared.c b/openbsc/src/libcommon/gsm_data_shared.c index dc1cf8db4..f40cd8771 100644 --- a/openbsc/src/libcommon/gsm_data_shared.c +++ b/openbsc/src/libcommon/gsm_data_shared.c @@ -165,6 +165,7 @@ struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts) trx->bts = bts; trx->nr = bts->num_trx++; + trx->nr = 1; /* HACK */ trx->mo.nm_state.administrative = NM_STATE_UNLOCKED; gsm_mo_init(&trx->mo, bts, NM_OC_RADIO_CARRIER, @@ -208,7 +209,7 @@ struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts) } } - if (trx->nr != 0) + if (trx->nr != 1) trx->nominal_power = bts->c0->nominal_power; llist_add_tail(&trx->list, &bts->trx_list); @@ -323,9 +324,6 @@ struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num) { struct gsm_bts_trx *trx; - if (num >= bts->num_trx) - return NULL; - llist_for_each_entry(trx, &bts->trx_list, list) { if (trx->nr == num) return trx; @@ -428,24 +426,21 @@ gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class, 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); + if (!trx) + return NULL; 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); + if (!trx) + return NULL; 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 (!trx) + return NULL; if (obj_inst->ts_nr >= TRX_NR_TS) return NULL; mo = &trx->ts[obj_inst->ts_nr].mo; @@ -459,15 +454,15 @@ gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class, 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); + if (!trx) + return NULL; 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); + if (!trx) + return NULL; mo = &trx->bs11.pa.mo; break; default: @@ -524,24 +519,21 @@ gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class, 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); + if (!trx) + return NULL; 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); + if (!trx) + return NULL; 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 (!trx) + return NULL; if (obj_inst->ts_nr >= TRX_NR_TS) return NULL; obj = &trx->ts[obj_inst->ts_nr]; -- cgit v1.2.3