Commit Graph

3619 Commits

Author SHA1 Message Date
Vadim Yanitskiy de630abfc8 layer23: send UL/DL GPRS blocks over GSMTAP
Note that despite the VTY interface offers various channel type
filtering facilities, the actual filtering is not implemented.

This patch simply brings PS domain in consistency with CS domain:
the UL and DL GPRS blocks are now being sent over GSMTAP without
any filtering, just like GSM MAC blocks.

Change-Id: I338205bee44fe182233efc5619a3d528cd07d932
Related: OS#5500, OS#6209
2023-10-13 18:09:04 +07:00
Andreas Eversberg bcc047e5e1 Provide create_conn_and_push_mm_hdr() with correct SAPI
Change-Id: I454178f45aed49417f8cd7744155be66b9ac509f
Fixes: 00507bdc "Cleaning gsm48_mm_data_ind()"
Related: OS#6216
2023-10-10 19:31:26 +07:00
Andreas Eversberg 6708699b22 Correctly detect the follow-on proceed information element
Even if follow-on proceed is not supported, the warning message about
not beeing supported should only show when the follow-on proceed
information element is included in the location update accept messages.

Change-Id: I2b1aceb8b85bdd9faabe354501f9036f1fc6fe33
2023-10-09 23:39:01 +02:00
Andreas Eversberg 203014d744 Fix indices of ARFCNs for measurement report
The order of ARFCNs are described in TS 44.018 §10.5.2.20.

The function arfcn_from_freq_index() is re-used to get the ARFCNs in
correct order for the report.

Change-Id: I0674467eb5a38a341cf65f95a25aa5f7232df069
2023-10-05 16:25:00 +02:00
Andreas Eversberg beed281a0a Fix selection of correct ARFCN at arfcn_from_freq_index()
The selection of ARFCN is described in TS 44.018 §10.5.2.20.

The frequencies found in SI5 and SI5bis are counted first, in the
following order: ARFCN 1..1023,0.

The frequencies found in SI5ter are counted afterwards, in the following
order: ARFCN 1..1023,0.

Related: OS#5782
Change-Id: I090d84a5550d89743e8f5a886f400df6483f50d7
2023-10-05 16:24:57 +02:00
Andreas Eversberg 22e79a87fa ASCI: Fix false return value checks, discovered by Coverity Scan
See: CID 32637 - 323644

Related: OS#5364
Change-Id: If72590bb94597e434386bbcd312919a71abf0aae
2023-10-05 13:41:42 +00:00
Vadim Yanitskiy a397330e10 modem: grr_fsm: permit loop transition for GRR_ST_PACKET_ACCESS
I forgot to permit the loop state transmission, so the modem app
gets stuck in GRR_ST_PACKET_ACCESS is no IMM ASS is received...

Change-Id: I059d2929f7f724cfe26935bf35c167e60157451f
Fixes: 9978b00e "modem: grr: implement RACH.req retransmission"
2023-10-05 20:16:32 +07:00
Andreas Eversberg 0cee735aca Fix settings for VGCS/VBS
The "support" flags must be copied to the settings, because they are
enabled by default and may be omitted in the VTY config.

Related: OS#5364
Change-Id: I81575dd3f2ade70101df32935a1c3d5469327577
2023-10-04 12:55:30 +02:00
Andreas Eversberg c8fed7fba7 ASCI: Add VTY command to display group call neighbor cells
Related: OS#5782
Change-Id: Ie84221507bdf247c1563b829d6cf0adb53ce161f
2023-10-04 12:55:29 +02:00
Andreas Eversberg 61ea0ac0ab ASCI: Add decoding of SYSTEM INFORMATION TYPE 10 $(ASCI)$
Related: OS#5782
Change-Id: I81c7929f6d951d8eef7d08624f0b72830370c448
2023-10-04 12:55:26 +02:00
Andreas Eversberg 1cc4c0f487 Fix potential NULL pointer dereferences, discovered by Coverity Scan
See: CID 323362 + CID 323363
Change-Id: I47aa506014d8bddb8c8ce9b506c1c5c7b8056d30
2023-10-04 12:55:03 +02:00
Andreas Eversberg d6b2a4d685 Correctly use SUP_WRITE() macro for GSM 850
Change-Id: I52c99c63e38934fb26c26dba5bf2551ea311228b
2023-10-02 19:37:30 +02:00
Andreas Eversberg 3fb118bd91 Fix typo in sysinfo.c
Change-Id: I12405bef9f7910a354d9ac5153f4adc55095d747
2023-10-02 19:37:28 +02:00
Andreas Eversberg a67c8b32fb Correctly extract bits from SI2*/SI5*
These bits are:
 * EXT-IND
 * BA-IND
 * Multiband reporting

