aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-09-08 03:21:23 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-09-15 05:29:05 +0700
commit4454350b4278e8a471aa93de2c1146c70a491bbf (patch)
tree992100f3c1f55200e25facb1206de50d26211219
parent5bdf6432f95098d65699ea58e7e7791f2415d361 (diff)
oml: ipacc: parse Object Version from SW Activated Report
-rw-r--r--include/osmocom/bsc/gsm_data.h6
-rw-r--r--src/osmo-bsc/bts_ipaccess_nanobts.c15
2 files changed, 21 insertions, 0 deletions
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index fa9213bba..2876d249c 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -537,6 +537,12 @@ struct gsm_abis_mo {
bool rsl_connect_sent;
bool rsl_connect_ack_received;
bool force_rf_lock;
+ /* vendor specific fields below */
+ union {
+ struct {
+ uint8_t obj_version;
+ } ipaccess;
+ };
};
/* Ericsson OM2000 Managed Object */
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts.c b/src/osmo-bsc/bts_ipaccess_nanobts.c
index 941fe557e..24966a73d 100644
--- a/src/osmo-bsc/bts_ipaccess_nanobts.c
+++ b/src/osmo-bsc/bts_ipaccess_nanobts.c
@@ -199,6 +199,7 @@ static int sw_activ_rep(struct msgb *mb)
struct e1inp_sign_link *sign_link = mb->dst;
struct gsm_bts *bts = sign_link->trx->bts;
struct gsm_abis_mo *mo;
+ struct tlv_parsed tp;
if (!is_ipa_abisip_bts(bts))
return 0;
@@ -209,6 +210,20 @@ static int sw_activ_rep(struct msgb *mb)
return -ENOENT;
}
+ if (abis_nm_tlv_parse(&tp, bts, &foh->data[0], msgb_l3len(mb) - sizeof(*foh)) < 0) {
+ LOGPFOH(DNM, LOGL_ERROR, foh, "%s(): tlv_parse failed\n", __func__);
+ return -EINVAL;
+ }
+
+ mo->ipaccess.obj_version = 0; /* implicit default */
+ if (TLVP_PRES_LEN(&tp, NM_ATT_IPACC_OBJ_VERSION, 1)) {
+ /* nanoBTS may report several Object Versions; the first one will
+ * be used by default unless requested explicitly before OPSTARTing. */
+ mo->ipaccess.obj_version = *TLVP_VAL(&tp, NM_ATT_IPACC_OBJ_VERSION);
+ LOGPFOH(DNM, LOGL_INFO, foh, "IPA Object Version is %u (default)\n",
+ mo->ipaccess.obj_version);
+ }
+
osmo_fsm_inst_dispatch(mo->fi, NM_EV_SW_ACT_REP, NULL);
return 0;
}