Commit Graph

2262 Commits

Author SHA1 Message Date
Pau Espin 0ec7724d10 Bump version: 1.1.0.117-7932-dirty → 1.2.0
Change-Id: Iec69415edfca552798015decacf91dc50bda11bf
2023-02-07 17:10:46 +01:00
Philipp Maier 7932bc8d32 pcuif_proto: rename PCU_IF_SAPI_AGCH_DT to PCU_IF_SAPI_PCH_DT
The current name of PCU_IF_SAPI_AGCH_DT is a bit misleading as it
describes a method to send immediate assignment messages (normally AGCH)
via the PCH. The name in the constant should reflect that correctly

Change-Id: I6dfb8035134bc85a025415bd6c2f9c01987d9268
Related: OS#5198
2023-02-06 15:30:17 +01:00
Philipp Maier 40db4c330e pcu_l1_if: ignore frame numbers that exceed the valid range
osmo-bsc may send invalid frame numbers through the pcu-sock interface.
Lets make sure that incoming frame numbers do not exceed the valid
range.

Change-Id: Ib0cf1738be07733c95fc6c459a8a7c4cb2eeef26
Related: OS#5198
2023-02-06 15:19:18 +01:00
Philipp Maier 3b66bbf813 pcu_l1_if: cosmetic: use sizeof instead of constants
Change-Id: Ib99e0a5470758bc4235b140103f2abd448ac07d3
2023-02-03 15:46:07 +01:00
Pau Espin 08523c2286 rlc.h: Fix typo in param name
The function definition in rlc.cpp already uses the correct param name.

Change-Id: Ifd55fca3c04b72cef3a8f27d6826bc8529e85ec7
2023-02-01 19:51:42 +01:00
Philipp Maier 8b571ee2e7 pcuif_proto: add indication to communicate E1 parameters
osmo-pcu will also support GPRS via E1 timeslots in a BSC co-located
setup. To avoid duplicate configuration the BSC has to communicate the
E1 parameters (which TS, SS etc.) to the PCU. Lets add a new primitive
to do that.

Change-Id: Ia7928489130c1205b06bb9b10de0fb1461843301
Related: OS#5198
2023-01-31 17:24:31 +01:00
Pau Espin 76ef66698c Mark several fsm related internal symbols as static
After some earlier refactoring, those fields are only used internally in
the module, and hence can be marked as static.

