Commit Graph
21 Commits
Author SHA1 Message Date
Guido Casati 55c3cd2b31 Telnet: add ciUE command to trigger establishment of a new PDU Session 2025-11-15 21:04:53 +01:00
Jaroslava Fiedlerova 3a9936d485 Merge remote-tracking branch 'origin/nr-ue-nas-auth-failure' into integration_2025_w19 (!3381)
Add 5GMM Authentication Failure enc/dec lib and unit test

This MR is introducing the 5GMM Authentication Failure message library as per
8.2.4 of 3GPP TS 24.501. This message is sent from UE to network under certain
conditions. The message is also introduced in stack and is send if the received
ngKSI already in use.

- add new library for 5GMM Authentication Failure enc/dec and unit test
- introduce handler and generate function for NAS Authentication Failure
  store ngKSI
- send Authentication Failure if ngKSI is already associated with one of
  the 5G security contexts stored in the UE

Closes #852
2025-05-12 15:06:12 +02:00
Guido Casati 4587210384 Add handler for Authentication Request
* store ngKSI
* send Authentication Failure if ngKSI is already associated
  with one of the 5G security contexts stored in the UE
2025-05-12 10:26:29 +02:00
Bartosz PodrygajloandRobert Schmidt 1ab8a58a2f Refactor TUN Interface Management and Move to SDAP Layer
This commit refactors the TUN interface management by moving its creation
and configuration from the PDCP layer to the SDAP layer for UE.

Key changes include:

- Introduced `tun_generate_ue_ifname` and `tun_destroy` functions for better
  TUN interface lifecycle management.
- Added support for creating and destroying UE-specific TUN interfaces in SDAP.
- Refactored `nr_pdcp_module_init` to remove TUN-related logic and moved it
  to SDAP.
- Updated NAS and SDAP layers to handle PDU session-specific TUN interface
  creation and configuration.
- Enhanced SDAP entity management to include TUN socket handling and thread
  lifecycle.
- Updated NAS message handling to initialize default PDU session TUN
  interfaces in NOS1 mode.
- Use a single SDAP thread function for gNB and UE
- Allow noS1 mode also in SA on gNB

These changes improve modularity by isolating TUN interface management within
the SDAP layer, aligning with the 3GPP architecture, and simplifying the PDCP
layer.

Co-Authored-By: Robert Schmidt <robert.schmidt@openairinterface.org>
2025-04-16 15:03:18 +02:00
Guido Casati 312f296b60 Add NAS handler for Service Reject message 2025-04-10 15:35:59 +02:00
Guido Casati a092e7ff3f Handle NAS Service Accept in stack
* also, add function to process GPRS timer
2025-03-31 10:05:35 +02:00
Guido Casati 81ec8d2e13 Rework protection of initial NAS signaling messages (REGISTRATION REQUEST) as per 3GPP TS 33.501
* Without a valid 5G NAS security context:
  * Send REGISTRATION REQUEST with cleartext IEs only.
  * After activating a security context via Security Mode Control:
    wrap the entire REGISTRATION REQUEST (with both non-cleartext and cleartext)
    in a NAS message container IE, include it in SECURITY MODE COMPLETE

* With a valid 5G NAS security context:
  * If non-cleartext IEs are needed, wrap the entire message in a NAS message container IE and cipher it.
  * If only cleartext IEs are needed, send the message directly without the NAS message container IE.
2025-02-10 10:05:02 +01:00
Guido Casati b9dc68b5ce Add RRC Inactive Indication and Timer T3512 to NAS struct definition 2025-02-10 10:05:00 +01:00
Guido Casati e3eb663085 Add 5GMM Modes in NAS
* added fgs_mm_mode_t enum
* added struct member to NAS
* modes: FGS_IDLE, FGS_CONNECTED
* according to 5GS mobility management (5GMM) modes 5.1.3.2.1.1 of TS 24.501
2025-02-04 15:30:04 +01:00
Guido Casati 98d922e568 Introduced 5GMM state machine
* according to 5.1.3.2.1 of 3GPP TS 24.501
2025-02-04 15:30:03 +01:00
Guido Casati d6e2bf1651 Refactor registration accept decoding
previously we had decodeRegistrationAccept acting as a handler and calling
decode_registration_accept to do the decoding. However the logic was mixed
between the two functions, the naming was confusing and the code was hard
understand. The goal of this commit is to simplify the code, improve
readability and maintainability, while adapting the relevant function
to the new OAI NAS libs structure.

To this purpose:

* move enc/dec logic to NAS lib openair3/NAS/NR_UE/5GS/5GMM/MSG/RegistrationAccept.c -
  the logic of parse_allowed_nssai, get_allowed_nssai has been moved to
  decode_registration_accept and decode_nssai_ie
* add decode_nssai_ie and use it for both Allowed/Configured NSSAIs list (IE handling was added)
* do processing in the handler handle_registration_accept
* simplify the code by removing nested calls
* improve handling of PDU length

