aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2018-10-03 19:43:05 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2018-10-03 19:46:34 +0200
commit6e141b1b8da4bc7f8c526efe7c7dafcf61fc601b (patch)
tree2fbedd385d746a140814781ca586ed6ed7fd6312
parentba68fe40bf193d105c3216ca5981ef8388573052 (diff)
abis_nm_get_ts: Return TS of correct TRX, not always TRX0
Seen while operating a setup with 2 TRX (2 nanobts): DNM <0004> abis_nm.c:703 OC=CHANNEL(03) INST=(00,01,04): bts=0 trx=0 Opstart ACK DTS <0011> bts_ipaccess_nanobts.c:308 timeslot(0-0-4-TCH_F)[0x612000008aa0]{UNUSED}: Received Event TS_EV_OML_READY DTS <0011> bts_ipaccess_nanobts.c:308 timeslot(0-0-4-TCH_F)[0x612000008aa0]{UNUSED}: Event TS_EV_OML_READY not permitte As it can be seen, OML log header state correctly it comes from TRX1, but later content in line expresses TRX0, and that failure is forwarded up the stack and channels for TRX different than TRX0 are never initialized. Related: OS#3560 Fixes: f0ff9a67117dc22d838769fe6eef67778abd43b9 Change-Id: I27e992e419422051247777b048175b724c05323e
-rw-r--r--src/osmo-bsc/abis_nm.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/osmo-bsc/abis_nm.c b/src/osmo-bsc/abis_nm.c
index 7f919a43b..25b2c38d4 100644
--- a/src/osmo-bsc/abis_nm.c
+++ b/src/osmo-bsc/abis_nm.c
@@ -673,14 +673,15 @@ static int abis_nm_rx_lmt_event(struct msgb *mb)
}
/* From a received OML message, determine the matching struct gsm_bts_trx_ts instance.
- * Note that the BTS-TRX-TS numbers received in the FOM header do not correspond to the local bts->nr and
- * bts->trx->nr. Rather, the trx is identified by the e1inp_sign_link* found in msg->dst, and the TS is
- * then obtained by the FOM header's TS number. */
+ * Note that the BTS-TRX-TS numbers received in the FOM header do not correspond
+ * to the local bts->nr. Rather, the BTS is identified by the e1inp_sign_link*
+ * found in msg->dst which points to OML connection and thus to its 1st TRX, and the
+ * TRX and TS is then obtained by the FOM header's TS number. */
struct gsm_bts_trx_ts *abis_nm_get_ts(const struct msgb *oml_msg)
{
struct abis_om_fom_hdr *foh = msgb_l3(oml_msg);
struct e1inp_sign_link *sign_link = oml_msg->dst;
- struct gsm_bts_trx *trx = sign_link->trx;
+ struct gsm_bts_trx *trx = gsm_bts_trx_by_nr(sign_link->trx->bts, foh->obj_inst.trx_nr);
uint8_t ts_nr = foh->obj_inst.ts_nr;
if (!trx) {
LOGP(DNM, LOGL_ERROR, "%s Channel OPSTART ACK for sign_link without trx\n",
@@ -699,8 +700,7 @@ static int abis_nm_rx_opstart_ack(struct msgb *mb)
{
struct abis_om_fom_hdr *foh = msgb_l3(mb);
struct e1inp_sign_link *sign_link = mb->dst;
- struct gsm_bts_trx *trx = sign_link->trx;
- DEBUGPFOH(DNM, foh, "bts=%u trx=%u Opstart ACK\n", trx->bts->nr, trx->nr);
+ DEBUGPFOH(DNM, foh, "bts=%u Opstart ACK\n", sign_link->trx->bts->nr);
osmo_signal_dispatch(SS_NM, S_NM_OPSTART_ACK, mb);
return 0;
}