Commit Graph
217 Commits
Author SHA1 Message Date
Robert SchmidtandGuido Casati ba208c0fc2 Group 5G platform types for common 5G-specific types
Co-authored-by: Guido Casati <hello@guidocasati.com>
2024-09-25 16:00:32 +02:00
Robert Schmidt b01810a858 Introduce an_release flag: only free UE in RRC+ack if requested by core
The F1AP UE context release procedure can happen in at least two cases:

1. core requested a release of a UE
2. CU requests DU a release of a UE without a core release (e.g.,
   handover)

In case 1., the CU has to fully release the UE in the CU, then ack the
NGAP message from the core, whilst in 2., nothing of that should happen
after the DU acknowledges the F1AP UE context release cmd.
2024-09-06 10:20:08 +02:00
Robert Schmidt 659a81997b Handle IPv6/IPv4v6 PDU sessions
Handle IPv6 (and IPv4v6) PDU sessions by correctly instructing
nas_config() to set up the interface with provided IP addresses.
Note that as of now, IPv6 PDU sessions have not been fully tested.

Remove a useless assert at the gNB; to my understanding the gNB does not
care about the IP session type (at least for IP), as it just
transparently tunnels the IP packets from/to GTP.

I added a comment in the code where to change to request a PDU session
different from IPv4. Currently it is hardcoded to IPv4, and it seems
that a default OAI 5GC config would reject a PDU session type different
from IPv4.
2024-08-02 15:31:04 +02:00
Jaroslava Fiedlerova fbf257f6ba Merge remote-tracking branch 'origin/pdu-session-no-security' into integration_2024_w30 2024-07-26 14:13:17 +02:00
Guido Casati 2d6aef5183 Fix memory leak in PDU Session Setup Request decoding
* aper_decode allocates memory for for local pointer `pdusessionTransfer`, in `decodePDUSessionResourceSetup`
* this memory seems not to be freed but its members are by:
  `ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupRequestTransfer,pdusessionTransfer);`
  which btw in its header says: "AVOID using it in the application code; Use a safer ASN_STRUCT_RESET() instead"
* the following mem leak was detected by ASAN:

```
Direct leak of 72 byte(s) in 1 object(s) allocated from:
   *0 0x7ffff74b4a57 in __interceptor_calloc /src/libsanitizer/asan/asan_malloc_linux.cpp:154
   *1 0x55555cb306df in SEQUENCE_decode_aper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_aper.c:36
   *2 0x55555ca9fa28 in aper_decode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/aper_decoder.c:78
   *3 0x55555b99bae6 in decodePDUSessionResourceSetup /openair2/RRC/NR/rrc_gNB_NGAP.c:273
   *4 0x55555b99fec2 in trigger_bearer_setup /openair2/RRC/NR/rrc_gNB_NGAP.c:357
   *5 0x55555b9b54bf in rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ /openair2/RRC/NR/rrc_gNB_NGAP.c:830
   *6 0x55555b936871 in rrc_gnb_task /openair2/RRC/NR/rrc_gNB.c:2428
   *7 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
```

* This commit replaces ASN_STRUCT_FREE_CONTENTS_ONLY with ASN_STRUCT_FREE, which will free the memory allocated for the entire struct and its members
2024-07-25 16:46:22 +02:00
Guido Casati 869b78efe2 Use NGAP protocol cause IE in the stack 2024-07-25 13:58:08 +02:00
Robert Schmidt 032d4fc9ff RRC: reject PDU sessions if security is not active
OAI 5GC seems to have a bug, and occasionally might send a PDU session
setup request without having sent a UE context setup request, resulting
in no security context activated for a UE. This lead to an assertion in
rrc_gNB_process_e1_bearer_context_setup_resp().

To prevent the gNB from stopping, check if security is active before
triggering PDU sessions. If not, the gNB will reject PDU sessions.
2024-07-24 18:09:57 +02:00
Teodora 676ba4355c RRC_CONNECTED state signaling for E2 moved
- E2SM UE ID requires guami -> therefore RRC_CONNECTED state signaling
    to RIC is now done after receiving Initial Context Setup Request
from AMF, which contains the guami info
2024-07-10 16:06:58 +02:00
Robert Schmidt 94581840a0 Merge remote-tracking branch 'origin/plmn-rrcsetupcomplete-fix' into integration_2024_w27 2024-07-08 16:20:36 +02:00
Teodora df9e5ccdd2 Fix selectedPLMNId from RRCSetupComplete
- r_amf->plmn_Identity was interpreted incorrectly, therefore remove it
- selected_plmn_identity selects one of the list of PLMNs; at the
  moment, OAI supports only 1 PLMN ID; print a warning if it is
  different, and proceed with index 0

