aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmo-bts
AgeCommit message (Collapse)AuthorFilesLines
2019-05-23cbch: Add counters; queue length limits and CBCH LOAD reportingHarald Welte3-0/+14
This adds the final missing part to full CBCH support: * keep a tab on the current queue length for basic + extended CBCH * keep rate counters about the number of sent / transmitted SMSCB * send CBCH LOAD information via RSL to the BSC Change-Id: I7068c7937a60a900c40439115bb84dc3ee0d061f
2019-05-21cbch: Keep SMSCB queue length counterHarald Welte1-0/+1
This avoids having to iterate the list to count the number of elements. Change-Id: I72c47affeb87c9b898bc2290dc7ed113945f1805
2019-05-21cbch: Support Extended CBCHHarald Welte2-8/+11
The logic for Extended CBCH are the same as for the Basic CBCH, we just need to * duplicate our related state * parse the optional RSL_IE_SMSCB_CHAN_INDICATOR IE * start to send data on the Extended CBCH (TB=4..7) Change-Id: If2c6dc7da1e2185ab75fc957f8d305ad8db22429 Closes: OS#3535
2019-05-21cbch: Implement support for DEFAULT messageHarald Welte1-0/+1
The BSC can not only send us each to-be-sent message separately, but it can also configure a DEFAULT message, which is then to be sent instead of the NULL message. Let's add support for this Change-Id: I65a79215b54155d128c26d2ca11ff9ff3ed2cdba Closes: OS#4013
2019-04-19common/oml.c: constify argument 'trx' of handle_attrs_trx()Vadim Yanitskiy1-1/+1
Change-Id: Id476d492b3c1d0c728fca9eb0fb2254512bdef72
2019-03-27Forward GPRS SUSPEND REQ from DCCH to PCU socketHarald Welte2-0/+10
As specified in 3GPP TS 03.60 Section 16.2.1 and 44.018 Section 3.4.15, a Class B MS is sending a "RR GPRS SUSPEND REQ" via a DCCH to the BTS if it wants to suspend GPRS services. The BSS is now responsible to somehow forward this to the SGSN. As the Gs interface between BSC and SGSN is both optional and doesn't have any provision to forward this message, we have to send it over to the PCU so it can use regular BSSGP signaling to inform the SGSN of the SUSPEND REQUEST. This patch requires libosmocore Change-Id I90113044460a6c511ced14f588876c4280d1cac7 for the related definition of struct gsm48_gprs_susp_req. Change-Id: I3c1af662c8f0d3d22da200638480f6ef05c3ed1f Closes: OS#2249
2019-03-27oml: use oml_tx_failure_event_rep() instead of signals to SS_FAILPhilipp Maier1-1/+0
At some locations in the code a signal to SS_FAIL is dispatched in order to trigger the sending of an OML failure event report in oml.c. This is a bit overcomplicated for the task. Lets use oml_tx_failure_event_rep() to send the failure event reports and lets remove the signal handler for SS_FAIL. Change-Id: Ie4fce1273a19cc14f37ff6fc7582b2945c7e7c47 Related: OS#3843
2019-03-27oml: use oml_tx_failure_event_rep() instead of oml_fail_rep()Philipp Maier1-2/+0
The function oml_tx_failure_event_rep() replaces oml_fail_rep(), so lets use only oml_tx_failure_event_rep() and remove oml_fail_rep() Change-Id: I83c4fa9ebd519299fd54b37b5d95d6d7c1da24f6 Related: OS#3843
2019-03-27vty: add function gsmnet_from_vty() to vty.hPhilipp Maier1-0/+2
The function gsmnet_from_vty() is used in oc2gbts_vty.c, but it is not declared in vty.h. Lets add the declaration to vty.h, so that gsmnet_from_vty() can be used properly by other modules. Change-Id: I8cf63c6fabdb1f2dc67ca8193704ce4d1d4882d9
2019-03-18Constify pcu_rx_*() parametersMax1-1/+1
Use const for data parameter where appropriate. Change-Id: Ia228c001ca07cfde61b540bec6257b62aec93517
2019-03-18Make gsm_pchan2chan_nr() staticMax1-2/+0
It's only used inside of gsm_data_shared.c so let's mark it as such. Change-Id: I83f1783efe9dc07c8bf9901ebc94774aef1cd472
2019-03-18oml: make oml_tx_failure_event_rep() publicPhilipp Maier1-0/+3
The static function oml_tx_failure_event_rep() is a lot easier to use than the currently implemented signal scheme. Lets make it public so that we can quickly generate failure event reports. Change-Id: I9c4601840a06119f35cfe4da453fff3b293fe615 Related: OS#3823
2019-02-12OML: Use 'const struct abis_oml_mo *' whenever users only readHarald Welte1-8/+8
Try to constrain the code a bit further by making all read-only accesses use 'const *'. Change-Id: I5a61e6d1b4e5e083bb24017166186dc87d035cd0
2018-12-23osmo-bts-trx/loops.c: Use lchan name based loggingHarald Welte1-0/+2
The loops.c code dates back to ancient times when we printed the TRX number and the raw channel number to identify a logical channel. We meanwhile have gsm_lchan_name() and should use it to log messages related to this lchan in a common format. This commit introduces the LOGPLCHAN() helper macro [similar to osmo-bsc], and uses it from loops.c. As a result, some functions don't need a chan_nr argument anymore, while some need to add a new lchan argument. Change-Id: I6976dd7444c26b1f52741bc367b0311ebbef1718 Related: OS#1622, OS#1851
2018-11-26bts_model: Allow TS connect to be processed asynchronouslyPau Espin Pedrol2-2/+2
This commit doesn't change internal logic of any model, only the API to be able to return result of connect TS asyncrhonously since some models (like osmo-bts-trx) require some time to process the result. This way PDCH ACT/DEACT (N)ACK can be sent once the result of this long process is known. For instance, nowadays in osmo-bts-trx we PDCH (DE)ACT ACK before getting the result from SETSLOT on the TRX iface. With this new API, bts_model_ts_connect doesn't return any value synchronously. Instead, it is expected to always end up calling cb_ts_connected with the return code from the TS activation process. 0 is considered a successs, while any other value is considered an error. Change-Id: Ie073a4397dd2f1a691968d12b15b8b42f1e1b0cf
2018-11-26cosmetic: fix whitespacePau Espin Pedrol1-1/+0
Change-Id: Iaa4552844db33fe69da5ed7028dbfa0100c33900
2018-11-22Drop unused functionMax1-3/+0
Change-Id: Ib1ecc6dcb243da27976ca0e90a83aefa18a65b76
2018-11-18bts: Allocate TRX for BTS dynamically, deprecate -tPau Espin Pedrol2-0/+2
No need to pass -t num_trx anymore to specify number of TRX to use. It is calculated based on dynamic allocation from VTY config. Using parameter -t is flagged as deprecated and is transformed into a NOOP por backward compatibility. As a result, TRX now are allocated after the BTS is allocated and initial config (pre-VTY) is applied. A new function bts_trx_init() is added, to set default config on each TRX during allocation and before setting VTY config on it. A new per BTS model function bts_model_trx_init() is added, to allow per model specific default configuration of each TRX. Change-Id: Iab1a754ab12a626759f9f90aa66f87bdce65ac9c
2018-10-27Add OC-2G BTS sourcesOmar Ramadan2-1/+28
Change-Id: I327384fe5ac944dc3996a3f00932d6f1a10d5a35
2018-10-25common/scheduler.c: track TDMA frame loss per logical channelsVadim Yanitskiy1-1/+3
This change modifies the logic of TDMA frame loss tracking. To be more precise, the tracking logic was moved from per timeslot level to per logical channel level, what makes OsmoBTS more accurate in its measurements. But before getting into details, it's important to clarify some things about the Uplink burst processing in transceiver (OsmoTRX). If an Uplink burst is detected, OsmoTRX demodulates it and sends to OsmoBTS. If nothing is detected on a particular timeslot, OsmoTRX will do nothing. In other words, it will not notify OsmoBTS about this. Meanwhile, there are usually a few logical channels mapped to a single TDMA timeslot. Let's use SDCCH8 channel configuration as an example (simplified layout): /* SDCCH/8 (ss=0), subscriber A (active) */ { TRXC_SDCCH8_0, bid=0 }, { TRXC_SDCCH8_0, bid=1 }, { TRXC_SDCCH8_0, bid=2 }, { TRXC_SDCCH8_0, bid=3 }, // <-- last_fn=X /* SDCCH/8 (ss=1), subscriber B (inactive) */ { TRXC_SDCCH8_1, bid=0 }, { TRXC_SDCCH8_1, bid=1 }, { TRXC_SDCCH8_1, bid=2 }, { TRXC_SDCCH8_1, bid=3 }, /* SDCCH/8 (ss=2), subscriber C (active) */ { TRXC_SDCCH8_2, bid=0 }, // <-- current_fn=X+5 { TRXC_SDCCH8_2, bid=1 }, { TRXC_SDCCH8_2, bid=2 }, { TRXC_SDCCH8_2, bid=3 }, SDCCH8 has 8 sub-slots, so up to 8 subscribers can use a single timeslot. Let's imagine there are three subscribers: A, B, and C. Both A and C are active subscribers, i.e. they are continuously transmitting UL bursts, while B is not using ss=1 anymore. The original way of TDMA frame loss tracking was the following: - when an UL burst is received, store it's frame number in the timeslot state structure (last_fn); - when the next UL burst is received on same timeslot, compute how many frames elapsed since the last_fn; - if elapsed = (current_fn - last_fn) is lower than 10, then iterate from (last_fn + 1) until the current_fn and send dummy zero-filled bursts to the higher layers; - otherwise (elapsed > 10), process the current burst, and do nothing :/ According to our example, subscriber A is sending 4 bursts, then nobody is sending anything, and then subscriber C is sending 4 bursts. So, there is a 4 frames long gap between the both transmissions, which is being substituted by dummy bursts. But, as the logical channel on ss=1 is not active, they are dropped. This is not that scary, but the current algorithm produces lots of false-positives, and moreover is not able to track real frame drops in longer periods (i.e. >10). So, tracking the frame loss per individual logical channels makes much more sense. Let's finally drop this hackish 'while (42) { ... }', and track the amount of lost / received TDMA frames (bursts) individually per logical channels. Let's also use the multiframe period as the loss detection period, instead of hardcoded 10. And finally, let's print more informative debug messages. Also, it makes sense to use the amount of lost / received bursts during the calculation of the measurement reports, instead of sending dummy bursts, but let's do this separately. Change-Id: I70d05b67a35ddcbdd1b6394dbd7198404a440e76 Related: OS#3428
2018-10-22Convert lchan CCCH_LCHAN to chan_nr BCCH and viceversaPau Espin Pedrol1-0/+3
Before this patch it was being coded as SDCCH4 TS0 SS 0, and as a result the state LCHAN_REL_ACT_OML applied in opstart_compl in abused SDCCH4 TS0 SS 4 was not being checked when deciding whether to send a Chan Act ACK in rsl_tx_chan_act_acknack. Fixes: OS#3513 Change-Id: I1641960c9ffbb3ed0de74ab5b53e24e5b4ff3397
2018-09-30Fix computing CCCH block number from frame numberHarald Welte1-1/+1
The existing implementation used a simplistic macro, which was wrong in many ways: 1) it returned a negative value for "fn % 51 < 5" conditions without raising any error message or asserting 2) it returned a wrong block number for many different input frame numbers, as it didn't account properly for the FCCH/SCH gaps between the blocks Let's replace the simplistic macro with a proper lookup table based on TS 05.02, and let's OSMO_ASSERT() if this is ever called with non-CCCH frame numbers. Change-Id: I11fd6cc558bb61c40c2019e46f56c1fe78ef39f5 Closes: OS#3024
2018-09-13measurement: fix unit-test test_lchan_meas_process_measurementPhilipp Maier1-1/+1
The unit test that tests lchan_meas_process_measurement() only inputs test data to lchan_meas_process_measurement() but it is not checked if the interval end could be detected or not. - Add a return code to lchan_meas_process_measurement() - Ensure that the return code is checked in the unit-test Change-Id: I9e00ce683e8c44528804f65181dbfed9e85e3aed Related: OS#2975
2018-09-13measurement: remove missed interval end detectionPhilipp Maier1-2/+0
The function is_meas_overdue() was introduced to allow lchan_meas_process_measurement() to detect when the end of a measurement interval has been missed. Interval ends may be missed when the SACCH block of the related measurement interval gets lost. This is due to the fact that the SACCH block is used as a trigger to start the measurement result computation. The idea behind is_meas_overdue() was to check the frame number of the current measurement against the frame number of the previous measurement in order to see if there was a measurement for SACCH in between or not. Unfortunately SACCH and TCH Voice data is not necessarly processed in order by each phy. Depending on the phy there may be a jitter between the timing of SACCH and TCH Voice. Depending on the phy this jitter may be enough to mess up the timing so that we see a SACCH block earlier than expected. So we can not use the current frame number of TCH Voice measurements to check for missed SACCH blocks. Change-Id: Idfdbf64c1f965f35c12559b3995e2b746c74ee9e Related: OS#3502 Related: OS#2975
2018-09-09CBCH: Implement CBCH support for osmo-bts-{trx,virtual}Harald Welte1-0/+1
This patch adds scheduler support for the channel combinations that substitute SDCCH index 2 for a CBCH in either a SDCCH/8 or SDCCH/4. Change-Id: Icc15603079a1709ec094f400a9bcf0008211890f Closes: OS#1617
2018-09-09CBCH: Move processing via L1SAPHarald Welte1-0/+1
for some historical reason, CBCH handling was not using the normal L1SAP boundary. Let's change that and traverse L1SAP just like for e.g. BCCH which is quite similar to CBCH handling. This also has the added benefit of logging CBCH via GSMTAP. Change-Id: Ibdba4c5e808330f8406f441a97fe0e81170fce97 Closes: OS#3534
2018-08-31paging: add unit-test to check different bs_ag_blks_res settingsPhilipp Maier1-0/+3
The parameter bs_ag_blks_res, which is loaded into the BTS via the SI3 setting, defines how many of the CCCH blocks shall be used for AGCH. The remaining CCCH blocks will then be available as PCH for paging. Unfortunately there is no unit-test yet that verifies that all of the 8 different settings for bs_ag_blks_res. - Separate the the decision logic that checks if a given fn is part of an AGCH into a function to have it available in the unit-test. - Add a test that checks all possible bs_ag_blks_res settings. Change-Id: Ib9652f4013a4da3766852f8f03ce9ec5590f6989 Related: OS#1575
2018-08-29measurement: add unit tests for ts45008_83_is_sub()Philipp Maier1-0/+2
The function ts45008_83_is_sub() is an integral part of the measurement calculation as it automatically tags incoming measurements as SUB measurements. This is important in the context of DTX. Unfortunately there is no unit test for this function yet. - Add unit test for ts45008_83_is_sub() Change-Id: Ia26774859f4bf31baee075896905079368bddd42 Related: OS#3502
2018-08-29measurement: add unit tests for is_meas_complete()Philipp Maier1-0/+2
We do not test is_meas_complete() individually yet, but it is an integral part of the measurement processings since this function decides where a measurement interval ends. - Add unit tests that test TCH/F, TCH/H, SDCCH/4 and STDCH/8 Change-Id: I8f89d9e7092cd65ba4d5c5649140692dcc20bdd6 Related: OS#2987
2018-08-20measurement: make sure measurement interval end is detectedPhilipp Maier2-0/+4
the measurement interval end is detected by using the measurement indication that is related to the SACCH block as a trigger to start the computation. If the measurement indication for the SACCH gets lost because the block could not be received then the processing is not executed. This may cause wrong results or when it happens condecutively an overflow of the measurement sample buffer. - Store the frame number of the last received measurement indication - Use the stored frame number to check if an interval was crossed when the next measurement indication is received. If we detect that we missed the interval, catch up by running the computation and start the next interval. Change-Id: I3a86cd8185cc6b94258373fe929f0c2f1cf27cfa Related: OS#2975
2018-08-20measurement: make sure state is reset on chan act.Philipp Maier1-0/+2
At the moment only lchan_meas_reset is reset on channel activation. All other states are not reset. This may lead to irretations in the first measurement interval if there are still leftover messages from a previous connection. Lets ensure everything is reset to zero by zeroing out the whole .meas struct in struct lchan. - Add a centralized function that does the reset - Call that function from rsl_tx_chan_act_ack() in rsl.c Change-Id: I880ae3030df6dcd60c32b7144c3430528429bdea Related: OS#2975 Related: OS#2987
2018-08-17cosmetic: unify measurement sample handling in one functionPhilipp Maier1-0/+2
In l1sap.c we call lchan_new_ul_meas() and lchan_meas_check_compute() directly in sequence. Lets unify thos two steps inside measurement.c so that we only need to call one function from l1sap.c. Change-Id: If48bc7442dfaab8c36b93949f741de6e836e792a Related: OS#2975
2018-08-01Clarify frame loss counter for l1sched_chan_stateVadim Yanitskiy1-1/+1
Each logical channel (e.g. SACCH, SDCCH, etc.) has a counter of lost L2 frames. Let's use a bit better name for it, and correct its description in the 'l1sched_chan_state' struct definition. Change-Id: I92ef95f6b3f647170cfd434a970701406b0a7c82
2018-07-25preserve lchan-specific SI overrides on SACCH FILLStefan Sperling1-0/+2
During SACCH FILL processing, update lchan SI values only for lchans which follow BTS-global default values, keeping lchan-specific overrides in place. Change-Id: I515bbd9983fa894507386b241863a9aa4d279497 Fixes: eee7247ebe0d0a54a54b53b739bdd434dfceb511 Related: OS#3173
2018-06-29Add min/max/std-dev measurement reporting for TOA256Harald Welte1-0/+15
This patch adds extended processing of the high-resolution TOA256 measurement values. It adds reporting of the following values for each RSL MEAS REP for uplink measurements: * minimum TOA256 value during reporting period * maximum TOA256 value during reporting period * standard deviation of TOA256 value during reporting period Change-Id: Iea4a4781481f77c6163d82dcd71a844a5be87bf2
2018-06-28octphy: add support for 16x oversampling modePhilipp Maier1-0/+1
The latest octphy firmware release (octsdr-2g-02.11.00-B1927-alpha), introduces a 16X oversampling option which is not yet supported in osmo-bts. - Add oversampling flag in phy_link.h - Add VTY commands to enable/disable oversampling - Add phy messages to enable/disable oversampling - Add conditional compilation to preserve support for legacy header files and firmware Change-Id: Ib78f92bfe03ff20aa0a257763c90844fb7b87cf0 Related: SYS#4257 Patch-by: Octasic inc.
2018-06-09Send DELETE_IND when dropping Imm Assign pending messagePau Espin Pedrol1-0/+1
This way we give the opportunity to the BSC to release the channel quicker, otherwise it has to wait until T3101 expires. Same procedure is already done in rsl.c rsl_rx_imm_ass() when we return an error (hard limit AGCH queue len reached) from bts_agch_enqueue(). Related: OS#2990 Change-Id: Id9927c0789054ce3ecc7b30380585a1ffe05db5a
2018-05-25rtp: make port range configurable, assign correct port numbersPhilipp Maier1-0/+5
The current implementation does not allow the user to specify a port range in which the BTS is allowed to allocate a local RTP port. Also the ports the BTS picks do not match the policy described in RFC3550. An RTP Port must be at an even port number and the matching RTCP port must be at the following (odd) port number. The BTS currently picks random port numbers for both. - Add a VTY command to specify a port range in which the BTS may assign local ports. - Pick ports as described in RFC3550. Change-Id: Id75f1dfaf898ed8750d28b1c4840e188f4cfdc87 Related: OS#2825 OS#2635
2018-05-15let osmo-bts log a special notice if OML connection is closed earlyStefan Sperling1-0/+5
A frequent configuration file error is that the unit_id settings of osmo-bts and osmo-bsc don't match. The BSC already prints an error in this case. Let the BTS print an error as well. We use a heuristic for this purpose: If the OML link is dropped within 10 seconds after being established, log a special warning which alerts the user and recommend a manual configuration file check. Change-Id: I476ac797458b5a46edea3ae9cfbd491fd7f77f47 Related: OS#3143
2018-04-23gsm_data_shared.h: Remove unused enum gsm_paging_eventPau Espin Pedrol1-7/+0
Change-Id: I37c026f0e4d5ed6cbedaa237b259742f44c238b9
2018-04-17osmo-bts-trx: perform error concealment for FR framesPhilipp Maier1-0/+6
When a bad voice frame is received, it is replaced by a silence frame. This may cause unpleasant audio effects. This change implements a functionality to craft a replacement frame from the last known good frame using ECU implementation from libosmocodec. At the moment, only FR is supported. Depends: libosmocore I06a21f60db01bfe1c2b838f93866fad1d53fdcd1 Change-Id: Iae9e69a9578ae305bca42f834694af96a29084e6
2018-04-04use osmo_init_logging2() with proper talloc ctxNeels Hofmeyr1-2/+0
Completely drop bts_log_init(), call osmo_init_logging2() directly instead: all callers of bts_log_init() passed NULL as category string, so all it ever did was call osmo_init_logging(). The bts_log_info is already declared in the .h. Here and there also define a proper talloc root context instead of using NULL. Change-Id: Ic049f77bef74123b95350bcae182a468e0086b9c
2018-03-17Add 'osmo-bts-omldummy' to bring up only OML without RSLHarald Welte1-0/+1
This is used only in integration testing, where in the TTCN-3 testsuite we currently have no A-bis OML implementation, but only a RSL one. Change-Id: Id8e5f34091e6e32621d8c8673de7ea848dfd252f
2018-03-17virtual: Correctly set+report BTS variant in OML attributesHarald Welte1-0/+1
Change-Id: I76dc47427ec26834859fb737bd319dc379ae8697
2018-03-17Get rid of 'struct gsm_bts_role_bts'Harald Welte3-103/+94
gsm_bts_role_bts was introduced at a time when we still shared gsm_data_shared.[ch] between BSC and BTS, and where we then subsequently needed a BTS-private structure. Since that sharing was abandoned quite some time ago, we can merge gsm_bts_role_bts into gsm_bts and do away with the bts/btsb dualism in a lot of the code. Change-Id: I4fdd601ea873d9697f89a748cc77bcf7c978fa3e
2018-03-17cosmetic: Move agch_queue to sub-structure of gsm_bts_role_btsHarald Welte1-14/+16
Rathert han have 11 direct members of gsm_bts_role_bts, group them into a sub-struct as ew do for other parts like interference, laod, ... Change-Id: Iefecf4b70c1b11c650913f2ae3783718ffb8a36c
2018-03-17gsm_data_shared: Remove unused definitions/members/functionsHarald Welte1-197/+0
What we remove here is a legacy from sharing this header file with openbsc/osmo-bsc-sccplite, which we stopped to do quite some time ago and hence can remove those parts that are only relevant to the BSC but not to the BTS. Change-Id: Icac1656da68f6a006a28c779e3b563bbdd905b3d
2018-03-11implement support for 3-digit MNC with leading zerosNeels Hofmeyr2-3/+6
Record the mnc_3_digits flag from SI and pass on via the PCU interface. Instead of changing to e.g. osmo_plmn_id, add the flag separately, and instead of bool use a uint8_t, to not raise any struct packing issues and clarify the flag's size beyond any doubt. Bump the PCU interface version to 9. This is one part of the three identical pcuif_proto.h patches: - I49cd762c3c9d7ee6a82451bdf3ffa2a060767947 (osmo-bts) - I787fed84a7b613158a5618dd5cffafe4e4927234 (osmo-pcu) - I78f30aef7aa224b2e9db54c3a844d8f520b3aee0 (osmo-bsc) Depends: Id2240f7f518494c9df6c8bda52c0d5092f90f221 (libosmocore) Change-Id: I49cd762c3c9d7ee6a82451bdf3ffa2a060767947
2018-03-02pcuif_proto: add version 8 featuresAlexander Couzens1-1/+19
Add PCU_IF_MSG_DATA_CNF_DT and PCU_IF_SAPI_AGCH_DT to bring the pccif_proto into sync. Both commands are required to support the rb11 with an osmo-bsc co-located pcu. Change-Id: I6d330aca26249ee94ece5e415079f0b75c6e8b48
2018-03-02pcu_if: move definition PCU_SOCK_DEFAULT into pcuif_proto.hAlexander Couzens2-2/+2
PCU_SOCK_DEFAULT is defined in the pcu counterpart of the file pcuif_proto.h To be consistent with the pcu move the definition pcuif_proto.h The pcuif_proto.h will be exact the same in the pcu repo and bts repo. Change-Id: I67f8ec036e219994cc296d0ed5409da7f3ec681e