Commit Graph

152 Commits

Author SHA1 Message Date
Pau Espin 154ff41292 rlcmac: ul_tbf: Implement support for TBF Starting Time
While reworking tbf_ul_ass_fsm, avoid being in "ASSIGN" state while
waiting to send Pkt Ctrl Ack. The PCU is free to ask the TBF to transmit
data before receiving Pkt Ctrl Ack; the time where it can start
transmitting data is actually controlled by TBF Starting Time.

Change-Id: Id81f16743f2c464e01caf27ba2eb8c0fc715fe8a
2023-03-09 10:22:04 +01:00
Pau Espin ef3c599b98 rlcmac: Lower logging rx prim from lower layers
Let's set it as DEBUG, since that code path can be called quite a lot.

Change-Id: I0b13fa374003a7c48bc259a8c45227b86beca454
2023-03-09 10:19:21 +01:00
Pau Espin f41223d479 rlcmac: Ignore DATA.ind with len=0
Change-Id: I342c7999261832a5d981e5831e428d2cbd82729e
2023-03-09 10:19:18 +01:00
Vadim Yanitskiy da3360390c rlcmac: ignore PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK
It's expected to receive dummy DL blocks when listening to PDCH,
so do not spam the logging with errors:

  DRLCMAC ERROR rlcmac.c:392 TS=7 FN=3035694080
    Rx Pkt DL Dummy Ctrl Block NOT SUPPORTED! ignoring

Change-Id: I6a40e2795adc71b9312d39c96b01aba9a258da42
Related: OS#5500
2023-03-07 16:47:27 +01:00
Pau Espin fe52a342aa rlcmac: Fix several ptr bugs looking up ul tbf upon rx PktUlAss
Related: Coverity CID#310957
Change-Id: I0b031761dbbc93c1c06ba94967e91180062613fd
2023-03-07 15:22:56 +01:00
Pau Espin 99d0b6f2f9 rlcmac: tbf_ul_ass_fsm: Drop dummy event GPRS_RLCMAC_TBF_UL_ASS_EV_FOOBAR
This was used during initial writing of all boilerplate code

Change-Id: I24ce93c994a3128262d806b585d7dff62ee3f159
2023-03-06 14:36:51 +01:00
Pau Espin 9a212cc2b6 rlcmac: dl_tbf: Improve logic requesting a new UL TBF
Change-Id: I702872ba32a410bb5f09943af3cdadca482562db
2023-03-06 07:59:03 +00:00
Vadim Yanitskiy eb622ef09c rlcmac/sched: use TDMA Fn macros from libosmogsm
Change-Id: I536a0d2ae9b5dabcd3976f5aeb15069bd03e6aa9
2023-03-03 07:35:53 +00:00
Pau Espin 42f302a4f9 tbf_ul: Fix contention_resolution check for 2phase access
Change-Id: Ia20bcf99f4ece17b33048930ded50e703d7b7461
2023-03-02 19:13:14 +01:00
Pau Espin c25b28c809 rlcmac: tbf_ul: Fix TI bit never set when encoding the block
The TI bit was correctly set (together with the TLLI) in
create_new_bsn(), but was not properly propagated later on in
create_ul_acked_block() to the intermediate struct before the final
encoding to the packed structure containing the final message
(gprs_rlcmac_rlc_write_ul_data_header).

Change-Id: I6ba361bc9bc47230954cca19c7f2f8cf74d8278e
2023-03-02 16:28:34 +01:00
Pau Espin c7a55b3c4a rlcmac: Fix gprs_rlcmac_ul_tbf_in_contention_resolution() for 1phase access
Change-Id: I7d08be3d8fa584ebad98d3548c05bd1ff284ba7e
2023-03-02 16:28:26 +01:00
Pau Espin aef4114abb rlcmac: Fill radio_priority in Dl Ack/Nack Channel Request Description
Change-Id: I740fac72cb418d4b61499990b13208fcd4bb922f
2023-02-27 17:12:51 +01:00
Pau Espin 9a44df6084 tbf_dl: Fix state_fsm instance not freed
Change-Id: I2f89810dd346cee904dcff0b598e229bd5f84a9f
2023-02-27 16:22:16 +01:00
Pau Espin 294b886be6 rlcmac: Implement T3182
Related: OS#550
Change-Id: I4fe9523af1b53c826ccfdd8700bab2a9e1413662
2023-02-21 19:44:43 +01:00
Pau Espin 6f87373fc0 rlcmac: ul_tbf_fsm: rework Rx UL ACK/NACK fsm events
We'll need to get one event for each Pkt UL ACK/NACK the UL TBF receives
in order to implement T3182 properly in a follow-up patch, hence rework
the events sent to the FSM (merge events about Final ACK and Contention
Resolution in one generic UL ACK/NACK event with some data parameters).

