AgeCommit message (Collapse)AuthorFilesLines
2020-04-28mobile/voice.c: send EFR frames back instead of FRosmith/virt-voiceOliver Smith2-6/+7
Related: SYS#4924 Change-Id: I73d1f88b0865ad97b85418ff76739febf2e128a7
2020-03-09HACK: mobile: loopback voice frameslaforge/virt-voiceNeels Hofmeyr1-7/+11
2020-03-09virtphy: Fix GSMTAP ARFCN use with multi-TRX BTSHarald Welte5-14/+35
In case we get assignments to secondary TRXs, the ARFCN of that TRX must be used, and not the serving cell BCCH ARFCN. Change-Id: Ief6cf5816969d819ff9506be70bec9b8d0d9d9be
2020-03-09virt_phy: implement GSMTAP_CHANNEL_VOICEHarald Welte3-14/+63
GSMTAP_CHANNEL_VOICE is the mechanism by which GSMTAP can [finally!] be used to transport circuit-switched voice codec payload, and not just signalling. Original patch by Neels Hofmeyr, heavily extended by Harald Welte. Change-Id: Id72cf23b7c6587efae4cdaa7b50ab4d85b8c8d22
2020-03-08trxcon/scheduler: fix n_errors for BFI triggered by FACCHVadim Yanitskiy2-2/+6
These BFI (Bad Frame Indications) substitute speech frames stolen by FACCH/F or FACCH/H frames, so there can be no bit errors in something that was not even transmitted over the air interface. Change-Id: Icdb6209f75ead6581e3c18aeee0da9831aaa272a
2020-03-08trxcon/scheduler: FACCH: ensure fake measurements for BFIVadim Yanitskiy2-2/+4
According to 3GPP TS 45.003, clauses 4.2.5 and 4.3.5: - one FACCH/F frame steals a single speech frame, - one FACCH/H frame steals two speech frames. A BFI (Bad Frame Indication) needs to be sent for each stolen speech frame. This does not apply to CSD (data) channels though. The BFI frames must have measurement data attached to them, and due to their virtual nature (they do not actually come from the air interface), the measurements must be crafted by trxcon. Assigning a negative value to n_errors makes the code below the 'bfi' label craft fake measurement data. Otherwise, the actual measurements belonging to the FACCH frame will be used. Change-Id: Ia2f7c3cf7b1ef3737da6b1818cae2f001ee8768f
2020-03-08trxcon/scheduler: refactor Downlink measurement processingVadim Yanitskiy10-74/+140
So far we used to store the sums of ToA and RSSI measurements in the logical channel state, and after decoding of a block, we did calculate the average. This approach works fine for xCCH and PDTCH, but when it comes to block-diagonal interleaving (which is used on TCH/F and TCH/H channels), the results are incorrect. The problem is that a burst on TCH may carry 57 bits of one encoded frame and 57 bits of another. Instead of calculating the sum of measurements on the fly, let's push them into a circular buffer (the measurement history), and keep them there even after decoding of a block. This would allow us to calculate the average of N last measurements depending on the interleaving type. A single circular buffer can hold up to 8 unique measurements, so the recent measurements would basically override the oldest ones. Change-Id: I211ee3314f0a284112a4deddc0e93028f4a27cef
2020-03-08trxcon/scheduler: TCH/H & FACCH/H: fix notes on interleavingVadim Yanitskiy1-1/+4
Change-Id: I16cdd2261b3d0d99286c30584847f93d72d02ac0
2020-03-08trxcon/scheduler: make TDMA_FN_INC(fn) behave like ++fnVadim Yanitskiy3-5/+5
Change-Id: I9c2fa26df54b5de836a18f09363a9221c24ae707
2020-03-07cbch_sniff: Use CCCH_MODE_COMBINED_CBCH, not CCCH_MODE_COMBINEDHarald Welte1-1/+1
In Change-Id Ia94ebf22a2ec439dfe1f31d703b832ae57b48ef2 we introduced a new member to the ccch_mode enum: CCCH_MODE_COMBINED_CBCH, which is to be used to tell the PHY if a CBCH is present on the combined CCCH+SDCCH/4+CBCH or not (CCCH+SDCCH4). This was implemented in trxcon + calypso firmware, but cbch_sniff has not been updated accordingly. Related: OS#4439 Change-Id: I429d45cfb181da4a2e767e92f1213ccd08c6d440
2020-03-07virtphy: Don't pass CBCH to L1CTL if not requested by applicationHarald Welte1-1/+5
Doing so can create a number of warning messages in e.g. 'mobile' like <0015> lapd_core.c:1239 Unnumbered frame not allowed. (dl=0x55c632f9f220) <0015> lapd_core.c:392 sending MDL-ERROR-IND cause 12 from state LAPD_STATE_IDLE (dl=0x55c632f9f220) <0015> lapdm.c:481 sending MDL-ERROR-IND 12 <0001> gsm48_rr.c:4977 MDL-Error (cause 12) ignoring Change-Id: I2cf65be5b2f879fe940e08c9f369bc1cada7b0dd Closes: OS#4439
2020-03-07virt_l1_sched_execute: talloc_free() TDMA item after unlinking itHarald Welte1-0/+1
We so far relied on it being free'd once the TDMA item is free'd, but let's make it more explicit. After we've unlinked it from the list, nobody is going to reference it ever again. Change-Id: I57a596428be10ce720e0b528ecfc44a70e3e3078
2020-03-07cosmetic: Use INIT_LLIST_HEAD() and llist_add_tail()Harald Welte1-6/+2
... instead of manually re-inventing them. Change-Id: I7e0810aa7fd1daa8f9f3e46a207589a4c6da836b
2020-03-05mobile: fix gsm_recv_voice: pull l1ctl header from TCH payloadNeels Hofmeyr1-0/+2
That function encapsulates the RTP payload in an MNCC header, but the l1ctl dl header has to be removed first to get only the RTP payload in the MNCC structure. Change-Id: Id6ddc9b1da43e88c5b9468d4397a39953bdf533a
2020-03-05remove unused func declNeels Hofmeyr1-1/+0
Change-Id: I94c8fff1557c0ce50cc3072573ef7cda8622fb84
2020-03-01mobile/gsm322: fix use-after-free of cs->si reported by ASanVadim Yanitskiy1-0/+7
This pointer cs->si stores an address to the System Information of a currently selected cell. When we release System Information, ensure that it does not point to free()d memory. Change-Id: Ife2ddf7274a48447a9ded9035f9dd01befaf2e6c
2020-03-01layer23/l1ctl: fix NULL-pointer dereference reported by ASanVadim Yanitskiy1-1/+8
Some applications (e.g. ccch_scan) may not initialize ms->, some (e.g. mobile) may need some time to initialize it. Let's assume that 'bs_ag_blks_res' is 1 if System Information is not available. Change-Id: Ie695d9700c01ee1e6778950a2f3c8610b69d2143
2020-03-01trxcon/scheduler: print completeness of the Rx burst buffersVadim Yanitskiy6-9/+33
Change-Id: Ife9f5eabc23aa2eea08b190361e10a98e890d608 Related: OS#3554
2020-02-27virt_phy/build: add configure option to build with ASan/USBanVadim Yanitskiy1-0/+11
Change-Id: I23fc4e38632c02269b3895115ba4e3171cc212d1
2020-02-26layer23: Terminate process if L2 socket fails/dissappearsHarald Welte1-0/+1
We don't recover from this situation at all, so it's best to terminate the process. Change-Id: I487d18e4afe2cae9f777a30864e680b5dc821fc1
2020-01-13layer23: Fix build against gpsd >= 3.20Pau Espin Pedrol1-0/+8
During 3.19->3.20 dev cycle, some fields were transformed from timestamp_t or double to timespec_t. See for instance gpsd.git f7c230fceb6d64483757f8c32afb98e6a2cb9413. Change-Id: Ie8ba19d030b6f46f2d8afc270a732ce8c26c438f
2019-12-31layer23: Avoid sending downlink AGCH/PCH fill frames over GSMTAPPau Espin Pedrol1-4/+36
Some bits are taken from osmo-bts l1sap.c. Change-Id: Id21e9334b620b8ab3ad404708bfd5358e3555ab6
2019-12-31layer23: Identify AGCH from PCH on tx of GSMTAP downlink messagesPau Espin Pedrol1-1/+46
Some bits are taken from osmo-bts l1sap.c Change-Id: I0adab003a4060c9cef730e0432859659c51bd087
2019-12-31mobile: Send correct ARFCN in UL gsmtapPau Espin Pedrol1-2/+3
Change-Id: I9f677866095413a0efeb8a336ce15a2dbca2228c
2019-12-31trx_toolkit/ rewrite unit tests to use unittest frameworkVadim Yanitskiy2-145/+165
Change-Id: I8b934c15ba96d856aa79d10bf296d1446f043dd1
2019-12-31trx_toolkit/ rewrite unit tests to use unittest frameworkVadim Yanitskiy2-212/+193
Change-Id: Ia0cc7447b193a705e994078d16f3902339219916
2019-12-31contrib/ also run unit tests for TRX ToolkitVadim Yanitskiy1-0/+4
Python's unittest module will automatically discover all unit tests in a given directory (files starting with 'test*.py'). The existing tests will be rewritten in subsequent changes. Change-Id: Ia3990dc8e1ff98b83d3ee25fafa5b029f46646cd
2019-12-31contrib/ also verify building the firmwareVadim Yanitskiy1-0/+4
Change-Id: I4c224ef7855a2ac35476cbdd96c29565151a2830
2019-12-20layer23: Fix trailing whitespacePau Espin Pedrol1-2/+2
Change-Id: I295f285e5fc3cdc372723f6b4de2415a94d4979a
2019-12-04trxcon: Use current MS Power on dummy meas reportsPau Espin Pedrol3-9/+13
backpointers are added in order to access the TRX, as advised in the existing comment. Change-Id: I975cfc5f5d63eb32a7f8932a7f6a544c9a12233c
2019-12-01trxcon/sched_trx.c: fix potential NULL-pointer dereferenceVadim Yanitskiy1-0/+2
Change-Id: If1ecd9f5a70fa448327c62d38d76c8443b939248
2019-12-01Check for osmo_fsm_register() error return valueHarald Welte1-1/+1
Change-Id: I3e849b7ec8a7ed610f779dac57cc0c1d1aeb1aa5
2019-11-24trx_toolkit/ drop unneeded debug print()Vadim Yanitskiy1-1/+0
Change-Id: I372af77d5b0b24fa38e304b782ca5b3d0888211b
2019-11-24trx_toolkit/ turn CLCKGen's thread into a daemonVadim Yanitskiy1-0/+4
If the main thread crashes, the CLCKGen's thread would never stop. It would also happen if the main thread terminates without calling CLCKGen.stop(). Let's prevent this by creating a daemon thread. Change-Id: I9d41c5baa25fa0a263758414a164c1bded25e04e
2019-11-24trx_toolkit/ refactor CLCKGen to use a single threadVadim Yanitskiy2-22/+41
The previous approach was based on threading.Timer, so on each clock iteration one thread spawned another new thread. So far it worked well, but such frequent spawning involves an additional overhead. After this change, CLCKGen.start() allocates and starts a new thread, that periodically sends clock indications and sleep()s during the indication intervals. The CLCKGen.stop() in its turn terminates that thread and frees the memory. Change-Id: Ibe477eb0a1ee2193c1ff16452a407be7e858b2ef
2019-11-20trx_toolkit/ send NOPE.ind in case of path loss simulationVadim Yanitskiy1-7/+25
Since TRXD header version 1, we should send NOPE indications to the L1 side in absence of TRX2L1 bursts, and IDLE indications during IDLE TDMA frames (basically noise measurements). This change is the first step towards the goal: if a given burst is to be dropped due to the path loss simulation (see FAKE_DROP), mark the carrier TRX2L1 message as NOPE.ind and send anyway. Change-Id: Iabd0af665e3108d23a908638f943a5b689986e2c Related: OS#3428, OS#2975
2019-11-20trx_toolkit/ fix: NOPE.ind also contains C/I filedVadim Yanitskiy1-9/+6
Change-Id: I281fb7387a83fec7e097ebf8650c95713d3f70e9
2019-11-20trx_toolkit/ refactor L12TRX -> TRX2L1 burst transformationVadim Yanitskiy2-12/+5
The burst transformation in BurstForwarder.forward_msg() used to be done only once, so then the resulting message was distributed over the list of connected (and active) transceivers. This approach limits the path loss simulation capabilities, because a reference to the same message is passed to FakeTRX.send_data_msg(). If one transceiver changes (or removes) the burst bits, the other transceivers would not receive the original message. Let's do the transformation individually for each transceiver, so the original message will always remain unchanged. Change-Id: Ia016a3a9bb6e9f17182a7168aa5a501ae9b9978b
2019-11-17mobile/gsm48_mm.h: use fixed-size integer types in packed structuresVadim Yanitskiy1-3/+2
Change-Id: I54ed93c03ebe776bdc7eb761a8194da3ab0b67fb
2019-11-17mobile/gsm48_mm.h: mark some structures as 'packed'Vadim Yanitskiy1-3/+3
In several code paths we put / push structures from 'gsm48_mm.h' into the message buffers, so then they're unpacked by the message receivers. The AddressSanitizer complains about unaligned pointer access and potentially unexpected behaviour. Let's fix this by explicitly marking those structures as 'packed'. Change-Id: I6af7475c609b3293af708540d569fe1616fab43f
2019-11-17mobile/gsm48_rr.c: fix NULL-pointer dereference in gsm48_rr_check_mode()Vadim Yanitskiy1-1/+1
In some cases (e.g. at start up) ms->rrlayer may not be initialized. Let's access ms->settings directly since we already have a pointer to struct osmocom_ms. Change-Id: Ia9720132fcda960dcecefab9ae48398946503dc4
2019-11-17trx_toolkit: fix: do not use 'is' / 'is not' with string and numerical literalsVadim Yanitskiy2-9/+9
Since version 3.8, Python warnins us that using the "is" and "is not" operators with string and numerical literals is a bad idea. Let's avoid this and use the classical '==' and '!=' operators instead. Change-Id: Iaed86d630ac1e0b9b4f72bbf3c788e325783456d Bug description:
2019-11-05trxcon: Fix missing header for GSM_MACBLOCK_LENPau Espin Pedrol1-0/+1
Due to recent include dependency tree change in libosmocore, trxcon fails now to build since it uncovered it's missing a header inclusion for a symbol it is using: osmocom-bb/src/host/trxcon/sched_trx.h:204:20: error: ‘GSM_MACBLOCK_LEN’ undeclared here (not in a function) 204 | uint8_t mr_cache[GSM_MACBLOCK_LEN]; | ^~~~~~~~~~~~~~~~ Change-Id: Ide22e525c106342b00171a8c08bb7265d19a651b
2019-10-22Fix typo: miliseconds -> millisecondsMartin Hauke1-1/+1
Change-Id: I472c12fd1dfbff4ca1ead972535d735857f1c3e7
2019-10-17Fix common misspellings and typosMartin Hauke52-140/+140
Change-Id: I962b42871693f33b1054d43d195817e9cd84bb64
2019-10-05host/trxcon: add optional GSMTAP frame logging supportVadim Yanitskiy7-9/+150
This feature may be useful for our TTCN-3 testing infrastructure. By default it's disabled, and can be enabled using command line arguments of the main binary: ./trxcon -g ... Change-Id: Iab4128fee5f18d816830fdca6c5ebebaf7451902
2019-09-30trxcon/scheduler: fix handling of PTCCH logical channelVadim Yanitskiy2-3/+12
According to 3GPP TS 45.010, section 5.6.2, for packet-switched channels the BTS shall monitor the delay of the Access Bursts sent by the MS on PTCCH and respond with timing advance values for all MS performing the procedure on that PDCH. According to 3GPP TS 45.002, section, PTCCH (Packet Timing advance control channel) is a packet dedicated channel, that is used for continuous Timing Advance control (mentioned above). There are two sub-types of that logical channel: - PTCCH/U (Uplink): used to transmit random Access Bursts to allow estimation of the Timing Advance for one MS in packet transfer mode. - PTCCH/D (Downlink): used by the network to transmit Timing Advance updates for several MS. As per 3GPP TS 45.003, section 5.2, the coding scheme used for PTCCH/U is the same as for PRACH as specified in subclause 5.3, while the coding scheme used for PTCCH/D is the same as for CS-1 as specified in subclause 5.1.1. The way we used to handle both PTCCH/U and PTCCH/D is absolutely wrong - it has nothing to do with xCCH coding. Instead, we need to use rx_pdtch_fn() for Downlink and tx_rach_fn() for Uplink. Also, since we only have a shared RSL channel number for PDCH (Osmocom-specific RSL_CHAN_OSMO_PDCH), there should be a way to distinguish both PDTCH and PTCCH logical channels. Let's introduce TRX_CH_LID_PTCCH for that. Change-Id: I2d1e9b8a66f027047f8d7bdc3f82ff9d8ebcc25e
2019-09-30trxcon/scheduler: fix comment in description of PDTCHVadim Yanitskiy1-1/+1
Change-Id: Ifd4197b64e89ae6da93ef32189f437a6e297b03f
2019-08-29trx_toolkit/ enrich some ValueError messagesVadim Yanitskiy1-2/+2
Change-Id: Icdf0d136a9b820cfaec534e2604204da9ea42092
2019-08-29trx_toolkit/ also print burst length in desc_hdr()Vadim Yanitskiy1-0/+3
Change-Id: Ia0036cbf70a3736a7f9779e030e05221cba8add9