aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2015-12-12 21:15:19 +0100
committerHarald Welte <laforge@gnumonks.org>2016-01-16 16:25:52 +0100
commite9f12acbeb5a369282719f8e0deecc88034a5488 (patch)
treee5c33c49d4a057aa294ae0f66817451eb522ae4a
parent7d6860b114e5d7b6f7a6b9e78e5cd879940c89f3 (diff)
LAPDm: Use T200 settings from OML rather than libosmocore defaults
-rw-r--r--include/osmo-bts/oml.h4
-rw-r--r--src/common/bts.c2
-rw-r--r--src/common/oml.c60
3 files changed, 65 insertions, 1 deletions
diff --git a/include/osmo-bts/oml.h b/include/osmo-bts/oml.h
index d3dda710..6b6735cf 100644
--- a/include/osmo-bts/oml.h
+++ b/include/osmo-bts/oml.h
@@ -38,4 +38,8 @@ int oml_fom_ack_nack(struct msgb *old_msg, uint8_t cause);
int oml_mo_fom_ack_nack(struct gsm_abis_mo *mo, uint8_t orig_msg_type,
uint8_t cause);
+/* Configure LAPDm T200 timers for this lchan according to OML */
+int oml_set_lchan_t200(struct gsm_lchan *lchan);
+extern const uint8_t oml_default_t200_ms[7];
+
#endif // _OML_H */
diff --git a/src/common/bts.c b/src/common/bts.c
index e0a8a07e..d7255b22 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -109,6 +109,7 @@ int bts_init(struct gsm_bts *bts)
btsb->max_ta = 63;
btsb->ny1 = 4;
btsb->t3105_ms = 300;
+ memcpy(btsb->t200_ms, oml_default_t200_ms, sizeof(btsb->t200_ms));
/* default RADIO_LINK_TIMEOUT */
btsb->radio_link_timeout = 32;
@@ -260,6 +261,7 @@ int lchan_init_lapdm(struct gsm_lchan *lchan)
lapdm_channel_set_flags(lc, LAPDM_ENT_F_POLLING_ONLY);
lapdm_channel_set_l1(lc, NULL, lchan);
lapdm_channel_set_l3(lc, lapdm_rll_tx_cb, lchan);
+ oml_set_lchan_t200(lchan);
return 0;
}
diff --git a/src/common/oml.c b/src/common/oml.c
index 6d778a53..ef1bea3d 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -386,11 +386,69 @@ static const uint8_t abis_nm_t200_mult[] = {
[T200_FACCH_F] = 5,
[T200_FACCH_H] = 5,
[T200_SACCH_TCH_SAPI0] = 10,
- [T200_SACCH_SDCCH] = 10,
+ [T200_SACCH_SDCCH] = 10,
[T200_SDCCH_SAPI3] = 5,
[T200_SACCH_TCH_SAPI3] = 10
};
+/* the below defaults correpsond to the libocmocore default of 1s for
+ * DCCH and 2s for ACCH. The BSC should overried this via OML anyway. */
+const uint8_t oml_default_t200_ms[7] = {
+ [T200_SDCCH] = 1000/5,
+ [T200_FACCH_F] = 1000/5,
+ [T200_FACCH_H] = 1000/5,
+ [T200_SACCH_TCH_SAPI0] = 2000/10,
+ [T200_SACCH_SDCCH] = 2000/10,
+ [T200_SDCCH_SAPI3] = 1000/5,
+ [T200_SACCH_TCH_SAPI3] = 2000/10,
+};
+
+static void dl_set_t200(struct lapdm_datalink *dl, unsigned int t200_msec)
+{
+ dl->dl.t200_sec = t200_msec / 1000;
+ dl->dl.t200_usec = (t200_msec % 1000) * 1000;
+}
+
+/* Configure LAPDm T200 timers for this lchan according to OML */
+int oml_set_lchan_t200(struct gsm_lchan *lchan)
+{
+ struct gsm_bts *bts = lchan->ts->trx->bts;
+ struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
+ struct lapdm_channel *lc = &lchan->lapdm_ch;
+ unsigned int t200_dcch, t200_dcch_sapi3, t200_acch, t200_acch_sapi3;
+
+ /* set T200 for main and associated channel */
+ switch (lchan->type) {
+ case GSM_LCHAN_SDCCH:
+ t200_dcch = btsb->t200_ms[T200_SDCCH];
+ t200_dcch_sapi3 = btsb->t200_ms[T200_SDCCH_SAPI3];
+ t200_acch = btsb->t200_ms[T200_SACCH_SDCCH];
+ t200_acch_sapi3 = btsb->t200_ms[T200_SACCH_SDCCH];
+ break;
+ case GSM_LCHAN_TCH_F:
+ t200_dcch = btsb->t200_ms[T200_FACCH_F];
+ t200_dcch_sapi3 = btsb->t200_ms[T200_FACCH_F];
+ t200_acch = btsb->t200_ms[T200_SACCH_TCH_SAPI0];
+ t200_acch_sapi3 = btsb->t200_ms[T200_SACCH_TCH_SAPI3];
+ break;
+ case GSM_LCHAN_TCH_H:
+ t200_dcch = btsb->t200_ms[T200_FACCH_H];
+ t200_dcch_sapi3 = btsb->t200_ms[T200_FACCH_H];
+ t200_acch = btsb->t200_ms[T200_SACCH_TCH_SAPI0];
+ t200_acch_sapi3 = btsb->t200_ms[T200_SACCH_TCH_SAPI3];
+ break;
+ default:
+ return -1;
+ }
+
+ dl_set_t200(&lc->lapdm_dcch.datalink[DL_SAPI0], t200_dcch);
+ dl_set_t200(&lc->lapdm_dcch.datalink[DL_SAPI3], t200_dcch_sapi3);
+ dl_set_t200(&lc->lapdm_acch.datalink[DL_SAPI0], t200_acch);
+ dl_set_t200(&lc->lapdm_acch.datalink[DL_SAPI3], t200_acch_sapi3);
+
+ return 0;
+}
+
/* 8.6.1 Set BTS Attributes has been received */
static int oml_rx_set_bts_attr(struct gsm_bts *bts, struct msgb *msg)
{