Change-Id: Ie5349464fed0a4276955235c7c87b5bcb299f20d
2023-10-02 19:37:25 +02:00
Andreas Eversberg 00507bdc13 Cleaning gsm48_mm_data_ind()
Get rid of goto and double switch/case by putting connection handling
code into a separate function.

Change-Id: I12454cab06c105ccd9e2495e3a6f0640f2884885
2023-10-02 19:37:24 +02:00
Andreas Eversberg 06b4885b18 ASCI: Show NCH position in VTY together with system information
Related: OS#5364
Change-Id: I5e0a9d469eb70608502dca881808621fa153b666
2023-10-02 19:37:20 +02:00
Andreas Eversberg 17f494189f ASCI: Add VTY commands to control voice group/broadcast calls
Related: OS#5364
Change-Id: Id32253b4e10b8df48e819d8a92bbcda332dd11e6
2023-10-02 19:37:18 +02:00
Andreas Eversberg 666ec1d761 ASCI: Add GCC/BCC layer to support voice group/broadcast calls
Related: OS#5364
Change-Id: I22eacd018f18c18ba83dbd3dd874cf029344674d
2023-10-02 19:37:13 +02:00
Andreas Eversberg 32399095be ASCI: Add protocol type to trans_find_by_callref() function
This is required, because different protocols may share the same
callref, but use different protocols. E.g. a voice group call can share
the same callref with a voice broadcast call, but these calls are
different transactions.

Related: OS#5364
Change-Id: Ifea3a81aae3b4ae897851f867b13fa987c8cbe11
2023-10-02 19:37:09 +02:00
Andreas Eversberg 1678f53f99 ASCI: Add group receive and transmit mode support to MM layer
Related: OS#5364
Change-Id: I05957182a57423ad947ab200b52f65fde859e110
2023-10-02 19:37:05 +02:00
Andreas Eversberg 17115c70b1 ASCI: Add group transmit mode support to RR layer
This allows the upper layer to estabish and release connection on the
uplink of a voice group call.

Related: OS#5364
Change-Id: I9b62eef5d877e5d9dcf349717efd2cce28862c58
2023-10-02 19:37:01 +02:00
Andreas Eversberg 253e5cd1eb ASCI: Add group receive mode support to RR layer
This allows reception of VGCS and VBS calls. A special sub-state is used
to differentiate between IDLE mode and group receive mode. Later it can
be used to differentiate between dedicated and group transmit mode.

Related: OS#5364
Change-Id: Ia7d806b354fb3be5729bff8ac9aa1c7ad7a8b539
2023-09-28 13:53:57 +02:00
Andreas Eversberg 91d862c251 ASCI: Add ASCI notification support to RR layer
The notifications are received on NCH, as well as on FACCH.

Related: OS#5364
Change-Id: I49df02cb4d99d9aab1ea3ca13beb2ea00ae4c9f4
2023-09-28 13:53:54 +02:00
Andreas Eversberg e676cf83ee ASCI: Prepare gsm48_rr_rx_acch for voice group channel
The gsm48_rr_rx_acch function receives FACCH/SACCH. This is not only
used for system information on SACCH, but also for short header messages
and regular UI messages on TCH.

Related: OS#5364
Change-Id: I39b27396a31137b3c4bdcb40dccdf3de60458fe2
2023-09-28 13:53:53 +02:00
Andreas Eversberg d575e5bf6e Add header length check to received CCCH messages
Change-Id: I3bc6b0b997e6ea1048c3357d276adfcc1638b02b
2023-09-28 13:53:52 +02:00
Andreas Eversberg 615a88f69b Fix reception of MM messages at gsm48_mm_data_ind()
The patch "ASCI: Add GCC/BCC (call control) to mobility management"
breaks reception of MM messages. No MM connection setup is possible.

This patch fixes the issue.

Change-Id: I263739bb0220d19f14114714fe9d82505bdbd267
2023-09-28 13:53:49 +02:00
Andreas Eversberg 2d9c447c3f ASCI: Add interface for group receive/transmit mode support to RR layer
This patch includes new messages and description. The are used to bring
RR layer into group receive mode and from there in group transmit mode
and back.

