Commit Graph
11446 Commits
Author SHA1 Message Date
Reem Bahsoun 7dcf80398a Update docs and README files to align with modifications in config files 2024-11-12 13:55:49 +01:00
Robert Schmidt e0e1ca6583 Make SA the default mode, remove corresponding option 2024-11-12 13:55:49 +01:00
Robert Schmidt f216c47ace Merge remote-tracking branch 'origin/fix-regression-4G' into integration_2024_w44 (!3008)
Fix Regression 4G

- Fix various bugs and/or regressions in 4G code
- Also, the CI does not test RFsim 4G with --sanitize, enables this to
  detect problems.
2024-11-04 19:43:52 +01:00
Robert Schmidt 01aadcac1f Merge remote-tracking branch 'origin/rlc-optimization' into integration_2024_w44 (!3061)
RLC optimization

Two improvements:

- using functions instead of function pointers which enables inlining
- avoid 1 malloc/free per SDU

Benchmark results:

before:

    BM_nr_rlc_am_entity/20000           5036721 ns      5036541 ns          138
    BM_nr_rlc_am_entity/20000           5032061 ns      5031849 ns          138
    BM_nr_rlc_am_entity/20000           5037071 ns      5037056 ns          138
    BM_nr_rlc_am_entity/20000           5035472 ns      5035248 ns          138
    BM_nr_rlc_am_entity/20000           5032860 ns      5032681 ns          138
    BM_nr_rlc_am_entity/20000_mean      5034837 ns      5034675 ns            5
    BM_nr_rlc_am_entity/20000_median    5035472 ns      5035248 ns            5
    BM_nr_rlc_am_entity/20000_stddev       2267 ns         2315 ns            5
    BM_nr_rlc_am_entity/20000_cv           0.05 %          0.05 %             5

after:

    BM_nr_rlc_am_entity/20000           4974403 ns      4974202 ns          140
    BM_nr_rlc_am_entity/20000           4976705 ns      4976444 ns          140
    BM_nr_rlc_am_entity/20000           5004550 ns      5004508 ns          140
    BM_nr_rlc_am_entity/20000           4974652 ns      4974460 ns          140
    BM_nr_rlc_am_entity/20000           4976447 ns      4976225 ns          140
    BM_nr_rlc_am_entity/20000_mean      4981351 ns      4981168 ns            5
    BM_nr_rlc_am_entity/20000_median    4976447 ns      4976225 ns            5
    BM_nr_rlc_am_entity/20000_stddev      13009 ns        13087 ns            5
    BM_nr_rlc_am_entity/20000_cv           0.26 %          0.26 %             5
2024-11-04 19:42:43 +01:00
Robert Schmidt da7a028a3f Merge remote-tracking branch 'origin/logs-refactor-orange' into integration_2024_w44 (!3078)
Simplify logs in gNB&UE

- reduce the amount of printf() that outputs useless info
- in MAC, PHY, NGAP, RRC, mark some "important" UE events with LOG_A for
  better visibility -> can put log_config.global_log_level analysis to
  only see important stuff
