Commit Graph
755 Commits
Author SHA1 Message Date
francescomani 2a3a27a48f fix CORESET start PRB according to standard at OAI gNB 2025-12-22 17:31:26 +01:00
Sakthivel Velumani c288f84651 mac: fix fapi beam id
Set MSB of fapi beam ID based on flag for beamforming done in hiPHY or
loPHY.
2025-12-15 14:35:50 +00:00
francescomani ca0cc079a6 avoid having negative BWP size if BWP start > BWP size 2025-12-03 17:22:06 +01:00
francescomani 98618a7dc8 The network must configure BWPs with consecutive IDs from 1
... so if we want to have 1 BWP configured at any given time we need to
reconfigure BWP 1 every time. This means that since the gNB has more
than 1 BWPs (for use for different UEs), that there is a "gNB BWP ID"
(as used by the gNB), which can be any BWP ID X, and one "UE BWP ID",
which is always 1. This commit implements this distinction.
2025-12-03 17:20:11 +01:00
Robert Schmidt b547dfe056 apply new configuration after receiving ACK for RRCreconfiguration message 2025-12-03 13:31:05 +01:00
francescomani 1e610af168 taking into account maximum number of layers for PDSCH supported by the UE for TBSlbrm 2025-11-26 16:45:56 +01:00
Jaroslava Fiedlerova 304c3ef9c4 Merge remote-tracking branch 'origin/mac-e2-ci' into integration_2025_w46 (!3752)
[MAC] Add UL total/used aggregated MAC stats; [E2 agent] Properly calculate
used UE PRBs in KPM; [CI] Simplify and improve the Undeploy_Object() and
implement Stop_Object()

- Create common dlul_mac_stats_t struct for both DL and UL total/used aggregated
  PRBs
- Use correct unit [%] for RRU.PrbTotDl and RRU.PrbTotUl , instead of [PRBs]
- Use correct unit [Mb] for DRB.PdcpSduVolumeDL and DRB.PdcpSduVolumeUL [kb]
- Implement Stop_Object() (docker compose stop = SIGTERM)
- Simplify the Undeploy_Object() function
- Improve the logging for Deploy/Undeploy_Object() functions
- OAI-FlexRIC CI: properly stop all the containers (one by one or a subgroup of
  running containers), and rename oai-flexric to nearRT-RIC container
2025-11-14 17:25:25 +01:00
Robert SchmidtandTeodora Vladić 021b546cf3 Add UL mac stats and create a common struct for both DL and UL
DL stats (aggregated total and used PRBs) previosuly used only for O1 interface,
now finds the purpose for E2 interface as well.

New UL stats (aggregated total and used PRBs) serve for E2 interface only.

Co-authored-by: Teodora Vladić <teodora.vladic@openairinterface.org>
2025-11-13 11:58:09 +01:00
Robert Schmidt 17ee9db072 MAC: total_prb_aggregate: collect over carrierBandwidth 2025-11-13 11:57:12 +01:00
Thomas Schlichter 8124203481 gNB: fix MAC TA command scheduling if measurement gaps are configured
In the current implementation, if UE transmission is interrupted via nr_mac_interrupt_ue_transmission(),
UE_sched_ctrl.ta_frame is modified to be the previous frame avoiding TA scheduling in the measurement gap.
So the next scheduled TA is shifted to be in 99 frames. As there are other measurement gaps before that,
the scheduled TA is always shifted, but actually never reached, effectively disabling the MAC TA commands.

To fix this, UE_sched_ctrl.ta_frame is changed to not indicate the last TA command transmission, but the
next one. This allows to check in nr_mac_interrupt_ue_transmission() if the next TA command transmission
is within the measurement gap and if so shift it to just after that gap.
2025-11-11 15:20:18 +01:00
Robert Schmidt 916455f027 Move update_dlsch_buffer() into pf_dl()
This slightly speeds up the scheduler (it e.g., does not need to check
for UEs that have retransmissions), and harmonizes with pf_ul(), which
evaluates (UL) BSR at a similar place within the scheduler.
2025-10-30 23:13:53 +01:00
Robert Schmidt 24399eac2d update_dlsch_buffer() for individual UEs 2025-10-30 23:13:53 +01:00
Robert Schmidt 27a022d6f8 Fix: avoid retransmission with 0 RBs
Check and return, if necessary, that we have enough resources to make
retransmissions. Without, we can asserts in L1, such as

    Assertion (NPRB>0 && (NPRB + RBstart <= BWPsize)) failed!
    In PRBalloc_to_locationandbandwidth0() openairinterface5g/common/utils/nr/nr_common.c:506
    Illegal NPRB/RBstart Configuration (0,51) for BWPsize 51

which indicates that the scheduler requested a transmission with 0 PRBs,
which does not make sense.
2025-10-30 23:13:46 +01:00
Robert Schmidt 924f28ed70 Refactor to call post-processor in place
Call the post-processor when the allocation is "fixed" (i.e., nothing
changes anymore), instead of having a final loop across all UEs that
might potentially be costly.