More information in issue #801
2024-07-08 15:54:41 +02:00
Cedric Roux 5467351935 cleanup: reduce number of parameters to pdcp's set_security()
Also adapt callers. In particular nr_pdcp_reestablishment()
2024-07-05 12:38:19 +02:00
Cedric Roux 93f595828d cleanup nr_pdcp_config_set_security()
- make it work for SRB or DRB
- adapt callers of this function
- cleanup key derivation: the User Plane keys are generated at some places
  but are not used, remove the generation
2024-07-05 12:38:19 +02:00
Teodora 0a603a1000 Correctly store GUAMI in gNB_RRC_UE_t 2024-06-29 17:46:23 +02:00
Robert Schmidt 8d225a7e10 NGAP Release Cplt: indicate release PDU sessions
We can optionally indicate the PDU session IDs. At least with OAI 5GC,
that should help it clean up.
2024-05-06 12:00:26 +02:00
Robert Schmidt 3e2d5f8820 Handle PDU sessions in NG UE context setup request
In the case of PDU sessions in the NG UE context setup request, we first
have to set up security. Hence, in this commit, implement the "delayed"
set up of theses PDU sessions, and acknowledge the setup request after
reconfiguration, as requested by O-RAN.WG5.C.1-v11.
2024-05-06 11:59:59 +02:00
Robert Schmidt 179ecb8e84 Revert "Delay PDU session resource setup request if necessary"
This reverts commit 0f100a6e94, which
introduced a hack to possibly wait with a PDU session setup at the RRC
in case a RRC UE capability transaction (requesting UE capabilities from
a UE) was ongoing. This happened, as we delayed the UE capabilities to
after the first RRC reconfiguration; in that case, certain UEs were
requesting the next PDU session, and if RRC did not delay the new PDU
session (as requested from the core), this procedure might occur while
UE capability enquiry was ongoing, leading to failures in these
transactions.
2024-05-06 11:58:31 +02:00
Giulio Carota 7340abc6f4 Refactor Security Mode Command procedure: send in RRC DL transfer
Previously, the CU sent the Security Mode Command as part of a UE
context setup request. This was done "because it was possible", not
because there was an inherent need to do this. However the LiteOn DU
does not like this, as it expects to also have a DRB in the UE context
setup request procedure, which is not always the case.

Hence, send the Security Mode Command in a normal DL RRC msg transfer
over F1. As of this commit, there is not UE context Setup Request (so it
might not work with all DUs), but the OAI DU is cool and does not care,
so RFsim still works.

This also aligns the CU's behavior with O-RAN.WG5.C.1-v11.

Finally, as of this commit, we do not trigger a UE context setup
request, so we cannot handle PDU sessions inside the initial UE context
setup request at the same time as the security mode command (which was
done previously before reaching this point). This will be fixed in a
later commit.
2024-05-06 11:56:57 +02:00
Robert Schmidt e0b31be148 Request release for UEs if DU disconnects
38.473 section 8.2.3.1 says that upon F1 Setup Request, UE associated
signalling should be erased. In this commit, we trigger a release of all
UEs that were still connected to a DU when we received the SCTP
shutdown, i.e., when the DU disconnects.
2024-03-28 08:55:11 +01:00
Guido Casati b6087da1b2 Separated E1 Bearer Context Setup from Modification procedures
- many structs and definitions are overlapping between the two different E1 procedures
- introduced naming specific to E1 Bearer Context Modification to improve readability
- grouped SDAP and PDCP configuration IEs for better reusability and readability
- introduced functions to set and get default PDCP config (DRBs and Bearer Contexts)

find_or_next_pdu_session:
- find_or_next_pdu_session refers to the E1 Bearer Context Modification Request
-- therefore it has to return pdu_session_to_mod_t* and takes in input e1ap_bearer_mod_req_t *

see !MR2545 for more context
2024-02-28 11:58:42 +01:00
Guido Casati ea0185f84e Introduced define for uint8_t integrity and ciphering keys data structures
- the goal is to improve maintanability
2024-02-28 11:14:00 +01:00
Jaroslava Fiedlerova 3b2355ce4c Merge remote-tracking branch 'origin/fix-ra-reduce-logs' into integration_2024_w05 2024-02-05 13:27:12 +01:00
Robert Schmidt 0f100a6e94 Delay PDU session resource setup request if necessary
The next commit moves the UE Capability Enquiry after the first
reconfiguration. This has the effect that for some UEs (e.g., iPhone),
the Setup Requests come too close to each other, triggering RRC
Reconfigurations while previous transactions are ongoing.

