This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
fixeria gerrit-no-reply at lists.osmocom.orgfixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/24153 ) Change subject: [VAMOS] Implement the concept of 'shadow' transceiver ...................................................................... [VAMOS] Implement the concept of 'shadow' transceiver Change-Id: I48b44b4df9ffb1cca105aebbd868c29b21f3b1d6 Related: SYS#5315, OS#4940 --- M include/osmo-bts/bts_trx.h M src/common/bts_trx.c M src/common/oml.c 3 files changed, 86 insertions(+), 33 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/53/24153/1 diff --git a/include/osmo-bts/bts_trx.h b/include/osmo-bts/bts_trx.h index 8513a12..86d5167 100644 --- a/include/osmo-bts/bts_trx.h +++ b/include/osmo-bts/bts_trx.h @@ -41,6 +41,11 @@ } role_bts; struct gsm_bts_trx_ts ts[TRX_NR_TS]; + + /* If this is a primary TRX that has a shadow TRX, this points at the shadow TRX. + * NULL when this TRX is a shadow TRX itself, or when there is no shadow TRX set up. */ + struct gsm_bts_trx *shadow; + bool is_shadow; }; static inline struct gsm_bts_trx *gsm_bts_bb_trx_get_trx(struct gsm_bts_bb_trx *bb_transc) { @@ -48,6 +53,7 @@ } struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts); +void gsm_bts_trx_alloc_shadow(struct gsm_bts_trx *trx); int bts_trx_init(struct gsm_bts_trx *trx); struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num); char *gsm_trx_name(const struct gsm_bts_trx *trx); diff --git a/src/common/bts_trx.c b/src/common/bts_trx.c index 9fc18e4..5ee4e7f 100644 --- a/src/common/bts_trx.c +++ b/src/common/bts_trx.c @@ -52,10 +52,76 @@ return 0; } +static void gsm_bts_trx_init_ts_lchan(struct gsm_bts_trx *trx) +{ + unsigned int tn, ln; + + for (tn = 0; tn < TRX_NR_TS; tn++) { + struct gsm_bts_trx_ts *ts = &trx->ts[tn]; + + ts->trx = trx; + ts->nr = tn; + ts->pchan = GSM_PCHAN_NONE; + ts->dyn.pchan_is = GSM_PCHAN_NONE; + ts->dyn.pchan_want = GSM_PCHAN_NONE; + ts->tsc = -1; + + ts->mo.fi = osmo_fsm_inst_alloc(&nm_chan_fsm, trx, ts, + LOGL_INFO, NULL); + osmo_fsm_inst_update_id_f(ts->mo.fi, "%s-ts%u", + trx->bb_transc.mo.fi->id, ts->nr); + gsm_mo_init(&ts->mo, trx->bts, NM_OC_CHANNEL, + trx->bts->nr, trx->nr, ts->nr); + + for (ln = 0; ln < TS_MAX_LCHAN; ln++) { + struct gsm_lchan *lchan = &ts->lchan[ln]; + char *name; + + lchan->ts = ts; + lchan->nr = ln; + lchan->type = GSM_LCHAN_NONE; + + name = gsm_lchan_name_compute(lchan); + lchan->name = talloc_strdup(trx, name); + INIT_LLIST_HEAD(&lchan->sapi_cmds); + } + } +} + +void gsm_bts_trx_alloc_shadow(struct gsm_bts_trx *prim) +{ + struct gsm_bts_trx *shadow; + + /* The can be only one shadow TRX */ + OSMO_ASSERT(prim->shadow == NULL); + + shadow = talloc_zero(prim, struct gsm_bts_trx); + OSMO_ASSERT(shadow != NULL); + prim->shadow = shadow; + + talloc_set_destructor(shadow, gsm_bts_trx_talloc_destructor); + + shadow->is_shadow = true; + shadow->bts = prim->bts; + shadow->nr = prim->nr; + + /* The shadow TRX has its own BASEBAND-TRANSCEIVER and CHANNEL MOs, + * but due to its virtual nature has no dedicated RADIO-CARRIER MO. */ + shadow->bb_transc.mo.fi = osmo_fsm_inst_alloc(&nm_bb_transc_fsm, + shadow, &shadow->bb_transc, + LOGL_INFO, NULL); + osmo_fsm_inst_update_id_f(shadow->bb_transc.mo.fi, + "bts%d-shadow-trx%d", + prim->bts->nr, shadow->nr); + gsm_mo_init(&shadow->bb_transc.mo, prim->bts, NM_OC_OSMO_SHADOW_TRANSC, + prim->bts->nr, shadow->nr, 0xff); + + gsm_bts_trx_init_ts_lchan(shadow); +} + struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts) { struct gsm_bts_trx *trx = talloc_zero(bts, struct gsm_bts_trx); - int k; if (!trx) return NULL; @@ -77,38 +143,7 @@ gsm_mo_init(&trx->bb_transc.mo, bts, NM_OC_BASEB_TRANSC, bts->nr, trx->nr, 0xff); - for (k = 0; k < TRX_NR_TS; k++) { - struct gsm_bts_trx_ts *ts = &trx->ts[k]; - int l; - - ts->trx = trx; - ts->nr = k; - ts->pchan = GSM_PCHAN_NONE; - ts->dyn.pchan_is = GSM_PCHAN_NONE; - ts->dyn.pchan_want = GSM_PCHAN_NONE; - ts->tsc = -1; - - ts->mo.fi = osmo_fsm_inst_alloc(&nm_chan_fsm, trx, ts, - LOGL_INFO, NULL); - osmo_fsm_inst_update_id_f(ts->mo.fi, "bts%d-trx%d-ts%d", - bts->nr, trx->nr, ts->nr); - gsm_mo_init(&ts->mo, bts, NM_OC_CHANNEL, - bts->nr, trx->nr, ts->nr); - - for (l = 0; l < TS_MAX_LCHAN; l++) { - struct gsm_lchan *lchan; - char *name; - lchan = &ts->lchan[l]; - - lchan->ts = ts; - lchan->nr = l; - lchan->type = GSM_LCHAN_NONE; - - name = gsm_lchan_name_compute(lchan); - lchan->name = talloc_strdup(trx, name); - INIT_LLIST_HEAD(&lchan->sapi_cmds); - } - } + gsm_bts_trx_init_ts_lchan(trx); if (trx->nr != 0) trx->nominal_power = bts->c0->nominal_power; diff --git a/src/common/oml.c b/src/common/oml.c index c32260b..bd9a86e 100644 --- a/src/common/oml.c +++ b/src/common/oml.c @@ -1596,10 +1596,16 @@ mo = &trx->mo; break; case NM_OC_BASEB_TRANSC: + case NM_OC_OSMO_SHADOW_TRANSC: if (obj_inst->trx_nr >= bts->num_trx) { return NULL; } trx = gsm_bts_trx_num(bts, obj_inst->trx_nr); + if (obj_class == NM_OC_OSMO_SHADOW_TRANSC) { + if (trx->shadow == NULL) + return NULL; + trx = trx->shadow; + } mo = &trx->bb_transc.mo; break; case NM_OC_CHANNEL: @@ -1663,10 +1669,16 @@ obj = trx; break; case NM_OC_BASEB_TRANSC: + case NM_OC_OSMO_SHADOW_TRANSC: if (obj_inst->trx_nr >= bts->num_trx) { return NULL; } trx = gsm_bts_trx_num(bts, obj_inst->trx_nr); + if (obj_class == NM_OC_OSMO_SHADOW_TRANSC) { + if (trx->shadow == NULL) + return NULL; + trx = trx->shadow; + } obj = &trx->bb_transc; break; case NM_OC_CHANNEL: -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/24153 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: I48b44b4df9ffb1cca105aebbd868c29b21f3b1d6 Gerrit-Change-Number: 24153 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210506/eb7f33dd/attachment.htm>