In order to calculate the PF metric, note that the statistics "reset" is
moved into pf_dl() instead of the post-processing loop, as it has to be
done on each slot.

See also: dd98030202 ("Refactor to call post-processor in place")
2025-10-30 19:14:06 +01:00
Robert Schmidt d4dc044d2d pf_dl(): refactor NR_pdsch_sched usage
As in parent commit.
2025-10-30 19:14:06 +01:00
Robert Schmidt 2daa1dac18 allocate_dl_retransmission(): refactor NR_sched_pdsch usage
Assign NR_sched_pdsch to sched_ctrl->sched_pdsch in one place, where the
post-processing functionality will be called in a follow-up commit. This
should result in no functional change.
2025-10-30 19:14:06 +01:00
Robert Schmidt 761a70d199 Remove use of curInfo in allocate_dl_retransmission()
It seems to be assumed that curInfo actually has the currently active
number of layers/PMI. However, I am not sure this would always be true
(e.g., UE might not have been scheduled for some slots, but number of
layers decreased as reported by CSI).  Instead, recalculate the info
from scratch when necessary.
2025-10-30 19:14:06 +01:00
Robert Schmidt a6d16a66d2 Reduce scope of NR_sched_pdsch in first DL sched loop
We don't need NR_sched_pdsch here. Remove the use of it.
2025-10-30 19:14:06 +01:00
Robert Schmidt 1622724384 Store selected MCS in UE iterator
PF uses MCS and average throughput to decide which UE to schedule. Thus,
the first loop decides on MCS, whereas the second does the "main UE
allocation" after sorting by the PF metric.

A follow-up commit will remove sched_pusch from NR_UE_sched_ctrl_t.
Thus, we cannot rely on sched_ctrl to store the MCS in the first loop,
and look it up from there in the second. Instead, store it as part of
the UE iterator data, and take it from there.

See also: f3068caa37 ("Store selected MCS in UE iterator", for UL)
2025-10-30 19:14:06 +01:00
Robert Schmidt 1a752a8433 Remove unused/write-only code 2025-10-30 19:14:06 +01:00
Robert Schmidt ce744fd24f Refactor DLSCH post processor into post_process_dlsch()
Introduce a struct with information on FAPI structures to save resource
and data allocation into. It's in nr_mac_gNB.h because the next commits
will reuse this for all preprocessors.
2025-10-30 19:14:06 +01:00
francescomani 966bab9cca do not assert for mismatched TBS in phy-test mode 2025-09-23 10:39:37 +02:00
Robert Schmidt b60572d1fc Merge remote-tracking branch 'origin/refactor-measConfig' into integration_2025_w37 (!3531)
Refactor measConfig

- Refactor and minor improvements in get_MeasConfig function;
- Add support for band in neighbourConfiguration (It is currently
  possible to handover cells with different frequencies, as long as they
  are in the same band, but this MR allows the handover to also be done
  between cells in different bands).
2025-09-12 12:39:44 +02:00
Robert Schmidt 89ebbb4192 Do not trigger ul failure in measgap scheduling and standardize the verification if MAC is active in other scheduling functions 2025-09-11 11:49:31 +01:00
Thomas Schlichter 9346b50eb3 gNB: consider also the min_mcs when computing the DL MCS if only one round is used 2025-09-09 11:17:43 +02:00
francescomani 15bb046f9c adding a missing beam reaset in pf_dl 2025-09-01 17:25:01 +02:00
francescomani 169de8cdca remove unnecessary input in get_cce_index 2025-09-01 17:17:06 +02:00
Robert Schmidt b11354126f Merge remote-tracking branch 'origin/t-gnb-mac' into integration_2025_w35 (!3538)
add a new graphical T tracer to see gNB MAC scheduling decisions

May be useful for debugging
2025-08-27 15:14:55 +02:00
Robert Schmidt a30bee2fab DLSCH sched: Fix coefficients for UE list ordering
Update the comparator() to properly sort UEs based on their coefficient
by appliey a consistent logic of -1/0/1 (see man qsort) for
smaller/equal/larger.  The previous logic was only sorting based on 0/1
(equal/larger), which would result in some UEs with a high coefficient
not necessarily advancing to the start of the list, which could reduce
the likelihood of them being scheduled when they actually should (in
other words, this should improve fairness).