Related: OS#5364
Change-Id: I1abd56c63d15af1cff8bde7589a571cb5bb5506f
2023-09-28 10:42:58 +02:00
Andreas Eversberg 1dc887a78d ASCI: Add uplink free/busy event to MM events
Related: OS#5364
Change-Id: I3f8d97a0359ea9560d6d6bfd8238ddc6492c56e8
2023-09-28 10:42:56 +02:00
Andreas Eversberg c3467236a3 ASCI: Add channel notification event to MM events
This is required to notify MM layer about new and ceased group and
broadcast calls.

Related: OS#5364
Change-Id: Ifee286ba4628356cc19b5dc75f1843287c5d2342
2023-09-28 10:42:53 +02:00
Andreas Eversberg 699a3a3978 Fix unset sapi in gsm48_rr_data_ind()
The gsm48_rr_hdr is pushed into the message before sending data to
MM layer. SAPI was not set in this header.

Change-Id: I8345a562050d52d491f3b7192c979d455a63931c
2023-09-28 10:42:51 +02:00
Andreas Eversberg c9f90c4d5a Fix request reference value in gsm48_match_ra()
Do not overwrite the given request reference pointer with the history
buffer's reference. This makes no sense.

Without this fix only the response to the first access burst could be
matched correctly.

Change-Id: Iec636d368e20030beac2861bff61b1a06e7b4821
2023-09-28 10:42:48 +02:00
Andreas Eversberg bb32882adc ASCI: Increase channel request history to 5 entries
3 entries are enough for random access on CCCH. 5 are required for
uplink request on VGCS channel.

The history is used to remember when the random access bursts were send.
The RR layer can check if the IMMEDIATE ASSIGNMENT or VGCS UPLINK GRANT
message has matching frame number and random value of up to 5 random
access bursts previously sent.

Related: OS#5364
Change-Id: I62f18685bf05663f3ee6e94f6884ffb9a6b07ea4
2023-09-28 10:42:47 +02:00
Andreas Eversberg dd60a527be Refactoring encoding of mobile identity at mobile application
Deprecated functions gsm48_generate_mid_from_*() are replaced by
osmo_mobile_identity_encode_msgb(). Clean up code.

Change-Id: I9ff429bd50d718530fdad64a276053a35c8928f2
2023-09-28 10:42:43 +02:00
Andreas Eversberg 32423ccf5d ASCI: Add support flags to mobile (and VTY) for VGCS/VBS
These support flags can be enabled or disabled and are sent in the
class mark IE. Also they allow or disallow making VGCS/VBS calls.

Related: OS#5364
Change-Id: Ia23eb190e533660cce4ba4c856a83b5f3d534202
2023-09-28 10:42:42 +02:00
Andreas Eversberg 23d46f003f ASCI: Add UIC support to random access burst
A different identity code can be used on uplink access bursts on voice
group channel. This is optional for the network, but mandatory for the
MS side. If the network does not define a UIC, the BSIC is used instead.
BSIC is used for RACH channel and handover.

Related: OS#5364
Change-Id: I4039734676949aefa5be4b5298764b8ba7e1b8ed
2023-09-28 10:42:38 +02:00
Andreas Eversberg d95c8f4fa6 Transmit access bursts on DCCH of TCH channels
This is required to access a TCH during handover or to access the uplink
of a VGCS channel.

The patch is taken from the handover branch.

Change-Id: I1a972d9bac5749c67c1b139825400854f7cf1490
2023-09-27 14:02:41 +00:00
Andreas Eversberg e513911668 ASCI: Add two logging categories for group and broadcast call control
Related: OS#5364
Change-Id: I77f634c7098137a5412ea56ddc0e794e629d1982
2023-09-27 14:02:41 +00:00
Andreas Eversberg 28d9a4880c ASCI: Add a flag to turn transmitter off or on
This flag can be used to turn transmitter off for "group receive mode"
or for handover procedure. The flag is stored in the channel description
of the mobile application. It is sent to layer 1 when switching to
dedicated channel or when changing TCH mode.

At the layer 1 the transmitter is turned off while the receiver is still
active. This is done by:

 * scheduling a TX dummy task for TCH bursts
 * scheduling no TX task for SACCH bursts
 * not enabling the transmit window

