summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/src/mobile/gsm48_rr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/host/layer23/src/mobile/gsm48_rr.c')
-rw-r--r--src/host/layer23/src/mobile/gsm48_rr.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c
index bc244699..36488606 100644
--- a/src/host/layer23/src/mobile/gsm48_rr.c
+++ b/src/host/layer23/src/mobile/gsm48_rr.c
@@ -3284,6 +3284,11 @@ static int gsm48_rr_dl_est(struct osmocom_ms *ms)
gsm48_rr_activate_channel(ms, &rr->cd_now, ma, ma_len);
#endif
+ /* set T200 of SAPI 0 */
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_sec =
+ T200_DCCH;
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_usec = 0;
+
/* start establishmnet */
return gsm48_send_rsl(ms, RSL_MT_EST_REQ, nmsg, 0);
}
@@ -3623,6 +3628,11 @@ static int gsm48_rr_tx_ass_cpl(struct osmocom_ms *ms, uint8_t cause)
/* RR_CAUSE */
ac->rr_cause = cause;
+ /* set T200 of SAPI 0 */
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_sec =
+ T200_DCCH;
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_usec = 0;
+
return gsm48_send_rsl(ms, RSL_MT_RES_REQ, nmsg, 0);
}
@@ -3990,6 +4000,11 @@ static int gsm48_rr_tx_hando_cpl(struct osmocom_ms *ms, uint8_t cause)
// FIXME: mobile observed time
+ /* set T200 of SAPI 0 */
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_sec =
+ T200_DCCH;
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_usec = 0;
+
return gsm48_send_rsl(ms, RSL_MT_RES_REQ, nmsg, 0);
}
@@ -5025,6 +5040,13 @@ static int gsm48_rr_estab_ind_sapi3(struct osmocom_ms *ms, struct msgb *msg)
LOGP(DSUM, LOGL_INFO, "Radio link SAPI3 is established\n");
+ if ((link_id & 0xf8) == 0x00) {
+ /* raise T200 of SAPI 0 */
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_sec =
+ T200_DCCH_SHARED;
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_usec= 0;
+ }
+
/* send inication to upper layer */
nmsg = gsm48_rr_msgb_alloc(GSM48_RR_EST_IND);
if (!nmsg)
@@ -5101,6 +5123,11 @@ static int gsm48_rr_rel_ind_sapi3(struct osmocom_ms *ms, struct msgb *msg)
LOGP(DSUM, LOGL_INFO, "Radio link SAPI3 is released\n");
+ /* lower T200 of SAPI 0 */
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_sec =
+ T200_DCCH;
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_usec = 0;
+
/* send inication to upper layer */
nmsg = gsm48_rr_msgb_alloc(GSM48_RR_REL_IND);
if (!nmsg)
@@ -5140,6 +5167,10 @@ static int gsm48_rr_est_req_sapi3(struct osmocom_ms *ms, struct msgb *msg)
LOGP(DRR, LOGL_INFO, "Requesting DCCH link, because no TCH "
"(sapi %d)\n", sapi);
rr->sapi3_link_id = 0x00 | sapi; /* SAPI 3, DCCH */
+ /* raise T200 of SAPI 0 */
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_sec =
+ T200_DCCH_SHARED;
+ ms->lapdm_channel.lapdm_dcch.datalink[DL_SAPI0].dl.t200_usec= 0;
} else {
LOGP(DRR, LOGL_INFO, "Requesting ACCH link, because TCH "
"(sapi %d)\n", sapi);