Skip to content

Commit

Permalink
[NAS] modify library to include both directions of deregistration req…
Browse files Browse the repository at this point in the history
…uests

Definitions in NAS library now include both directions of deregistration
requests/accepts - from UE and from network.
  • Loading branch information
bmeglic authored and acetcom committed Jul 11, 2022
1 parent babc309 commit d1a2971
Show file tree
Hide file tree
Showing 13 changed files with 67 additions and 48 deletions.
33 changes: 22 additions & 11 deletions lib/nas/5gs/decoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
/*******************************************************************************
* This file had been created by nas-message.py script v0.2.0
* Please do not modify this file but regenerate it via script.
* Created on: 2022-01-22 09:24:09.045630 by acetcom
* Created on: 2022-07-11 07:09:47.173881 by ubuntu
* from 24501-g41.docx
******************************************************************************/

Expand Down Expand Up @@ -979,7 +979,7 @@ int ogs_nas_5gs_decode_deregistration_request_from_ue(ogs_nas_5gs_message_t *mes
int decoded = 0;
int size = 0;

ogs_trace("[NAS] Decode DEREGISTRATION_REQUEST\n");
ogs_trace("[NAS] Decode DEREGISTRATION_REQUEST_FROM_UE\n");

size = ogs_nas_5gs_decode_de_registration_type(&deregistration_request_from_ue->de_registration_type, pkbuf);
if (size < 0) {
Expand All @@ -1006,7 +1006,7 @@ int ogs_nas_5gs_decode_deregistration_request_to_ue(ogs_nas_5gs_message_t *messa
int decoded = 0;
int size = 0;

ogs_trace("[NAS] Decode DEREGISTRATION_REQUEST\n");
ogs_trace("[NAS] Decode DEREGISTRATION_REQUEST_TO_UE\n");

size = ogs_nas_5gs_decode_de_registration_type(&deregistration_request_to_ue->de_registration_type, pkbuf);
if (size < 0) {
Expand All @@ -1028,34 +1028,34 @@ int ogs_nas_5gs_decode_deregistration_request_to_ue(ogs_nas_5gs_message_t *messa
decoded += size;

switch(type) {
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_TYPE:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_TYPE:
size = ogs_nas_5gs_decode_5gmm_cause(&deregistration_request_to_ue->gmm_cause, pkbuf);
if (size < 0) {
ogs_error("ogs_nas_5gs_decode_5gmm_cause() failed");
return size;
}

deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_PRESENT;
deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT;
decoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_TYPE:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_TYPE:
size = ogs_nas_5gs_decode_gprs_timer_2(&deregistration_request_to_ue->t3346_value, pkbuf);
if (size < 0) {
ogs_error("ogs_nas_5gs_decode_gprs_timer_2() failed");
return size;
}

deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_PRESENT;
deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_PRESENT;
decoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_TYPE:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_TYPE:
size = ogs_nas_5gs_decode_rejected_nssai(&deregistration_request_to_ue->rejected_nssai, pkbuf);
if (size < 0) {
ogs_error("ogs_nas_5gs_decode_rejected_nssai() failed");
return size;
}

deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_PRESENT;
deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT;
decoded += size;
break;
default:
Expand Down Expand Up @@ -3742,7 +3742,7 @@ int ogs_nas_5gmm_decode(ogs_nas_5gs_message_t *message, ogs_pkbuf_t *pkbuf)

decoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
size = ogs_nas_5gs_decode_deregistration_request_from_ue(message, pkbuf);
if (size < 0) {
ogs_error("ogs_nas_5gs_decode_deregistration_request_from_ue() failed");
Expand All @@ -3751,7 +3751,18 @@ int ogs_nas_5gmm_decode(ogs_nas_5gs_message_t *message, ogs_pkbuf_t *pkbuf)

decoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_ACCEPT:
case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE:
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE:
size = ogs_nas_5gs_decode_deregistration_request_to_ue(message, pkbuf);
if (size < 0) {
ogs_error("ogs_nas_5gs_decode_deregistration_request_to_ue() failed");
return size;
}

decoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_TO_UE:
break;
case OGS_NAS_5GS_SERVICE_REQUEST:
size = ogs_nas_5gs_decode_service_request(message, pkbuf);
Expand Down
29 changes: 18 additions & 11 deletions lib/nas/5gs/encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
/*******************************************************************************
* This file had been created by nas-message.py script v0.2.0
* Please do not modify this file but regenerate it via script.
* Created on: 2022-01-22 09:24:09.053958 by acetcom
* Created on: 2022-07-11 07:09:47.188485 by ubuntu
* from 24501-g41.docx
******************************************************************************/

Expand Down Expand Up @@ -851,7 +851,7 @@ int ogs_nas_5gs_encode_deregistration_request_from_ue(ogs_pkbuf_t *pkbuf, ogs_na
int encoded = 0;
int size = 0;

ogs_trace("[NAS] Encode DEREGISTRATION_REQUEST");
ogs_trace("[NAS] Encode DEREGISTRATION_REQUEST_FROM_UE");

size = ogs_nas_5gs_encode_de_registration_type(pkbuf, &deregistration_request_from_ue->de_registration_type);
ogs_assert(size >= 0);
Expand All @@ -870,14 +870,14 @@ int ogs_nas_5gs_encode_deregistration_request_to_ue(ogs_pkbuf_t *pkbuf, ogs_nas_
int encoded = 0;
int size = 0;

ogs_trace("[NAS] Encode DEREGISTRATION_REQUEST");
ogs_trace("[NAS] Encode DEREGISTRATION_REQUEST_TO_UE");

size = ogs_nas_5gs_encode_de_registration_type(pkbuf, &deregistration_request_to_ue->de_registration_type);
ogs_assert(size >= 0);
encoded += size;

if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_PRESENT) {
size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_TYPE);
if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT) {
size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_TYPE);
ogs_assert(size >= 0);
encoded += size;

Expand All @@ -886,8 +886,8 @@ int ogs_nas_5gs_encode_deregistration_request_to_ue(ogs_pkbuf_t *pkbuf, ogs_nas_
encoded += size;
}

if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_PRESENT) {
size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_TYPE);
if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_PRESENT) {
size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_TYPE);
ogs_assert(size >= 0);
encoded += size;

Expand All @@ -896,8 +896,8 @@ int ogs_nas_5gs_encode_deregistration_request_to_ue(ogs_pkbuf_t *pkbuf, ogs_nas_
encoded += size;
}

if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_PRESENT) {
size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_TYPE);
if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT) {
size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_TYPE);
ogs_assert(size >= 0);
encoded += size;

Expand Down Expand Up @@ -2848,12 +2848,19 @@ ogs_pkbuf_t *ogs_nas_5gmm_encode(ogs_nas_5gs_message_t *message)
ogs_assert(size >= 0);
encoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
size = ogs_nas_5gs_encode_deregistration_request_from_ue(pkbuf, message);
ogs_assert(size >= 0);
encoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE:
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE:
size = ogs_nas_5gs_encode_deregistration_request_to_ue(pkbuf, message);
ogs_assert(size >= 0);
encoded += size;
break;
case OGS_NAS_5GS_DEREGISTRATION_ACCEPT:
case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_TO_UE:
break;
case OGS_NAS_5GS_SERVICE_REQUEST:
size = ogs_nas_5gs_encode_service_request(pkbuf, message);
Expand Down
2 changes: 1 addition & 1 deletion lib/nas/5gs/ies.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
/*******************************************************************************
* This file had been created by nas-message.py script v0.2.0
* Please do not modify this file but regenerate it via script.
* Created on: 2022-01-22 09:24:09.032504 by acetcom
* Created on: 2022-07-11 07:09:47.151738 by ubuntu
* from 24501-g41.docx
******************************************************************************/

Expand Down
2 changes: 1 addition & 1 deletion lib/nas/5gs/ies.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
/*******************************************************************************
* This file had been created by nas-message.py script v0.2.0
* Please do not modify this file but regenerate it via script.
* Created on: 2022-01-22 09:24:09.029942 by acetcom
* Created on: 2022-07-11 07:09:47.146947 by ubuntu
* from 24501-g41.docx
******************************************************************************/

Expand Down
20 changes: 11 additions & 9 deletions lib/nas/5gs/message.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
/*******************************************************************************
* This file had been created by nas-message.py script v0.2.0
* Please do not modify this file but regenerate it via script.
* Created on: 2022-01-22 09:24:09.040249 by acetcom
* Created on: 2022-07-11 07:09:47.165005 by ubuntu
* from 24501-g41.docx
******************************************************************************/

Expand Down Expand Up @@ -72,8 +72,10 @@ typedef struct ogs_nas_5gs_security_header_s {
#define OGS_NAS_5GS_REGISTRATION_ACCEPT 66
#define OGS_NAS_5GS_REGISTRATION_COMPLETE 67
#define OGS_NAS_5GS_REGISTRATION_REJECT 68
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST 69
#define OGS_NAS_5GS_DEREGISTRATION_ACCEPT 70
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE 69
#define OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE 70
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE 71
#define OGS_NAS_5GS_DEREGISTRATION_ACCEPT_TO_UE 72
#define OGS_NAS_5GS_SERVICE_REQUEST 76
#define OGS_NAS_5GS_SERVICE_REJECT 77
#define OGS_NAS_5GS_SERVICE_ACCEPT 78
Expand Down Expand Up @@ -396,12 +398,12 @@ typedef struct ogs_nas_5gs_deregistration_request_from_ue_s {
/*******************************************************
* DEREGISTRATION REQUEST TO UE
******************************************************/
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_PRESENT ((uint64_t)1<<0)
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_PRESENT ((uint64_t)1<<1)
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_PRESENT ((uint64_t)1<<2)
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_TYPE 0x58
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_TYPE 0x5F
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_TYPE 0x6D
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT ((uint64_t)1<<0)
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_PRESENT ((uint64_t)1<<1)
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT ((uint64_t)1<<2)
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_TYPE 0x58
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_TYPE 0x5F
#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_TYPE 0x6D

typedef struct ogs_nas_5gs_deregistration_request_to_ue_s {
/* Mandatory fields */
Expand Down
9 changes: 4 additions & 5 deletions lib/nas/5gs/support/nas-message.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def usage():
print("-h Print this help and return")

def v_upper(v):
return re.sub('_TO_UE', '', re.sub('_FROM_UE', '', re.sub('\'', '_', re.sub('/', '_', re.sub('-', '_', re.sub(' ', '_', v)))).upper()))
return re.sub('\'', '_', re.sub('/', '_', re.sub('-', '_', re.sub(' ', '_', v)))).upper()

def v_lower(v):
return re.sub('\'', '_', re.sub('/', '_', re.sub('-', '_', re.sub(' ', '_', v)))).lower()
Expand Down Expand Up @@ -550,8 +550,7 @@ def write_cells_to_file(name, cells):
""")

for (k, v) in sorted_msg_list:
if k.find("TO UE") == -1:
f.write("#define OGS_NAS_5GS_" + v_upper(k) + " " + v.split('.')[0] + "\n")
f.write("#define OGS_NAS_5GS_" + v_upper(k) + " " + v.split('.')[0] + "\n")
f.write("\n")

for (k, v) in sorted_msg_list:
Expand Down Expand Up @@ -749,7 +748,7 @@ def write_cells_to_file(name, cells):
for (k, v) in sorted_msg_list:
if "ies" not in msg_list[k]:
continue;
if float(msg_list[k]["type"]) < 192 and k.find("TO UE") == -1:
if float(msg_list[k]["type"]) < 192:
f.write(" case OGS_NAS_5GS_%s:\n" % v_upper(k))
if len(msg_list[k]["ies"]) != 0:
f.write(" size = ogs_nas_5gs_decode_%s(message, pkbuf);\n" % v_lower(k))
Expand Down Expand Up @@ -903,7 +902,7 @@ def write_cells_to_file(name, cells):
for (k, v) in sorted_msg_list:
if "ies" not in msg_list[k]:
continue;
if float(msg_list[k]["type"]) < 192 and k.find("FROM UE") == -1:
if float(msg_list[k]["type"]) < 192:
f.write(" case OGS_NAS_5GS_%s:\n" % v_upper(k))
if len(msg_list[k]["ies"]) != 0:
f.write(" size = ogs_nas_5gs_encode_%s(pkbuf, message);\n" % v_lower(k))
Expand Down
2 changes: 1 addition & 1 deletion src/amf/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -1475,7 +1475,7 @@ amf_ue_t *amf_ue_find_by_message(ogs_nas_5gs_message_t *message)
mobile_identity_header->type);
}
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
deregistration_request = &message->gmm.deregistration_request_from_ue;
ogs_assert(deregistration_request);
mobile_identity = &deregistration_request->mobile_identity;
Expand Down
2 changes: 1 addition & 1 deletion src/amf/gmm-build.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ ogs_pkbuf_t *gmm_build_de_registration_accept(amf_ue_t *amf_ue)

message.gmm.h.extended_protocol_discriminator =
OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM;
message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_ACCEPT;
message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE;

return nas_5gs_security_encode(amf_ue, &message);
}
Expand Down
2 changes: 1 addition & 1 deletion src/amf/gmm-handler.c
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,7 @@ int gmm_handle_deregistration_request(amf_ue_t *amf_ue,
/* Set 5GS De-registration Type */
memcpy(&amf_ue->nas.de_registration,
de_registration_type, sizeof(ogs_nas_de_registration_type_t));
amf_ue->nas.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST;
amf_ue->nas.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE;

amf_ue->nas.ue.tsc = de_registration_type->tsc;
amf_ue->nas.ue.ksi = de_registration_type->ksi;
Expand Down
8 changes: 4 additions & 4 deletions src/amf/gmm-sm.c
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
OGS_FSM_TRAN(s, &gmm_state_exception);
break;

case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
ogs_info("[%s] Deregistration request", amf_ue->supi);

gmm_handle_deregistration_request(
Expand Down Expand Up @@ -592,7 +592,7 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
OGS_FSM_TRAN(s, &gmm_state_exception);
break;

case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
ogs_warn("[%s] Deregistration request", amf_ue->supi);

gmm_handle_deregistration_request(
Expand Down Expand Up @@ -837,7 +837,7 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
OGS_FSM_TRAN(s, &gmm_state_exception);
break;

case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
ogs_warn("[%s] Deregistration request", amf_ue->supi);

gmm_handle_deregistration_request(
Expand Down Expand Up @@ -1160,7 +1160,7 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
OGS_FSM_TRAN(s, &gmm_state_exception);
break;

case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
ogs_warn("[%s] Deregistration request", amf_ue->supi);

gmm_handle_deregistration_request(
Expand Down
2 changes: 1 addition & 1 deletion tests/common/gmm-build.c
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ ogs_pkbuf_t *testgmm_build_de_registration_request(
}
message.gmm.h.extended_protocol_discriminator =
OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM;
message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST;
message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE;

de_registration_type->ksi = test_ue->nas.ksi;
de_registration_type->switch_off = switch_off;
Expand Down
2 changes: 1 addition & 1 deletion tests/common/nas-encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ ogs_pkbuf_t *test_nas_5gmm_encode(ogs_nas_5gs_message_t *message)
encoded += size;

switch(message->gmm.h.message_type) {
case OGS_NAS_5GS_DEREGISTRATION_REQUEST:
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
size = ogs_nas_5gs_encode_deregistration_request_from_ue(
pkbuf, message);
ogs_assert(size >= 0);
Expand Down
2 changes: 1 addition & 1 deletion tests/common/nas-security.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ ogs_pkbuf_t *test_nas_5gs_security_encode(
message->h.extended_protocol_discriminator;
h.sequence_number = (test_ue->ul_count & 0xff);

if (message->gmm.h.message_type == OGS_NAS_5GS_DEREGISTRATION_REQUEST)
if (message->gmm.h.message_type == OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE)
new = test_nas_5gs_plain_encode(message);
else
new = ogs_nas_5gs_plain_encode(message);
Expand Down

0 comments on commit d1a2971

Please sign in to comment.