From 15eae8dcafc86400a6340b8dcb4b5e8ec3a4fe66 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 26 Sep 2011 23:43:23 +0200 Subject: Fix Ericsson RBS2000 support after libosmo-abis merge The libosmo-abis merge broke Ericsson RBS support, as it didn't get the part right where the per-TRX OML sign_link is determined while transmitting OM2000 messages. As a result of this fix, we can remove the 'to_trx_oml' parameter to _abis_nm_sendmsg(), which is a nice cleanup. --- openbsc/include/openbsc/abis_nm.h | 2 +- openbsc/src/libbsc/abis_nm.c | 14 +++----------- openbsc/src/libbsc/abis_om2000.c | 18 ++++++++---------- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/openbsc/include/openbsc/abis_nm.h b/openbsc/include/openbsc/abis_nm.h index f11ac117b..ae9b99945 100644 --- a/openbsc/include/openbsc/abis_nm.h +++ b/openbsc/include/openbsc/abis_nm.h @@ -160,7 +160,7 @@ int abis_nm_vty_init(void); void abis_nm_clear_queue(struct gsm_bts *bts); -int _abis_nm_sendmsg(struct msgb *msg, int to_trx_oml); +int _abis_nm_sendmsg(struct msgb *msg); void abis_nm_queue_send_next(struct gsm_bts *bts); /* for bs11_config. */ diff --git a/openbsc/src/libbsc/abis_nm.c b/openbsc/src/libbsc/abis_nm.c index 027a2638b..a01826bd5 100644 --- a/openbsc/src/libbsc/abis_nm.c +++ b/openbsc/src/libbsc/abis_nm.c @@ -114,10 +114,8 @@ static struct msgb *nm_msgb_alloc(void) "OML"); } -int _abis_nm_sendmsg(struct msgb *msg, int to_trx_oml) +int _abis_nm_sendmsg(struct msgb *msg) { - struct e1inp_sign_link *sign_link = msg->dst; - msg->l2h = msg->data; if (!msg->dst) { @@ -125,12 +123,6 @@ int _abis_nm_sendmsg(struct msgb *msg, int to_trx_oml) return -EINVAL; } - /* Check for TRX-specific OML link first */ - if (to_trx_oml) { - if (!sign_link->trx->oml_link) - return -ENODEV; - msg->dst = sign_link->trx->oml_link; - } return abis_sendmsg(msg); } @@ -142,7 +134,7 @@ static int abis_nm_queue_msg(struct gsm_bts *bts, struct msgb *msg) /* queue OML messages */ if (llist_empty(&bts->abis_queue) && !bts->abis_nm_pend) { bts->abis_nm_pend = OBSC_NM_W_ACK_CB(msg); - return _abis_nm_sendmsg(msg, 0); + return _abis_nm_sendmsg(msg); } else { msgb_enqueue(&bts->abis_queue, msg); return 0; @@ -508,7 +500,7 @@ void abis_nm_queue_send_next(struct gsm_bts *bts) while (!llist_empty(&bts->abis_queue)) { msg = msgb_dequeue(&bts->abis_queue); wait = OBSC_NM_W_ACK_CB(msg); - _abis_nm_sendmsg(msg, 0); + _abis_nm_sendmsg(msg); if (wait) break; diff --git a/openbsc/src/libbsc/abis_om2000.c b/openbsc/src/libbsc/abis_om2000.c index 22164627d..e2e05780d 100644 --- a/openbsc/src/libbsc/abis_om2000.c +++ b/openbsc/src/libbsc/abis_om2000.c @@ -799,8 +799,8 @@ static void signal_op_state(struct gsm_bts *bts, struct abis_om2k_mo *mo) static int abis_om2k_sendmsg(struct gsm_bts *bts, struct msgb *msg) { - struct e1inp_sign_link *sign_link = (struct e1inp_sign_link *)msg; struct abis_om2k_hdr *o2h; + struct gsm_bts_trx *trx; int to_trx_oml; msg->l2h = msg->data; @@ -814,9 +814,8 @@ static int abis_om2k_sendmsg(struct gsm_bts *bts, struct msgb *msg) case OM2K_MO_CLS_TX: case OM2K_MO_CLS_RX: /* Route through per-TRX OML Link to the appropriate TRX */ - to_trx_oml = 1; - sign_link->trx = gsm_bts_trx_by_nr(bts, o2h->mo.inst); - if (!sign_link->trx) { + trx = gsm_bts_trx_by_nr(bts, o2h->mo.inst); + if (!trx) { LOGP(DNM, LOGL_ERROR, "MO=%s Tx Dropping msg to " "non-existing TRX\n", om2k_mo_name(&o2h->mo)); return -ENODEV; @@ -824,9 +823,8 @@ static int abis_om2k_sendmsg(struct gsm_bts *bts, struct msgb *msg) break; case OM2K_MO_CLS_TS: /* Route through per-TRX OML Link to the appropriate TRX */ - to_trx_oml = 1; - sign_link->trx = gsm_bts_trx_by_nr(bts, o2h->mo.assoc_so); - if (!sign_link->trx) { + trx = gsm_bts_trx_by_nr(bts, o2h->mo.assoc_so); + if (!trx) { LOGP(DNM, LOGL_ERROR, "MO=%s Tx Dropping msg to " "non-existing TRX\n", om2k_mo_name(&o2h->mo)); return -ENODEV; @@ -834,12 +832,12 @@ static int abis_om2k_sendmsg(struct gsm_bts *bts, struct msgb *msg) break; default: /* Route through the IXU/DXU OML Link */ - sign_link->trx = bts->c0; - to_trx_oml = 0; + trx = bts->c0; break; } + msg->dst = trx->oml_link; - return _abis_nm_sendmsg(msg, to_trx_oml); + return _abis_nm_sendmsg(msg); } static void fill_om2k_hdr(struct abis_om2k_hdr *o2h, const struct abis_om2k_mo *mo, -- cgit v1.2.3