Commit Graph

2134 Commits

Author SHA1 Message Date
Pau Espin 2f94b77d8e tests/llc: Add test_llc_meta_pdu_life_expire
Related: OS#5508
Change-Id: I7ba6be32778e2c2b22723db10fa66655812c8452
2022-04-05 11:16:17 +00:00
Pau Espin 6b1e9515c9 llc_queue: Refactor to handle codel_state per prio queue internally
A CoDel state per prio queue is needed, otherwise the sojourn time state
is not properly reset when a high prio packet is dequeued.

If we have a global codel state shared for all prio queues of an MS, then
basically high prio (GMM) packets will "never" be dropped because they are
handled/dequeued way quicker, so it's sojourn time will be below the
threshold most probably, stopping the "dropping" state for the rest of
lower prio packets.

The handling of different codel states is moved from MS object to the
llc_queue, also offloading already loaded dl_tbf.cpp in the process.
This will also allow in the future setting different CoDel parameters
for different priority queues if needed.

Tests need to be adapted since now the CoDel and PDU lifetime are
incorporated into the llc_queue_dequeue(). Also because dequeue now also
accesses related MS fields.

Related: OS#5508
Change-Id: I2bce2e82ab6389d8a70130a5c26a966a316b0fa4
2022-04-05 11:16:17 +00:00
Pau Espin 9c2512a638 pdch is_enabled: Use API getter instead of accessing field directly
Change-Id: I389f42ef2e95d28643ec51771e46d083d4e20057
2022-04-05 10:43:39 +00:00
Pau Espin 5c598c76cd llc: schedule frames to MS based on SAPI priority
The CoDel state is still applied globally, which could cause higher prio
messages (GMM) to clear dropping state (since those are left for a
smaller period of time inside the queue).

CoDel state will be moved per prio-queue in a follow-up patch.

Related: OS#5508
Related: SYS#5908
Change-Id: Ie8bd91eeac4fa7487d4f11b808dea95737041c7e
2022-04-04 17:26:14 +02:00
Pau Espin 1cf38fcbe8 gprs_ms_storage: MS always has non NULL ms->bts
An MS object is always attached to a BTS through its lifespan.

Change-Id: Ie9ed9341a82b5edaee09da9156e95a616088f950
2022-04-01 17:24:47 +02:00
Pau Espin b498746a49 ms: Remove unneeded bts!=NULL check
The ms_alloc function is expected to always have a proper bts object
passed, since an ms is always attached at a BTS.

Change-Id: I10b3c94dcb2fed4bff40b1ab7ea455175cf77ce4
2022-04-01 17:24:47 +02:00
Pau Espin de4dc29c12 ms: validate codel enabled against proper define
This is a cosmetic change, since LLC_CODEL_DISABLE is defined as 0.
It clarifies though the meaning of the if condition.

Change-Id: I7c4bda5977a94c2aaf01ca368570f80fd6ebae00
2022-04-01 17:24:47 +02:00
Pau Espin ee1cb75127 llc: Move static functions below related object
Move all static functions related to gprs_llc object below it, so that
it's easy finding all related APIs being together.

Change-Id: If781e66c6e8a119cc22948c82167ceb90270ea6d
2022-03-31 19:47:39 +02:00
Pau Espin 4f8384bfbb llc: Convert to C
There's no real reason (other than historical) why code in llc should be
kept as c++ code. Let's rewrite it as C so that it can be included by
existing C code without having to add C->C++ shim, ifdefs all around,
etc.
This simplifies code and easies modification/improvement of the related
objects.

Change-Id: I250680ba581167d7398b2f734769c756cbb61c48
2022-03-31 19:42:15 +02:00
Pau Espin 1463383505 llc: Convert to C: s/m_//g
Change-Id: Ia5272841392110b87725e87a7e6824c17a70d6d1
2022-03-31 19:09:08 +02:00
Pau Espin 2d92e3937f Fix assert hit if connecting to SGSN fails
"""
DLBSSGP ERROR gprs_bssgp_pcu.c:1278 Failed to connect!
DL1IF ERROR pcu_l1_if.cpp:827 No NSVC available to connect to the SGSN!
DRLCMAC INFO pdch.cpp:185 PDCH(bts=0,trx=0,ts=0) PDCH state: disabled => disabled
Assert failed m_is_enabled == 1 pdch.cpp:186
"""