I think the "true" solution would be to implement some tracking of
transactions across RRC, F1AP, E1AP, but this might require many
changes. For the moment, limit to delaying PDU session resource setups
to prevent above problem. Delaying is done using ITTI timers (to be able
to serve other UEs), waiting 10ms each time, up to 20 times (to not
deadlock the transaction -- after all, if the UE is unhappy, it will
drop the connection).
2024-02-03 11:28:43 +01:00
Robert Schmidt d6dd87ae8c RRC transaction IDs: clean up
- Put consistently transaction IDs
- Remove transaction IDs when transaction finished, or in places that do
  not trigger an RRC transaction
2024-02-03 11:28:43 +01:00
Robert Schmidt c643abd83e DRB handling: handle E1AP default DRB logic properly 2024-02-03 11:28:43 +01:00
Robert Schmidt 6642b467e1 Implement PDU session estab through NGAP Initial UE Context Setup
This commit allows the gNB to handle PDU sessions that the core requests
to setup during the NGAP Initial UE Context Setup. Previously, we only
managed them as part of PDU Session Resource Setup Request.

The RRC will, depending on whether a PDU session is in the NGAP Initial
UE Context Setup, either directly trigger the Security Command, or first
do a bearer setup at the CU-UP. Some asserts have been lifted, as now
the PDU sessions might be present before the RRC Connection is fully
established.

Implement the correct forwarding of the bearers in an F1 UE Context
Setup Request message.

This solves bug #672.
2024-02-03 11:28:43 +01:00
Robert Schmidt f81ec9c2cc Simplify RRC DRB handling code
Prior to this commit, the handling of DRBs is complex: first the RRC
"guessed" a DRB ID when setting up DRBs via E1AP (in
rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ()), and later chose one for
real in fill_DRB_Configlist() (called in
rrc_gNB_generate_dedicatedRRCReconfiguration()).

To simplify, remove fill_DRB_Configlist(), and instead allocate the DRB
using generateDRB() before sending the message via E1AP, in
rrc_gNB_generate_dedicatedRRCReconfiguration(). The rest of the logic is
the same.

For PDU sessions, always mark PDU sessions as "done" to match pdu
session state logic.
2024-02-03 11:28:43 +01:00
Robert Schmidt f9a8498566 RRC: forward 5G-S-TMSI for NGAP Initial UE Message
Only fill the 5G-S-TMSI if if is present, and set the bit in the
presenceMask.
2024-02-03 11:24:41 +01:00
Robert Schmidt 642b6429a3 Fix NGAP encoding of PDUsession failed
We did not give a cause value, and therefore NGAP's "PDU sessions
failed" encoding failed. Give a cause value in all cases, so that this
cannot happen anymore.

To prevent against this, put an AssertFatal() into the encoder that
stops if an internally sent message does not have a correct cause value
(we can at least select a default).

Print an info message for all failed PDU sessions.

In rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(): if a PDU session is
already established, don't count it as failed.
2024-02-03 11:24:41 +01:00
Robert Schmidt 2e7d95746f RRC: demote various log levels 2024-02-02 15:37:06 +01:00
Robert Schmidt a2c7f0c0b3 Remove possible NG Initial Context Setup Resp in handler for request
38.401 Sec 8.1 asks for sending the Initial Context Setup Response after
a reconfiguration happened. Therefore, we can never send this message
directly from the handler in the Initial Context Setup Request
2024-01-31 17:41:44 +01:00
francescomani 1b9f674572 clean asn1_msg from mod_id 2024-01-19 11:33:27 +01:00
Robert Schmidt 8c8971258e NGAP: read correct PDU session NSSAI
The allowed NSSAIs is NOT the NSSAI to be used for a UE. Fix it to use
the correct one.
2023-12-20 15:19:38 +01:00
Sriharsha Korada ed29252c6d F1AP and E1AP interface changes for QoS
- Implement: Extend the F1 encoding and decoding with Qos
- Implement: E1 decoding for QoS
- Fix: Modify the UE_MODIFICATION_REQUEST_MSG towards DU to contain QoS info based on E1AP context response
- Fix: Modify the E1AP and F1AP message structures
- Fill the Qos configuration to send to MAC
2023-11-30 17:41:12 +01:00
Cedric Roux 13757862fb hotfix: set PDCP t-reordering to 100ms
The function generateDRB() sets the value to 100ms but the function
rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ() sets it to 0ms.