See also: 62e4025bc8 ("Integrate inactivity scheduling into main
    allocation loop")
2025-08-21 10:33:59 +02:00
Robert Schmidt 8a091a0b84 DLSCH sched: only sort relevant part of list
This reduces the amount of elements to compare.

See also: 7ee8e8eaba ("Fix bug: only sort relevant part of list")
2025-08-21 10:32:23 +02:00
Cedric Roux c4562df2e7 T: add some traces
To be used by next commit.
2025-08-18 15:26:10 +02:00
Robert Schmidt 47a961d876 Merge remote-tracking branch 'origin/refactor-ulsch' into integration_2025_w33 (!3521)
Refactor ULSCH scheduler towards more TDD pattern flexibility

Refactors ULSCH scheduler, notably to support "UL-heavy" TDD patterns,
e.g., DSUUU. Also allows to run TDD pattern2 with UL slots, which was a
limitation in the previous code.
2025-08-14 14:30:58 +02:00
Robert Schmidt 948c0d5d2c Count and print failed CCE allocations for UL/DL 2025-08-14 12:50:03 +02:00
Gabriele Gemmi ce06099a99 Configuration of FAPI Beamforming PDU for Aerial PBBF 2025-08-13 19:07:53 +02:00
rmagueta 932b177667 Add logic for measgap scheduling 2025-07-11 18:09:23 +01:00
Robert Schmidt 8dc12a0b35 Merge remote-tracking branch 'origin/gnb-mac-stats-cleanup' into integration_2025_w27 (!3497)
Update/refine gNB MAC stats, update L1

Only applicable with -q option.

Print a number of statistics, e.g., rx_ulsch_sdu to track UL MAC stats
timing. Remove unused time_meas_t definitions, and fix the name for the
total gNB scheduler time.

Print the RU stats in nrL1_stats.log, as some are already there, and do
not "pollute" the periodic logs when -q is enabled.

I used this to see why there are sometimes late slots with Aerial. I
used the above stats to get a general overview. This additional patch
shows that at least in RFsim, the RLC indication in rx ulsch sdu can
take up to 20us on my machine. Given that we can have multiple PDUs in
UL (10?), this can amount to a sizeable amount of time. While this is
for another MR, I thought the cleanup would be nice to have.
2025-07-01 08:58:39 +02:00
francescomani a9dc588921 common function to generate FAPI DCI PDU 2025-06-30 15:13:32 +02:00
francescomani 11711c4b7b common function to generate FAPI DL DCI payload 2025-06-30 15:10:17 +02:00
francescomani 548d6ec3a1 include BWP info in sched_pdsch and use also for RA and BCH 2025-06-30 14:53:19 +02:00
francescomani e64516d222 common function to generate FAPI PDSCH payload 2025-06-30 14:53:19 +02:00
francescomani 3b6b6e018d improve PDSCH DMRS structure with additional information 2025-06-30 14:53:19 +02:00
francescomani b238c196ea take into account no UE case for get_pdsch_bwp_start_size 2025-06-30 14:53:19 +02:00
Robert Schmidt 528e42c357 Update/refine MAC stats
Print a number of statistics, e.g., rx_ulsch_sdu to track UL MAC stats
timing. Remove unused time_meas_t definitions, and fix the name for the
total gNB scheduler time.
2025-06-26 12:09:28 +02:00
Robert Schmidt 15370e7192 Implement RB suspend at gNB MAC
Add a flag for each RB that tracks suspension state. Mark all RBs
(except SRB1) as suspended on reestablishment, and de-suspend on
reconfiguration. Only check RLC status for non-suspended RBs. For UL
data traffic, check that DRB/SRB2 exist (SRB1 should be there as soon as
the UE context exists).
2025-06-12 15:39:00 +02:00
francescomani 3020200288 in case of DCIX0 38.214 tells us to assume it is always type1 allocation 2025-06-06 11:40:47 +02:00
luis_pereira87 7b1c1ddc17 Fix resource block assignment information (RIV field) for DCI format 1_0 when scheduling in any type of PDCCH common search space 2025-05-15 16:14:31 +01:00
luis_pereira87 35d5309ef1 Fix PDSCH BWP Start and Size when PDSCH is scheduled with a DCI format 1_0 in any type of PDCCH common search space 2025-05-15 16:14:31 +01:00
francescomani 8f62baefa6 Use list of UEs during RA instead of array of RA processes
- rewrite add_UE_to_list() and rewrite remove_UE_from_list() to simplify
  list handling
- return pointer from get_new_nr_ue_inst(); it's completely freed by
  delete_nr_ue_data()
- have add_new_UE_RA() add UE context to access list; remove with
  nr_release_ra_UE()
- have add_connected_nr_ue() only add UE to connected list; to move from
  access to connected use transition_ra_connected_nr_ue(); remove with
  mac_remove_nr_ue() as previously
- free memory on problems during RA
- add some documentation
- in NSA/HO: check for pre-configured RA process
- there are asserts in all functions to clarify when a UE has RA
2025-05-01 10:48:11 +02:00
francescomani a7c199cabf new name for UE list 2025-05-01 10:04:41 +02:00
francescomani 04213f2981 schedule SIBs other than 1 (including fixes for SIB19) 2025-04-14 10:15:50 +02:00