Change-Id: I36dc64fa807091bf2b565417c1185c4cb399932b
2022-03-30 22:09:12 +02:00
Oliver Smith 8d03c50024 treewide: remove FSF address
Remove the paragraph about writing to the Free Software Foundation's
mailing address. The FSF has changed addresses in the past, and may do
so again. In 2021 this is not useful, let's rather have a bit less
boilerplate at the start of source files.

Change-Id: I4a49dbeeec89b22624c968152118aecf8886dac6
2021-12-14 12:19:13 +01:00
Pau Espin 11f72dfbcb Bump version: 0.9.0.280-56b7c-dirty → 1.0.0
Change-Id: I38b083755e71eac5158e68ef958e210eeced9038
2021-11-16 16:47:29 +01:00
Pau Espin 56b7c64298 Move T3172 T_defs_bts->T_defs_pcu to have it configurable in VTY
The timers in T_defs_bts are actually set by BTS over PCUIF. That's not
the case for T3172, hence let's move it to T_defs_pcu so it can be
configured over VTY.

Change-Id: If24191b2305007aa5be5b551c913738a97597c77
2021-11-16 11:35:23 +01:00
Pau Espin 683ce64039 T_defs_pcu: Set default val for X2000 to 0 ms
That timer is really only useful to free the tbf asynchronously after
generating the Pkt Access Reject message, since we have nothing to do
with it after the message is sent, and the dummt TBF doesn't really hold
any reserved resource such as USF or TFI.
The timer is useful to still do the freeing asyncrhonously, since the
scheduler is interacting with the TBF during the code path, but there's
no real need to keep the object alive for 2 ms afterwards. Having a
default value of 0 ms is enough, since it fullfills the requirement
of freeing asnchronously.

The value of 2 ms was set initially when the reject support was added
here (e9a138e111), with no specific
explanation on the 2 ms value. It was just probably picked as a
convinience one, but 0 is actually more convinient.

Change-Id: I60e34e643f5c9d9afaf85530c54ab3232dc8f0be
2021-11-15 17:10:55 +00:00
Pau Espin e30153ea10 tbf_dl_ass_fsm: Drop unsued X2000 timer callback
That timer is only relevant for transmission of Packet Access Reject,
which happens only for Uplink assignment, and hence is only set in the
timer of tbf_ul_ass_fsm, never in tbf_dl_ass_fsm. This is probably a
copy-paste artifact when implementing both FSMs.

Change-Id: I95900e211eddb280c72fb712ba1da4d2230cb77b
2021-11-15 17:10:55 +00:00
Pau Espin 0dcbc07682 bts: Add counter availablePDCHAllocatedTime
We basically want to probe whether it's possible to allocate TBFs, or
whether we know it will fail due to all main resources being already in
use (TFI, USF).

Having bts_all_pdch_allocated() return false doesn't mean though that an
MS will be able to allocate a TBF for sure. That's because further
restrictions are applied based on MS: whether it was already attached to
a specific TRX, whether the ms_class allows for a certain multislot
combination, etc. However, it should provide a general idea on whether
for sure the PCU is unable to provide more allocations. More fine
grained state about failures can still be followed by looking at
tbf:alloc:failed:* rate counters.

Related: SYS#4878
Depends: Iabb17a08e6e1a86f168cdb008fba05ecd4776bdd (libosmocore)
Change-Id: Ie0f0c451558817bddc3fe1a0f0df531f14c9f1d3
2021-11-15 11:40:07 +01:00
Pau Espin 5deac1404d Fix MS ending up with assigned imsi 000
The whole paging path and data structre is cleaned up.
New MS helpers ms_imsi_is_valid() and ms_paging_group() are introduced
to help in the process and keep implementation details inside GprsMs
class.