Change-Id: I4420abd69a318bd93fde73a67239456466071497
2023-02-21 19:38:18 +01:00
Pau Espin 184fcce168 rlcmac: ul_tbf: Fix ul_state wrong check
This error was introduced when importing and rerwitting code from
osmo-pcu.git.

Fixes: 8c2734fa43
Change-Id: Id4d7ad5fb393580a2e760513bb513ba968d2c1ef
2023-02-21 19:38:18 +01:00
Pau Espin 4486aa276c rlcmac: Use finished UL TBF to request a new one after Final UL ACK/NACK
Change-Id: I4eb873250f5ee7eafb5b6126382ce088091d0447
2023-02-21 19:38:15 +01:00
Pau Espin 13c2601974 rlcmac: ul_tbf: Fail if data block CV=0 retransmitted > 4 times
Change-Id: I1a2e1bca296591c34e25faca3f9048e0274ebbd1
2023-02-21 17:27:46 +01:00
Pau Espin 4da257390f rlcmac: ul_tbf: Submit event FIST_UL_DATA_SENT before LAST_UL_DATA_SENT
If there's only 1 block to be sent, the LAST_UL_DATA_SENT was being sent
before the FIRST_UL_DATA_SENT one, which created problems in the FSM
(when adding more logic later).

Furthermroe, this change also makes it send retransmission events, which
makes it similar for both FIRST and LAST events. This will also be
needed for T3182.

Change-Id: I701dbe00ff2af62c45d862a9211b5b1120f3efa3
2023-02-21 17:27:46 +01:00
Pau Espin 46a4f3ed66 rlcmac: Implement T3168 (Pkt Res Req timeout 2phase access)
Change-Id: Ibf011ca94e50542b67353cd8f7f74c5be955af34
2023-02-21 17:27:46 +01:00
Pau Espin 96fe992644 rlcmac: Fix null ptr access in dl_tbf object
Fixes: Coverity CID#310022
Change-Id: I3817d9e77a440682fa2c538e0fbee295ffdbcfff
2023-02-21 17:27:46 +01:00
Pau Espin f15ee0daa5 rlcmac: tbf_dl: Fix msgb null ptr access if dl block contains several LLC frames
Fixes: Coverity CID#310023
Change-Id: I627724fda5b9ffcf13433ea69af908d725e94299
2023-02-21 17:27:46 +01:00
Pau Espin 5daf94b203 rlcmac: ul_tbf: Answer Pkt Ul Ack/Nack poll with Pkt Ctrl Ack
Related: OS#5500
Change-Id: I833d0f189c06d093ce9bd4c36c37024cf5cb6446
2023-02-21 17:27:43 +01:00
Pau Espin bf1f5f3613 rlcmac: ul_tbf: Append TLLI when in contention resolution
Change-Id: I4023f21930e93c8cc10befc92f917139b656175a
2023-02-21 17:11:04 +01:00
Pau Espin a9da84ac9f rlcmac: Implement N3104
Related: OS#5500
Change-Id: Ia8c35aad7a537ab76447187847f8cee8c379352c
2023-02-21 17:11:00 +01:00
Pau Espin 7ff9597b43 rlcmac: tbf_ul: Allow sending UL data if in state FINISHED
This can happen for instance if MS sent al the data but PCU didn't
receive it all (some it was lost) so it can still keep asking the MS to
submit data. In this case, the MS shall attempt retransmit of some
unacked data.