Change-Id: Ibf2a6ee5636ae7102ffd13b7497769652bcc3202
2023-01-30 10:42:44 +01:00
arehbein 9e732ae4b1 osmo-pcu: Transition to use of 'telnet_init_default'
Related: OS#5809
Change-Id: I9559486ce64a9ccf348b4ee0e1d09141dbc1ae8f
2023-01-29 10:53:23 +00:00
Pau Espin ea6d534369 cosmetic: Remove unneeded curly braces
Change-Id: I6d87f11ff749d027685bf539a81f43d35ff98e9a
2023-01-27 11:29:52 +01:00
Pau Espin e0a8488773 llc: remove unused reference to msgb address
This is probably a leftover from an old refactoring where the tv was
moved to MetaInfo (msg->cb[].

Change-Id: I7aceaf2d13a125c75925877c4344c0aeed326c79
2023-01-26 18:20:12 +01:00
Pau Espin 1111aa16e6 llc: Refactor code checking if PDU expired while dequeueing
The previous function name was misleading since it was checking already
for more stuff than pdu containing user data.
Rename the function and move all checks on PDU in there instead of
having it half in one place and half in the other.

Change-Id: Ia0738caa1ccab5f78c2d49db582bdce96f18600a
2023-01-26 15:10:29 +01:00
Pau Espin 0e435fa959 llc: Mark llc_is_user_data_frame() as static
It's only used once in the same file.

Change-Id: I8e38a946c87142a09e0b49ea3160df1d5772b587
2023-01-26 14:56:45 +01:00
Philipp Maier 6a5b1b1f3e bts: log FN jump delta in bts_set_current_frame_number()
In case of an FN jump the expected value is logged. Lets also log the
delta between the expected and the current FN as it may give a better
clue what goes wrong

Change-Id: Ie361df30852570fe8a47347a42e962db869ccf82
2023-01-05 16:58:20 +01:00
Philipp Maier a42521dfbb bts: use GSM_TDMA_FN_ macros and uint32_t in bts_rfn_to_fn
The function bts_rfn_to_fn() uses int32_t for its internal variables and
the input parameter rfn while the callers and everything outside uses
uint32_t to store frame numbers. Lets convert this to uint32_t and use
GSM_TDMA_FN_ macros wherever possible.

Change-Id: Iedd493bb30dd1c342dec031883060c545432e740
Related: OS#5198
2023-01-05 16:58:20 +01:00
Philipp Maier 39f5e27412 bts: refuse to set invalid frame numbers
A valid GSM frame ranges from 0 to 2715647. When using
set_current_frame_number() to set the current frame number (source
usually is the layer 1 and below) we should not allow invalid frame
numbers.

Note: this also fixes FnTest which uses invalid frame numbers for
testsing.

Change-Id: Iaae31b370fababba975d419b0d20ac15618c296e
Related: OS#5198
2023-01-05 16:56:28 +01:00
Pau Espin d1058b9445 Avoid moving DL-TBF from old_msg to new_ms during ms_merge
The DL-TBF assigned to another MS object may have a totally different
set of reserved resources (TS set, TRX, etc.), so one cannot simply move
those to the new MS. To start with, if the 2 MS are on different TRX it
is clear that one of them will not be really in operation. That's most
probably the DL-TBF being in ASSIGN state on CCCH waiting for PCUIF_CNF
and later X2002 to trigger to start sending DL blocks, but without
confirmation whether the MS is really there. Since the other new MS
object probably has a UL-TBF, that's the one probably operative, and
hence a new DL-TBF can be created at that same time and assigned through
UL-TBF's PACCH.

Unit test test_ms_merge_dl_tbf_different_trx showcases the above
scenario.

Related: SYS#6231
Related: OS#5700
Related: 677bebbe5c
Change-Id: Ie8cb49d5492cfc4cbf8340f3f376b0e6105e8c82
2022-12-19 12:32:44 +01:00
Pau Espin 0aacd21658 tests/TbfTest: reproduce buggy corner case: MS with TBFs on 2 TRXs
Add a test which showcases a scenario where the PCU ends up with 1
GprsMs object holding a DL-TBF in a weird condition half in one TRX and
half in other due to ms_merge().

This test (slightly adapted) used to cause a crash in osmo-pcu.git
586ddda9bc (a few versions behind current
master).

Related: SYS#6231
Change-Id: Ic16b5e96debf91e72684833cd64253687857f3aa
2022-12-19 12:32:33 +01:00
Pau Espin 0d957d8364 bts: Adapt trx check based on bts->trx[] defined array size
This way the code is not hardcoded to 8 TRX.

Related: OS#5827
Change-Id: I5ccb5ec27bc189d17c62e7f2a59fae0b3bddf8e3
2022-12-16 12:54:46 +01:00
Pau Espin 5b7eeecac2 Pass gprc_rlcmac_pdch to tbf_set_polling
Change-Id: I5ecc57c72e7f60e31e64e76e724d7a5a95968c40
2022-12-16 12:11:31 +01:00
Pau Espin fd74e79ab3 Pass gprc_rlcmac_pdch to tbf_check_polling
Change-Id: I1c7140b35b7c93d3df4156841e908d3b44d7336d
2022-12-16 12:11:31 +01:00
Pau Espin d29a1435ad Pass gprs_rlcmac_pdch to create_dl_acked_block()
This allows having full TS information, not only ts_no, which will be
needed later on followup patches.

Change-Id: I1efccb32c5afa4fe62233bf114ea95b6fbbe1a06
2022-12-16 12:11:31 +01:00
Pau Espin ef1b9847f1 tests/tbf: test_tbf_dl_llc_loss(): Fix wrong param passed and wrong expectancies
The DL-TBF in the test gets its TS allocated on TS4 (only that one is
enabled through setup_bts(bts, ts_no=4)), and hence it makes no sense to
ask it to send data on TS7.

Change-Id: Ibe6fc073b7438b8024c4d3ddb0e60c6112752351
2022-12-16 12:11:31 +01:00
Pau Espin e2ed40d02b Convert tbf->control_ts to be a gprs_rlcmac_pdch*
This allows having full information on the control TS easily reachable
(like TRX ofthe PDCH), and makes it easy to compare TS by simply
matching the pointer address.

Change-Id: I6a97b6528b2f9d78dfbca8fb97ab7c621f777fc7
2022-12-16 12:11:31 +01:00
Pau Espin 02aeba47df tbf: Fix typo in define used
Change-Id: I1d85cba17fc1ee70a063ed03c7707876e1349515
2022-12-16 12:11:31 +01:00
Pau Espin 23ae0e3d23 pdch: Introduce APIs to print PDCH name
This will allow printing PDCH with same formatting outside of LOGPDCH.

Change-Id: If18cb4a48237751e0dddede6793191b36dfe386d
2022-12-16 12:11:23 +01:00
Pau Espin ff7c581011 Rename gprs_rlcmac_ts_alloc.cpp -> alloc_algo.cpp & create own .h file
First commit towards trying to have alloc algorithm as isolated as
possible from others parts of the code trying to avoid state changes on
data structures.
Change name also because the alloc_algo not only allocated TS, but TFIs
and USFs.

Change-Id: I33a6c178c64a769f05d3880a69c38acb154afa62
2022-12-16 12:08:07 +01:00
Pau Espin 9935d0d21d Convert ms_first_common_ts to struct gprs_rlcmac_pdch
This way it contains full information about the TS, not only the TN.

Change-Id: I19373939ec104d371e3e91422f018a8175cb0f89
2022-12-16 12:08:07 +01:00
Pau Espin 478c150a09 bts: Adapt slot_mask to trx defined array size
struct gprs_rlcmac_bts still hardcodes it to 8, but using ARRAY_SIZE
there should aim at seeing the relation between those, and avoid having
one updated without the other.

Related: OS#5827

Change-Id: I165588ba10d8528a9a496175d8dfe9d902c89e55
2022-12-16 11:05:46 +00:00
Pau Espin a621d59ea8 Refactor code rejecting UL-TBF upon rx of PktResourceReq
* Make it similar to the already existing TBF allocation procedures
* Pass pdch pointer instead of trx and ts numbers

Change-Id: I04b3b65942732cc652adeaa507529b849292ff61
2022-12-16 11:05:46 +00:00
Pau Espin 57b2589041 tbf_ul: Fix wrong struct type in field
This typo was harmless so far because both old and new structures have
the exact same content.

Change-Id: If2e20128a589a25b9dc3fd08340cdb92aad158c3
2022-12-16 11:05:46 +00:00
Pau Espin 4a09054dc0 Trigger PACCH assignment inside dl_tbf_upgrade_to_multislot()
The triggering of the assignment for the new TBF allocation is part of
the "upgrade to multislot" process, hence move that inside the function.

Change-Id: Ic2b959f2476b900cb263ccd8f6698ed843bafd29
2022-12-16 11:05:46 +00:00
Pau Espin b7a2b59c68 Refactor code related to DL-TBF upgrade to multislot
* Make clear the code relates to DL-TBF and not UL-TBF.
* Change wording to "upgrade" to match the existing field and API
  "tbf_can_upgrade_to_multislot()".
* Free the TBF if we cannot allocate new resources.

Change-Id: I0e4f8d7e46235a471b2124b280c81ff07b6967a4
2022-12-16 11:05:46 +00:00
Pau Espin 140c97c318 Get rid of tbf->first_ts
There's no big benefit in keeping it stored since it can be quickly
found. This makes the tbf data structure simplier and easier to
maintain, and discharges the alloc_algorithm functions from an extra
step.

Change-Id: I5d2f665f648f8637466bfdd3bf7b924cb61ede33
2022-12-16 11:05:46 +00:00
Pau Espin 345d9ad1b3 Move first_common_ts from gprs_rlcmac_tbf to GprsMs
The field contains a common value between the 2 active TBFs of the MS,
so it makes no sense to have them duplicated on each TBF. It can be
sanely stored in the MS object.

Change-Id: I8df01a99ccbfaf7a442ade5000ee282bd638fbba
2022-12-16 11:05:46 +00:00
Philipp Maier 44347efacd pcuif_proto: use define constant to specify nax number of trx
The array of trx in gsm_pcu_if_info_ind can hold trx 8 items. Lets use a
define constant to specify the size of that array.

Change-Id: I2b12fd562ff867188a37e701bba1ad5de904f9bd
2022-12-14 16:05:02 +00:00
Pau Espin 5ba3ef9a2b sched: Pass pdch to *_create_rlcmac_msg() functions
The pdch pointer contains more info than just timeslot number. For
instance, it contains information about the TRX owning the TS.

Change-Id: Ic31a7360a29e61f70bb1338ddab6f5f31aa8b26e
2022-12-13 12:20:02 +01:00
Pau Espin 106f2a02c5 Move control_ts explicit checks out of the scheduler implementation
Let each subsystem handle that internally.

Change-Id: Ifaf7dde651d56942779d84aa9135fc8c974b6f26
2022-12-13 12:17:07 +01:00
Pau Espin 83a0892e61 tbf_dl_fsm_ctx: Properly define tbf backptr as dl_tbf
Since the tbf_fsm was split recently into tbf_dl_fsm and tbf_ul_fsm,
each has now its own ctx strucvture, which can hold the proper tbf
subclass.

Change-Id: Id2571e55e1fea2918207175f2030ec026e880bc1
2022-12-12 20:09:49 +01:00
Pau Espin cdc762a591 tbf_ul_fsm_ctx: Properly define tbf backptr as ul_tbf
Since the tbf_fsm was split recently into tbf_dl_fsm and tbf_ul_fsm,
each has now its own ctx strucvture, which can hold the proper tbf
subclass.

Change-Id: I7741d524a14437caf4c92b9c09e19762eb272e30
2022-12-12 20:09:36 +01:00
Pau Espin cefddbc913 encoding::write_immediate_assignment(): Constify tbf param
Change-Id: Ic0b6e81dbeb44f200065dba92cadc33fa52ae75d
2022-12-12 19:48:34 +01:00
Pau Espin 7e1fec20c0 Pass pdch ptr to tbf_compute_priority
Change-Id: Idbac59343c4bac3214ecd8a14c201b4e42c74557
2022-12-12 16:56:32 +01:00
Pau Espin e87576984e Pass gprs_rlcmac_pdch to tbf_is_control_ts
This will allow also validate easily the TRX is the correct one too, not
only the TS number in any random TRX.

Change-Id: Ib1a62b6e7b465253ee7cba63bf5e277f8aa8eaea
2022-12-12 16:18:07 +01:00
Pau Espin b5fa1aad7c pdch_ulc_get_node(): assert if ulc pointer is null
Make crah more obvious if this condition is reached.

Related: SYS#6231
Change-Id: I2689ceaf39009c5e708d5c72e41744658681c917
2022-12-12 12:29:30 +01:00
Pau Espin 586ddda9bc pdch: Initial support Handling PktResReq with ID_TYPE=UL/DL_TFI
This patch refactors rcv_resource_request() in several ways:
* Move the ID_TYPE=DL/UL_TFI  handling at the start of the function, so
  that the function is split in 2 sections: First section gathers a
  GprsMS object from the ID_TYPE in the PktResReq. Second section
  handles the packet for the GprsMS based on the expectd ULC slot.
* Initial handling of PktResReq when transmitted by the MS on the UL-TBF
  as an answer to USF. This case is basically the one where the MS
  wishes to change some parameters of the currently active UL-TBF.
  In order to do so, for now simply delete the current TBF and re-create
  a new one to triger the PktUlAss which is expected by the MS.
  This behavior is not entirely correct since in this case the MS is
  expected to keep using actively the old TBF until the PktUlAss is
  received, so in this case ideally we should be keeping the TBF object
  and simply upgrading it and using itself to trigger a PktUlAss in its
  ul_tbf->ul_ass_fsm. Doing this however requires far more work, so it
  can be done later as an incremental step fix. The current behavior is
  alreday better than the previous one, since the MS has been tested to
  be PKT_CTRL_ACKing the PKT_UL_ASS and continuing to use the new TBF.

Related: OS#4947
Change-Id: Ie6b1b438d26cd977f88ddb4eff6b3041e0739d92
2022-11-29 16:36:54 +01:00
Pau Espin 4f29fe7d1f Convert gprs_debug.cpp to C
Change-Id: I142b870abda36950db5ff296c7c22228b0b11f55
2022-11-21 14:05:26 +01:00
Pau Espin 343c0ee8d9 Split tbf_fsm as tbf_{ul,dl}_fsm
The 2 types of TBF share some parts of the implementation, but actually
half of the code is specific to one direction or another.
Since FSM are becoming (and will become even) more complex, split the
FSM implementation into 2 separate FSMs, one for each direction.
The FSM interface is kept compatible (events and states), hence code can
still operate on the tbfs on events and states which are shared.

Test output changes are mainly due to:
* FSM instance now created in subclass constructor, so order of log
  lines during constructor of parent class and subclass slightly
  changes.
* osmo_fsm doesn't allow having 2 FSM types with same name registered,
  hence the "TBF" name has to be changed to "DL_TBF" and "UL_TBF" for
  each FSM class.
* FSM classes now use DTBFUL and DTBFDL instead of DTBF for logging. Some
  tests don't have those categories enabled, hence some log lines
  dissappear (it's actually fine we don't care about those in the test
  cases).

Change-Id: I879af3f4b3e330687d498cd59f5f4933d6ca56f0
2022-11-18 16:54:20 +01:00
Pau Espin c6e4aeff95 Refactor tbf_is_tfi_assigned() to avoid accessing tbf->state_fsm
The state_fsm field will be moved to subclass (DL_TBF/UL_TBF) in a
follow up commit when splitting the tbf_fsm.c implementation per
subclass.
Rearrange a bit the code to access the using the subclass pointer in the
only sublcass where it needs to be used (DL_TBF).

Change-Id: I360485c73be8636565f89ba29796d84ac94fd94e
2022-11-18 14:16:56 +01:00
Pau Espin 1e1275faee tbf: Add tbf_as_{ul,dl}_tbf_const func helpers
This way we can easily get the subclass from the parent if the pointer
is const. Similar to what we already have for the opposite direction
{ul,dl}_tbf_as_tbf_const().

Change-Id: I35e650d13ecf3a5020d136e7d8d99837786503e2
2022-11-18 14:16:56 +01:00
Pau Espin ac9ee9aa8d tbf: Drop unused function
Change-Id: I5d4b411585321d94fefdd01f22c62932d4a8f83a
2022-11-18 14:16:56 +01:00
Pau Espin f197f15b2d tbf_fsm: Move osmo_fsm_inst fi out of struct tbf_fsm_ctx
This is a preparatory step towards splitting tbf_fsm.c into tbf_ul_fsm.c
and tbf_dl_fsm.c.
In order to accomplish it, the struct tbf_fsm_ctx will also be
duplicated (and each one will contain a explicit ul_tbf/dl_tbf pointer).
Hence, a DL_TBF will have a struct tbf_dl_fsm_ctx and a UL_TBF will have
a struct tbf_ul_fsm_ctx, since those hold implementation specific
state. However, the FSM interface will be partly shared (events,
states), and hence we want to keep the "fi" pointer into the "tbf"
parent class so that it can be used regardless of the tbf direction
type.

Change-Id: I03e691ccf6a94431caa55653349158f5b85db017
2022-11-18 14:16:55 +01:00