Commit Graph
1344 Commits
Author SHA1 Message Date
Robert Schmidt 42111e0203 Merge remote-tracking branch 'origin/sctp_nodelay' into integration_2025_w14_p1 (!3352)
Turn off any Nagle-like algorithm for SCTP

This means that packets will be sent as soon as possible and no
unnecessary delays are introduced, at the cost of more packets in the
network.

https://www.man7.org/linux/man-pages/man7/sctp.7.html
2025-04-03 10:14:07 +02:00
Robert Schmidt 83c8a5ac0e Merge remote-tracking branch 'origin/PHY_defs_common' into integration_2025_w14_p1 (!3350)
Cleanup NR PHY common definitions
2025-04-03 10:13:42 +02:00
Robert Schmidt 30c6c23dc8 Merge remote-tracking branch 'origin/931-pdu-session-type-is-incorrectly-used' into integration_2025_w14_p1 (!3316)
Fix: Correctly Read PDU Address IE

The QoS Rules loop correctly moves msg pointer allowing the PDU Address
IE to be read correctly. The PDU Address IE is only processed if it is
provided, otherwise there is a warning.

Closes #931
2025-04-03 10:10:35 +02:00
Robert Schmidt 9fdfbae91d Merge remote-tracking branch 'origin/nr-ue-nas-service-accept' into integration_2025_w14_p1 (!3247)
Add enc/dec lib and unit test for 5GS NAS Service Accept

- add new files for Service Accept fgmm_service_accept.c/.h containing
  the enc/dec functions (8.2.17 3GPP TS 24.501)
- enabled compiling
- add unit test
- add handler in stack
2025-04-03 10:09:53 +02:00
luis_pereira87 b6e06e8f47 Turn off any Nagle-like algorithm for SCTP
This means that packets will be sent as soon as possible and no unnecessary delays are introduced, at the cost of more packets in the network.
https://www.man7.org/linux/man-pages/man7/sctp.7.html
2025-04-02 21:50:39 +01:00
francescomani cea4412b3b do not include LTE defs_common into 5G code 2025-04-01 18:53:09 +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 35fd18a090 Add test for NAS Service Accept enc/dec library 2025-03-31 10:05:35 +02:00
Guido Casati 052491adde Add enc/dec/eq/free functions for 5GS NAS Service Accept lib
* add new files for Service Accept enc/dec fgmm_service_accept.c/.h
* add to CMakeLists.txt
2025-03-31 10:05:31 +02:00
Justin Garey f18c6c9804 If the PDU Address IE is provided (checked through length), then the PDU Session Address is processed 2025-03-25 13:03:56 -04:00
Guido Casati 31f1402790 Add common definitions to new fgmm_lib.c/.h files
The 5GMM library in openair3/NAS/NR_UE/5GS/5GMM/ contains the
all the definitions necessary to do the enc/dec of 5GMM IEs.
5GMM messages can share the same IEs, therefore they can use
common definitions and enc/dec functions.

The goal of this commit is to add common definitions to new shared
5GMM library files. The consumers of fgmm_lib are the functions
defined in the openair3/NAS/NR_UE/5GS/5GMM/ library.
2025-03-25 16:29:25 +01:00
Guido Casati e11a09b674 Add include for stdio.h in fgs_nas_utils.h (fprintf) 2025-03-25 16:29:25 +01:00
Robert Schmidt bbae3b24ad Merge remote-tracking branch 'origin/arm-build-pipeline' into integration_2025_w12 (!3286)
Add support for ARM build pipeline

Modify the existing python code to be able to build images where the
image tag can be prepended with a prefix, here arm_. This is preparatory
work to create the ARM build image pipeline, and reuse the existing
internal registry on porcepix to have x86 and ARM images coexist.

Fix various bugs in the build system to allow to build on a system with
as many cores as gracehopper.

Also, fix two programs (usim, nvram) to work correctly under ARM.
2025-03-24 14:45:12 +01:00
Robert Schmidt 9d796fb31f getopt_long() returns int
Use the right type for variable, as getopt_long() returns an int. Using
char is not a problem on x86, but prevents the return of -1 in case of
parameter reading end. This led to infinite loops on ARM, which is fixed
through the variable type change. An additional counter measure (showing
the problem) would be to print and error out when reading an undefined
parameter, which is added here as well.

This has been forgotten when making the same change for getopt() in
cf9854601c ("getopt() returns int").
2025-03-24 09:19:30 +01:00
Robert Schmidt f6e3ea48d0 Merge remote-tracking branch 'origin/issue-920-fix-crash-sctp' into integration_2025_w12 (!3315)
SCTP: avoid assert on partial SCTP message