Change-Id: I2333a0a432c0c6f223bc1043ddb0d9c34842a5a3
2023-02-20 13:28:55 +01:00
Pau Espin dfe49c5f44 rlcmac: Handle SI13 from L1CTL
Change-Id: Ifaddf0e6e5cad7ea25672804c83c254579874813
2023-02-20 12:31:25 +01:00
Pau Espin 175d251fb7 rlcmac: Implement T3166
Change-Id: I58dd757cbb5d8279fdf7fbdfb6f38ec0119c6156
2023-02-20 12:31:25 +01:00
Pau Espin 6a90da108a rlcmac: Implement T3164
Change-Id: I1a3d7b552b36b84d84ca27572ce313265810fd3d
2023-02-20 12:31:25 +01:00
Pau Espin b9e06c9955 rlcmac: tbf_*: Unlink the freeing tbf from its gre
Change-Id: I2079c4440a05f4b44c9b7bece383c69e84198302
2023-02-20 12:31:25 +01:00
Pau Espin b853424a28 rlcmac: tbf_ul: Fix wrong function called looking up msg size
Change-Id: I9d5afee36a633c311b5657181d0de7cbddd593e0
2023-02-20 12:31:25 +01:00
Pau Espin 8c2734fa43 rlcmac: Implement Rx of UL ACK/NACK
Related: OS#5500
Change-Id: I5e3d8e77042d3ad1618e6b62bc1a377a93239580
2023-02-20 12:31:25 +01:00
Pau Espin 61c0f7f158 rlcmac: tests: Validate Tx of second RLC/MAC block containing GMM Attach
Change-Id: I9a5870d2972c70233c6e8859bc6d694ff180b690
2023-02-20 12:31:25 +01:00
Pau Espin b3b0388f6b rlcmac: llc_queue: Fix access to null msgb during dequeue
Change-Id: I513aaef6ad0f44b5a6d32be512bdd8b4fdabb4e7
2023-02-20 12:31:25 +01:00
Pau Espin 4113903f63 rlcmac: Implement Tx of DL ACK/NACK
Measurement related functionality is not yet implemented and hence the
related fields cannot be filled in yet.

Related: OS#5500
Change-Id: I6ae2df07929fb6c4733e87b18cebe75a6f24f520
2023-02-20 12:31:25 +01:00
Pau Espin cccba723b4 rlcmac: Introduce initial poll answer infrastructure
This commit imports pdch_ul_controller.{c,h} from osmo-pcu.git
d8cea3c618dbd2a343e6c012e5545006d44fc244 and adapts it to be of use on
the MS side.

Related: OS#5500
Change-Id: I9d38a8de4240e65585cc8bbe3c044473af5a83e5
2023-02-20 12:31:25 +01:00
Pau Espin f4f69fbde0 rlcmac: Implement initial DL rx data path
This code imports code from osmo-pcu.git
d8cea3c618dbd2a343e6c012e5545006d44fc244 (heavy modified to adapt to
current code base).

With this patch the RLCMAC layer is already capable of decoding RLC/MAC
GPRS data blocks and submit them as LLC frames to the upper layer.

Related: OS#5500
Change-Id: Ie7535606916c0800c0e1bd9555be022c81ea257d
2023-02-20 12:31:25 +01:00
Pau Espin b1ec9a1973 rlcmac: Introduce DL TBF creation through PCH ImmAss
This patch only introduces the gprs_rlcmac_dl_tbf subclass and
allocates/frees it based on PCH ImmAss, and adds initial paths for
received blocks. It also provides a unit test to showcase the scenario.

Change-Id: I7f98e3456ef35d80becdad3481afeb771457b0ef
2023-02-20 12:31:25 +01:00
Oliver Smith 15fbb47be7 Run struct_endianness.py
Ensure there is no diff to prepare to run this in CI.

Related: OS#5884
Change-Id: I629a2ad6cff946d940543b262b6f9b99df26cdd3
2023-02-20 11:07:09 +01:00
Pau Espin d80a7b1d2e rlcmac: Implement GMMRR-ASSIGN.req
Change-Id: I3178aa1af4a6c05c84253c6befcd4c786b8dd8e9
2023-02-13 10:51:12 +01:00
Pau Espin e8ad79e3a8 rlcmac: Initial ul_tbf data support
This is basically an import of relevant code from osmo-pcu.git
08523c2286dfe27402f8e2eb4b98da5a529c7915 which allows encoding LLC
frames into RLC/MAC uplink data blocks.

A 1-to-1 import was not possible for several reasons:
* osmo-pcu uses C++ in some places
* osmo-pcu implements encoding of DL data blocks, not UL data blocks
* Some osmo-pcu code is still not really polished and stuff is still
  mixed (for instance rlc_window(_ul).c/h were split into their own
  files here).
Hence this was not a "copy all files and leave as they are" import, but
rather looking at the encode path starting on osmo-pcu.git scheduler and
see which code had to be pulled in to encode the RLC/MAC blocks.

Due to the slightly different requerirements for UL and DL blocks, it is
well possible that further work in needed in order to have the code
produce correct blocks. This is only a first step to pull in all code so
that stuff can be fixed in smallish incremental steps.