Related: OS#5364
Change-Id: I20133523adc3b204cd2181bfe664fe66020a10e3
2023-09-27 14:02:41 +00:00
Andreas Eversberg b7663882c0 ASCI: MM connections are defined by 'ref' and 'protocol' tuple
VGCS and VBS calls may share the same (call) ref or share with other
protocols. Therefore the MM connection is defined by the reference and
the prococol discriminator.

Related: OS#5364
Change-Id: Ic280cd8c666660077bb2c2ef641f4cddd3b36eee
2023-09-27 14:02:41 +00:00
Andreas Eversberg 245b4b9238 ASCI: Get timing advance and TX power only when included
Instead of assuming that there are TX power and timing advance IEs
included in RSL message, check for existence.

gsm48_rr_rx_acch() may receive frames from FACCH that do not have these
IEs included in the message. These frames are UI frames on DCCH and Bter
frames. E.g. these frames are used on voice group channel to control
uplink.

Related: OS#5364
Change-Id: I87fcd44bba221ab4c5fbd2c79557db2444a10b88
2023-09-27 14:02:41 +00:00
Andreas Eversberg 975351e250 ASCI: Add GCC/BCC (call control) to mobility management
GCC is the call control for voice group calls, BCC is the call control
for voice broadcast calls.

This patch includes the new message primitives between MM layer and the
GCC/BCC layers.

Related: OS#5364
Change-Id: If6f3cea4b2ca839559596a6ee5a3d169c6d85dbe
2023-09-27 14:02:41 +00:00
Vadim Yanitskiy 3f36843b90 modem: fix grr_st_packet_access_action(): shift rr->cr_hist properly
Pass size in bytes to memcpy(), not number of elements!

Change-Id: I687435f5458e766d9d61143d6e4255f089fe1caf
Fixes: 6db5f8b9c "modem: get rid of app_data.chan_req, use ms->rrlayer"
Related: OS#5500, OS#6131
2023-09-26 21:22:57 +07:00
Vadim Yanitskiy a41ca4bbc4 trxcon/l1sched: rework dequeueing of PDCH Tx prims
When an UL BLOCK.req is received late, i.e. after the first Tx burst
of the respective TDMA Fn was requested by the PHY, a domino effect
can be observed: the stale Tx primitive remains in the queue and
prevents transmission of the next primitive, even if the later was
received in time.  This breaks transmission of consecutive UL blocks.

Don't let stale primitives poison the Tx queue: drop them like before,
but keep looking for a primitive with the matching TDMA Fn.  If found
a primitive with TDMA Fn past the current one, stop the iteration.

Change-Id: I439615639b8e840b9fd4f3af6934d9f298f32216
Depends: libosmocore.git I9590f2e836fc48650decf1564b6ab46306c4fe2d
Depends: libosmocore.git Ie8bb9c49c6f81b8f4a1766547d6943f9880d1186
Related: OS#5500
2023-09-26 19:14:14 +07:00
Vadim Yanitskiy 45a8db2a91 l1gprs: migrate to gsm0502_fncmp() from libosmogsm
Change-Id: I10261aa114b5dce3efee26ea84a1caa50c49a1d2
Depends: libosmocore.git I9590f2e836fc48650decf1564b6ab46306c4fe2d
Depends: libosmocore.git Ie8bb9c49c6f81b8f4a1766547d6943f9880d1186
Related: OS#5500
2023-09-26 18:11:27 +07:00
Vadim Yanitskiy 9978b00ea0 modem: grr: implement RACH.req retransmission
Sometimes sending one Access Burst is not enough, so we need to repeat
sending it a few more more times changing the 3 LSBs randomly.  This
is what we already do in the mobile app, but not in the modem app.

* Rename GRR_EV_RACH_{REQ,CNF} to GRR_EV_CHAN_ACCESS_{REQ,CNF}.
* Rename VTY command 'grr tx-chan-req' to 'grr start-chan-access'.
* Add an intermediate state GRR_ST_PACKET_ACCESS.
** The GRR_EV_CHAN_ACCESS_REQ transitions to this state.
** One RACH.req gets transmitted when entering this state.
** The GRR_EV_CHAN_ACCESS_CNF confirms transmission of a RACH.req.
** Upon the timeout (300 ms) expiry, a loop state transition happens.
** After 3 loop-transitions, transition to GRR_ST_PACKET_NOT_READY.