The receive buffer for SCTP, before this branch, is 8192. If a message
is larger, we receive only a partial message, which makes the gNB abort.
Remove the abort to not be susceptible to a message intended to crash
the gNB.

also, increase the receive buffer to be more forgiving for large messages

Closes: #920
2025-03-21 12:27:25 +01:00
Robert Schmidt b138b143e4 Increase SCTP receive buffer to capture large messages 2025-03-20 17:20:54 +01:00
Guido Casati ba22130116 Disable EPS NAS security algorithms in 5GMM UE capabilities
* this is only relevant if N26 interface is supported by the AMF
  and the UE is supporting S1

closes #915
2025-03-19 13:23:16 +01:00
Robert Schmidt ec60cc9548 SCTP: avoid assert on partial SCTP message
The receive buffer for SCTP, as of this commit, is 8192. If a message is
larger, we receive only a partial message, which makes the gNB abort.
Remove the abort to not be susceptible to a message intended to crash
the gNB.

Closes: #920
2025-03-18 17:29:53 +01:00
Justin Garey 9edf06f5ce PDU session establishment uses required IE for session type and QoS Rules loop correctly moves msg pointer 2025-03-18 15:19:10 +00:00
Robert Schmidt 252c9db246 Correctly express dependency on LOG headers
Various libraries in this commit use the log headers (that is the
direct dependency). The log headers in turn include the T headers
(transitive dependency). Building on gracehopper with its many cores
triggers the build of these libraries before T headers have been
generated.

To resolve this and force the generation of T headers before building
the libraries, correctly express their dependency on the log headers,
which in turn ensures that T headers have been generated.

Depending on log_headers is preferrable because it is really the headers
that we depend on. Using instead e.g., utils, would trigger build of
source files, that we don't need for these libraries.  This commit is
part of a larger cleanup that I have that is not merged yet. Follow-up
work will generalize this in the repo, and ensure that every(!) library
builds.

We have to add CONFIG_LIB, as the log module has a direct dependency
onto the configuration module (it uses it). I am not sure why this was
not relevant before.
2025-03-18 09:21:24 +01:00
Guido Casati 89ca89ea4b Address integrity failure after UE reconnects from RRC IDLE
After a new connection from RRC IDLE, an integrity failure occurs. This
commit is addressing this issue to pass the integrity check.

* Reset ciphering and integrity algorithms when going into RRC IDLE

* Use uplink NAS COUNT in Registration Request for initial KgNB derivation
  * Temporarily deriving UP protection keys in Registration Request
  * Note: AS SMC handling should be done according to 33.501 §6.8.1.1.2.2
2025-02-19 15:07:08 +01:00
Guido Casati 36a39b25a1 Set 5GMM Mode to IDLE when receiving NR_NAS_CONN_RELEASE_IND
> In N1 mode, upon indication from lower layers that the access stratum
  connection has been released, the UE shall enter 5GMM-IDLE mode and
  consider the N1 NAS signalling connection released (3GPP TS 24.501)
2025-02-18 12:47:13 +01:00
Guido Casati fb318e8e3f Cleanup commented out code in nas_nrue 2025-02-18 12:47:13 +01:00
Guido Casati ca869d8fd3 Pass to RRC the 5G-S-TMSI extracted from NAS Registration Accept
* NAS -> RRC: RRC receives an ITTI message with NAS 5GMM indication message
  containing the 5G-S-TMSI derived from NAS GUTI
* 5G-S-TMSI is stored in the RRC instance and to be later encoded in the RRCSetup
2025-02-18 12:47:13 +01:00
Guido Casati 4736f97055 Indicate to NAS that the RRC connection has been established with a Connection Establishment Indication
* ITTI from RRC to NAS
* according to 5.3.1.3 of 3GPP TS 24.501
* set 5GMM mode to CONNECTED
2025-02-18 12:47:13 +01:00
Robert Schmidt 2334f6f522 Merge remote-tracking branch 'origin/nas-issue-881' into integration_2025_w07 (!3176)
Refactor and extend NAS Registration Request

Extended NAS Registration Request generation and encoding according to
8.2.6 of 3GPP TS 24.501. Main topics:

- NAS Registration Type
- NAS KSI
- integrity protection
- NAS container encoding

Improvements:

- Add 5GMM Modes in NAS
- Introduced 5GMM state machine

Fixes:

- add 5GMM Capability IE to Registration Request
- closes #881, #819
2025-02-14 15:08:23 +01:00
Guido Casati bd42948814 Move debug log for SUCI and GUTI to the relvant processing functions 2025-02-10 10:05:02 +01: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 16b1b0e9ce Enable 5GMM Capability encoding in NAS Registration Request
* this commit is enabling the handling of non-cleartext IEs in the NAS Registration Request message
  according to 24.501, 23.502