- in RRC, use some macro to consistently print logs
- track the cellID of a UE in RRC
2024-11-01 11:58:47 +01:00
Robert Schmidt 9395a0673e change macros for UE logging 2024-10-30 15:45:11 +00:00
Bartosz Podrygajlo 54a57bd2d6 RLC optimization - allocate SDU header and SDU data together
By allocating sdu data and sdu header together the total amount of
free/malloc calls per SDU is reduced by 1 increasing overall performance.
2024-10-30 16:03:01 +01:00
Bartosz Podrygajlo 7ae1aa21f4 RLC optimization - using function instead of function pointers
Moved some functions around so that instead of a function pointer a function
call is used. This enables inlining of functions which reduces number of function calls.
2024-10-30 16:02:50 +01:00
batuhan duyuler edeb7b8f61 handling 1st digit of mnc in SIB1
During preparation of SIB1, first digit of MNC was not taking into account.
This leads to XRES*, RES* mismatch during Authentication Procedure between 5GCore and UE because of derived serving network names.
2024-10-29 16:43:26 +01:00
Robert Schmidt d5cd07e37c Correct RRC log: remove trailing whitespace 2024-10-29 16:41:20 +01:00
Robert Schmidt 21d31e4359 RRC: more UE tracability through LOG_A
It is difficult to keep track of a "UE lifecycle". To make this more
easy, add LOG_A at major UE RRC messages.
2024-10-29 16:38:54 +01:00
Robert Schmidt 14d238baee RRC: keep track of UE's CellID
It will be used in the next commit
2024-10-29 16:38:07 +01:00
Robert Schmidt b8b921d49f Mark major "UE events" in in PHY+MAC thru LOG_A 2024-10-29 16:36:53 +01:00
Robert Schmidt 68f8ef7c7a Reduce amount of logs in L1/L2
This commit removes many logs that just show memory addresses, indices,
etc., which, I presume, do not mean anything to the "average user" and
developers alike.
2024-10-29 16:36:13 +01:00
Robert Schmidt 8cc6c0cbbb Various places: remove printf and/or transform to LOG_D 2024-10-29 16:35:47 +01:00
Robert Schmidt 83d9397002 MeasTimingConfig: only print ASN.1 when requested 2024-10-29 16:35:47 +01:00
Robert Schmidt 26fa3300e6 Merge remote-tracking branch 'origin/NR_gNB_sched_improvements' into integration_2024_w43 (!2989)
This MR removes limitations on BWP scheduler operation for which only
the information from the first UE of the list was taken into account. To
do so, I moved the VRB map check for DL and UL scheduler out of the
preprocessor and in the scheduler itself.

Closes: #769
2024-10-28 19:35:27 +01:00
luis_pereira87 ad9b91627c Prevent DLSCH scheduler to allocate PRBs outside of current BWP 2024-10-26 11:19:40 +02:00
francescomani c8387d706c making ULSCH preprocessor agnostic to UEs BWP and TDA 2024-10-26 11:19:37 +02:00
Robert Schmidt 5b73319278 Merge remote-tracking branch 'origin/f1-handover-procedures' into integration_2024_w43 (!2786)
Add F1 Handover procedures

- Clean up at RRC and MAC
- Add DU handover procedures, completely handle CellGroupConfig at DU
- Add CU handover procedures
- Maintain reestablishment working between/after handover
- Changes at UE to resync on different frequency DUs

Instructions: see doc/handover-tutorial.md

Things not implemented/open/missing: see #855
2024-10-25 20:22:01 +02:00
Robert Schmidt 6c6b10d020 Merge remote-tracking branch 'origin/f1ap-msg-encdec-followup' into integration_2024_w43 (!3056)
F1AP Enc/Dec Library follow-up

Follow-up after !2890
2024-10-25 20:18:33 +02:00
Robert Schmidt e02aae4624 Open TODOs at RRC 2024-10-25 20:10:26 +02:00
c956de6f27 Trigger F1 Handover on A3 event
When receiving a measurement report including an A3 event, trigger
handover towards the indicated cell.

Note that currently, we are still limited to one Cell by DU, hence
looking up a cell comes down to looking up a DU, as is done here.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2024-10-25 20:10:26 +02:00
Robert Schmidt 8b4259c047 Ignore UE Context Modification Required during handover
During handover, we might receive a UE context Modification required
message. Currently, we cannot handle this; ignore the message.
2024-10-25 20:10:26 +02:00
Robert Schmidt 546ffee56b DU dies during HO: free HO context of UE to avoid dangling data 2024-10-25 20:10:26 +02:00
Robert Schmidt b6ccf8aa77 Handle reestablishment during handover
This commit implements reestablishment during handover when occurring at
the source DU, either as a handover Failure or "normal" reestablishment
(something else went wrong). In this case, the CU will trigger HO
cancel, which in F1, means to cancel on the target DU. Also, undo any
previous ID changes. Retain the old CellGroupConfig (before handover)
for the case of reestablishment at source. If not needed, it is freed
after the reconfiguration complete.