So what happens is that the UE gets the value 100ms in the
RRC Reconfiguration but the gNB creates the PDCP entity with 0ms.
Let's create it with 100ms instead, to be aligned with how we configure
the UE.

And also avoid some PDCP warnings at runtime when some packets
are retransmitted but rejected because of the 0ms timer. This is
the warning:

    [PDCP]   discard NR PDU rcvd_count=68469, entity->rx_deliv 68481,sdu_in_list 0

This is just a hotfix. A real solution is to have the RB creation in
only one place. And we should also have those parameters configurable.
Work for later.
2023-11-18 21:56:42 +01:00
Robert Schmidt 23597c9193 Merge remote-tracking branch 'origin/f1-multiple-du' into integration_2023_w44 2023-11-13 16:23:58 +01:00
Robert Schmidt 1af4e81951 Paging: not fully implemented, make clear is dummy 2023-11-08 10:18:52 +01:00
Sakthivel Velumani 279a55c976 Save NSSAI params from AMF
The NSSAI of PDU sessions coming from AMF are stored in RRC to be sent to lower layers
2023-10-31 12:41:50 -04:00
Robert Schmidt fa5c4d3a4c Fix SDAP: correct ID, set default
- Set the correct QoS flow ID to associate a correct QoS flow to the
  bearer: the UE would misassociate otherwise
- Set the DRB as the default: the handler applies bool with true==1, so
  use bool value
2023-10-30 08:47:33 +01:00
Robert Schmidt a87cad57b7 Fix: correct SD index 2023-10-27 10:34:53 +02:00
Robert Schmidt 380151faa7 E1 Bearer Context Setup Request: harmonize code
- harmonize monolithic and E1AP case
- use ITTI message to send bearer context setup response to RRC
2023-10-27 09:07:51 +02:00
Robert Schmidt 0a6998db4b Select CU-UP based on slice 2023-10-27 09:07:51 +02:00
Robert Schmidt b08ce59bc2 Pass assoc_id to RRC and use when sending E1AP messages 2023-10-25 20:22:32 +02:00
Robert Schmidt f721b13982 Fix: E1 PDU Session has NSSAI, not only SST 2023-10-25 20:22:32 +02:00
Robert Schmidt 78290f9127 Fix memory leak in rrc_gNB_decode_dcch()
- Free the memory
- for NGAP NAS UL and NAS First request, allocate memory to avoid
  use-after-free errors
2023-09-22 08:22:15 +02:00
Robert Schmidt 885a029abc Fix memory leaks in do_NR_DLInformationTransfer() 2023-09-22 08:22:15 +02:00
Robert Schmidt d8276eed3e F1AP: harmonize f1ap_plmn_t type in all messages 2023-09-21 12:49:20 +02:00
Robert Schmidt 763a95b12b CU-UP/E1: mirror CU-CP UE ID in CU-UP, clean up messages
- Use the same CU-UP in E1 as in CU-CP: we don't have a separate entity
  to allocate IDs, and we just use the same as the CU-CP
- Correct gNB CU-UP/CP UE IDs in E1AP message types to 32bit
- Set CU UP UE ID explicitly for clarity
- Remove RNTI from E1 messages, E1 does not know what an RNTI is
2023-08-11 17:38:12 +02:00
Robert Schmidt 5c42004e21 RRC: switch to NGAP UE ID as CU UE ID 2023-08-11 17:38:12 +02:00
Robert Schmidt 0943891005 Use CU/DU UE ID in DL RRC Message Transfer, manage at DU, refactor
- The CU/DU UE ID is used in DL RRC Message Transfer
- Note: The CU UE ID currently is still the RNTI
- on every DL RRC Message, the DU verifies that the UE exists
- Refactor RRC: common function to forward protected SRB PDUs
2023-08-11 17:38:12 +02:00
Robert Schmidt 4574a19fc9 Rename primary RRC UE ID gNB_ue_ngap_id to rrc_ue_id
The RRC uses gNB_ue_ngap_id as its primary ID; the following commits
will introduce the usage of the (F1) gNB CU UE ID. This commits renames
the gNB_ue_ngap_id to rrc_ue_id to better reflect its usage as the RRC's
primary UE ID.

It will be used as the NGAP and F1 (CU) UE IDs.
2023-08-11 15:20:47 +02:00