aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/l1sap.c
AgeCommit message (Collapse)AuthorFilesLines
11 dayscommon: Add RTP related rate countersHarald Welte1-1/+20
Let's add some rate counters to add visibility to the BTS on what is happening in terms of received and/or transmitted RTP packets. This should help during debugging any RTP related issues. Change-Id: Ide674bde10b0e4b501d6a48947b983090342dfec
2024-02-17Fix license headers.Harald Welte1-1/+1
We have licensed the code under GNU Afffero Public License, and state that in the first paragraph as well as in the link to the license. However, a paragraph in the middle stated "see the GNU General Public License", which is somewhat misleading. Let's fix that. Change-Id: I37e503b195fe43e1da42c080900504ca8e682e76
2024-01-06l1sap: fix logic error in gsmtap_csd_rlp_process()Vadim Yanitskiy1-2/+6
Current code evaluates as follows: (trx->arfcn | is_uplink) ? GSMTAP_ARFCN_F_UPLINK : 0 while we want it to be evaluated as follows: trx->arfcn | (is_uplink ? GSMTAP_ARFCN_F_UPLINK : 0) Change-Id: Ida3d684968a3e4a45531d4b6d7b6af170e3e39f4 Fixes: CID#338165
2023-12-21gsmtap-rlp: Add support for skipping generating NULL framesHarald Welte1-0/+8
If there's nothing to transmit over a CSD NT channel, both ends generate NULL frames. Let's add an option to suppress GSMTAP output for those, creating pcap files with less noise. Change-Id: I85a2159cfaa01bfb4205c1462e3a9dbda68e4bad Depends: libosmocore.git I2d9bd8eb4f0cd0f72c436996767b199429596917
2023-12-21Add GSMTAP encapsulation of RLP frames in CSD NT modeHarald Welte1-3/+80
In CSD (Circuit Switched Data) NT (Non-Transparent) mode, there are RLP (Radio Link Protocol) frames inside the modified V.110. wireshark alrady has a dissector for this, and we've introduced a GSMTAP type for RLP some time ago. So with this patch, we now generate such GSMTAP RLP frames. Change-Id: I6a258458822bcb3fe7290a9b9b3d104beecda219
2023-12-11Use polling based LAPDm with frame numbersAndreas Eversberg1-14/+27
Osmo-bts uses the new polling based LAPDm implementation. The OML message NM_ATT_T200 is ignored, because T200 timeouts are set to the minimal response time. Longer timeouts would cause lower throughput in case of lost frames. Shorter timeouts would cause LAPDm to fail. Related: OS#4074 Depends: libosmocore.git I6ebe83f829d7751ea9de1d90eb478c7a628db64c Change-Id: Ic6d7902b13cf491daaa8752db78f9875387aeffd
2023-10-27ASCI: Control uplink access bursts detection of physical interfaceAndreas Eversberg1-0/+23
An MPH-INFO message is used to turn detection of uplink access bursts on or off. Whenever the uplink on a voice group channel is free, the uplink access burst detection is turned on. When the uplink access is granted to a talker or when the calling subscriber has been assigned to the channel, the uplink access burst detection is turned off until the uplink becomes free again. Related: OS#4851 Depends: libosmocore.git Ibd6a1d468a70126a8f67e944fcb916969cc3c36b Change-Id: I92d6773a3a463eb747143c85aa149e54c1fda122
2023-09-28l1sap: l1sap_tch_ind(): fix segfault on stale TCH.indVadim Yanitskiy1-0/+1
It was reported that osmo-bts-sysmo is crashing due to a TCH.ind primitive being received by l1sap_tch_ind() for an lchan, which is operating neither in speech nor data, but in signalling mode. It's not clear which scenario is causing this situation. My best guess is that one or more TCH.ind primitive(s) remain waiting in the lower layers and bob up right after the channel mode change. This can happen, for instance, when a dynamic timeslot gets switched from TCH/F or TCH/H to PDCH or SDCCH/8. Change-Id: I2d270ab654fdd9d19d1708ff6c4b4e902bd5d0a3 Fixes: d1f8f3429 "l1sap: proper rate adaptation for CSD" Closes: OS#6180
2023-09-25ASCI: Ignore LAPD frames from MS, while the uplink is not activeAndreas Eversberg1-3/+14
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
2023-07-30l1sap: proper rate adaptation for CSD (RFC4040 'clearmode')Vadim Yanitskiy1-12/+54
Since 95407f3f osmo-bts-trx supports scheduling all CSD specific channel rates, however the rate adaptation was missing. On the radio interface we deal with CSD-modified V.110 frames, which need to be converted to normal 80-bit V.110 frames (RA1'/RA1), which in turn need to be batched and sent in RFC4040 "clearmode" 160 octet RTP payloads (RA1/RA2 as per I.460). Note that this patch comments out TCH/F14.4 in bts_supports_cm_data(), so that all channel allocations for this mode would be NACKed. The reason for this is that the rate adaptation functions for TCH/F14.4 are different than the RA1'/RA1 and the RA1/RA2. For more information, see: * 3GPP TS 44.021, section 8 (functions RA1'/RA1) * ITU-T I.460, section 1.1 "Rate adaption of 8, 16 and 32 kbit/s streams" Change-Id: I5e3701ad52d5d428fd02caff037881045f2d0a02 Related: OS#1572
2023-07-21ASCI: Repeat UPLINK FREE message until uplink becomes busyAndreas Eversberg1-0/+12
According to TS 44.018 the UPLINK FREE message must be repeated when the uplink is marked as free. The BSC sends the UPLINK FREE message once and the BTS repeats it until UPLINK BUSY (uplink blocked by BSC) or VGCS UPLINK GRANT (talker accesses the uplink) is sent. It is important to stop sending UPLINK FREE message when a talker accesses the uplink and before the VGCS UPLINK GRANT message is sent, so that stopping must be controlled by the BTS. Related: OS#5781 Change-Id: Ia23c59f5e9a73bbc384fbc317a2cfcf707e3c28f
2023-07-21ASCI: Add Notification CHannel (NCH) supportAndreas Eversberg1-6/+21
The location of the NCH is defined by the rest octet of System Information 1. If NCH is defined, the given CCCH blocks are used for NCH instead of AGCH/PCH. The current list of VGCS/VBS call notifications is transmitted on the NCH. If there is no notification, an empty notification is transmitted on the NCH. The Notification List Number (NLN) is used to indicated new notificaitons. Only the last notification (or empty notification) indicates NLN. This way the MS can determine after two equal NLN that the complete list has been recevied. Change-Id: I82fdaba3faaced76267a99ae14a5458a1b41fdaa Related: OS#5781
2023-07-21ASCI: VGCS/VBS RACH -> RSL TALKER/LISTENER DETECTHarald Welte1-9/+38
Random access is allowed on VGCS / VBS channels to access the uplink or to detect listeners. Uplink Access from a listener is only reported once after activating the channel. Uplink Access from a talker is reported each time the uplink becomes occupied. RSL TALKER/LISTENER DETECT messages are sent to the bsc. The VGCS UPLINK GRANT message is sent by the BTS itself. Timer T3115 is used to repeat the message up to NY2 times until one valid frame is received from the MS (CM service request). The UPLINK BUSY / UPLINK FREE message must be sent by the BSC. The uplink is released by UPLINK RELEASE message from the MS or from the BSC. Afterwards the UPLINK FREE message causes the MS to leave the uplink without any acknowlege. An RSL REL-REQ must be used to terminate the link locally. (Without layer 2 DISC procedure.) Change-Id: I1bd07ab6802341b09a06e89df356665ffaf6d2bf Related: OS#4851
2023-06-28ECU in UL path: move it from trx model to l1sapMychaela N. Falconia1-13/+49
With this change the application of ECU in the uplink path becomes consistent across all OsmoBTS models, enabled or disabled per vty config setting "rtp internal-uplink-ecu". An additional behavioral change from the previous trx-model-only implementation is that ECU insertion is now done after the link quality check in l1sap, thereby fixing the bug where this quality check would sometimes suppress ECU output and replace it with BFI markers in RTP. In the new implementation when the internal ECU is enabled and available for the selected codec (currently FRv1 only), the RTP output will gap (standard representation of BFI in RTP) only during DTXu pauses as indicated by a received SID frame (either valid or invalid), and the SID frame that triggers the switch from ECU mode into pause mode is reliably emitted in RTP. Related: OS#6040 Depends: I3857be84bba12aaca0c2cca91458b7e13c5a642a (libosmocore) Change-Id: Iac577975c9ab50cb8ebbc035c661c1880e7cecec
2023-06-28ECU in UL path: move state alloc/free to l1sapMychaela N. Falconia1-0/+26
In preparation for moving the now-optional application of ECU in UL path from osmo-bts-trx model-specific code to the common layer, move ECU state allocation and freeing from trx model to l1sap. Related: OS#6040 Change-Id: Ic98a2eb26b5a99bc4a89ad07ae87c9a86b921418
2023-06-26l1sap: use gsm0502_fn2ccch_block() from libosmogsmVadim Yanitskiy1-27/+1
Keep the l1sap specific wrapper because we still want to assert(). Change-Id: I7097ba87f42689d2336014da9173cadbdaa9fdab Depends: libosmocore.git I8cbd31226754e95887358ed83a928e2f567f4cf3
2023-05-29HR1 codec: act on SID indication in RFC5993 RTP inputMychaela N. Falconia1-4/+15
Suppose we receive RTP from the uplink of another BTS, and the UL-handling BTS has channel-decoded an HR1 frame which it deems (per GSM 06.41 section 6.1.1) to be a valid SID, even though it is not a perfect, error-free SID. How will this SID frame be represented in RFC 5993 transport? My reading of the RFC tells me that the UL-handling BTS will need to apply an operation like our osmo_hr_sid_reset() to the payload before sending it out in RTP - but because the text of the RFC does not explicitly address this scenario, others may have interpreted it differently. If we receive an RFC 5993 RTP payload in which FT is set to 2, indicating good SID, but the actual HR payload is not a perfect SID (the SID field is not all 1s), the only reasonable interpretation of such occurrence is that the sender of this payload was another BTS whose implementors interpreted the RFC as not requiring them to rejuvenate the SID codeword prior to RTP output. Therefore, let's treat such payloads as valid SID for our DTXd logic, and rejuvenate the SID codeword ourselves. Change-Id: Ife00de6220a8ca7cc180a61734497f1acb7f5b83
2023-05-29FR/HR/EFR TCH DL: implement DTX rulesMychaela N. Falconia1-18/+270
GSM 06.31, 06.41 and 06.81 are the respective DTX specs for FR, HR and EFR. In each of these specs, section 5.1.2 specifies the expected shape of radio downlink in the presence of SIDs: one SID frame after each talkspurt (after speech frames), and one SID frame in every SACCH-aligned position every 480 ms (every 240 ms for HR), or if the actual SACCH-aligned position is taken up by FACCH, then just one SID frame as soon as possible after that FACCH - and no transmitted SID frames in other positions. This just-referenced spec section was written with the assumption that it will only be applied when DTXd is enabled - however, if the RTP stream for call leg B DL comes from call leg A UL (TrFO), then we are going to receive SID frames in the stream intended for our DL even when DTXd is disabled or not supported altogether. The easiest solution is to apply FR/HR/EFR DTXd logic whenever the incoming RTP stream contains SID frames, irrespective of physical DTXd enable/disable state. If we apply such "logical DTXd" when physical DTXd is disabled, the BTS model PHY will end up transmitting induced BFIs (dummy FACCH or inverted CRC3) in those frame positions where the "logical DTXd" function says "please transmit nothing". The point remains, however, that the prescribed SID shape on the radio downlink (expected positions of SID frames) won't happen on its own: in the case of TrFO, whichever SID frames are present will be in wrong positions for leg B DL, and even in the case of transcoded calls the responsibility for DL SID shaping cannot be placed on the RTP stream source because that source won't know where SACCH alignment will lie. Therefore, the necessary DL SID reshaping has to be done in the RTP stream receiver in OsmoBTS. Related: OS#5996 Change-Id: I924ab21952dcf8bb03ba7ccef790474bf66fc9e5
2023-05-27all models, HR1 codec: select RTP output format via vty optionMychaela N. Falconia1-1/+23
The new vty option "rtp hr-format (rfc5993|ts101318)" selects the RTP output format to be used for HR1 codec, consistently across all models. The default is set to match legacy behavior: ts101318 on osmo-bts-{lc15,oc2g,sysmo} and rfc5993 on osmo-bts-trx. On models where no legacy behavior is applicable, the default is set to rfc5993 as a forward-looking measure - see OS#6036. Closes: OS#5688 Change-Id: I168191874a062429a57904511a1e89e3f588732e
2023-05-26refactor: replace rtppayload_is_valid() with preening before enqueueMychaela N. Falconia1-72/+27
Up until now, our approach to validating incoming RTP payloads and dropping invalid ones has been to apply the preening function inside l1sap_tch_rts_ind(), at the point of dequeueing from the DL input queue. However, there are some RTP formats where we need to strip one byte of header from the payload before passing the rest to our innards: there is RFC 5993 for HR codec, and there also exists a non-standard extension (rtp_traulike) that does a similar deal for FR and EFR. Because of alignment issues, it will be more efficient (avoids memmove) if we can do this header octet stripping before we copy the payload into msgb - but doing so requires that we move this preening logic to the point of RTP input before enqueueing. Make this change. Related: OS#5688 Change-Id: I7fc99aeecba8303b56d397b8952de5eea82b301e
2023-05-08RTP input, FR & EFR: preen incoming payloads for SID errorsMychaela N. Falconia1-9/+40
Those network elements which receive a stream of codec frames that may come from the uplink of GSM call A and which are responsible for preparing the frame stream for the downlink of GSM call B (such as OsmoBTS receiving RTP and feeding DL to its PHY) must be prepared for the possibility that their incoming frame stream may contain corrupted SID frames, presumably from bit errors on radio link A. Per the rules of section 6.1.1 of GSM 06.31 for FR and GSM 06.81 for EFR, SID frames with just one errored bit are still to be accepted as valid, whereas frames with more corrupted bits which are still recognizable as SID are classified as invalid SID. In the case of a TrFO call, the entity switching from leg A UL to leg B DL is responsible for *not* transmitting invalid SID frames on the destination leg (they should be treated like BFIs), and any deemed-valid SID frames that are forwarded should be preened, correcting that one bit error they may exhibit. Implement this functionality in OsmoBTS. Change-Id: I89df2f12c49dd5378667cf149d19bde654f80134
2023-05-04l1sap: fix wording in commentPhilipp Maier1-1/+1
The function rtppayload_is_valid() is called from the receiving RTP code path. Lets use the word "forwarding" instead of "sending" to avoid the impression something is sent (like sending RTP packets to the outside world) Change-Id: Ie7fcc53dea462b0d575b0c9ca73ba7507289eefe
2023-04-09cosmetic: Change LOGPLCFN argument orderHarald Welte1-3/+3
As it has come up during code review of Change-ID I214af0448652a9f321ccbab77977b67663ba28f9 introducing LOGPLCNF, my approach to the strict preserval of argument order (lchan first from LOGPLCHAN and fn *after* loglevel from LOGPFN) was considered sub-optimal. I used the following spatch rule to clean this up: @@ expression lc, ss, logl, fn; expression list trailer; @@ -LOGPLCFN(lc, ss, logl, fn, trailer); +LOGPLCFN(lc, fn, ss, logl, trailer); Change-Id: Iba4a8416545673d03cb057e4855f8b1ecae3e1ec
2023-04-05logging: Introduce LOGPLCGT()Harald Welte1-17/+14
We have LOGPLCHAN and LOGPGT, but not a combined version for logging both the lchan and the gsm_time. Let's resolve this. Log messages without indicating the lchan name are pretty useless if you have multiple concurrently active lchans... Change-Id: I4bf3363f92acdf67d8e7333e30ac2209e31cb287
2023-03-31Replace explicit gsm_lchan_name() calls with LOGPLCHANHarald Welte1-4/+3
There was a surprising number of explicit gsm_lchan_name() calls from within log message code. Let's avoid that whenever possible and use a LOGPLCHAN() or related macro. Change-Id: If4f4f555f5ca61dfa624b298805f5375efc0b137
2023-03-30rtp continuous-streaming: fix BFI in the quality-suppressed caseMychaela N. Falconia1-2/+2
The check for (tch_ind->lqual_cb >= bts->min_qual_norm) in l1sap_tch_ind() has the intent of suppressing valid-seeming speech frame output from lower layers when the link quality is too low; this check is particularly important for FR1 codec where the intrinsic validity check is only a 3-bit CRC which has 1/8 probability of indicating "correct" when decoding radio noise during DTXu silence. However, this check is effectively defeated in the current implementation of rtp continuous-streaming: the RTP packet being output is the presumed-bogus speech frame from lower layers, rather than the intended zero-length payload. Fix this bug. Related: OS#5975 Change-Id: Icee0f57be289a0592a0197469432a012d15f224c
2023-03-29common: implement rtp continuous-streaming modeMychaela N. Falconia1-16/+41
In some environments it is highly desirable for the RTP stream coming from each GSM call UL on a BTS to be fully continuous, without any gaps, with _some_ RTP packet emitted every 20 ms, even if there is no speech or SID frame to be sent in that frame time window. The present change adds an rtp continuous-streaming vty option which, when enabled, causes the BTS to emit RTP packets with a zero-length payload, instead of producing gaps in the RTP stream, when it has nothing else to send. Related: OS#5975 Change-Id: Ic0e2edf2ed90ba0ac6bee5e7d9629bf0255e256d
2023-03-17Avoid tx RF Resource Ind for disabled TRXPau Espin Pedrol1-0/+3
Related: SYS#6370 Change-Id: I887e0cb03b2a5654accccf7a55fac51319981bfb
2022-12-08l1sap: remove unused pointer variablePhilipp Maier1-2/+1
The pointer variable l1sap is only used to determine the size of the related struct but for nothing else. We can use the struct name in sizeof also directly and get rid of it. Change-Id: I93abdce1dec60d53ddceb1fce6e9e7451ba6283a
2022-10-12l1sap: do not call msgb_l2hlen without checkingPhilipp Maier1-2/+2
We request the length using msgb_l2len() in two locations where whe cannot be sure that l2h is populated. Lets check this first. Change-Id: Ie13d0724f183ff240714dcdbd24e5a21b4276bfe Related: OS#5645
2022-09-13Introduce Osmux supportPau Espin Pedrol1-4/+10
Related: SYS#5987 Requires: libosmo-netif.git Change-Id I632654221826340423e1e97b0f8ed9a2baf6c6c3 Change-Id: Ib80be434c06d07b3611bd18ae25dff8b14a7aad9
2022-08-11Move lchan_dl_tch_queue_enqueue to lchan.c and make it publicPau Espin Pedrol1-13/+0
It will be used too by osmux code present in another file. This is a preparation commit to simplify the one adding osmux support. Change-Id: Ie7fa57bb04db9ad9b03971467e12ee7b8e4c190a
2022-08-11Avoid counting lchan->dl_tch_queue length every time a msg is enqueuedPau Espin Pedrol1-19/+13
The queue_limit_to method iterates the entire list of messages every time a new message is added. Let's use msgb_{enqueue,dequeue}_count() APIs to do that in constant time. It is true that since the queue is limited to 1, there's usually at most 1 item in the queue so it's not a real problem. However, when we add Osmux in the future, we may need to tweak the amount of messages which can be in the list, due to Osmux batching mechansim which may be more bursty sometimes. In any case, this change doesn't make things worse for sure. The patch also takes the chance to group the queue_limit_to + enqueue into one function to avoid having the code spread several times. Change-Id: I61818a3bb521c27bd21a8b6fa70581d27638ec9b
2022-05-10measurement: move SACCH detection to process_l1sap_meas_data()Vadim Yanitskiy1-2/+9
SACCH detection can be simplified by checking the RSL Link ID in process_l1sap_meas_data(). This eliminates the need to lookup the multiframe position by calling trx_sched_is_sacch_fn(), which definitely takes more CPU time than just L1SAP_IS_LINK_SACCH(). Calling trx_sched_is_sacch_fn() is still required for BTS models reporting the measurements via PRIM_MPH_INFO (legacy way), separately from the related Uplink blocks. This patch can be summarized as follows: * detect SACCH and set .is_sub=1 in process_l1sap_meas_data(); ** for PRIM_MPH_INFO use trx_sched_is_sacch_fn(); ** for PRIM_PH_DATA use L1SAP_IS_LINK_SACCH(); * do not call trx_sched_is_sacch_fn() from ts45008_83_is_sub(); * modify the unit test - test_ts45008_83_is_sub_single(); ** remove test_ts45008_83_is_sub_is_sacch(). Change-Id: I507e96ee34ac0f8b7a2a6f16a8c7f92bc467df60 Related: SYS#5853
2022-05-10struct bts_ul_meas: reflect C/I units in field name s/c_i/ci_cb/Vadim Yanitskiy1-4/+4
Change-Id: If07f7f2a3ea996cbfc6a9087fa34402e38a7fd9f Related: SYS#5853
2022-04-19common: fix coding style: if is not a functionVadim Yanitskiy1-3/+3
Change-Id: I890d7734c83d108d3c2cd2c7699ace880f13ca8b
2022-04-13l1sap: l1sap_chan_act(): remove unused *tp argumentVadim Yanitskiy1-1/+1
Change-Id: I2030f05b55fc9370e71ff12b26ffe1142f4acfc8
2022-04-13l1sap: l1sap_chan_act(): alloc DTX FSM only for TCHVadim Yanitskiy1-1/+1
Change-Id: Ieb5728b7a9e7d7c58449deaa5a6c4d8755b6e213
2021-11-09rsl: exclude disabled timeslots from interference reportsVadim Yanitskiy1-0/+5
It may happen after the A-bis connection recovery that the RF RESource INDication message gets sent too early, while some timeslots are not yet configured. This confuses the BSC and provokes error messages. Change-Id: I00bc6fe67ea1bbedcd5d8640e73bd8b16b9e667f Related: SYS#5313, SYS#4971
2021-11-04l1sap: rework handling of DATA.ind on SACCHVadim Yanitskiy1-33/+16
Currently an Uplink SACCH block is being passed to LAPDm first, and then gets forwareded to the BSC in handle_ms_meas_report(), together with the Uplink measurements collected so far. This approach has a serious flaw: handle_ms_meas_report() won't be called if an Uplink block contains SAPI=3 data (SMS) or was not decoded at all (len=0) fow whatever reason. Therefore, no RSL MEASurement RESult message will be sent to the BSC. Rename handle_ms_meas_report() to lchan_meas_handle_sacch(), and call it from l1sap_ph_data_ind(). This way perioduc RSL MEASurement RESult messages will be sent regardless of what happens on Uplink SACCH. Change-Id: Ifed91f87fd653debc87a09da3fd31ad64a13f330 Fixes: TC_meas_res_speech_{tchf,tchh}_sapi3 Related: SYS#5319
2021-10-28l1sap: make 'l1sap' argument of process_l1sap_meas_data() constVadim Yanitskiy1-4/+4
Change-Id: Idc3004b0c74f7b98c96f20560c8b60a1fb4eb9c8
2021-10-27l1sap: process_l1sap_meas_data() accepts pointer to lchanVadim Yanitskiy1-27/+21
In 2/3 cases when calling process_l1sap_meas_data() we already have a pointer to the logical channel, so let's pass it as the first argument instead of a pointer to the transceiver. This way we avoid calling get_active_lchan_by_chan_nr() two times. In l1sap_ph_data_ind(), call process_l1sap_meas_data() below the conditional branch handling PDCH, so it won't be called for GSM_LCHAN_PDTCH anymore. GPRS specific measurements are handled by the PCU and not of interest for the BSC. Change-Id: I9de67a0b2d2b18923f2c2003b400387a0f1af411
2021-10-27l1sap: use designated initializers in process_l1sap_meas_data()Vadim Yanitskiy1-30/+24
Change-Id: I5169a6c5f6865655dbfebb6b68d5f67941d9cdb1
2021-10-27l1sap: move false PTCCH/U detection into PDCH branchVadim Yanitskiy1-9/+8
This check is only relevant for PDCH timeslots. Change-Id: I187fef8f3de0b41b502b0b18acfb11c56c5551f0
2021-10-27l1sap: fix handling of lchan->pending_rel_ind_msgVadim Yanitskiy1-11/+7
After merging the patch [1] fixing handling of the RLL RELease INDication message in lapdm_rll_tx_cb(), ttcn3-bts-test shows several regressions: pass->fail: BTS_Tests.TC_rll_rel_ind_DCCH_0 pass->fail: BTS_Tests.TC_rll_rel_ind_DCCH_3 pass->fail: BTS_Tests.TC_rll_rel_ind_ACCH_0 pass->fail: BTS_Tests.TC_rll_rel_ind_ACCH_3 pass->fail: BTS_Tests_LAPDm.TC_sabm_dm [1] I823c9101bcca72d5792e16379b02d3602ffc2726 991020c049c63768e147d49bd2918c2d2e0f6dcb The problem is actually *not* in patch [1], but in the older one [2] which we attempted to fix. While a logical channel is in signalling mode, the lower layers do not produce PRIM_TCH_RTS, and thus the l1sap_tch_rts_ind() is not being called. Unlike l1sap_tch_rts_ind(), the l1sap_ph_rts_ind() is being called regardless of the channel mode (signalling vs speech), so let's move handling of lchan->pending_rel_ind_msg there. Change-Id: I2c380f9045624f0a0a8f988bb207bc73d8354857 Fixes: [2] Ie4f70c75f0137b4bd72d579b3a32575bac2fca3
2021-10-26l1sap: Avoid re-(de)activating already (de)active lchansPau Espin Pedrol1-0/+13
This avoids triggering all sorts of unexpected paths where one tries to release an already released lchan, etc. This can happen for instance if BTS shuts down due to BSC link going down, and hence resets all lchans, announcing it to the PCU. Then the PCU may try to deactivate the channel sending act_req (disable), but the BTS already unilaterally dropped the channels. That code path seems to trigger some crash, probably because something in lchan has been freed. Related: SYS#4971 Change-Id: I093e4d4e23b527b10bf5d6ff538460626c30a8f8
2021-10-22struct gsm_lchan: move tch.rep_facch to rep_acch.dl_facchVadim Yanitskiy1-12/+12
Finally we have all ACCH repetition state variables in one place. Change-Id: I1469619528bb69c78c2fdc25bc1db208ead936d0 Related: SYS#5114
2021-10-22struct gsm_lchan: group ACCH repetition state fieldsVadim Yanitskiy1-19/+19
Change-Id: I2680c88f2a51b64f085a92233bc125338622babf Related: SYS#5114
2021-10-22cosmetic: s/repeated_acch_capability/rep_acch_cap/gVadim Yanitskiy1-6/+6
Shorter symbol names are easier to read. Change-Id: Ib1d51f91139b4c2fe794e37fc8543b2d7a9b9c07 Related: SYS#5114
2021-10-22measurement: move repeated_dl_facch_active_decision() hereVadim Yanitskiy1-74/+0
For the sake of consistency, call repeated_dl_facch_active_decision() from handle_ms_meas_report(), so we have all functions using the measurement results for Downlink executed in a single place. Change-Id: Ibd5377ce642e49161f320ac8c33e9f966b3ddfaf Related: SYS#5114, SYS#5319