Related: OS#5303
Change-Id: I4c0838b26ede58e4b711410eee2a8e4f71e9414b
2021-11-12 18:38:43 +01:00
Pau Espin 13866f02a2 vty: Introduce command 'gsmtap-remote-host' and 'gsmtap-category enable-all'
Related: OS#5306
Change-Id: Ibc6f78c46831b3c90ee3e97300fc13dc441df4c8
2021-11-12 17:01:28 +01:00
Pau Espin afd9393a2d pcu_main: Mark -r cmdline param as deprecated
We have VTY support for it enabled in osmo-pcu since a while ago. Let's
mark it as depcreated now so that we can drop this cmdline arg in the
future.

Change-Id: Ic39c94984cb311aac0464d69f564af6d5447bd0f
2021-11-12 17:00:34 +01:00
Pau Espin 17bfbedbc7 tbf_{dl,ul}_ass_fsm.c: use proper macro to log tbf
TBF can be either UL or DL in that FSM.

Change-Id: Ief0cd5298e062f11b0f39716162a67b87c9ff35f
2021-11-12 13:14:19 +01:00
Pau Espin bd1b90f141 tbf_dl_ass_fsm: Fix missing transition to NONE if DL TBF is nonexistent
If by the time the PktDlAss is to be scheduled by the scheduler the DL
TBF is gone, the FSM will abort the assignment and go back to state
NONE.
However, the transition was missing, ending up in the scheduler trying
to schedule the message unsuccessfuly lots of times per second, clogging
the logs and disrupting normal operation.

Related: OS#5293
Change-Id: I6f421e5ddc9894fee72de1102df35a76cf2f2647
2021-11-12 12:03:00 +00:00
Pau Espin 84f2b51a37 tbf_dl_ass_fsm: Log both TBFs if old TBF is handling assignment for new one
Change-Id: I4ec4eb2ca3f4fa576a4f9ada8c2462f59ca078b9
2021-11-12 12:03:00 +00:00
Pau Espin dbdf84eaff cosmetic: gprs_pcu.h: Fix typo in comment
Change-Id: I7140decb50e822bf412fa380dc8b6ef6486a5681
2021-11-11 14:11:40 +01:00
Pau Espin 7eb9e69506 tbf_ul_ass_fsm: Log both TBFs if old TBF is handling assignment for new one
Change-Id: If475560aab16b0a89743139189ff7720389132a5
2021-11-10 17:54:38 +01:00
Pau Espin 715aeb4ebc pdch: Increase log level of line informing about TS control change
This way it's the same log level as the one used in all other paths
using tbf_assign_control_ts() to assign tbf->control_ts =
tbf->first_common_ts, and this specific event is not lost from logs.

Change-Id: Ia32d835ee4c14d7d48391452b5e3d05ed88e0483
2021-11-10 17:21:43 +01:00
Pau Espin ace3b1bdc1 pdch: Drop previous UL TBF from MS who sent PktResReq through SBA
If the MS has a pending UL TBF but we just received a PktResReq on an
allocated SBA from it (same TLLI, hence same MS), then it means it
allocated the SBA through RACH req and hence it was on CCCH. That means
it was not active on any PDCH, hence for sure the previous UL TBF can be
dropped.

Related: OS#5293

Change-Id: I1f20dba56f46ea15cbb9b03bdc5b79d923491a3c
2021-11-10 16:11:19 +01:00
Pau Espin 54a126f6d4 pdch: Update ms_reserved_slots in GprsMS when TS becomes disabled
Otherwise, after the TS is disabled, a new TBF created for that MS may
end up in alloc_algorithm assigning the disabled TS, since it will be in
the mask of reserved PDCH TS for that MS.