Currently only Registration Result, 5GS Mobile Identity, Allowed/Configured NSSAI
are decoded. The other optional IEIs are skipped (only the length is processed).
2025-01-31 16:02:04 +01:00
Guido Casati 611c055464 Refactor nas_security_rx_process
* use defines whenever possible
* introduce a switch to handle security type. Currently only integrity protected and ciphered
  is handled, however the idea of the switch is to make the code ready for the future when
  different security types will be handled and different actions should be taken based on that.
* define NAS_INTEGRITY_SIZE
2025-01-30 15:21:39 +01:00
Guido Casati 2d75598851 Initial separation of enc/dec functions from handlers/callbacks
* move enc/dec definitions to NR_NAS_defs.h and add new lib file nr_fgs_nas_lib.c
  both used by nr_nas_msg.c
* move utility macros to fgs_nas_utils.h: this can be used in all the 5GMM, 5GSM lib files
* use nr_nas_msg.c for handlers/callbacks only, it should call the enc/dec
  functions in nr_fgs_nas_lib and in the 5GMM, 5GSM libs
* 5GMM, 5GSM libs should only do the enc/dec of the NAS message contents
2025-01-30 15:21:39 +01:00
Guido Casati ddad26effe Refactor includes in nr_nas_msg (.c/.h) 2025-01-30 15:21:39 +01:00
Guido Casati 03a4d8efb8 Refactor NAS 5GS (5GMM & 5GSM) structs definitions and their use
Every NAS 5GS message can have 3 different headers: (1) security protected
(2) 5GMM plain (3) 5GS plain;

According to 3GPP TS 24.501:
> 4.2 Coordination between the protocols for 5GS mobility management and 5GS session management
> A 5GS session management (5GSM) message is piggybacked in specific 5GS mobility management (5GMM) transport
> messages. To this purpose, the 5GSM messages can be transmitted in an information element in the 5GMM transport
> messages.

A PDU Session Establishment accept is a 5GSM message and as such it is contained in a 5GMM
transport message. The code in capture_pdu_session_establishment_accept_msg is reflecting this.
The message is thus expected to have: (1) Security protected 5GMM header (2) Plain 5GMM message
(3) 5GSM Payload Container (4) Plain 5GSM message.

5.4.5 of 3GPP TS 24.501: also says:

> The type of the payload is identified by the Payload container type IE and includes one of the following: a) a single 5GSM message;

Thus, a 5GSM is not the only possible payload of a NAS transport message.

This commit is focusing on the refactoring of the structs definitions and adaptation of the CMakeLists.

Based on the above:

* Move NR_NAS_defs.h to 5GS subfolder in NR_UE
* Move NAS FGS structs and definitions to NR_NAS_defs.h
* Rename mm_msg_header_t to fgmm_msg_header_t
* Remove duplicated NAS struct definitions
  (1) kept fgs_nas_message_security_header_t over security_protected_nas_5gs_msg_t
  (2) Kept fgsm_msg_header_t over fgs_sm_nas_msg_header_t
* Remove unused definitions, structs, functions in the process
2025-01-30 15:21:39 +01:00
Guido Casati c0583be24e Migrated NAS 5GS (5GMM & 5GSM) to NR folders and refactor CMakeLists.txt files
This commit is introducing the following macro changes:

(1) Migrate NAS 5GS lib files to a new 5GS subfolder in NR_UE
    and organize NAS 5GS lib messages into 5GMM and 5GSM subfolders.
    A nested CMake structure was implemented and CMakeLists.txt were
    added whenever necessary. This is effectively separating 5GS
    libraries from LTE libraries.

(2) In order to simplify the separation of 5GS libs from LTE libs,
    remaining dependencies from NAS LTE (e.g. nas_ue_task.c, ue-idx-standalone)
    were removed in the process

(3) ExtendedProtocolDiscriminator.c/.h and SpareHalfOctet.c/.h were deleted
    and affected types were replaced with simple integer types

(4) Cleanup: unused definitions and libs (e.g. LIB_5GNAS_GNB)
    were removed

(5) Update doc/Doxyfile

(6) clang-formatted the migrated files in the process

(7) Update includes of headers in affected files
2025-01-30 15:17:30 +01:00
Guido Casati 0fd0a4fcae NAS: Minor comments and logs 2025-01-08 20:11:12 +01:00
Guido Casati 8215aa60ba Explicit protocol_discriminator size in fgs_nas_message_security_header_t
* size of fgs_nas_message_security_header_t is platform-depending
  while protocol_discriminator must be 1 byte
* fgs_protocol_discriminator_t stays as enum type
2025-01-08 20:11:12 +01:00
Guido Casati 1c4e1029a8 Add NAS Service Request enc/dec functions
* FGMM enc/dec library files
* Plain message encoding + logic for security protected message
* added fill_fgstmsi function
* add checks on length in 5G-S-TMSI encoder function
* encoding of NAS Service Request and relevant mandatory IEs
2024-11-25 13:15:10 +01:00
Bartosz Podrygajlo 4d07003652 Thread safe get_ue_nas_info
Call get_ue_nas_info before any thread starts to prevent
concurrent initialization of uicc array.
2024-11-05 13:50:55 +01:00
Laurent THOMAS 345bd9cc82 remove duplicated code, add registration reject cause 2024-10-23 10:51:17 +02:00