[OML] Allow each BTS model to specify the OML callback
This allows us to add BTS models that do not use the standard TS 12.21 OML
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index e8433fd..e308ca4 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -429,6 +429,8 @@
enum gsm_bts_type type;
const char *name;
+ int (*oml_rcvmsg)(struct msgb *msg);
+
struct tlv_definition nm_att_tlvdef;
struct bitvec features;
diff --git a/openbsc/src/bts_ipaccess_nanobts.c b/openbsc/src/bts_ipaccess_nanobts.c
index 6c7b2bd..25dc0c8 100644
--- a/openbsc/src/bts_ipaccess_nanobts.c
+++ b/openbsc/src/bts_ipaccess_nanobts.c
@@ -30,6 +30,8 @@
static struct gsm_bts_model model_nanobts = {
.type = GSM_BTS_TYPE_NANOBTS,
+ .name = "nanobts",
+ .oml_rcvmsg = &abis_nm_rcvmsg,
.nm_att_tlvdef = {
.def = {
/* ip.access specifics */
diff --git a/openbsc/src/bts_siemens_bs11.c b/openbsc/src/bts_siemens_bs11.c
index 64bc1a7..5a5f883 100644
--- a/openbsc/src/bts_siemens_bs11.c
+++ b/openbsc/src/bts_siemens_bs11.c
@@ -31,6 +31,8 @@
static struct gsm_bts_model model_bs11 = {
.type = GSM_BTS_TYPE_BS11,
+ .name = "bs11",
+ .oml_rcvmsg = &abis_nm_rcvmsg,
.nm_att_tlvdef = {
.def = {
[NM_ATT_AVAIL_STATUS] = { TLV_TYPE_TLV },
diff --git a/openbsc/src/bts_unknown.c b/openbsc/src/bts_unknown.c
index 2957ce0..f954599 100644
--- a/openbsc/src/bts_unknown.c
+++ b/openbsc/src/bts_unknown.c
@@ -27,6 +27,8 @@
static struct gsm_bts_model model_unknown = {
.type = GSM_BTS_TYPE_UNKNOWN,
+ .name = "unknown",
+ .oml_rcvmsg = &abis_nm_rcvmsg,
.nm_att_tlvdef = {
.def = {
},
diff --git a/openbsc/src/e1_input.c b/openbsc/src/e1_input.c
index 3605f93..79c3a5a 100644
--- a/openbsc/src/e1_input.c
+++ b/openbsc/src/e1_input.c
@@ -475,6 +475,7 @@
u_int8_t tei, u_int8_t sapi)
{
struct e1inp_sign_link *link;
+ struct gsm_bts *bts;
int ret;
switch (ts->type) {
@@ -492,7 +493,8 @@
switch (link->type) {
case E1INP_SIGN_OML:
msg->trx = link->trx;
- ret = abis_nm_rcvmsg(msg);
+ bts = msg->trx->bts;
+ ret = bts->model->oml_rcvmsg(msg);
break;
case E1INP_SIGN_RSL:
msg->trx = link->trx;