forked from acouzens/open5gs
[#511] 5GC Re-registration bug is fixed
This commit is contained in:
parent
fa262ded90
commit
96396739af
|
@ -282,12 +282,13 @@ void ogs_nas_5gs_tai_list_build(
|
|||
* O TLV 3 */
|
||||
typedef struct ogs_nas_5gs_update_type_s {
|
||||
uint8_t length;
|
||||
ED6(uint8_t spare:2;,
|
||||
uint8_t pnb_ciot_eps:1;,
|
||||
uint8_t pnb_ciot_5gs:1;,
|
||||
uint8_t ng_ran_rcu:1;,
|
||||
uint8_t sms_requested:1;,
|
||||
uint8_t amf_pointer_value:2;)
|
||||
ED7(uint8_t spare:2;,
|
||||
uint8_t user_plane_ciot_eps_optimization:1;,
|
||||
uint8_t control_plane_ciot_eps_optimization:1;,
|
||||
uint8_t user_plane_ciot_5gs_optimization:1;,
|
||||
uint8_t control_plane_ciot_5gs_optimization:1;,
|
||||
uint8_t ng_ran_radio_capability_update_needed:1;,
|
||||
uint8_t sms_over_nas_supported:1;)
|
||||
} __attribute__ ((packed)) ogs_nas_5gs_update_type_t;
|
||||
|
||||
/* 9.11.3.10 ABBA
|
||||
|
|
|
@ -307,11 +307,6 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
|
|||
}
|
||||
}
|
||||
|
||||
if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) {
|
||||
if (SESSION_SYNC_DONE(amf_ue))
|
||||
nas_5gs_send_registration_accept(amf_ue);
|
||||
}
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -149,6 +149,11 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
|
|||
break;
|
||||
}
|
||||
|
||||
if (SESSION_SYNC_DONE(amf_ue))
|
||||
nas_5gs_send_registration_accept(amf_ue);
|
||||
|
||||
OGS_FSM_TRAN(s, &gmm_state_registered);
|
||||
|
||||
} else {
|
||||
|
||||
amf_sbi_send_release_all_sessions(amf_ue);
|
||||
|
|
|
@ -211,6 +211,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
|
||||
/* Send Registration request */
|
||||
test_ue.registration_request_param.guti = 1;
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
|
|
|
@ -211,6 +211,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
|
||||
/* Send Registration request */
|
||||
test_ue.registration_request_param.guti = 1;
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
|
|
|
@ -60,18 +60,21 @@ typedef struct test_context_s {
|
|||
typedef struct test_sess_s test_sess_t;
|
||||
|
||||
typedef struct test_registration_request_param_s {
|
||||
union {
|
||||
struct {
|
||||
ED8(uint8_t integrity_protected:1;,
|
||||
uint8_t guti:1;,
|
||||
uint8_t requested_nssai:1;,
|
||||
uint8_t last_visited_registered_tai:1;,
|
||||
uint8_t ue_usage_setting:1;,
|
||||
uint8_t uplink_data_status:1;,
|
||||
uint8_t pdu_session_status:1;,
|
||||
uint8_t allowed_pdu_session_status:1;)
|
||||
};
|
||||
uint8_t value;
|
||||
struct {
|
||||
ED8(uint8_t integrity_protected:1;,
|
||||
uint8_t ciphered:1;,
|
||||
uint8_t guti:1;,
|
||||
uint8_t gmm_capability:1;,
|
||||
uint8_t requested_nssai:1;,
|
||||
uint8_t last_visited_registered_tai:1;,
|
||||
uint8_t ue_usage_setting:1;,
|
||||
uint8_t update_type:1;)
|
||||
};
|
||||
struct {
|
||||
ED4(uint8_t uplink_data_status:1;,
|
||||
uint8_t pdu_session_status:1;,
|
||||
uint8_t allowed_pdu_session_status:1;,
|
||||
uint8_t spare2:5;)
|
||||
};
|
||||
struct {
|
||||
uint16_t pdu_session_status;
|
||||
|
|
|
@ -51,6 +51,7 @@ ogs_pkbuf_t *testgmm_build_registration_request(
|
|||
®istration_request->last_visited_registered_tai;
|
||||
ogs_nas_ue_usage_setting_t *ue_usage_setting =
|
||||
®istration_request->ue_usage_setting;
|
||||
ogs_nas_5gs_update_type_t *update_type = ®istration_request->update_type;
|
||||
|
||||
ogs_nas_message_container_t *nas_message_container =
|
||||
®istration_request->nas_message_container;
|
||||
|
@ -63,8 +64,12 @@ ogs_pkbuf_t *testgmm_build_registration_request(
|
|||
|
||||
memset(&message, 0, sizeof(message));
|
||||
if (test_ue->registration_request_param.integrity_protected) {
|
||||
message.h.security_header_type =
|
||||
OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
|
||||
if (test_ue->registration_request_param.ciphered)
|
||||
message.h.security_header_type =
|
||||
OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
|
||||
else
|
||||
message.h.security_header_type =
|
||||
OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED;
|
||||
message.h.extended_protocol_discriminator =
|
||||
OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM;
|
||||
}
|
||||
|
@ -119,12 +124,14 @@ ogs_pkbuf_t *testgmm_build_registration_request(
|
|||
registration_request_param.psimask.allowed_pdu_session_status >> 8;
|
||||
}
|
||||
|
||||
registration_request->presencemask |=
|
||||
OGS_NAS_5GS_REGISTRATION_REQUEST_5GMM_CAPABILITY_PRESENT;
|
||||
gmm_capability->length = 1;
|
||||
gmm_capability->lte_positioning_protocol_capability = 0;
|
||||
gmm_capability->ho_attach = 1;
|
||||
gmm_capability->s1_mode = 1;
|
||||
if (test_ue->registration_request_param.gmm_capability) {
|
||||
registration_request->presencemask |=
|
||||
OGS_NAS_5GS_REGISTRATION_REQUEST_5GMM_CAPABILITY_PRESENT;
|
||||
gmm_capability->length = 1;
|
||||
gmm_capability->lte_positioning_protocol_capability = 0;
|
||||
gmm_capability->ho_attach = 1;
|
||||
gmm_capability->s1_mode = 1;
|
||||
}
|
||||
|
||||
registration_request->presencemask |=
|
||||
OGS_NAS_5GS_REGISTRATION_REQUEST_UE_SECURITY_CAPABILITY_PRESENT;
|
||||
|
@ -174,6 +181,14 @@ ogs_pkbuf_t *testgmm_build_registration_request(
|
|||
ue_usage_setting->data_centric = 1;
|
||||
}
|
||||
|
||||
if (test_ue->registration_request_param.update_type) {
|
||||
/* Set 5GS update type */
|
||||
registration_request->presencemask |=
|
||||
OGS_NAS_5GS_REGISTRATION_REQUEST_5GS_UPDATE_TYPE_PRESENT;
|
||||
update_type->length = 1;
|
||||
update_type->sms_over_nas_supported = 1;
|
||||
}
|
||||
|
||||
if (nasbuf) {
|
||||
registration_request->presencemask |=
|
||||
OGS_NAS_5GS_REGISTRATION_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT;
|
||||
|
|
|
@ -191,6 +191,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
bson_destroy(doc);
|
||||
|
||||
/* Send Registration request */
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
sendbuf = testngap_build_initial_ue_message(&test_ue, gmmbuf, false);
|
||||
|
|
|
@ -205,6 +205,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
bson_destroy(doc);
|
||||
|
||||
/* Send Registration request */
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
sendbuf = testngap_build_initial_ue_message(&test_ue, gmmbuf, false);
|
||||
|
|
|
@ -212,6 +212,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
@ -570,9 +571,11 @@ static void test2_func(abts_case *tc, void *data)
|
|||
bson_destroy(doc);
|
||||
|
||||
/* Send Registration request */
|
||||
test_ue.registration_request_param.gmm_capability = 0;
|
||||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
@ -761,6 +764,97 @@ static void test2_func(abts_case *tc, void *data)
|
|||
|
||||
ogs_msleep(100);
|
||||
|
||||
/* Send Registration request : Uplink Data Status */
|
||||
test_ue.registration_request_param.integrity_protected = 0;
|
||||
test_ue.registration_request_param.guti = 1;
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
test_ue.registration_request_param.update_type = 1;
|
||||
nasbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, nasbuf);
|
||||
|
||||
test_ue.registration_request_param.integrity_protected = 1;
|
||||
test_ue.registration_request_param.guti = 1;
|
||||
test_ue.registration_request_param.gmm_capability = 0;
|
||||
test_ue.registration_request_param.requested_nssai = 0;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 0;
|
||||
test_ue.registration_request_param.ue_usage_setting = 0;
|
||||
test_ue.registration_request_param.update_type = 0;
|
||||
gmmbuf = testgmm_build_registration_request(&test_ue, nasbuf);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
sendbuf = testngap_build_initial_ue_message(&test_ue, gmmbuf, true);
|
||||
ABTS_PTR_NOTNULL(tc, sendbuf);
|
||||
rv = testgnb_ngap_send(ngap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Receive Registration accept */
|
||||
recvbuf = testgnb_ngap_read(ngap);
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
testngap_recv(&test_ue, recvbuf);
|
||||
ABTS_INT_EQUAL(tc, 0x0000, test_ue.pdu_session_reactivation_result);
|
||||
|
||||
/* Send Initial context setup response */
|
||||
sendbuf = testngap_build_initial_context_setup_response(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, sendbuf);
|
||||
rv = testgnb_ngap_send(ngap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Send PDU session establishment request */
|
||||
test_sess.ul_nas_transport_param.request_type =
|
||||
OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
|
||||
test_sess.ul_nas_transport_param.dnn = 1;
|
||||
test_sess.ul_nas_transport_param.s_nssai = 1;
|
||||
|
||||
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
|
||||
ABTS_PTR_NOTNULL(tc, gsmbuf);
|
||||
gmmbuf = testgmm_build_ul_nas_transport(&test_sess,
|
||||
OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
sendbuf = testngap_build_uplink_nas_transport(&test_ue, gmmbuf);
|
||||
ABTS_PTR_NOTNULL(tc, sendbuf);
|
||||
rv = testgnb_ngap_send(ngap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Receive PDU session establishment accept */
|
||||
recvbuf = testgnb_ngap_read(ngap);
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
testngap_recv(&test_ue, recvbuf);
|
||||
|
||||
ogs_msleep(100);
|
||||
|
||||
/* Send GTP-U ICMP Packet */
|
||||
rv = test_gtpu_build_ping(&sendbuf, &test_sess, "10.45.0.1");
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
rv = testgnb_gtpu_send(gtpu, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Send PDU session resource setup response */
|
||||
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
|
||||
ABTS_PTR_NOTNULL(tc, sendbuf);
|
||||
rv = testgnb_ngap_send(ngap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Receive GTP-U ICMP Packet */
|
||||
recvbuf = testgnb_gtpu_read(gtpu);
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
/* Send GTP-U ICMP Packet */
|
||||
rv = test_gtpu_build_ping(&sendbuf, &test_sess, "10.45.0.1");
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
rv = testgnb_gtpu_send(gtpu, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Receive GTP-U ICMP Packet */
|
||||
recvbuf = testgnb_gtpu_read(gtpu);
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
ogs_msleep(100);
|
||||
|
||||
/********** Remove Subscriber in Database */
|
||||
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));
|
||||
ABTS_PTR_NOTNULL(tc, doc);
|
||||
|
|
|
@ -208,6 +208,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
|
|
@ -209,6 +209,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
|
|
@ -208,6 +208,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
|
|
@ -208,6 +208,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
@ -696,6 +697,7 @@ static void test2_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
@ -1027,6 +1029,7 @@ static void test3_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
@ -1449,6 +1452,7 @@ static void test4_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
|
|
@ -208,6 +208,7 @@ static void test1_func(abts_case *tc, void *data)
|
|||
gmmbuf = testgmm_build_registration_request(&test_ue, NULL);
|
||||
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
||||
|
||||
test_ue.registration_request_param.gmm_capability = 1;
|
||||
test_ue.registration_request_param.requested_nssai = 1;
|
||||
test_ue.registration_request_param.last_visited_registered_tai = 1;
|
||||
test_ue.registration_request_param.ue_usage_setting = 1;
|
||||
|
|
Loading…
Reference in New Issue