aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/l1sap.c11
-rw-r--r--src/common/rsl.c17
2 files changed, 28 insertions, 0 deletions
diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index b2f18d1e..19b38afd 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -714,6 +714,7 @@ static int l1sap_tch_rts_ind(struct gsm_bts_trx *trx,
uint8_t chan_nr, marker = 0;
uint16_t seq;
uint32_t fn, timestamp;
+ int rc;
chan_nr = rts_ind->chan_nr;
fn = rts_ind->fn;
@@ -757,6 +758,16 @@ static int l1sap_tch_rts_ind(struct gsm_bts_trx *trx,
resp_l1sap = msgb_l1sap_prim(resp_msg);
}
+ /* check for pending REL_IND */
+ if (lchan->pending_rel_ind_msg) {
+ LOGP(DRSL, LOGL_INFO, "%s Forward REL_IND to L3\n", gsm_lchan_name(lchan));
+ /* Forward it to L3 */
+ rc = abis_bts_rsl_sendmsg(lchan->pending_rel_ind_msg);
+ lchan->pending_rel_ind_msg = NULL;
+ if (rc < 0)
+ return rc;
+ }
+
memset(resp_l1sap, 0, sizeof(*resp_l1sap));
osmo_prim_init(&resp_l1sap->oph, SAP_GSM_PH, PRIM_TCH, PRIM_OP_REQUEST,
resp_msg);
diff --git a/src/common/rsl.c b/src/common/rsl.c
index b3e9afb7..74d835f0 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -2273,6 +2273,7 @@ int lapdm_rll_tx_cb(struct msgb *msg, struct lapdm_entity *le, void *ctx)
}
msg->trx = lchan->ts->trx;
+ msg->lchan = lchan;
/* check if this is a measurement report from SACCH which needs special
* processing before forwarding */
@@ -2281,6 +2282,22 @@ int lapdm_rll_tx_cb(struct msgb *msg, struct lapdm_entity *le, void *ctx)
LOGP(DRSL, LOGL_INFO, "%s Handing RLL msg %s from LAPDm to MEAS REP\n",
gsm_lchan_name(lchan), rsl_msg_name(rh->msg_type));
+
+ /* REL_IND handling */
+ if (rh->msg_type == RSL_MT_REL_IND) {
+ LOGP(DRSL, LOGL_INFO, "%s Scheduling %s to L3 in next associated TCH-RTS.ind\n",
+ gsm_lchan_name(lchan),
+ rsl_msg_name(rh->msg_type));
+
+ if(lchan->pending_rel_ind_msg) {
+ LOGP(DRSL, LOGL_INFO, "Dropping pending release indication message\n");
+ msgb_free(lchan->pending_rel_ind_msg);
+ }
+
+ lchan->pending_rel_ind_msg = msg;
+ return 0;
+ }
+
rc = rsl_tx_meas_res(lchan, msgb_l3(msg), msgb_l3len(msg));
msgb_free(msg);
return rc;