aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2023-09-14 16:13:54 +0200
committerjolly <andreas@eversberg.eu>2023-09-25 06:22:35 +0000
commitf5c1cd3889bb52b1166066885e2d65b87692a37e (patch)
tree884d5ddaf66cd3bebb0001608bdf3d1c506569b8
parent0978d1df716d59bc8b22c21bed036616b974f850 (diff)
ASCI: Ignore LAPD frames from MS, while the uplink is not active
Do not forward any message that is received on the uplink to LAPD while the uplink is not active. If the MS did not recognize (fast enough) that the uplink is free, it may continue to transmit LAPD messages. A response by LAPD to these messages is not desired and not required. If LAPD would respond, it would cause stopping transmission of UPLINK FREE messages. No MS could access the uplink anymore. Note: UPLINK FREE messages are repeated automatically until a different message is transmitted. Related: OS#5781 Change-Id: I5075115123055b2997481f56ddf473430a1dc9e3
-rw-r--r--src/common/l1sap.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index 13d271ea..b8283077 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -1810,9 +1810,20 @@ static int l1sap_ph_data_ind(struct gsm_bts_trx *trx,
if (lchan->ho.active == HANDOVER_WAIT_FRAME)
handover_frame(lchan);
- /* report first valid received frame to VGCS talker process */
- if (rsl_chan_rt_is_asci(lchan->rsl_chan_rt) && lchan->asci.talker_active == VGCS_TALKER_WAIT_FRAME)
- vgcs_talker_frame(lchan);
+ if (rsl_chan_rt_is_asci(lchan->rsl_chan_rt)) {
+ /* report first valid received frame to VGCS talker process */
+ if (lchan->asci.talker_active == VGCS_TALKER_WAIT_FRAME)
+ vgcs_talker_frame(lchan);
+ /* Do not forward any message that is received on the uplink to LAPD while
+ * the uplink is not active. If the MS did not recognize (fast enough) that
+ * the uplink is free, it may continue to transmit LAPD messages. A
+ * response by LAPD to these messages is not desired and not required. If
+ * LAPD would respond, it would cause stopping transmission of UPLINK FREE
+ * messages. No MS could access the uplink anymore.
+ */
+ if (lchan->asci.talker_active != VGCS_TALKER_ACTIVE)
+ return 0;
+ }
if (L1SAP_IS_LINK_SACCH(link_id))
le = &lchan->lapdm_ch.lapdm_acch;