aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-09-26 23:43:23 +0200
committerHarald Welte <laforge@gnumonks.org>2011-09-26 23:44:49 +0200
commit15eae8dcafc86400a6340b8dcb4b5e8ec3a4fe66 (patch)
tree80c8b7b6bd2287d19c3152f1f99aa07fc31d19b3
parent4f8ad5350a1e4dbccf72cc4a61f2b3665e5202ac (diff)
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.
-rw-r--r--openbsc/include/openbsc/abis_nm.h2
-rw-r--r--openbsc/src/libbsc/abis_nm.c14
-rw-r--r--openbsc/src/libbsc/abis_om2000.c18
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,