Reestablishment on target cell during handover cannot be handled by the
gNB (yet). It is the same as with a normal reestablishment (not during
handover) on a different cell: that cell has no notion of the old UE, so
we cannot simply indicate the old UE to reestablish; at least, we would
need to cleanup the CellGroupConfig, and I am not sure this works out of
the box, either.
2024-10-25 20:10:26 +02:00
Robert Schmidt c6434c80fd Reestablishment hack: free reconfigurationWithSync
After handover, the last CellGroupConfig received is the one for
handover, containing a reconfigurationWithSync. Resending this
CellGroupConfig to the UE after reestablishment would trigger a
handover. Free the reconfigurationWithSync to have the UE complete
reestablishment at the current cell.

The CU implementation of reestablishment modifies the CellGroupConfig.
It should not do this, but does as of now. The specification (38.473 Sec
8.7) foresees an optional F1 UE context modification procedure (which
can be used to receive the CellGroupConfig). This should be done instead
to retrieve the correct CellGroupConfig.

Note that the F1 UE context setup procedure, similar to the UE context
modification procedure, would also allow to perform reestablishment on a
DU that is not the original one.
2024-10-25 20:10:26 +02:00
145fd2b415 Handle Release request during handover
If we release a request from a DU during, handle as follows:

- from the source: Handover is still ongoing, so ignore it by
  acknowledging the release, and marking handover as done. In this case,
  we did not receive an acknowledgement from the target, but since the
  source DU does not keep the UE context, we could not cancel the
  handover anymore either. The UE might come back on any DU through
  reestablishment (or simply be connected on the target)
- from the target: consider this to be a genuine release, and forward to
  AMF.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
a2da391e70 Handle successful HO after reconfigurationComplete
The HO is completed (from a pure RAN perspective) when receiving
reconfiguration complete. In that case, remove the HO context, and
signal successful handover through the callback. For the F1 handover,
this means releasing the UE at the source DU.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
e42c303bd7 Handle UE Context Modification Response in HO case
We expect the UE's RRC Reconfiguration Complete to come through the
target DU, as the "new UE" at the target CU. Also, function
CU_handle_UL_RRC_MESSAGE_TRANSFER() checks that the UL RRC Message,
through which we will receive RRC Reconfiguration Complete, matches the
DU UE ID stored in RRC. Since the DU UE ID will be the one at the target
DU, while up to now, we stored the DU UE ID at the source DU.

Correspondingly, update the DU UE ID to the one at the target DU; also
update the corresponding assoc_id.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
0e20c4c257 Handle UE context setup resp for HO: trigger reconfiguration on source
In this commit, handle the reception of a UE context setup response, in
the case of handover. In that case, store the gNB-DU UE ID and C-RNTI of
the UE at the target DU, and trigger a reconfiguration towards the UE at
the source DU via the callback.

To ensure that the CU-UP's PDCP is SN-aligned with the UE, use
cuup_notify_reestablishment() to reset the bearers with PDCP
reestablishment, which has already been implemented in the last commit.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt 7b163f1688 Harmonize UE context setup resp bearer handling
This is preparatory work to handle the UE context setup response from
the target DU. There are two cases:

- "Initial" UE context setup response (during connection setup): we need
  to inform the CU-UP via an E1 message of the new bearers (GTP tunnel
  update)
- F1 handover:  we need to inform the CU-UP via an E1 message that there
  are DRBs to reestablish