Related: OS#5500
Change-Id: I0a01d79d16bbfc63aa88e6bb0f432f3772645730
2023-02-13 10:51:07 +01:00
Pau Espin 60bd08e44d rlcmac: Make sure entities are freed if lib is re-initialized
This allows proper memory cleanup of the whole library everytime we want
to run a new unit test in the same proces.

Change-Id: I568e2f783a575ae457f0845eca34951ae9822eeb
2023-02-13 10:44:30 +01:00
Pau Espin 0984044e1c rlcmac: Initial implementation of UL TBF assignment and scheduler
This patch is another step towards a working RLC/MAC implementation. It adds:
* An initial data model with MS (gprs_rlcmac_entity) and ul_tbf.
* A UL_TBF state FSM from initial to FLOW status
* A UL_TBF assignemnt FSM, covering both 1phase and 2phase assignments.
* Triggering of UL_TBF allocation and assignment FSM when new LLC data
  is pushed from upper layers.
* A scheduler generating some ctrl messages (PktResReq and UlDummyCtrlBlk)
  when indicated by the network.

This patch is pushed as a WIP state since it already contains a
considerable amount of code and lots of new files, which can be
used/extended at a later point, making parallel contribution easier.

Related: OS#5500
Change-Id: I420c57a9d0b63f9c2805a7c2ae8ce85532a48eef
2023-02-13 10:43:29 +01:00
Pau Espin eeac4ad43c rlcmac: Introduce lower primitive layer API
This primitive API allows the application to drive the RLCMAC layer
based on a lower L1CTL interface.

* RACH req are requested to the lower layers by the RLCMAC through the
  RACH.req primitive.
* Received ImmAss, SI are fed to the RLC/MAC layer through CCCH_DATA.ind
* The RLCMAC registers DL and UL TBFs in the lower part (firwmare,
  L1CTL):
** The lower part will trigger PDCH_RTS.ind in every TS in the
  "(dl_slotmask|ul_slotmask)" superset, with the received USF. This
  allows UL uplink to transmit blocks when requested by USF, or UL/DL TBF
  to answer polls from PCU at a specific N+X FN (RRBP). This also allows
  the RLCMAC layer to update its GSM clock and trigger internall
  timeouts.
** The lower part will trigger PDCH_DATA.ind in every TS in the
  dl_slotmask if either a CTRL block is received or a data block
  matching the configured dl_tfi is received.
** Upon receival of PDCH_DATA.ind, the RLCMAC layer updates its FN clock
  and submits PDCH_DATA.req based on USF.

This commit only adds the primitive set and API to submit/receive them,
but doesn't really implement them yet internally.

Related: OS#5500
Change-Id: I3d97425ec75059ceae983de869419230e8c4df01
2023-02-13 10:37:30 +01:00
Pau Espin 01f878a386 sndcp: Add missing osmocom/core/endian.h include
Header uses OSMO_IS_LITTLE_ENDIAN but it's not including the header
conditionally definining it.

Change-Id: Ie80bc320b0d31a4b8fc971a864094edd08b0e6dc
2023-02-13 08:48:33 +00:00
Max 2f3efdbb75 Debian: fix broken SNDCP install
Change-Id: Id1691e2a69954cb187d885a60134bb5ec5fe3200
2023-02-11 20:33:49 +03:00
Pau Espin 9dc9da3ea6 rlcmac: llc_queue: Make sure queue is cleared before freeing mem
Change-Id: Iadd08c727d46dfb5cac4df5219ecbcbacf6482eb
2023-02-10 13:13:58 +01:00
Pau Espin 88c52f1af9 rlcmac: Fix prim memleak passing GRR-UNITDATA.req
Change-Id: I16d737e6691fd964026260f829230106abcc7ef1
2023-02-06 20:25:23 +01:00
Pau Espin 168629eb24 rlcmac: Refactor msg_type enums and value_string
Add prefixes, clean formatting, move to proper place, etc.

Change-Id: Ic55782d90c0d7876fc37d1da130b859857c11447
2023-02-01 18:28:11 +01:00
Pau Espin 94e32c4bdf rlcmac: Move spec related definitions for general use to types.h
Move types defined by spec not directly/solely intended for the CSN1
encoder/decoder operation to a separate types.h header.
More and more types will be added there which will be used by the data
domain inside and outside the library.

Change-Id: Ib0fdae48fc3e76d701d21644826e5ffd8553fecb
2023-02-01 18:23:41 +01:00