* send the full Registration Request message in the NAS Container of the SECURITY MODE COMPLETE
* send the non-cleartext IEs in the NAS container of the Registration Request

closes #881
2025-02-10 10:05:02 +01:00
Guido Casati 9447e4fb57 Refactor 5GMM Capability encoding (9.11.3 of 3GPP TS 24.501)
* add all relevant content fields according to the specs and do the encoding

Related to #881
2025-02-10 10:05:02 +01:00
Guido Casati 0c8761aadd Refactor NAS 5GS Registration Request generation (3GPP TS 24.501)
* send integrity protected Initial NAS Message when UE in 5GMM-IDLE mode has valid current 5G NAS security context:
  > According to 4.4.2.5 TS 24.501:
  > when a UE in 5GMM-IDLE mode establishes a new NAS signalling connection and has a valid current 5G NAS
  > security context, the UE shall transmit the initial NAS message integrity protected with the current 5G NAS security
  > context and further protect this message as specified in subclause 4.4.6.

* set NAS key set identifier IE to "no key is available (UE to network)"
  * previously set to 1 which has no impact
  * set now to 111 in order to trigger new authentication
  * See 9.11.3.32 of 3GPP TS 24.501

* Do 5GS Registration Type "mobility registration updating" when 5GMM state is De-registered
2025-02-10 10:05:02 +01:00
Guido Casati 088939f5b0 Add set_fgs_registration_type to set 5GS Registration Type according to 3GPP TS 24.501 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 4633eb8888 Refactor 5GS registration type encoding (9.11.3.7 of 3GPP TS 24.501) 2025-02-10 09:51:52 +01:00
Bartosz Podrygajlo e61bf5132d Refactor tun_if.h
Use a common function for generating interface name. Use full interface
name in tun_if.h functions.
2025-02-07 12:25:35 +01:00
Guido Casati 9dd1929ec0 Add fgsnasmessagecontainer member to NAS Registration Request struct 2025-02-04 15:32:04 +01:00
Guido Casati 54755b57aa Add NAS Registration Request with type Mobility Registration Updating
* ref TS 24.501
2025-02-04 15:31:24 +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
Robert Schmidt e0865421b9 Merge remote-tracking branch 'origin/nr-ue-nas-improvements' into integration_2025_w05 (!2984)
NAS 5GS refactor

The goal of this MR is to reorganize the NR NAS code into:

- enc/dec library functions (5GS, 5GMM, 5GSM, NR_NAS_defs.h,
  nr_fgs_nas_lib.c)
- handlers and callbacks (nr_nas_msg.c)

The following changes are introduced:

1. migrate 5GS enc/dec lib (5GMM and 5GSM) to a dedicated folder
2. add a nested CMakeLists structure
3. refactor NR NAS enc/dec functions
4. refactor NR NAS messages struct definitions
5. remove most of dependency from NAS LTE
6. further refactor of PDU Session Establishment Accept processing to
   separate enc/dec from handling
7. made naming of 5GS definitions consistent whenever necessary
8. cleanup unused code
9. remove redundant struct definitions

Also:

1. fix decoding of AMF Set ID in 5G-S-TMSI UE identity
2. replace Byte_t directly with uint8_t
2025-01-31 22:29:31 +01:00
Guido Casati 529b142d75 Refactor servingNetworkName 2025-01-31 16:05:54 +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
Laurent THOMAS 5416be3736 move byte2m128i in a more logical place 2025-01-30 17:14:10 +01:00
Guido Casati e842ca2631 Move assert up in decode_5gs_mobile_identity 2025-01-30 15:21:39 +01:00
Guido Casati 8260b2283c Do get_msg_type only once in nas_nrue 2025-01-30 15:21:39 +01:00
Guido Casati 918fcd2b6d Bugfix: 6 bits AMF set ID in decode_guti_5gs_mobile_identity
* the last 6 bits of the GUTI represent the AMF Pointer
* the AMF Set ID is 10 bits long
* the Registration Accept message received from the network contains the GUTI
  which, when properly decoded, will be used in any possible following Registration Request
2025-01-30 15:21:39 +01:00
Guido Casati 97521d21e5 Refactor mm_msg_encode 2025-01-30 15:21:39 +01:00
Guido Casati 3e27e53f52 Handle size in nas_protected_security_header_encode 2025-01-30 15:21:39 +01:00
Guido Casati c37c5ad7ae Use macro NAS_INTEGRITY_SIZE in NAS 2025-01-30 15:21:39 +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