There are two different functions, e1_send_bearer_updates() and
cuup_notify_reestablishment(), to do this. Harmonize the code, before
implementing the actual handover logic in the next commit.
2024-10-25 20:10:26 +02:00
66b548060e Implement F1 Handover Trigger
Add a function to trigger an F1 handover, including the corresponding
telnet function implementation. The function looks up source&target DU,
creates a HO context, and reads PDU information to send a UE context
setup request to the target DU towards which to handover.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt c0770cc19b Make QoS characteristics function available
Functions get_qos_char_from_qos_flow_param() and
get_qos_characteristics() will be used in rrc_gNB_mobility.c to read PDU
information for handover. Move the definitions to a header to reuse
later.
2024-10-25 20:10:26 +02:00
746dc29a46 Add HandoverPreparationInformation() ASN.1 encoder function
HandoverPreparationInformation will be used in the follow-up commit to
trigger a handover.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt 90d8eefa59 Add new handover context structures for handover operation 2024-10-25 20:10:26 +02:00
Robert Schmidt b5e3507764 Fix: store CellGroupConfig from initial UL RRC message
This F1 message sends us the CellGroupConfig of the UE. Store it in case
we need it. For instance, at least in OAI, it is possible to make a
handover without a DRB (this might or might not be standard compliant).
However, in this case, we did never receive a UE context setup request,
which stores the CellGroupConfig. Hence, store the first CellGroupConfig
we receive, to be able to do e.g., handover.
2024-10-25 20:10:26 +02:00
Robert Schmidt 35995c8a10 Move RETURN_IF_INVALID_ASSOC_ID() to header for use elsewhere
RETURN_IF_INVALID_ASSOC_ID() checks if an assoc_id (of a DU) is valid.
It will be also used in the mobility RRC module later. Move it to the DU
header (where it logically belongs) to move it from there.
2024-10-25 20:10:26 +02:00
Robert Schmidt 6cd76ff862 Remove unused includes and comment with resolved issue 2024-10-25 20:10:25 +02:00
Roberto MaguetaandLuis Pereira 67eb94db3f Print RRC neighbor cell measurements, if present
Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
2024-10-25 20:10:25 +02:00
Robert Schmidt c3ef6df44b Bugfix: request release in case of failed RA
Prior to this commit, after RA failure, the DU would send a UE context
release complete, without actually requesting one. This could lead to
inconsistent state between DU and CU, because the CU might just discard
this (unrequested) message, and not actually trigger a release [1].

Thus, refactor the release request into a function, and use it to
request release of a UE for which RA has not been completed. If the CU
does not know the UE, release the UE immediately.

[1] One possibility would be that during reestablishment, the CU would
request to look up an old DU UE ID when it has been released, resulting
in

    Assertion (oldUE) failed!
    In dl_rrc_message_transfer() /home/oaicicd/robert/openairinterface5g/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c:860
    CU claims we should know UE bc7f, but we don't
2024-10-25 20:10:25 +02:00
rmagueta ecd941e946 Remove old RA process(es) when removing UE
In handover, we might need to remove a UE that we knew under it's
C-RNTI, for which we also have the RA process. Hence, when removing a UE
by RNTI, remove it also from RA.
2024-10-25 20:10:25 +02:00
rmagueta 4a5bf53caa UE: Improve synchronization for reconfigurationWithSync
Improve synchronization to also handle handover between gNB-DUs with
differing carrier freqs.
2024-10-25 20:09:41 +02:00
Robert Schmidt 78587d6cf0 Merge remote-tracking branch 'origin/getopt-int' into integration_2024_w43 (!3068)
getopt() returns int
2024-10-24 19:23:05 +02:00
Robert Schmidt 1a834a704a Merge remote-tracking branch 'origin/NR_UE_fix_mac_pdu' into integration_2024_w43 (!3057)
Bugfix in ue pusch mac pdu creation

When more than one sdu with equal priority is present, there could be
buffer left after serving the lcids and also not enough to equally serve
all lcids. This commit checks for this condition. Before this fix the ue
would send malformed mac pdus when serving multiple lcids.
2024-10-24 19:22:40 +02:00
Robert Schmidt cf9854601c getopt() returns int
See getopt(3): returns int, so store it in an int variable.
I went through all occurrences, project-wide. All return values of
getopt() should be stored in ints now.
2024-10-24 19:22:06 +02:00
Guido Casati f85271a349 Free F1AP messages in RRC task after processing 2024-10-24 16:23:05 +02:00
Guido Casati b17f1d1b57 Free F1 UL RRC Message Transfer after use in F1AP_DU_task 2024-10-24 16:22:04 +02:00
Guido Casati 74804f2ba3 Free F1 DL RRC Message Transfer after use in F1AP_CU_task 2024-10-24 16:22:04 +02:00
Guido Casati 5e5d17b05b Free F1 Setup Response in the context where it was allocated 2024-10-24 16:22:03 +02:00