Add generation function and handler for NAS Authentication Failure
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
#include "RegistrationComplete.h"
|
||||
#include "RegistrationRequest.h"
|
||||
#include "fgs_service_request.h"
|
||||
#include "fgmm_authentication_failure.h"
|
||||
|
||||
/* Message types defintions for:
|
||||
(a) 5GS Mobility Management (5GMM) (IDs 0x41 - 0x68)
|
||||
@@ -222,6 +223,7 @@ typedef struct {
|
||||
fgs_service_request_msg_t service_request;
|
||||
fgmm_identity_response_msg fgs_identity_response;
|
||||
fgs_authentication_response_msg fgs_auth_response;
|
||||
fgmm_auth_failure_t fgmm_auth_failure;
|
||||
fgs_deregistration_request_ue_originating_msg fgs_deregistration_request_ue_originating;
|
||||
fgs_security_mode_complete_msg fgs_security_mode_complete;
|
||||
registration_complete_msg registration_complete;
|
||||
|
||||
@@ -73,6 +73,11 @@ int mm_msg_encode(const fgmm_nas_message_plain_t *p, uint8_t *buffer, uint32_t l
|
||||
case FGS_AUTHENTICATION_RESPONSE:
|
||||
enc_msg = encode_fgs_authentication_response(&p->mm_msg.fgs_auth_response, buffer, len);
|
||||
break;
|
||||
case FGS_AUTHENTICATION_FAILURE: {
|
||||
byte_array_t ba = {.buf = buffer, .len = len};
|
||||
enc_msg = encode_fgmm_auth_failure(&ba, &p->mm_msg.fgmm_auth_failure);
|
||||
break;
|
||||
}
|
||||
case FGS_SECURITY_MODE_COMPLETE:
|
||||
enc_msg = encode_fgs_security_mode_complete(&p->mm_msg.fgs_security_mode_complete, buffer, len);
|
||||
break;
|
||||
|
||||
@@ -838,6 +838,24 @@ static void generateAuthenticationResp(nr_ue_nas_t *nas, as_nas_info_t *initialN
|
||||
free(res.value);
|
||||
}
|
||||
|
||||
/** @brief Send Authentication Failure message from the UE to the AMF to
|
||||
* indicate that authentication of the network has failed */
|
||||
static void generateAuthenticationFailure(nr_ue_nas_t *nas, as_nas_info_t *initialNasMsg, cause_id_t cause)
|
||||
{
|
||||
int size = sizeof(fgmm_msg_header_t);
|
||||
fgmm_nas_message_plain_t plain = {0};
|
||||
|
||||
// Plain 5GMM header
|
||||
plain.header = set_mm_header(FGS_AUTHENTICATION_FAILURE, PLAIN_5GS_MSG);
|
||||
size += sizeof(plain.header);
|
||||
// 5GMM Cause (Mandatory)
|
||||
fgmm_auth_failure_t *mm_msg = &plain.mm_msg.fgmm_auth_failure;
|
||||
mm_msg->cause = cause;
|
||||
size += 1;
|
||||
initialNasMsg->nas_data = malloc_or_fail(size * sizeof(*initialNasMsg->nas_data));
|
||||
initialNasMsg->length = mm_msg_encode(&plain, initialNasMsg->nas_data, size);
|
||||
}
|
||||
|
||||
int nas_itti_kgnb_refresh_req(instance_t instance, const uint8_t kgnb[32])
|
||||
{
|
||||
MessageDef *message_p;
|
||||
|
||||
Reference in New Issue
Block a user