aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-07-08 18:41:05 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2014-04-06 08:58:18 +0200
commitc7bc0fec8a780691546f912653f8cbd2433bbaed (patch)
treec8f7bccdc606aeaaa8e4d95c9ccebf542b74ca56
parent2686a02f0eee73171063fed6add378b141c8bed2 (diff)
Fix: Retrieve ARFCN (from OML) for TRX other than C0
-rw-r--r--src/common/oml.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/common/oml.c b/src/common/oml.c
index 6d36b3db..f0d32de7 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -592,6 +592,25 @@ static int oml_rx_set_radio_attr(struct gsm_bts_trx *trx, struct msgb *msg)
trx->arfcn_num = length;
} else
trx->arfcn_num = 0;
+#else
+ if (trx != trx->bts->c0 && TLVP_PRESENT(&tp, NM_ATT_ARFCN_LIST)) {
+ const uint8_t *value = TLVP_VAL(&tp, NM_ATT_ARFCN_LIST);
+ uint16_t _value;
+ uint16_t length = TLVP_LEN(&tp, NM_ATT_ARFCN_LIST);
+ uint16_t arfcn;
+ if (length != 2) {
+ LOGP(DOML, LOGL_ERROR, "Expecting only one ARFCN, "
+ "because hopping not supported\n");
+ /* FIXME: send NACK */
+ return -ENOTSUP;
+ }
+ memcpy(&_value, value, 2);
+ arfcn = ntohs(_value);
+ value += 2;
+ if (arfcn > 1024)
+ return oml_fom_ack_nack(msg, NM_NACK_FREQ_NOTAVAIL);
+ trx->arfcn = arfcn;
+ }
#endif
/* call into BTS driver to apply new attributes to hardware */
return bts_model_apply_oml(trx->bts, msg, tp_merged, NM_OC_RADIO_CARRIER, trx);