Related: OS#5265
Change-Id: Ifc59ac37fa6b0ad9ecc8f76326928611e748b11c
2021-11-10 11:36:55 +01:00
Pau Espin 853cdf85eb ts_alloc: rename variable to clarify meaning
The variable counts reserved slots, not available one. It can easily be
seen by checking function count_slots() documentation "Number of
reserved TS".

The previous naming was used probably to indicate "available to reserve"
TS, but the naming is misleading.

Change-Id: Ib58e87d5a067d20d0b331fe32dff61b95ecc3e3f
2021-11-10 11:36:55 +01:00
Pau Espin 978071bce9 ts_alloc: rename function to clraify what it does
The function updates nothing, so it's misleading. It simply counts
slots, so let's call it like that.

Change-Id: I55954321d6f2b5e755177a8829512da371e934aa
2021-11-10 11:36:55 +01:00
Pau Espin d9066272ec ts_alloc: Simplify tfi_find_free logic
Avoid passing an extra pram which is accessible by GprsMs object already
being passed. Once, the "trx = ms_current_trx(ms)" is moved inside the
tfi_find_free function, it becomes clear that all the logic can be
further simplified.

Change-Id: I733d9bee3fa1dfc647da9f150b30014fbdab7442
2021-11-10 11:36:14 +01:00
Pau Espin fb904fbbd9 pdch: Log DL TBF originating the new UL TBF
Change-Id: Ie4257a2468d589464d0d56882e4408e4bcfe340f
2021-11-09 14:01:40 +01:00
Pau Espin 304b10a8b5 pdch: Log TS enable/disable transitions
Change-Id: I6780634de4791382ccd25bf7b74f5286420e2c52
2021-11-09 12:22:48 +01:00
Pau Espin 20dfa54508 pdch: Log line detaching TBF at start of the function
Log before the action is done ("Detaching", not "Detached"). This way,
if something crashes we see that last line.

Change-Id: I6811d3772e2ac850741d3db5ec32be5c0812e81a
2021-11-09 12:15:23 +01:00
Pau Espin ef8a730f6d bts_pch_timer: Avoid resend Paging Request over PCUIF if T3113 is armed
Let's avoid flooding the BTS and taking CCCH resources for no good
reason. If user configures everything correctly, the SGSN should not
attempt a retry after similar timer >= T3113.

Related: OS#5297
Change-Id: I2a77714648d16ccff2a340ce775e83dcc5ffe707
2021-11-08 18:54:12 +00:00
Pau Espin 19b3392166 tests/alloc: Extend test_bts_pch_timer() to validate MI type TMSI
Change-Id: I3673d387fa735b54fbc137ffaa18af581fa1b85a
2021-11-08 18:54:12 +00:00
Pau Espin 13961c9b7a bts_pch_timer: Fix timer working only for MI type IMSI
This commit actually addresses 2 errors:

1- gprs_bssgp_pcu_rx_paging_ps() called gprs_rlcmac_paging_request()
with MI which can be either TMSI or IMSI, and the later always called
bts_pch_timer_start() passing mi->imsi regardless of the MI type. Hence,
trash was being accessed & stored into bts_pch_timer structures if MI
type used for paging was TMSI.

