From 8b32e95d6a9c4276ff9bce5779b9fd5339666604 Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Tue, 13 Aug 2024 23:37:56 +0200 Subject: [PATCH] Define security header and security state enums and strings with available macros * also, add security type NAS_SECURITY_NEW_SECURITY_CONTEXT --- openair3/NAS/NR_UE/5GS/NR_NAS_defs.h | 17 ++++++++++------- openair3/NAS/NR_UE/nr_nas_msg.c | 20 ++++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/openair3/NAS/NR_UE/5GS/NR_NAS_defs.h b/openair3/NAS/NR_UE/5GS/NR_NAS_defs.h index bbff5069e2..babda98aaa 100644 --- a/openair3/NAS/NR_UE/5GS/NR_NAS_defs.h +++ b/openair3/NAS/NR_UE/5GS/NR_NAS_defs.h @@ -100,13 +100,16 @@ typedef enum { } fgs_nas_msg_t; // TS 24.501 -typedef enum { - PLAIN_5GS_MSG = 0, - INTEGRITY_PROTECTED = 1, - INTEGRITY_PROTECTED_AND_CIPHERED = 2, - INTEGRITY_PROTECTED_WITH_NEW_SECU_CTX = 3, - INTEGRITY_PROTECTED_AND_CIPHERED_WITH_NEW_SECU_CTX = 4, -} Security_header_t; +#define FOREACH_HEADER(TYPE_DEF) \ + TYPE_DEF(PLAIN_5GS_MSG, 0) \ + TYPE_DEF(INTEGRITY_PROTECTED, 1) \ + TYPE_DEF(INTEGRITY_PROTECTED_AND_CIPHERED, 2) \ + TYPE_DEF(INTEGRITY_PROTECTED_WITH_NEW_SECU_CTX, 3) \ + TYPE_DEF(INTEGRITY_PROTECTED_AND_CIPHERED_WITH_NEW_SECU_CTX, 4) + +typedef enum { FOREACH_HEADER(TO_ENUM) } Security_header_t; + +static const text_info_t security_header_type_s[] = {FOREACH_HEADER(TO_TEXT)}; // table 9.11.3.2.1 #define FOREACH_CAUSE(CAUSE_DEF) \ diff --git a/openair3/NAS/NR_UE/nr_nas_msg.c b/openair3/NAS/NR_UE/nr_nas_msg.c index bfb3b73ea6..bb2572eee6 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg.c +++ b/openair3/NAS/NR_UE/nr_nas_msg.c @@ -71,13 +71,17 @@ extern uint16_t NB_UE_INST; static nr_ue_nas_t nr_ue_nas[MAX_NAS_UE] = {0}; static nr_nas_msg_snssai_t nas_allowed_nssai[8]; -typedef enum { - NAS_SECURITY_NO_SECURITY_CONTEXT, - NAS_SECURITY_UNPROTECTED, - NAS_SECURITY_INTEGRITY_FAILED, - NAS_SECURITY_INTEGRITY_PASSED, - NAS_SECURITY_BAD_INPUT -} security_state_t; +#define FOREACH_STATE(TYPE_DEF) \ + TYPE_DEF(NAS_SECURITY_NO_SECURITY_CONTEXT, 0) \ + TYPE_DEF(NAS_SECURITY_NEW_SECURITY_CONTEXT, 1) \ + TYPE_DEF(NAS_SECURITY_UNPROTECTED, 2) \ + TYPE_DEF(NAS_SECURITY_INTEGRITY_FAILED, 3) \ + TYPE_DEF(NAS_SECURITY_INTEGRITY_PASSED, 4) \ + TYPE_DEF(NAS_SECURITY_BAD_INPUT, 5) + +typedef enum { FOREACH_STATE(TO_ENUM) } security_state_t; + +static const text_info_t security_state_info[] = {FOREACH_STATE(TO_TEXT)}; static fgmm_msg_header_t set_mm_header(fgs_nas_msg_t type, Security_header_t security) { @@ -1389,7 +1393,7 @@ void *nas_nrue(void *args_p) security_state_t security_state = nas_security_rx_process(nas, pdu_buffer, pdu_length); if (security_state != NAS_SECURITY_INTEGRITY_PASSED && security_state != NAS_SECURITY_NO_SECURITY_CONTEXT) { - LOG_E(NAS, "NAS integrity failed, discard incoming message\n"); + LOG_E(NAS, "NAS integrity failed, discard incoming message: security state is %s\n", security_state_info[security_state].text); break; }