aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2018-03-11implement support for 3-digit MNC with leading zerosNeels Hofmeyr3-13/+11
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-10sysmobts: Compatibility with older firmware versionsHarald Welte1-1/+12
When using a firmware version < 3.6, the call to l1if_mute_rf() returned an error, which caused an OML CHG ADM STATE NACK. Let's check if the l1if_mute_rf() call is an un-mute for all timeslots (which apparently we do always at start-up). If it is, then acknowledge it even if muting is not supported by earlier firmwares. I suppose the change causing this problem was introduced in: commit b26b8fc77692e851469f3e27b9aeaeff233ffd2e Author: Holger Hans Peter Freyther <zecke@selfish.org> Date: Tue Mar 4 15:03:59 2014 +0100 sysmobts: Do a RF mute at initialization when the RC is locked With the current change applied, we can run the BTS with earlier firmware versions than 3.6.0 again. Tested with 3.1 and 2.4 Change-Id: I1a29c1031d96e65a0111bc812a90f2dbaf2a5aa3
2018-03-09sysinfo.c: SI1 is optional; Send SI2 at TC=0 if no SI1 existsHarald Welte1-1/+3
SI1 is only required if frequency hopping is used or if NCH is used. So it's optional. If OsmoBTS has no SI1 configured, it will transmit the empty SI1 buffer at TC=0, and as a result no valid SI will be broadcast at TC=0. Change-Id: I41ab885c00e943199b2e939e98f30e267ecffbee Closes: OS#3051
2018-03-08fix handover: handle_ph_ra_ind(): evaluate ra_ind before msgb_trim()Neels Hofmeyr3-97/+118
Commit c2b4c668f3510b7b0baace749c5a310959010e90 I3b989580cb38082e3fd8fc50a11fedda13991092 introduces evaluation of ra_ind members below the msgb_trim() call that actually invalidates ra_ind. A symptom is that it breaks detection of Handover RACH, wich always ends up with lchan == NULL and interpreting all RACH as chan_nr == 0x88. Fix: do all evaluation of ra_ind before the msgb_trim(), for osmo-bts-sysmo, litecell-15 and octphy. To guard against similar mistakes in the future, set ra_ind = NULL before the msgb_trim() call. Related: OS#3045 Change-Id: I203021ee57f49cb963679ba8bec5943e2abb67fb
2018-03-06common/vty.c: remove unused variablesVadim Yanitskiy1-2/+0
Change-Id: I289dda64228e81ca4c608121e50146a71e19f1e2
2018-03-05l1_tch: remove dead codePhilipp Maier1-64/+0
the file l1_tch.c in the octphy spcific code has its root in the tch.c file of sysmobts. It contains some sysmobts specific ifdefs which enclose dead code. - Remove the sysmobts specif ifdefs and the dead code Change-Id: I33f3e0fd293ca8387fddf5ed20f642621e9680de
2018-03-05common/l1sap.c: limit the minimal ToA for RACH burstsVadim Yanitskiy1-4/+12
In general, RACH bursts should not arrive with negative offset. Let's limit early signal arrival up to 2 symbols, otherwise it is most likely noise, interference or a ghost. TTCN-3 test case: Icccc88545ed3aabd6da28a40599a8a77d1de477d Change-Id: I662294fe3136cf7a259be13816a3e63f7db9a948
2018-03-05common/l1sap.c: perform noise / ghost filtering for handover RACHVadim Yanitskiy1-14/+17
For some reason, the noise / ghost filtering was performed for normal RACH requests, but not for handover RACH requests. There are also ghost RACH, interference and noise possible, so let's extend the filtering coverage. Change-Id: I94fc15835280d624780200dadc4418210bf565ff
2018-03-05common/l1sap.c: clean up noise / ghost RACH filteringVadim Yanitskiy1-21/+26
It makes sense to combine both existing BER (Bit Error Rate) and ToA (Timing of Arrival) checks into a separate funcition, so this code may be also used for handover RACH. Change-Id: I1ddda238d5212a88a3dd5c4fc5dfcfea018151bd
2018-03-05common/l1sap.c: increment valid RACH counter after all checksVadim Yanitskiy1-5/+5
Previously, the number of RACH slots with valid non-handover RACH burst was incremented between both BER (Bit Error Rate) and ToA (Timing of Arrival) checks. So, if a RACH burst passed the BER check, but was dropped by ToA check, the counter of valid RACH requests could be increased anyway. Change-Id: I31594a8c5dce1f42226ced5b2dc8778152b3d829
2018-03-05common/l1sap.c: increase the BTS_CTR_RACH_DROP in RACH BER checkVadim Yanitskiy1-0/+1
The BTS_CTR_RACH_DROP counter is being increased in case if a RACH request is ignored due to exceeding ToA value, but remains untouched in case of exceeding BER (Bit Error Rate). Let's fix this. Change-Id: Ia02e781d6c47d9d8012a4c8846fe4b731aab74d7
2018-03-05scheduler_trx.c: remove ToA (Time of Arrival) hackVadim Yanitskiy1-9/+0
This was useful for software simulation of burst delay, expressed by ToA (Time of Arrival). Since we have FakeTRX toolkit, ToA value may be simulated in a more flexible way, so let's remove this code. Change-Id: Ied0fcfcf58b93efdc6de9666fbbf8fea104e2543
2018-03-03rsl: remove unused variablePhilipp Maier1-1/+0
The variable btsb in rsl_rx_mode_modif() is set but not used. - remove btsb Change-Id: Ic07edfa04c2184bff4a043e96e69c07df38607e4
2018-03-03ipac: fix log outputPhilipp Maier1-12/+10
The current log output logs connect_ip connect_port speech mode and payload type over multiple lines and without logging context (lchan name). Also the logging level incorrectly set. - shrink log output into one line. - add context (lchan name) - encode ip/port into human readable form Change-Id: I61044edc0672b268aeebf48b59a772887703399f Closes: OS#3001
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 Couzens4-4/+4
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
2018-03-02common/pcu_sock.c: fix double field assignmentVadim Yanitskiy1-1/+0
The 'data_ind->rssi' variable is assigned values twice. Change-Id: I81eb1ac3dc2aa3597b1c85301b92995412edbc7b
2018-03-01octphy: replace #warning with #pragma messagePhilipp Maier2-2/+2
warning causes the compiler to throw an actual warning. Lets change those intentional warnings to messages. Change-Id: I2fc83a1a07db9c569b93f29835bf3a0fd8ef4ef5
2018-02-28pcu_sock: LOG + drop PCU DATA.req for inactive lchanHarald Welte1-0/+6
Change-Id: I11c622967885d594ef7e1c24b9bafd0fb8fd400c
2018-02-28pcu_sock: LOG + drop DATA.req from PCU for non-PDCH timeslotHarald Welte1-0/+6
Change-Id: I3ae496eca96bc0823dfeca16ce36c200ce000895
2018-02-28pcu_sock: Log an error message and discard PCU primitives for BTS != 0Harald Welte1-0/+4
In OsmoBTS, we (so far?) only have a single BTS inside each process, let's make sure we log an error message if the PCU should ever want to transmit primitives to a non-zero BTS number. Change-Id: I158f935fed12941737c806c0677a8192ea3418a0
2018-02-28pcu_sock: Don't overflow the timeslot arrayHarald Welte1-0/+6
Don't blindly trust that the ts_nr received on the PCU socket will be small enough to not overflow our timeslot array! Change-Id: Ie9964c8dc0ca7b049da7dfec0ac0a0d3f1aedd45
2018-02-28pcu_sock: Discard messages that are too shortHarald Welte1-0/+6
The downstream code of pcu_sock.c doesn't contain any length checks, so let's discard any messages that are shorter than the primitive length. Change-Id: I35ac84d4db6d21ea61afbd1864c810bbf601d69b
2018-02-28pcuif_proto: correct indention of gsm_pcu_if_dataAlexander Couzens1-5/+5
Change-Id: I39f3bc1f0a1e238f8f00cb00e2d1e5193f118c16
2018-02-27Add high-accuracy ToA value to Uplink Measurement ReportsHarald Welte3-0/+41
Normal Abis RSL MEasurement Results contain only the "MS Timing Offset IE" in units of full symbols. In some use cases it is important to have higher-accuracy timing information exposed to the BSC. We do this by adding the average timing offset value during the last measurement interval in 1/256th symbol accuracy to the "Supplementary MEasuremen Information" part of the TS 48.058 9.3.25 Uplink Measurements IE. In order to avoid any compatibility issues, this feature is only enabled if the new vty config command "supp-meas-info toa256" at the bts node is enabled. Change-Id: Ie85e53b47d4041cc4e6d7b78406ae8b79b2d9397
2018-02-27measurement: Keep average of high-accurate ToA value in lchanHarald Welte2-0/+2
At the end of a measurement processing window, we currently compute the ToA / timing offset at 1/256th symbol accuracy, but we only print it to the log. Let's store the value in the lchan to make it usable by other code in follow-up patches. Change-Id: I5f00a16ac966b627d9452a98b8fa70984bed684a
2018-02-27L1SAP: Increase resolution of reported burst timingHarald Welte8-19/+19
Before this patch we had: * osmo-bts-trx internally using 1/256th bit/symbol period * osmo-bts-sysmo internally using 1/4 bit/smbol period * PCU interface using 1/4 * L1SAP interface using 1/4 * measurement processing code on top of L1SAP using 1/256 So for sysmo/lc15/octphy we are not loosing resolution, but for osmo-bts-trx we're arbitrarily reducing the resolution via L1SAP only then to compute with higher resolution again. Let's change L1SAP to use 1/256 bits and hence not loose any resolution. This requires a corresponding change in libosmocore for l1sap.h, which is found in Change-Id Ibb58113c2819fe2d6d23ecbcfb8b3fce4055025d Change-Id: If9b0f617845ba6c4aa47969f521734388197c9a7
2018-02-27measurement.c: higher-precision TA/TOA mathHarald Welte3-8/+8
Change-Id: I0dc8e78545465dfc5c93691a49b86b6b8b56b432
2018-02-27trx/scheduler: Use integer math for TOA (Timing of Arrival)Harald Welte10-71/+74
There's no need to express TOA as a float: * We receive it as signed 16bit integer in units 1/256 symbol periods * We pass it to L1SAP as signed integer in 1/4 symbol periods So turn it into an int16_t with 1/256 symbol period accuracy throughout the code to avoid both float arithmetic as well as loosing any precision. Change-Id: Idce4178e0b1f7e940ebc22b3e2f340fcd544d4ec
2018-02-27RACH decoding: Use BER threshold for RACH ghost detectionHarald Welte4-1/+24
When decoding RACH bursts, we should use a BER threshold in order to help distinguish 'ghost' RACH bursts from real RACH bursts. The theoretical ideal threshold according to some papers is 7 out of 41 bits qhich aquals to Eb/N0 of 0 dB = 0.1707 (17.07%) We add a new 'ber10k' parameter to the RACH indication l1sap primitive (needs separate change for libosmocore), and then fill this value from osmo-bts-{sysmo,lc15,trx,octphy}. The common part above L1SAP then applies the threshold, which can be changed from vty using the "max-ber10k-rach <0-10000>" command available at the BTS node. The unit is BER in 1/10000, i.e. a value of 100 equals 1% bit error rate. Change-Id: Ic41c11f6312a36baa2738547e8dcec80829457f8
2018-02-27Move rach_busy counting above L1SAPHarald Welte5-48/+44
In the past, rach_busy counting was performed below L1SAP, while reporting was handled above. This lead to subtle differences between the BTS models, such as osmo-bts-trx missing to increment rach_busy. Let's move the rach_busy counting above L1SAP to share more code. This means we need libosmocore Change-Id I9439810c3a3ad89ea0302753617b850749af887c for the additional required parameters in ph_rach_ind_param, as well as libosmocore Change-id I2b1926a37bde860dcfeb0d613eb55a71271928c5 for osmo-bts-trx to determine the RACH bit error rate. Change-Id: I3b989580cb38082e3fd8fc50a11fedda13991092 Closes: OS#3003
2018-02-26scheduler: Add missing \n at end of LOG statementHarald Welte1-1/+1
Change-Id: I55419dfa884b4170dfed696a7e1334940a46ba82
2018-02-26measurement.c: Don't silently copy "FULL" measurements to "SUB"Harald Welte1-2/+5
The existing code contained an ugly hack that if we didn't have any "SUB" measurements we would simply use the "FULL" values. That's wrong as TS 45.008 contains quite detailed rules on how the "SUB" values are to be computed. In some cases, they are identical to "FULL", but in most they are not. Let's remove the hack and replace it with an ERROR message, as clearly something is wrong if we ever encounter a measurement period end in which no single "SUB" measurement was received. The only situation in which this can occur is if the related uplink burst/block was missing, so let's set BER to 100% and level to lowest possible. Change-Id: I358f7b97fd4ea19264a77eff7abef13da7d5fbcd
2018-02-26measurement: Compute RX{LEV,QUAL}-SUB for SDCCH and non-AMR TCHHarald Welte1-3/+99
The rules on how to compute RX{LEV,QUAL}-SUB are rather convoluted, and depend on the detailed channel type and mode. For SDCCH and TCH/H in signalling mode, it's easy: No DTX is allowed, and all measurements are used in SUB. For non-AMR (TCH/F and TCH/H in non-signalling mode), we need to count the SACCH block measurements, as well as any SID/SID_UPDATE/L3_FILL/DUMMY blocks received in the blocks of table 8.3 of TS 45.008. Only AMR (TCH/AFS + TCH/AHS) are more difficult, as there are no fixed blocks/bursts/frames that always contain uplink messages, but the L1 will have to determine if a valid SID_UPDATE was received or not. This patch implements the above rules (except AMR related) in the common part of OsmoBTS. The AMR specific bits will have to follow as a later patch, likely in a BTS specific way, i.e. separate changes to sysmo/lc15/octphy/trx code. Related: OS#2978 Change-Id: I16eb3747a1c23df935a4c50dafe46abce512a474
2018-02-26split scheduler_mframe.c from scheduler.cHarald Welte6-818/+857
There are use cases for the multiframe scheduler tables outside the context of the entire scheduler. Let's prepare for that. Related: OS#2978 Change-Id: I6a501e66c47809ae3cdc55bef2cb6390ee0096b1
2018-02-26{sysmo,lc15}: Fix RACH reporting in combined CBCH caseHarald Welte2-2/+4
Combined CCCH with CBCH is a separate PCHAN type and hence we must accept it in the list of RACH-carrying pchan types in order to correctly report the RACH chan_nr when handing RACH requests up to L1SAP. The bug this fixes likely might have rendered cells with combined CBCH impossible to use. Change-Id: I9537463e5eedd2b8b30f298e0d3b308367c5b1fb
2018-02-26{sysmo,lc15}: Correctly report BER to L1SAP in INFO_MEAS_INDHarald Welte2-2/+2
L1SAP uses 'ber10k' values, i.e. BER in 1/10000 units, where 10000 is all errors are bit-errors (= 100%). The PHY on osmo-bts-sysmo and osmo-bts-lc15 is reporting a float fBer value scaled to 1, i.e. 1.00 = 100% and hence must be 10000 as ber10k. Before this patch, BER values reported on those BTS models were too low by a factor of 100, resulting in way too optimistic RxQual values reported to the BSC. Closes: OS#3005 Change-Id: I17e2f8fe8055f613da1e554cd36ed13289f56fb3
2018-02-26octphy: Remove code duplication for BER / RSSI conversionHarald Welte1-18/+22
Let's introduce some functions to hide the details of BER and RSSI conversion from OCTPHY representation to L1SAP representation. Change-Id: I517669c87a97b2ba164a2812811c8802fe0b92e8
2018-02-26counters: split rach:sent into rach:drop, rach:ho, rach:cs and rach:psHarald Welte3-4/+14
Change-Id: I51e9938df0e05b8fdb12686b9a9bb6994546deed
2018-02-26measurement.c: Fix sdcch4_meas_rep_fn102 / sdcch8_meas_rep_fn102Harald Welte1-15/+14
Since Change-Id: I23fba50f48415314da40cf5bf86fce2ed3e66af6 we were not reporting measurements for SDCCH channel types due to the wrong encoding of the sdcch{4,8}_meas_rep_fn102 table. Let's fix the table by encoding the needed information: "What is the modulo-102 remainder of the first burst of the last block before fn%102 reaches 37?" (SDCCH/4) "What is the modulo-102 remainder of the first burst of the last block before fn%102 reaches 12?" (SDCCH/8) The TS 45.002 Clause 7 tables have to be consulted carefully to determine this information. Change-Id: Icf02354872670126ab3297b787b216981ca6c309 Related: OS#2965
2018-02-25RSL IPA DLCX: Avoid another null-pointer dereferenceHarald Welte1-6/+5
In case a DLCX _with conn-id_ is issued without any CRCX before, we ran into a NULL pointer dereference in adding the connection statistics. Let's handle this gracefully and simply return empty statistics. Change-Id: If8b71266c847b90cdc51695b9f47b527c51bd70c Closes: OS#2996
2018-02-25RSL: Fix encoding of ConnectionID in IPA_DLCX_ACKHarald Welte1-1/+1
Change-Id: Ifdea747e78f191902870af53692f7a70fa7ece93 Closes: OS#2999
2018-02-25RSL IPA DLCX: Avoid null-pointer dereferenceHarald Welte1-5/+7
In case a DLCX is issued without any CRCX before, let's handle this gracefully and simply ack the DLCX anyway. Change-Id: I7c5bedccfc5a7cf552a9ce3a2dc712081c7ce177 Closes: OS#2996
2018-02-25paging: Fix encoding of PAGING TYPE 3 Rest OctetsHarald Welte1-8/+12
The RR PAGING TYPE 3 Rest Octets IE contains (among other things) the channel type needed for Mobile Identity 3 + 4 in the paging message. We did not only "forget" to encode those channel type needed field, but we have a completely wrong definition of those rest octets in libosmocore/include/gsm/protocol/gsm04_08.h "struct gsm48_paging3" Change-Id: I3a0bca6707ce95b68459c89f5b2b07f1590a1ab3 Closes: OS#2994
2018-02-24rsl: Improve ERROR REPORTingHarald Welte1-44/+81
Let's make sure all useful optional IEs of the RSL ERROR REPort aare present Change-Id: I5ecb98f8c72f472ac23c1e4e0f606b75e2cf032c
2018-02-24paging.c: Fix encoding of optional Mobile ID RR PAGING TYPE 1 / 2Harald Welte1-2/+2
It seems we have been encoding PAGING REQUEST TYPE 1 and PAGING REQUEST TYPE 2 erroneously all the time. The optional last Mobile Identity in those messages are TLV, not just LV. This is a quite serious bug in one of the most fundamental parts of the Radio Resource layer, and it has likely stayed hidden for a long time as usually in small networks there's a low paging load, reducing the amount of pressure to put multiple identities in one PAGING REQUEST message. Change-Id: Icc320ed130d0c29e9260a6a2aabe52e7346c3888 Closes: OS#2993
2018-02-24paging: Drop + Log paging requests for non-existant paging groupsHarald Welte1-0/+9
Change-Id: Id02c8fea51c1260f1baae8566c67bafc5bdb970e Related: OS#2992
2018-02-24BTS: add rate_ctr about CCCH (paging, agch, pch)Harald Welte9-0/+54
Change-Id: Id6c833746150a3c2e32b00ea6604669f16b84bc4
2018-02-24RSL: Send ERROR REPORT on too short/truncated messages + wrong discriminatorHarald Welte1-0/+6
Change-Id: I6a0e63999f39592474064e2f05df450aec8e37fe
2018-02-24RSL: Implement DELETE INDICATION on AGCH overflowHarald Welte1-0/+17
This patch adds generation of a DELETE INDICATION when the BTS AGCH queue overflows due to too many IMMEDIATE ASSIGN CMDs, as required by the specs. The AGCH queue length in OsmoBTS so far is at 1000 entries, which I consider way too high. But that is for another patch. Change-Id: Ied3306e85cbdc6f3476b10dc4bb0463cd728b274 Related: OS#2990