2- When the MS received the PS paging on CCCH and requests an UL TBF, it
will send some data. If one phase access is used for whatever reason,
the IMSI may not be yet available in the GprsMs object since we never
received it (and we'd only have it by means of PktResourceReq). Hence,
let's better first try to match the paging by TLLI/TMSI if set in both
places, and otherwise use the IMSI.

Related: OS#5297
Change-Id: Iedffb7c6978a3faf0fc26ce2181dde9791a8b6f4
2021-11-08 18:54:12 +00:00
Pau Espin f8a93cb882 doc: Update counters_generated.adoc using osmo_vty_interact.py
osmo_interact_vty.py -c 'enable;show asciidoc counters' -p 4240 -H 127.0.0.1 -O doc/manuals/chapters/counters_generated.adoc

Change-Id: I88e8e5548876fd6515e6bfcccec47bc48ba0ceb4
2021-11-08 18:33:04 +00:00
Pau Espin ba5683194a Add counter for successful contention resolution procedures
This counter is related to succPDTCHSeizures,
(3GPP TS 52.402 B.2.1.51 Successful PDTCH seizures).

The relevant event when the first RLC block on the PDCH from the MS is
received is the fact that contention resolution is considered as done in
the network side. Hence, name the counter that way to ease
interpretation.

Related: SYS#4878
Change-Id: I3d67e3e68907921b43f2ca4398ad9578c0b2618c
2021-11-08 18:33:04 +00:00
Pau Espin cc77eed9d9 tbf_ul: Improve documentation of tbf_alloc_ul_pacch()
Change-Id: I59493788b4a54610a70f3eb4c31fd05f6e39e63d
2021-11-08 18:33:04 +00:00
Pau Espin 10b29153b7 pdch::rcv_resource_request(): Use local var to store bts pointer
Change-Id: Ica727c4b70cecc0ddb5d2a235bfc416735754b61
2021-11-08 18:33:04 +00:00
Pau Espin f61acd75c4 cosmetic: Add parenthesis around expression to clarify it
Change-Id: I621ef02868aff2bd23d82c8bc70e5cdbc391fbc2
2021-11-08 16:34:17 +01:00
Pau Espin dbd3b78a9b tbf_ul: Update FSM names for dummy reject TBFs
This allows easily identifying dummt TBFs created to send assignment
rejects.

Change-Id: I73a197795a9c8e9cd8dc06bf46ddb8f275d2c289
2021-11-08 16:33:51 +01:00
Pau Espin dff399fa42 bts: Add counters for successful 1,2 phase pkt access
These counters relate to succPDTCHAssProcsPerCause
(B.2.1.50 Successful Packet Channel Assignment Procedures, per cause).

Related: SYS#4878
Change-Id: I494afab337f2557ffa38e4c7ff2c15a1647a1e04
2021-11-08 15:26:49 +00:00
Pau Espin a02f945479 tbf: Set tfi to initial special value
This allows distinguishing when a TBF didn't set the TFI. Useful to
identify dummy reject TBFs, etc, and make sure a non-dummy TBF set its
TFI properly.

Change-Id: Iecf54a24041bd14f4ef5b86e57c3732e1b69d463
2021-11-08 13:24:20 +01:00
Pau Espin d3d46de278 tbf: Mark initial first_(common_)ts with special value
This way it's easier to distinguish when this value was not properly
filled when debugging or looking at logs.

Change-Id: I0c9c9fdcfca9eb15125ea49efcbb76711850052e
2021-11-08 13:24:20 +01:00
Pau Espin de0eeafd2e tbf: Set m_created_ts in constructor
This way the timestamp is also set for dummy reject TBFs. For other
TBFs, setup() is called immediatelly after calling the constructor, so
we are fine too.

Change-Id: I2966ec7f3f9161d528a173d94797b72d1398c747
2021-11-08 13:24:20 +01:00
Pau Espin 063296883f tbf_ul: Set first_(common_)ts in handle_tbf_reject
Let's set them to match expectancies for this type of dummy TBFs, in
order to avoid acidental use/access of other timeslots to the one where
the reject was associated to.

Also use tbf_assign_control_ts() to log the TS used for the TBF, similar
to what's used in other places where control_ts is assigned.

Related: OS#5293
Change-Id: I32dcb29ad24519082b8665921efcce0b5a16d12e
2021-11-08 13:24:20 +01:00
Pau Espin 92cbe4aee0 pdch: Improve log line and increase log level
Change-Id: Ie593331a69f6b8ec3b21e2b274a1aa060b2dc439
2021-11-08 13:24:19 +01:00
Pau Espin b6babc39dc tbf: Increase log level of line about unable to allocate poll for TBF
Change-Id: I0bd972d3b68017f12a0816a27162e3a409b1893a
2021-11-08 13:24:19 +01:00