Change-Id: Iab6d9147f6e0aeb99239affacf318a3897fd6ffe
Related: libosmo-gprs.git If0de3ed86b1e2897d70183f3b0f4fbfd7d2bda80
Related: OS#5500, OS#6131
2023-09-23 03:22:12 +07:00
Vadim Yanitskiy 57b0908a71 modem: grr: clarify a comment in forward_to_rlcmac()
Change-Id: I11286777c70c776c9f6990be988401ebd5b84f0f
2023-09-23 01:52:08 +07:00
Vadim Yanitskiy 05ddc05233 trxcon: handle_tbf_cfg_req(): properly set TSC for lchans
Before this patch all Uplink PDCH bursts were using TSC=0.

Change-Id: I58b2da0d285b9a3e444374a30276fbaab3b784ac
Related: OS#5500
2023-09-05 18:42:29 +00:00
Vadim Yanitskiy 9a71f0a18b virt_phy: fix wrong pointer being checked
Change-Id: I2f845b0335d2d9818aa15c30f8621acd120e82d4
Fixes: fa833e40 "l1gprs/l1ctl: Decouple RTS.ind from DL_BLOCK.ind"
Fixes: CID#323121
2023-09-06 01:08:32 +07:00
Pau Espin fa833e4095 l1gprs/l1ctl: Decouple RTS.ind from DL_BLOCK.ind
Before this patch, the RTS:ind was crafted up in the stack when
receiving the DL_BLOCK.ind. This created some problems since the
internal low level state has to be updated in between signalling
DL_BLOCK.ind and RTS.ind, as there's a fn-advnace of one block between
those 2 signals (hence the timeslot allocation has to be applied at the
time when the fn-advance is applied).
This is actually not fixing the whole issue, since there's several
timeslots and hence the following events will have the internal timeslot updated
during the event in the middle, hence potentially causing problems in the
remaining TS:
DL_BLOCK.ind(FN=N, TS=1),  RTS.ind(FN=N+4, TS=1), DL_BLOCK.ind(FN=N, TS=2)

In any case, this decoupling already improves the situation and is step
needed anyway towards fully fixing the problem (by, for instance,
maintaining a timeslot state duplicated both for DL and Ul directions,
since they drive based on differnet FN time (1 PDCH block).

Change-Id: I1494e0aac7555f6e01b4b435b77140afc42c098e
2023-09-04 22:34:08 +00:00
Mychaela N. Falconia 59e649dbf1 firmware: board: add support for TR-800 target
iWOW TR-800 is a packaged GSM modem module based on Calypso+Iota+Rita
chipset; it is fully quadband, and reverse engineering of its PCB
confirms that this module is nothing but a mass-produced version of
the core of TI's legendary Leonardo+ reference platform.  The same
module is also known as FreeCalypso Tango - a rebranded version of
the same hardware module with different firmware and a different
Responsible Party for official support.

FreeCalypso HQ is contributing OsmocomBB support for this Calypso
modem module for two reasons:

1) Harm reduction - sooner or later someone in Osmocom universe is
   going to run OBB firmware on TR-800 once they lay their hands on
   this hardware, and the resulting operation will be less harmful /
   closer to correct if we provide the basic board support patch.

2) There exists a large surplus of FreeCalypso Caramel2 development
   boards that are based around FC Tango modules.  Having this hw
   supported by both firmwares will hopefully increase the chances
   that these boards will find loving homes, as opposed to continuing
   to gather dust in a cardboard box.

Legal and ethical disclaimer: OsmocomBB firmware running on ANY
Calypso+Iota+Rita target is *known*, through confirmed observations
with a measuring instrument (R&S CMU200), to put out radio transmissions
that are *severely out of spec*, and this defect does NOT go away
with the present patch which merely adds support for a different C+I+R
board target.  The present patch has been produced as a harm reduction
measure, to reduce (but not to zero) the harm that will be caused
by parties who run OsmocomBB firmware on C+I+R hardware despite having
been advised not to.  As the party seeking to reduce rather than cause
that harm, Mother Mychaela and her related business entities explicitly
disclaim all liability for damage that will be caused by parties who
continue running OsmocomBB firmware despite having been repeatedly
advised to switch to manufacturer-approved published-source firmware
instead.

Change-Id: I84d564f052f12a25ea3bfb9c78860e9dc6262be8
2023-09-04 20:19:12 +00:00