aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2023-06-20Differentiate between T3192 and T3193pespin/wipPau Espin Pedrol5-23/+90
T3192 on the MS side (boadcasted by the network on SI13) is used for the MS to stay monitoring the PDCH of a DL TBF after sending PKT DL ACK/NACK for the last DL data block (FinalAck=1). T3193 is the counterpart in the network, defined as >T3192, which is used to make sure the TFI is no longer used by the MS and hence can be reused/re-assigned again. Hence, we want to differentiate between those 2 timers, since the first one gives us information on how late can we still tx PktDlAss on PACCH on that DL TBF, while the later only provides info on when to free the DL TBF in order to reuse the TFI. Change-Id: I7421342461bf159d945651037e6fe690f88c6fae
2023-06-20pdch.cpp: Drop impossible code pathPau Espin Pedrol1-3/+0
In that code path, new_tbf is an UPLINK_TBF. Uplink TBFs (tbf_ul_fsm.c) don't use state TBF_ST_WAIT_RELEASE, hence that condition cannot ever be true. Change-Id: I379d4140326a46e94914152fe9b735de852ceda0
2023-06-20cosmetic: tbf_fsm: Fix typo in commentPau Espin Pedrol1-1/+1
Change-Id: Iba0d438f9ce20a5a4e293b0b36565f182824a136
2023-06-20tbf_dl_fsm: Drop impossible eventPau Espin Pedrol3-829/+2329
When sending the last DL block, the FSM moves FLOW->FINISHED. Hence, it is impossible to receive the FINAL_ACK in state flow, when we didn't yet sent the last DL block (it's only possible if there's a bug in the MS). TbfTest need to be adapted since they where acting wrong. Change-Id: I3288743ff01ff84c3d345b6efb7c3fb6ca934791
2023-06-20Store T3192 value received from SI13, do some sanity checksPau Espin Pedrol2-1/+7
Timer T3192 may be used in the future to know wheter a DL TBF assignment can be sent on PACCH after the last DL TBF has finished (final ACK). Change-Id: Ie5f6251ee773f56771f9a9507711a20e6282aac6
2023-06-20bts: Use same default value for T3193 as set in osmo-bts/bscPau Espin Pedrol1-1/+1
That timer is configured by value sent over PCUIF, hence better have it to the same default value in osmo-bsc/osmo-bts. Change-Id: I498f05ff4d232164690d177430e90eb99b4eea9d
2023-06-20Fix DL_TBF PACCH ass done on UL_TBF already scheduled to tx last PKT CTRL ACKPau Espin Pedrol2-18/+25
Dispatching TBF_EV_CONTENTION_RESOLUTION_MS_SUCCESS means the UL TBF is able to be used to assign DL TBFs over PACCH. However, there's an extra implicit restriction: if the PCU already sent the final UL ACK/NACK to that UL TBF, then whatever message sent after it cannot be reliably answered, since the MS will go back to idle state after issues the PKT CTRL ACK for that final UL ACK/NACK. This condition is already being checked in contention_resolution_success(): """ if (ms_need_dl_tbf(ms()) && !tbf_ul_ack_waiting_cnf_final_ack(this)) ms_new_dl_tbf_assigned_on_pacch(ms(), this); """ Since we are considering the UL TBF to have done contention resolution when we transmit the *first* UL ACK/NACK, it mans we are doing both things on the same code path iif the *first* UL ACK/NACK is at the same time the *final* UL ACK for that UL TBF. This can happen if the UL TBF is only sending 1 block, which will have CV=0. This can usually happen during GMM Attach Request. In this scenario, with current code goes into a situation where first the TBF_EV_CONTENTION_RESOLUTION_MS_SUCCESS is triggered and *afterwards* the UL_ACK/NACK state is updated. As a result, the code snippet check above (!tbf_ul_ack_waiting_cnf_final_ack()) will be true and the DL TBF be assigned, but afterwards in the same code path it figures out the final ack happens. In order to fix this, first update the ACK/NACK state and only afterwards trigger the Contention Resolution Success event. Change-Id: I62ae91b494e4fd0ade3f4a3ba3817bcaedbdebf5
2023-06-16pcu_l1_if: use correct SAPI in PCUIF message PCU_IF_MSG_DATA_CNF_DTPhilipp Maier1-1/+1
When we receive PCU_IF_MSG_DATA_CNF_DT, we check on PCU_IF_SAPI_PCH. This is formally not correct, we should check on PCU_IF_SAPI_PCH_DT instead. (This patch will only affect osmo-bsc but not osmo-bts. The reason for this is that osmo-bts still uses the older PCUIF v.10) Depends: osmo-bsc.git Id5c799e625c56e57f7b51cd4fb57f5bea9c973d2 Change-Id: I0883b51fc232ec0267f1511c3a37c0bcd0967a08
2023-06-13cosmetic: Improve commentPau Espin Pedrol1-3/+3
Change-Id: I8c963ba7421faf2b3dcab006ea629c4628d17b44
2023-06-13Change several log lines to start with capital letterPau Espin Pedrol3-40/+40
Change-Id: I98c59dd833b3d0ada5b1ffdba7a5fc2e8cbf6241
2023-06-13Move call to bts_snd_dl_ass() from tbf_dl.cpp to tbf_dl_fsm.cPau Espin Pedrol2-10/+12
It makes more sense to have it there, where it is transmitted with more control depending on current state. Furthermore, it's counterpart/continuation TBF_EV_ASSIGN_PCUIF_CNF logic is already there, so it makes sense to have the whole logic together. Change-Id: I8af39d3087ccf197321f0c71cb29b67adbe1f36e
2023-06-13cosmetic: tbf_dl_fsm: Fix a couple comment typosPau Espin Pedrol1-2/+2
Change-Id: I1bcb199f3ba9564870b82ab67218ffbf72da4824
2023-06-13tests/tbf: Drop unneeded line re-setting CCCH ass typePau Espin Pedrol2-82/+0
Change-Id: I384753234651657c890faf1a4bdc1342e23e462b
2023-06-13Move GPRS_RLCMAC_FLAG_DL_ACK from state_fsm to dl_tbfPau Espin Pedrol5-5/+13
That flag was still in state_fsm for historical reasons (refactoring steps), but it's not really the best place for it, since it's really specific to dl_tbf and to transmit of data and DL ACK/NACK not the overall state of the TBF. Change-Id: I12c28c1a52f363f2d17a8bc24bbdf379543fc7a6
2023-06-13Move GPRS_RLCMAC_FLAG_TO_DL_ACK from state_fsm to dl_tbfPau Espin Pedrol4-9/+11
That flag was still in state_fsm for historical reasons (refactoring steps), but it's not really the best place for it, since it's really specific to dl_tbf and to transmit of data and DL ACK/NACK not the overall state of the TBF. Change-Id: I6b44121bbe185b58f3a77be8c12b4ef1f3180a30
2023-06-13tbf_{ul,dl}_fsm.c: Rearrange code/logs in mod_ass_type()Pau Espin Pedrol3-39/+69
First print what is going to be attempted, later alarm about the possible error, finally early return. Change-Id: I417e9689f60e7f5d3c8ef67543e56fea87c8eebd
2023-06-13tbf_{ul,dl}_fsm: Abort on unexpected pathPau Espin Pedrol2-8/+2
That path should not really happen. It happening would mean a totally wrong code being used. Hence, just abort() to simplify the code. Change-Id: Iaf65e909e45cc279e5be4b045c15174f910ffc12
2023-06-12tbf_dl_fsm: Fix wrong lchan specified in log linePau Espin Pedrol2-2/+2
Change-Id: I30111989c85001b0d9b98bf6f19c2247ab144433
2023-06-12Improve logging in bts_snd_dl_ass()Pau Espin Pedrol5-144/+78
Change macro to LOGPTBFDL since it's assigning a DL TBF. Clarify and join log lines. Change-Id: Ic5e01289f97bc113ba0a376a535e0cce5bccc5d1
2023-06-12Remove unused GPRS_RLCMAC_FLAG_TO_MASKpespin/t3193Pau Espin Pedrol3-11/+6
We are no longer making use of the 4 high bits in state_flags, so we can safely drop masking them. Change-Id: I1402310919578a09669530786296f34bf3b23ef2
2023-06-12Abort UL TBF PACCH Ass based on T3168Pau Espin Pedrol6-31/+83
It makes no sense to continue trying to assign the UL TBF over PACCH after T3168 * 4 retrans time out. This helps in releasing the TBF after we got rid of incorrect use of N3015 in UL TBFs. While at it, update tbf_ul_fsm to use T3168 instead of X2001, since it really needs to match T3168. Ideally it would not even have a timer itself and receive an event from tbf_ul_ass_fsm, but that's left as a TODO (it was already before) and simply the timer is updated. Change-Id: I87dff68dedd06b60501e7586d20faf02bb1f0c93
2023-06-11tbf_ul_fsm: Remove 3195 references, simplify T3169 set up as consequencePau Espin Pedrol3-24/+7
T3195 is triggered as consequence of N3105 reaching MAX, which only occurs in DL TBFs. Hence, T3195 also only applies to DL TBFs. The references to T3195 were there as a remains from time where we had a single tbf_fsm for both UL and DL TBFs. It can now be further simplified. Change-Id: I07a43c13289d50707115187a3f22df21443a7b4a
2023-06-09tbf_dl_fsm: Remove T3169 references, simplify T3195 set up as consequencePau Espin Pedrol2-24/+4
T3169 is triggered as consequence of N3101 and N3103 reaching MAX. Those counters are related to UL TBF only, and hence T3169 also only applies to UL TBFs. The references to T3169 were there as a remains from time where we had a single tbf_fsm for both UL and DL TBFs. It can now be further simplified. Change-Id: I02f7654518da617ce6704d807d34761dbadecf07
2023-06-09Avoid using N3105 in UL TBFsPau Espin Pedrol4-42/+15
This counter is only used in DL TBFs as per TS 44.060. section 13.4 "N3105": "When the network after sending a RRBP field in the _downlink RLC data block_ ..." (DL data blocks are only sent in DL TBFs). section 8.1.2.1: "If N3105 = N3105max, the network shall release the downlink TBF internally and start timer T3195 for that TBF. When T3195 expires, the network may reuse the TFI" Change-Id: I4d4f4d4d3e6e0539ea8ec2395bed00d059b84e04
2023-06-09Avoid using N3103 in DL TBFsPau Espin Pedrol1-0/+4
N3103 counts retransmits of PACKET UPLINK ACK/NACK with FinalACK=1. As a consequence, this counter only applies to UL TBFs. Current code is only using it in UL TBF, but add an assert to clarify and make sure it is not used unproperly in the future. Change-Id: I026d6145249ef19694f673ec7b4928af9d401dd6
2023-06-09Avoid using N3101 in DL TBFsPau Espin Pedrol2-21/+10
TS 44.060 13.4 "N3101" clearly states this counter relates to UL TBFs, since it only applies to TBFs for which USFs are set: "When the network after setting USF for a given TBF, receives a valid data block of this TBF from the mobile station in a block assigned for this USF, it will reset counter N3101. If PS Handover is not ongoing, the network will increment counter N3101 for each USF for which no data is received for this TBF." Furthermore, N3101 must only be reset for data blocks, so drop all rx CTRL block patches on UL TBF resetting the counter. Change-Id: I207f3906d13fc6feea2282e261f468a09db37d86
2023-06-09tbf_{ul,dl}_fsm: remove impossible dst state transitionsPau Espin Pedrol2-6/+3
There's no code path triggering change to those states. Change-Id: I05b3019e12ec37e11ac2561a94b2eacec8718755
2023-06-09tbf_{ul,dl}_fsm: Remove unneeded assertsPau Espin Pedrol2-6/+0
Those are leftovers from the time where we had a single tbf_fsm for both UL and DL TBF. Change-Id: I99359b8cb655b26ac2058f457423fdec178744ea
2023-06-09tbf_dl_fsm: Apply T3193 using FSM infrastructure instead of manuallyPau Espin Pedrol2-40/+7
Change-Id: Ic2a9d4b3c812c1533b2b7f97f27799b28b636c21
2023-06-06Log MS information in error message using usual MS APIPau Espin Pedrol1-10/+3
Also, drop duplicated TRX+TS info which is already displayed as part of LOGPDCH. Change-Id: I66211f4fa8a139ddd109623d90a926a53f180cfd
2023-06-03Document pcu_lsb() functionPau Espin Pedrol3-3/+6
While at it, fix a typo in the test output. This function is nowadays only used in ms_current_pacch_slots(), which is used only to print the PACCH TS (the first common UL & DL TS). Change-Id: Id1d0b681f6866618f9f3a8c64d6a6c809ca50ea7
2023-06-03pcu_utils.h: Replace software based bitcount impl with gcc builtinPau Espin Pedrol1-9/+2
The cast for different types it's not really needed, simply use the unsigned long long version to make sure we don't drop 1s, in any case __builtin_popcountll() will be quicker than what we used to have. Change-Id: I80ae72d34d53564fc3da1601ee48c8b2ffe79735
2023-06-02Use OSMO_UNLIKELY() in bts_rfn_to_fn()Pau Espin Pedrol1-1/+1
That case should only happen under really rare conditions, like receiving a RACH.ind before having received any DATA.ind. Change-Id: I4c71f3481764b501a4441bc735a87725884a3e75
2023-06-02Move call to bts_set_current_frame_number() earlier in the code pathPau Espin Pedrol3-51/+21
The FN time counter is not really PDCH specific, but to the whole BTS, and all other calls t the bts_set_current_frame_number() are already laced in pcu_l1_if.cpp; move it there. Change-Id: If36f22a1067c904fa7fda87bed5062b6738f0dd1
2023-06-02Use fn_valid() helper in pcu_rx_time_ind()Pau Espin Pedrol1-3/+1
Change-Id: I5b1f1d4cd621d81fb99b87761a878af242227a10
2023-06-02Derive FN from RFN once and cache it in struct rach_ind_paramsPau Espin Pedrol4-4/+6
Change-Id: Iaefb9650dfc5083360a4a24b9c17fdbf3115e51f
2023-06-02encoding: pass RFN to write_immediate_assignment(_reject)()Pau Espin Pedrol4-31/+31
Those function don't really require the full FN, hence let's pass only the required information. This makes the implementation here less dependent on how/if we are able to calculate full FNs based on RFN: We get an RFN, and we have to encode so that the RFN can be derived again, so feels less cumbersome having to go through RFN->FN->RFN which may only cause possible issues if there's some FN timing bug. 3GPP TS 44.018 10.5.2.30 Request Reference: "The purpose of the Request Reference information element is to provide the random access information used in the channel request and the frame number, FN modulo 42432" 3GPP TS 44.018 10.5.2.38 Starting Time: "The purpose of the Starting Time information element is to provide the start TDMA frame number, FN modulo 42432." Change-Id: If9b758434c00f2a3868534d5be84946809c989a9
2023-05-31bts: use RFN directly to calculate fn416Pau Espin Pedrol1-1/+1
RFN_MODULUS (42432) used to calculate is a multiple of 416: 416 * 102 = 42432 Hence, (X % 42432) % 416 == X % 416. So, there's no need to derive the full FN. Change-Id: If7a6a15c373a068bcc757d27937dd6eeac2e0bae
2023-05-31Error trying to obtain FN from RFN if curr_fn not knownPau Espin Pedrol1-4/+11
This may happen if a RACH.ind is received before any DATA.ind has been received. With usual osmo-bts-trx or osmo-bts-sysmo, this shouldn't happen nowadays, but it is still a problem with osmo-bts-virtual, where lower layers don't submit NOPE.ind in the absence of data, and hence it won't sent DATA.ind to osmo-pcu all the time. This change helps in showcasing confusing scenarios where the RFN generated in the Imm Ass was wrong. Change-Id: I29b7ba828fe890f90e35686bbb04d4abfe56b955
2023-05-31Use always RFN when handling RACH indicationsPau Espin Pedrol5-23/+27
The previous code was really confusing, passing full FNs as RFNs under certain external conditions, and then assuming the RFN input of rfn_to_fn() function could actually be a FN. As a result, we had a lot of code behaving slightly different depending on whether the incomding FN from pcuif was filled in by a BSC or a BTS. Avoid this b ehavior differentiation and always assume the most restricted one, aka RFN. Change-Id: Ib3b5702168195b595711cd0ff32c211b9aba429d
2023-05-31cosmetic: tbf_ul_ack_fsm: Clean up use of ul_tbf and tbf pointersPau Espin Pedrol1-6/+6
Change-Id: I51ebe8174006380821eb978bbd78f600c10b02e7
2023-05-31tbf: Improve TBF name description in logsPau Espin Pedrol7-301855/+301854
Change format to print the state at the end, to resemble more the same format used by FSMs. Furthermore, by moving it at the end, print it only when "enclousure" is requested, aka when not requested by FSM to update its internal name. The consequence of this logc is that log lines printed from FSM don't end up with the same state string printed twice in different places. While at it, shorten the EGPRS/GPRS indicator to one character, which should be understandable enough since it matches what's usually seen in mobile phones to signal one or another. Change-Id: I86b5f042fae77721b22fc026228677bd56768ba9
2023-05-26systemd: depend on networking-online.targetOliver Smith1-0/+2
Related: SYS#6400 Change-Id: Ifbac18a38e086e42c67499b7818cdf08629d0000
2023-05-22gprs_rlcmac: also use PCU_IF_SAPI_PCH_DT for paging MAC blocksPhilipp Maier3-9/+12
In the current code we still send PAGING COMMAND MAC blocks via SAPI PCU_IF_SAPI_PCH, which technically belongs to the older PCUIF version (v.10), which we are going to deprecate soon. Let's change this so that PAGING COMMAND MAC blocks will also be sent through PCU_IF_SAPI_PCH_DT. Since PAGING COMMAND messages require no confirmation by the receiving end we may set the TLLI field to GSM_RESERVED_TMSI. Depends: osmo-bsc.git I82443f2b402aa2416469c8c50b1c050323ef3b8f Related: OS#5927 Change-Id: I99cfe373fa157cfb32b74c113ad9935347653a71
2023-05-18copyright: fix typo: sysmocom s/s.m.f.c./s.f.m.c./ GmbHVadim Yanitskiy3-4/+4
Change-Id: If51895e67271c0913e000ff9d28db8d8fe761201
2023-05-12ctrl: drop deprecated neighbor resolution interfaceMax5-108/+1
Related: OS#5809 Change-Id: Iff008c77ab49dd8855d54d2d44198475086012e4
2023-05-10pcu_l1_if: replace magic numbers with IMSI_DIGITS_FOR_PAGINGPhilipp Maier1-2/+3
we have defined IMSI_DIGITS_FOR_PAGING but some parts of the code still use magic numbers (3), let's replace those as well. Change-Id: I9a1b6ba4578e2a8875d8d1a9e56c36dc2b33fe0d
2023-05-03pcu_l1_if_phy: fix API function namesPhilipp Maier19-35/+35
The functions l1if_open_pdch and l1if_close_pdch have a misleading naming since what they actually do is opening and closing the TRX since they return and accept a context (obj) that is valid for a whole TRX. This also explains why the other functions accept a timeslot as parameter in addition to the context. Let's rename those functions so that it is clear what they do. Related: OS#6022 Change-Id: I395a60b2fba39bac4facec78989bac20f0cef0d3
2023-05-03er_ccu_l1_if: use one ccu_desr per timeslotPhilipp Maier2-25/+46
At the moment only allocate one CCU descriptor and use it as context for the whole TRX. This is fine when running with one PDCH only but as soon as multiple PDCHs are used the CCU descriptor gets messed up. Let's fix this by introducing a TRX descriptor that contains an array of 8 CCU descriptors, one for each timeslot. Related: OS#6022 Change-Id: I09a51f34ce0edef79a797c4686c7b1d27c376e49
2023-04-28cosmetic: ms: fix formatting of function commentPau Espin Pedrol1-1/+2
Change-Id: I717c0ebd6e9af5388e94482842f5638777758b32