aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/l1sap.c
AgeCommit message (Collapse)AuthorFilesLines
2016-11-14l1sap: Fix use-after-free in loopback mode.Alexander Chemeris1-0/+3
By default l1sap_tch_ind() returns 0 which signals to its caller that message has been processed and can be freed. In case of loopback we're forwarding the message to dl_tch_queue who will free it later. Returning 1 from l1sap_tch_ind() prevents caller from freeing message. Change-Id: I1e065075baa51c88fa717f132e1f0a83df68be02
2016-11-11Remove duplicated codeMax1-13/+11
Having duplicated code to fill in fn & tn values makes it harder to read and modify static gsmtap_p* functions. Fix this by removing the duplication and moving the common code one level up. Change-Id: I0e67bf7423424cc11435bc0a5a1110297eeee383
2016-11-08DTX: wrap FSM signal dispatchingMax1-4/+2
Make wrapper function which checks that DTX is enabled for lchan before dispatching any events. Change-Id: Id8b519c4af6d505ec9a4b9aadd5107bf7af53d66
2016-11-08DTX DL: tighten check for enabled operationMax1-1/+1
Introduce dtx_dl_amr_enabled() function which checks that DTX is enabled and FSM is allocated and use it for all corresponding checks. Change-Id: Ifa68b641265ed14f242765c85e40da2d1021a541
2016-11-03DTX fix ONSET handlingMax1-4/+6
* re-introduce ST_ONSET_F to guard from repetitive ONSET messages in case multiple FACCH occur duriing DTX silence period. * produce ONSET event after both SID FIRST and UPDATE in case of AMR FR. * always dispatch E_SID_F (SID FIRST) signal if in talkspurt. * allow E_SID_* right after ONSET (zero-length talkspurt). * add missing E_ONSET signal description. * fix FSM transitions for AMR HR *Inhibited and First P*. * fix incorrect return from l1if_tch_encode() in ONSET FACCH with incoming SID UPDATE Change-Id: I0e9033c5f169da46aed9a0d1295faff489778dcf Related: OS#1801
2016-10-21Extend RTP RX callback parametersMax1-1/+2
Adopt to change in libosmo-abis to accept additional parameters in RTP RX callback function. Change-Id: Icf41e568f041e87b38e6192af0be90c42362bfee
2016-10-18Replace magic number with defineMax1-1/+1
SDCCH occupy lchan 0..3 in combined configuration so for CCCH we've always used lchan[4] - replace it with CCCH_LCHAN define and add comment. Change-Id: Ic5d742c292d638f119c6b4672120c1950adeb7f0
2016-10-13DTX DL: use FSM for AMRMax1-1/+23
Use dedicated FSM to handle all DTX DL related events: - add explicit checks if DTX DL is enabled (fixes regression for non-DTX setup introduced in 654175f33bd412671e3ef8cdd65c0689d10f278c) - fix handling of AMR CMI for SPEECH frames - add FSM for DTX DL - sync with corresponding changes in OpenBSC's - handle FACCH-related DTX ONSET events This affects both lc15 and sysmobts and requires corresponding change in OpenBSC (Change-Id: Idac8609faf9b5ced818fde899ccfc6ed0c42e8fd). Change-Id: I74a0b42cb34d525b8a70d264135e82994ca70d31
2016-10-12Move copy-pasted array into shared headerMax1-6/+0
Change-Id: I377ece2845830e3defab2d515f44b629ce5aed8e
2016-10-11DTX: fix conversion from fn to msMax1-2/+4
Previously FN was converted to millisecondss incorrectly due to wrong conversion between FN and a number of voice samples. The conversion should be based on following: * there are 12/13 useful frames for audio in TCH * there is 1 RTP packet per 4 frame * there are 160 samples per RTP packet Fixes: OS#1801 Change-Id: I9cc70cacabde98621aa892cee74f4ac461645093
2016-10-11DTX: fix 1st RTP packet dropYves Godin1-1/+1
Use "impossible" dummy value to initialize last_fn to prevent dropping of 1st RTP frame due to timestamp jump. Fixes: OS#1803 Change-Id: I485af21f6761048d12dc7f5552fcdd46daf786ed
2016-09-24DTX: check Marker bit to send ONSET to L1Max1-3/+10
If Marker bit is set than it's a talkspurt which we have to explicitly indicate to L1 by first sending ONSET message and than actual voice data in a separate message. This change affect sysmobts and LC15 hw. Change-Id: I88c41568bcb0d82699f617adc4ad192603dd1bb6 Related: OS#1750
2016-09-02common/rsl: move decision whether to chan act ack/nack to common functionNeels Hofmeyr1-4/+1
Prepare for a dyn TS patch that needs to call rsl_tx_chan_act_ack() directly without the rel_act_kind decision. Add function rsl_tx_chan_act_acknack() to wrap rsl_tx_chan_act_ack() and rsl_tx_chan_act_nack(). Move the decision whether to drop the ack/nack, based on lchan->rel_act_kind, to the new function, losing some code dup. Change all callers to use the new function; drop the two older ones from rsl.h and make them static. Note: for nack, the exception for dyn TS in PDCH mode was missing (rsl_tx_chan_act_nack() had only the rel_act_kind != LCHAN_REL_ACT_RSL condition, but should also have had the dyn TS exception as in rsl_tx_chan_act_ack()). I already know that this exception will again be removed in an upcoming commit, but for patch readability it logically makes sense to add it here. To easily include the nack case, drop the check for which pchan the dyn TS is operating as, because a rel_act_kind == LCHAN_REL_ACT_PCU implies that it is either already in or trying to become PDCH mode. Change-Id: I57ba60c670730c6d7877a6a9b96ece0a7679a0bb
2016-08-30cosmetic: common ts_is_pdch()Neels Hofmeyr1-11/+0
Have one common ts_is_pdch(), placed in lchan.c, since this file is pretty empty and pretty close to ts. Publish in gsm_data.h. Remove the if-style implementation from l1sap.c, and instead implement in a switch statement. This prepares for upcoming ts_is_pdch() usage in ph_data_req() for sysmo and lc15. Change-Id: Ib78d663fdbac5a1d7053f1b9d543649b66da00e2
2016-08-27log: l1sap: add 0x to hex output of chan_nr, 5 timesNeels Hofmeyr1-5/+5
Change-Id: I187a74fd255dbdfb9bfb1e32786031a66f013efb
2016-08-27Change interface in osmo-bts for 11 bit RACHbhargava1-3/+6
Interface structure between osmo-bts and osmo-pcu is updated with the parameters to differentiate the type of RACH and further support 11 bit RACH. The function prototype and definitions are changed accordingly. Interface version number is increased. Change-Id: I4f4c501b2d86d77c78de32a84b1804172ffb6f4d
2016-08-10dyn TS: complete for TRXNeels Hofmeyr1-1/+4
Apply similar fixes as for TCH/F_PDCH also for TCH/F_TCH/H_PDCH: Detect dyn TS in PDCH mode in ts_is_pdch(). In trx_set_ts(), enhance the "if (TCH_F_PDCH)" to a switch statement including both dynamic channel types. Adjust the comment to include both kinds. Change-Id: I6669739cd08780cd9ffb9451cdae9f6b9704c4fe
2016-08-08Fill measurements data for L1SAPMax1-2/+5
Fill in values for BER, BTO, Link quality in L1SAP and send them to PCU. Note: this increases the version of BTS <-> PCU protocol. It also requires corresponding changes in libosmocore. All BTS models provide measurements data unless direct DSP access for PCU is enabled. For BTS-specific notes see below. Octphy: conversion from sSNRDb to Link Quality uses formulae which works in practice instead of what's documented for sSNRDb value. Subject to change in future revisions. TRX: C / I link quality estimator is not computed. Change-Id: Ic9693a044756fb1c7bd2ff3cfa0db042c3c4e01c Related: OS#1616
2016-07-28dyn TS, dyn PDCH: common/l1sap.c: properly notice PDCHNeels Hofmeyr1-3/+11
In l1sap_ph_rts_ind(), l1sap_ph_data_ind() and to_gsmtap(), the decision to handle a TS as PDCH was still missing for dynamic TS. It is not yet clear why this did not impact functionality for dynamic timeslots on other BTS models. AFAICT they should not work without this patch, but in fact they do. It would be nice to clarify this some day. Change-Id: I7b873a089a3de70d980885a7539cb91997464743
2016-07-28fix comment in common/l1sap.c, function name changedNeels Hofmeyr1-1/+1
Change was in 334df9441a44de00c0dd3f66e73ac6fae28098fb "cosmetic: clarify TCH/F_PDCH related naming and comments" Change-Id: If3e353ea5796ee129bdd95e5f954e6c141cffec8
2016-07-27comment typo: common/l1sap.cNeels Hofmeyr1-1/+1
Change-Id: I053766452ee01bed6136a9742551c664666a7989
2016-07-25dyn TS: common TCH/F_TCH/H_PDCH implementationNeels Hofmeyr1-0/+5
common/l1sap: For dyn TS, the BSC will issue RSL Chan Activ requests with a non-standard chan_nr. While the rest of the code now understands that, the L1 phy will not. Translate to standard PDCH (== TCH/F). common/oml: use dyn TS' current pchan mode for lchans config. common/pcu_sock: detect desired PDCH mode of dyn TS. common/rsl: implement reconnection chain of a TS for changing its pchan: * rsl_rx_chan_activ(): ** Add dyn_pchan_from_chan_nr() to derive the requested pchan from the RSL chan_nr IE. ** Notice the need for a pchan change and invoke dyn_ts_l1_reconnect() (s.b.) ** Make Chan Mode IE presence optional, because the non-standard PDCH activation message is simpler and does not require it. ** Do PDCH activation via PCU. * Add dyn_ts_l1_reconnect(): store state and disconnect the L1 channel; then wait for cb_ts_disconnected(). * Add osmo_dyn_ts_disconnected() to cb_ts_disconnected(): verify state and connect with the new pchan type; then wait for cb_ts_connected(). * Add osmo_dyn_ts_connected() to cb_ts_connected(), which re-issues the cached chan activation message from before disconnecting the L1 channel. * Also send an rf chan rel/act ack for dyn TS upon PDCH de/act via PCU. * Add dyn_ts_pdch_release(): on channel release of a dyn TS in PDCH mode, release via the PCU. Call from rsl_rx_rd_chan_rel(). Change-Id: I463bb6b4e57674f091c3badba9257374961c52c7
2016-07-25cosmetic: clarify TCH/F_PDCH related naming and commentsNeels Hofmeyr1-3/+6
We're about to introduce a new kind of dynamic channel, which will also use parts of the ip.access mode dyn PDCH code paths. Make sure the general parts have general names and mark ip.access specific parts as such. Rename dyn_pdch_ts_[dis]connected() to cb_ts_[dis]connected(). Rename dyn_pdch_complete to ipacc_dyn_pdch_complete(). From cb_ts_[dis]connected(), factor out the current code into static functions ipacc_dyn_pdch_[dis]connected() -- this will make sense once the new dynamic kind is added to cb_ts_[dis]connected(). Change-Id: I7da5b7cb7b48572671f50e0dec97d9eec3083df1
2016-07-25info log: l1sap.c: add '0x' to hex outputNeels Hofmeyr1-2/+2
Change-Id: If29895de238e586b8298d84b6f0b41e08bea8c91
2016-06-23Make get_lchan_by_chan_nr globally availableMax1-2/+2
* Remove static qualifier * Remove duplicated code - use generic function instead Change-Id: I37a312648771f58d3087471083cfcebbd97ccf1d
2016-06-18Move copy-pasted code into common partMax1-0/+20
Related: OS#1750 Change-Id: Ic4342eaf7e32a0e9a5f2b16dd196a1f5f03152a9
2016-06-17dyn PDCH: implement main dyn PDCH logic in common/Neels Hofmeyr1-0/+12
React on IPAC PDCH ACT and DEACT messages and invoke the PCU and bts_model_ts_* APIs to effect switchover. The dyn PDCH interaction is described in the comment to rsl_rx_dyn_pdch(), the main entry point for PDCH switchover. In case the bts_model_ts_* are not implemented (or return other errors), reply with an IPAC PDCH ACT/DEACT NACK. Add callbacks that mark steps in the PDCH switchover process, dyn_pdch_ts_disconnected(), dyn_pdch_ts_connected() and dyn_pdch_complete(). Add hooks in l1sap.c on channel activation and release confirmation, to call dyn PDCH callbacks. BTS dyn PDCH implementations should invoke dyn_pdch_ts_disconnected() and dyn_pdch_ts_connected() when bts_model_ts_disconnect() or bts_model_ts_connect() are called, respectively. (upcoming for sysmoBTS) Change-Id: Id2f5f77121a65d6c14eac127b3d4fb50e97a77ab
2016-06-14DTXu: mark beginning of speech burst in RTPMax1-2/+4
Set Marker bit in RTP header to mark the beginning of talkspurt. Change-Id: I3dd70ad8ff94356e3c3cc5458255f6c23534783e Related: OS#1562
2016-06-07Fix RTP timestamps in case of DTXMax1-2/+16
Compute RTP user_ts adjustment based on the difference between current and previous FN instead of hard-coded value. Change-Id: If1677ddcf754b29990ff7cd846e11c32e3d30b33 Related: OS#1562 Reviewed-on: https://gerrit.osmocom.org/196 Tested-by: Jenkins Builder Reviewed-by: Harald Welte <laforge@gnumonks.org>
2016-02-22Fix ocmo-bts-octphy interaction with OsmoPCUMax1-2/+3
Previously osmo-bts-octphy have not provided in-band presence information which cause off-by-one errors and misinterpretation of ph_data_ind by PCU. This fixed now by adding support for explicitly passing PH-DATA presence info. Corresponding check and in-band passing of presence information are removed. Note: this requires libosmocore version with osmo_ph_pres_info_type support integrated. [hfreyther/max: Remove + 1 from the decoded length]
2016-02-09fix migration of check_for_ciph_cmd() from sysmobts to l1sapHarald Welte1-0/+12
During the L1SAP related changes, somehow an old version of check_for_ciph_cmd() was re-introduced, which didn't store the N(s) as part of the lchan. To make things worse, the old code was still present in the sysmobts specific part, but never executed.
2016-02-03L1SAP: Ensure we don't process MPH-TIME.indication on TRX != C0Harald Welte1-1/+8
2016-01-16OCTPHY: Fix various memory leaks and add comments on msgb ownershipHarald Welte1-1/+1
2016-01-16print a NOTICE message if lchan not activ in get_active_lchan_by_chan_nr()Harald Welte1-2/+5
2016-01-08l1sap: Whitespace fixes.Alexander Chemeris1-2/+2
2016-01-04fix large amount of compiler warnings in common and sysmobts codeHarald Welte1-0/+1
2015-12-05osmo-bts-sysmo: Disable DSP trace flags by defaultHarald Welte1-1/+1
2015-12-05l1sap: Ensure we only pass PHY primitives of active lchansHarald Welte1-45/+41
In some situations, a PHY might send us a primitive for a logical channel that is not (or no longer) active. Passing such primitives higher up the stack is asking for trouble. Specifically, LAPDm instances cannot accept messages once their instance has been released. We introduce two new helper functions: get_lchan_by_chan_nr() as well as get_active_lchan_by_chan_nr(). The former just centralizes the look-up of the lchan by timeslot number and sub-slot number. The latter also checks to ensure the lchan is active, which is used for PH-DATA / PH-RTS primitives. To the contrary, MPH primitives generally don't require the cahnnel to be active for processing.
2015-09-22TRX: Fixup ciphering state names after rebasingAndreas Eversberg1-0/+1
2015-09-22Fix: Process all TRX on GSM Time indication, not only C0Andreas Eversberg1-4/+5
2015-09-22move MS power control handling from sysmobts to common partHarald Welte1-0/+2
MS uplink power control is required in pretty much any BTS, and we cannot assume that they PHY / L1 will always take care of it by itself. So the correspondign code is moved to common/power_control.c and called from the generic part of L1SAP. The corresponding VTY paramter has been moved from the sysmobts-specific trx VTY node to the common BTS VTY node.
2015-09-22Move detection of handover frames from sysmo-bts code to common codeAndreas Eversberg1-0/+4
2015-09-22Send primitives at PH-/MPH-/TCH-SAP interface via GSMTAPAndreas Eversberg1-0/+167
2015-09-22sysmobts: Clean up transitions for lchan cipher stateAndreas Eversberg1-1/+0
There are three transitions: 1. LCHAN_CIPH_NONE -> LCHAN_CIPH_RX_REQ -> LCHAN_CIPH_RX_CONF It is used to enable ciphering in RX (uplink) direction only. 2. LCHAN_CIPH_RX_CONF -> LCHAN_CIPH_RX_CONF_TX_REQ -> LCHAN_CIPH_RXTX_CONF It is used to additionally enable ciphering in TX (downlink) direction. 3. LCHAN_CIPH_NONE -> LCHAN_CIPH_RXTX_REQ -> LCHAN_CIPH_RX_CONF_TX_REQ -> LCHAN_CIPH_RXTX_CONF It is used to enable ciphering in both TX and RX directions. This is used when the channel is activated with encryption already enabled. (assignment or handover) In order to follow the order of these transitions, the RX direction must always be set before the TX direction. If no cipher key is set (A5/0), ciphering is set to ALG 0, but lchan cipher state remains at LCHAN_CIPH_NONE.
2015-09-22Add MEAS (MPH_INFO) IND message to PH-/MPH-/TCH-SAP interfaceAndreas Eversberg1-0/+32
This part moves processing of measurement infos from osmo-bts-sysmo to common part.
2015-09-22l1sap: Port code to new ciphering handlingHarald Welte1-10/+35
... introduced in 2cc37035d73191b71b9ba9c0d559a0da6a5f35e5
2015-09-22sysmobts/l1_if: Sacch/Sdcc/Facch are handled in l1sap/coreHarald Welte1-1/+1
2015-09-22Add SDCCH/SACCH/FACCH messages to PH-/MPH-/TCH-SAP interfaceAndreas Eversberg1-2/+179
This part moves control channel message primitives from osmo-bts-sysmo to common part. In order to control ciphering fo BTS model, CIPHER (MPH_INFO) messages are used.
2015-09-22Add TCH messages to PH-/MPH-/TCH-SAP interfaceAndreas Eversberg1-0/+151
This part moves TCH handling from osmo-bts-sysmo to common part. The RTP handling is done at the common part, so they can be used by other BTS models.
2015-09-22l1sap: re-introduce a comment that was lost during l1sap mergeHarald Welte1-0/+2