mirror of
https://github.com/open5gs/open5gs.git
synced 2025-11-03 05:23:38 +00:00
1. If UE does not use a NAS container for Non-cleartext IEs, Open5GS AMF will send Registration reject message. 2. If UE sends Non-cleartext IEs without Integrity-protected, Open5GS AMF will send Registration reject message. 3. If UE does not send NAS container in Security mode complete message, Open5GS AMF will send Registration reject message.
600 lines
21 KiB
C
600 lines
21 KiB
C
/*
|
|
* Copyright (C) 2019,2020 by Sukchan Lee <acetcom@gmail.com>
|
|
*
|
|
* This file is part of Open5GS.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "test-common.h"
|
|
|
|
static void test1_func(abts_case *tc, void *data)
|
|
{
|
|
int rv;
|
|
ogs_socknode_t *ngap;
|
|
ogs_socknode_t *gtpu;
|
|
ogs_pkbuf_t *gmmbuf;
|
|
ogs_pkbuf_t *gsmbuf;
|
|
ogs_pkbuf_t *nasbuf;
|
|
ogs_pkbuf_t *sendbuf;
|
|
ogs_pkbuf_t *recvbuf;
|
|
ogs_ngap_message_t message;
|
|
int i;
|
|
|
|
ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
|
|
test_ue_t *test_ue = NULL;
|
|
test_sess_t *sess = NULL;
|
|
test_bearer_t *qos_flow = NULL;
|
|
|
|
bson_t *doc = NULL;
|
|
|
|
/* Setup Test UE & Session Context */
|
|
memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
|
|
|
|
mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
|
|
mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
|
|
mobile_identity_suci.routing_indicator1 = 0;
|
|
mobile_identity_suci.routing_indicator2 = 0xf;
|
|
mobile_identity_suci.routing_indicator3 = 0xf;
|
|
mobile_identity_suci.routing_indicator4 = 0xf;
|
|
mobile_identity_suci.protection_scheme_id = OGS_NAS_5GS_NULL_SCHEME;
|
|
mobile_identity_suci.home_network_pki_value = 0;
|
|
mobile_identity_suci.scheme_output[0] = 0;
|
|
mobile_identity_suci.scheme_output[1] = 0;
|
|
mobile_identity_suci.scheme_output[2] = 0x47;
|
|
mobile_identity_suci.scheme_output[3] = 0x78;
|
|
|
|
test_ue = test_ue_add_by_suci(&mobile_identity_suci, 12);
|
|
ogs_assert(test_ue);
|
|
|
|
test_ue->nr_cgi.cell_id = 0x40001;
|
|
|
|
test_ue->nas.registration.type = 0;
|
|
test_ue->nas.registration.follow_on_request = 1;
|
|
test_ue->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
|
|
|
|
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
|
|
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
|
|
|
|
/* gNB connects to AMF */
|
|
ngap = testngap_client(AF_INET);
|
|
ABTS_PTR_NOTNULL(tc, ngap);
|
|
|
|
/* gNB connects to UPF */
|
|
gtpu = test_gtpu_server(1, AF_INET);
|
|
ABTS_PTR_NOTNULL(tc, gtpu);
|
|
|
|
/* Send NG-Setup Reqeust */
|
|
sendbuf = testngap_build_ng_setup_request(0x102, 32);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive NG-Setup Response */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/********** Insert Subscriber in Database */
|
|
doc = test_db_new_slice(test_ue);
|
|
ABTS_PTR_NOTNULL(tc, doc);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
|
|
|
|
/* Send Registration request */
|
|
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
|
|
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
|
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, false, true);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive Authentication request */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/* Send Authentication response */
|
|
gmmbuf = testgmm_build_authentication_response(test_ue);
|
|
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 Security mode command */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/* Send Security mode complete */
|
|
nasbuf = testgmm_build_registration_request(test_ue, NULL);
|
|
ABTS_PTR_NOTNULL(tc, nasbuf);
|
|
gmmbuf = testgmm_build_security_mode_complete(test_ue, nasbuf);
|
|
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 Initial context setup request +
|
|
* Registration accept */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_InitialContextSetup,
|
|
test_ue->ngap_procedure_code);
|
|
|
|
/* Send UE radio capability info indication */
|
|
sendbuf = testngap_build_ue_radio_capability_info_indication(test_ue);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Send Initial context setup response */
|
|
sendbuf = testngap_build_initial_context_setup_response(test_ue, false);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Send Registration complete */
|
|
gmmbuf = testgmm_build_registration_complete(test_ue);
|
|
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 Configuration update command */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/* Send PDU session establishment request */
|
|
sess = test_sess_add_by_dnn_and_psi(test_ue, "internet", 10);
|
|
ogs_assert(sess);
|
|
|
|
sess->pti = 0;
|
|
sess->pdu_session_type = OGS_PDU_SESSION_TYPE_IPV4;
|
|
|
|
sess->ul_nas_transport_param.request_type =
|
|
OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
|
|
sess->ul_nas_transport_param.dnn = 1;
|
|
sess->ul_nas_transport_param.s_nssai = 1;
|
|
|
|
sess->pdu_session_establishment_param.ssc_mode = 1;
|
|
sess->pdu_session_establishment_param.epco = 1;
|
|
|
|
gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
|
|
ABTS_PTR_NOTNULL(tc, gsmbuf);
|
|
gmmbuf = testgmm_build_ul_nas_transport(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 PDUSessionResourceSetupRequest +
|
|
* DL NAS transport +
|
|
* PDU session establishment accept */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_PDUSessionResourceSetup,
|
|
test_ue->ngap_procedure_code);
|
|
|
|
/* Send GTP-U ICMP Packet */
|
|
qos_flow = test_qos_flow_find_by_qfi(sess, 1);
|
|
ogs_assert(qos_flow);
|
|
rv = test_gtpu_send_ping(gtpu, qos_flow, TEST_PING_IPV4);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Send PDUSessionResourceSetupResponse */
|
|
sendbuf = testngap_sess_build_pdu_session_resource_setup_response(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_send_ping(gtpu, qos_flow, TEST_PING_IPV4);
|
|
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 UEContextReleaseRequest */
|
|
sendbuf = testngap_build_ue_context_release_request(test_ue,
|
|
NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_user_inactivity,
|
|
true);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive UEContextReleaseCommand */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_UEContextRelease,
|
|
test_ue->ngap_procedure_code);
|
|
|
|
/* Send UEContextReleaseComplete */
|
|
sendbuf = testngap_build_ue_context_release_complete(test_ue);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* 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->requested_nssai.s_nssai[2].sd.v = 0x000006;
|
|
|
|
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);
|
|
|
|
memset(&test_ue->registration_request_param, 0,
|
|
sizeof(test_ue->registration_request_param));
|
|
test_ue->registration_request_param.integrity_protected = 1;
|
|
test_ue->registration_request_param.guti = 1;
|
|
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
|
|
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
|
|
|
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive InitialContextSetupRequest +
|
|
* Registration accept */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_InitialContextSetup,
|
|
test_ue->ngap_procedure_code);
|
|
ABTS_INT_EQUAL(tc, 0x0000, test_ue->pdu_session_reactivation_result);
|
|
|
|
/* Send InitialContextSetupResponse */
|
|
sendbuf = testngap_build_initial_context_setup_response(test_ue, false);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Send UEContextReleaseRequest */
|
|
sendbuf = testngap_build_ue_context_release_request(test_ue,
|
|
NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_user_inactivity,
|
|
true);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive UEContextReleaseCommand */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_UEContextRelease,
|
|
test_ue->ngap_procedure_code);
|
|
|
|
/* Send UEContextReleaseComplete */
|
|
sendbuf = testngap_build_ue_context_release_complete(test_ue);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
ogs_msleep(300);
|
|
|
|
/********** Remove Subscriber in Database */
|
|
ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue));
|
|
|
|
/* Clear Test UE Context */
|
|
test_ue_remove(test_ue);
|
|
|
|
/* gNB disonncect from UPF */
|
|
testgnb_gtpu_close(gtpu);
|
|
|
|
/* gNB disonncect from AMF */
|
|
testgnb_ngap_close(ngap);
|
|
}
|
|
|
|
static void test2_func(abts_case *tc, void *data)
|
|
{
|
|
int rv;
|
|
ogs_socknode_t *ngap;
|
|
ogs_socknode_t *gtpu;
|
|
ogs_pkbuf_t *gmmbuf;
|
|
ogs_pkbuf_t *gsmbuf;
|
|
ogs_pkbuf_t *nasbuf;
|
|
ogs_pkbuf_t *sendbuf;
|
|
ogs_pkbuf_t *recvbuf;
|
|
ogs_ngap_message_t message;
|
|
int i;
|
|
|
|
ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
|
|
test_ue_t *test_ue = NULL;
|
|
test_sess_t *sess = NULL;
|
|
test_bearer_t *qos_flow = NULL;
|
|
|
|
bson_t *doc = NULL;
|
|
|
|
/* Setup Test UE & Session Context */
|
|
memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
|
|
|
|
mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
|
|
mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
|
|
mobile_identity_suci.routing_indicator1 = 0;
|
|
mobile_identity_suci.routing_indicator2 = 0xf;
|
|
mobile_identity_suci.routing_indicator3 = 0xf;
|
|
mobile_identity_suci.routing_indicator4 = 0xf;
|
|
mobile_identity_suci.protection_scheme_id = OGS_NAS_5GS_NULL_SCHEME;
|
|
mobile_identity_suci.home_network_pki_value = 0;
|
|
mobile_identity_suci.scheme_output[0] = 0;
|
|
mobile_identity_suci.scheme_output[1] = 0;
|
|
mobile_identity_suci.scheme_output[2] = 0x47;
|
|
mobile_identity_suci.scheme_output[3] = 0x78;
|
|
|
|
test_ue = test_ue_add_by_suci(&mobile_identity_suci, 12);
|
|
ogs_assert(test_ue);
|
|
|
|
test_ue->nr_cgi.cell_id = 0x40001;
|
|
|
|
test_ue->nas.registration.type = 0;
|
|
test_ue->nas.registration.follow_on_request = 1;
|
|
test_ue->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
|
|
|
|
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
|
|
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
|
|
|
|
/* gNB connects to AMF */
|
|
ngap = testngap_client(AF_INET);
|
|
ABTS_PTR_NOTNULL(tc, ngap);
|
|
|
|
/* gNB connects to UPF */
|
|
gtpu = test_gtpu_server(1, AF_INET);
|
|
ABTS_PTR_NOTNULL(tc, gtpu);
|
|
|
|
/* Send NG-Setup Reqeust */
|
|
sendbuf = testngap_build_ng_setup_request(0x102, 32);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive NG-Setup Response */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/********** Insert Subscriber in Database */
|
|
doc = test_db_new_slice(test_ue);
|
|
ABTS_PTR_NOTNULL(tc, doc);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
|
|
|
|
/* Send Registration request */
|
|
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
|
|
ABTS_PTR_NOTNULL(tc, gmmbuf);
|
|
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, false, true);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive Authentication request */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/* Send Authentication response */
|
|
gmmbuf = testgmm_build_authentication_response(test_ue);
|
|
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 Security mode command */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/* Send Security mode complete */
|
|
test_ue->registration_request_param.gmm_capability = 1;
|
|
test_ue->registration_request_param.requested_nssai = 1;
|
|
|
|
test_ue->requested_nssai.s_nssai[1].sd.v = 0x000070;
|
|
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
sst = 2;
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
sd.v = OGS_S_NSSAI_NO_SD_VALUE;
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
mapped_hplmn_sst = 0;
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
mapped_hplmn_sd.v = OGS_S_NSSAI_NO_SD_VALUE;
|
|
test_ue->requested_nssai.num_of_s_nssai++;
|
|
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
sst = 3;
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
sd.v = 0x000080;
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
mapped_hplmn_sst = 0;
|
|
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
|
|
mapped_hplmn_sd.v = OGS_S_NSSAI_NO_SD_VALUE;
|
|
test_ue->requested_nssai.num_of_s_nssai++;
|
|
|
|
nasbuf = testgmm_build_registration_request(test_ue, NULL);
|
|
ABTS_PTR_NOTNULL(tc, nasbuf);
|
|
gmmbuf = testgmm_build_security_mode_complete(test_ue, nasbuf);
|
|
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 Initial context setup request +
|
|
* Registration accept */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_InitialContextSetup,
|
|
test_ue->ngap_procedure_code);
|
|
|
|
/* Send UE radio capability info indication */
|
|
sendbuf = testngap_build_ue_radio_capability_info_indication(test_ue);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Send Initial context setup response */
|
|
sendbuf = testngap_build_initial_context_setup_response(test_ue, false);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Send Registration complete */
|
|
gmmbuf = testgmm_build_registration_complete(test_ue);
|
|
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 Configuration update command */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
|
|
/* Send PDU session establishment request */
|
|
sess = test_sess_add_by_dnn_and_psi(test_ue, "internet", 10);
|
|
ogs_assert(sess);
|
|
|
|
sess->pti = 0;
|
|
sess->pdu_session_type = OGS_PDU_SESSION_TYPE_IPV4;
|
|
|
|
sess->ul_nas_transport_param.request_type =
|
|
OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
|
|
sess->ul_nas_transport_param.dnn = 1;
|
|
sess->ul_nas_transport_param.s_nssai = 1;
|
|
|
|
sess->pdu_session_establishment_param.ssc_mode = 1;
|
|
sess->pdu_session_establishment_param.epco = 1;
|
|
|
|
gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
|
|
ABTS_PTR_NOTNULL(tc, gsmbuf);
|
|
gmmbuf = testgmm_build_ul_nas_transport(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 PDUSessionResourceSetupRequest +
|
|
* DL NAS transport +
|
|
* PDU session establishment accept */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_PDUSessionResourceSetup,
|
|
test_ue->ngap_procedure_code);
|
|
|
|
/* Send GTP-U ICMP Packet */
|
|
qos_flow = test_qos_flow_find_by_qfi(sess, 1);
|
|
ogs_assert(qos_flow);
|
|
rv = test_gtpu_send_ping(gtpu, qos_flow, TEST_PING_IPV4);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Send PDUSessionResourceSetupResponse */
|
|
sendbuf = testngap_sess_build_pdu_session_resource_setup_response(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_send_ping(gtpu, qos_flow, TEST_PING_IPV4);
|
|
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 UEContextReleaseRequest */
|
|
sendbuf = testngap_build_ue_context_release_request(test_ue,
|
|
NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_user_inactivity,
|
|
true);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
/* Receive UEContextReleaseCommand */
|
|
recvbuf = testgnb_ngap_read(ngap);
|
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
|
testngap_recv(test_ue, recvbuf);
|
|
ABTS_INT_EQUAL(tc,
|
|
NGAP_ProcedureCode_id_UEContextRelease,
|
|
test_ue->ngap_procedure_code);
|
|
|
|
/* Send UEContextReleaseComplete */
|
|
sendbuf = testngap_build_ue_context_release_complete(test_ue);
|
|
ABTS_PTR_NOTNULL(tc, sendbuf);
|
|
rv = testgnb_ngap_send(ngap, sendbuf);
|
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
|
|
|
ogs_msleep(300);
|
|
|
|
/********** Remove Subscriber in Database */
|
|
ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue));
|
|
|
|
/* Clear Test UE Context */
|
|
test_ue_remove(test_ue);
|
|
|
|
/* gNB disonncect from UPF */
|
|
testgnb_gtpu_close(gtpu);
|
|
|
|
/* gNB disonncect from AMF */
|
|
testgnb_ngap_close(ngap);
|
|
}
|
|
|
|
abts_suite *test_nssai(abts_suite *suite)
|
|
{
|
|
suite = ADD_SUITE(suite)
|
|
|
|
abts_run_test(suite, test1_func, NULL);
|
|
abts_run_test(suite, test2_func, NULL);
|
|
|
|
return suite;
|
|
}
|