Add ACK in configuration upate command [#487]

This commit is contained in:
Sukchan Lee 2020-07-02 02:16:52 -04:00
parent 7343941a50
commit ad12949469
10 changed files with 108 additions and 38 deletions

View File

@ -440,8 +440,7 @@ ogs_pkbuf_t *gmm_build_security_mode_command(amf_ue_t *amf_ue)
return nas_5gs_security_encode(amf_ue, &message);
}
ogs_pkbuf_t *gmm_build_configuration_update_command(
amf_ue_t *amf_ue, int ack, int red)
ogs_pkbuf_t *gmm_build_configuration_update_command(amf_ue_t *amf_ue, int red)
{
ogs_nas_5gs_message_t message;
ogs_nas_5gs_configuration_update_command_t *configuration_update_command =
@ -451,6 +450,9 @@ ogs_pkbuf_t *gmm_build_configuration_update_command(
&configuration_update_command->universal_time_and_local_time_zone;
ogs_nas_daylight_saving_time_t *network_daylight_saving_time =
&configuration_update_command->network_daylight_saving_time;
ogs_nas_configuration_update_indication_t
*configuration_update_indication =
&configuration_update_command->configuration_update_indication;
struct timeval tv;
struct tm gmt, local;
@ -480,17 +482,11 @@ ogs_pkbuf_t *gmm_build_configuration_update_command(
OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM;
message.gmm.h.message_type = OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND;
if (ack | red) {
ogs_nas_configuration_update_indication_t
*configuration_update_indication =
&configuration_update_command->configuration_update_indication;
configuration_update_command->presencemask |=
OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_CONFIGURATION_UPDATE_INDICATION_PRESENT;
configuration_update_command->presencemask |=
OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_CONFIGURATION_UPDATE_INDICATION_PRESENT;
configuration_update_indication->ack = ack;
configuration_update_indication->red = red;
}
configuration_update_indication->ack = 1;
configuration_update_indication->red = red;
configuration_update_command->presencemask |=
OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_PRESENT;

View File

@ -41,8 +41,7 @@ ogs_pkbuf_t *gmm_build_security_mode_command(amf_ue_t *amf_ue);
ogs_pkbuf_t *gmm_build_authentication_request(amf_ue_t *amf_ue);
ogs_pkbuf_t *gmm_build_authentication_reject(void);
ogs_pkbuf_t *gmm_build_configuration_update_command(
amf_ue_t *amf_ue, int ack, int red);
ogs_pkbuf_t *gmm_build_configuration_update_command(amf_ue_t *amf_ue, int red);
ogs_pkbuf_t *gmm_build_dl_nas_transport(amf_sess_t *sess,
uint8_t payload_container_type, ogs_pkbuf_t *payload,

View File

@ -345,7 +345,7 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
* If t3555 is timeout, the saved pkbuf is used.
* In this case, ack should be set to 1 for timer expiration
*/
nas_5gs_send_configuration_update_command(amf_ue, 1, 0);
nas_5gs_send_configuration_update_command(amf_ue, 0);
}
break;
@ -873,9 +873,18 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_REGISTRATION_COMPLETE:
ogs_debug("[%s] Registration complete", amf_ue->supi);
/* Ack/Red to 0
* - No need to receive configuration update complete */
nas_5gs_send_configuration_update_command(amf_ue, 0, 0);
/*
* TS24.501
* 5.4.4.2 Generic UE configuration update procedure initiated
* by the network
*
* If an acknowledgement from the UE is requested, the AMF shall
* indicate acknowledgement requested in the Configuration update
* indication IE in the CONFIGURATION UPDATE COMMAND message and
* shall start timer T3555. Acknowledgement shall be requested
* for all parameters except when only NITZ is included.
*/
nas_5gs_send_configuration_update_command(amf_ue, 0);
OGS_FSM_TRAN(s, &gmm_state_registered);
break;

View File

@ -272,8 +272,7 @@ void nas_5gs_send_security_mode_command(amf_ue_t *amf_ue)
ogs_expect(rv == OGS_OK);
}
void nas_5gs_send_configuration_update_command(
amf_ue_t *amf_ue, int ack, int red)
void nas_5gs_send_configuration_update_command(amf_ue_t *amf_ue, int red)
{
int rv;
ogs_pkbuf_t *gmmbuf = NULL;
@ -286,15 +285,13 @@ void nas_5gs_send_configuration_update_command(
gmmbuf = amf_ue->t3555.pkbuf;
ogs_expect_or_return(gmmbuf);
} else {
gmmbuf = gmm_build_configuration_update_command(amf_ue, ack, red);
gmmbuf = gmm_build_configuration_update_command(amf_ue, red);
ogs_expect_or_return(gmmbuf);
}
if (ack) {
amf_ue->t3555.pkbuf = ogs_pkbuf_copy(gmmbuf);
ogs_timer_start(amf_ue->t3555.timer,
amf_timer_cfg(AMF_TIMER_T3555)->duration);
}
amf_ue->t3555.pkbuf = ogs_pkbuf_copy(gmmbuf);
ogs_timer_start(amf_ue->t3555.timer,
amf_timer_cfg(AMF_TIMER_T3555)->duration);
rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf);
ogs_expect(rv == OGS_OK);

View File

@ -51,8 +51,7 @@ void nas_5gs_send_authentication_reject(amf_ue_t *amf_ue);
void nas_5gs_send_security_mode_command(amf_ue_t *amf_ue);
void nas_5gs_send_configuration_update_command(
amf_ue_t *amf_ue, int ack, int red);
void nas_5gs_send_configuration_update_command(amf_ue_t *amf_ue, int red);
void nas_send_pdu_session_establishment_accept(amf_sess_t *sess,
ogs_pkbuf_t *n1smbuf, ogs_pkbuf_t *n2smbuf);

View File

@ -281,6 +281,14 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);
@ -292,16 +300,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
#if 0 /* No need to send configuration update complete */
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
#endif
/* Receive PDU session establishment accept */
recvbuf = testgnb_ngap_read(ngap);
ABTS_PTR_NOTNULL(tc, recvbuf);

View File

@ -269,6 +269,14 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);

View File

@ -289,6 +289,14 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);
@ -467,6 +475,14 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);
@ -793,6 +809,14 @@ static void test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);

View File

@ -275,6 +275,14 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);

View File

@ -275,6 +275,14 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);
@ -760,6 +768,14 @@ static void test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send UE context release request */
sendbuf = testngap_build_ue_context_release_request(&test_ue,
NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_user_inactivity,
@ -1091,6 +1107,14 @@ static void test3_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);
@ -1521,6 +1545,14 @@ static void test4_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
/* Send Configuration update complete */
gmmbuf = testgmm_build_configuration_update_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);
/* Send UE context release request */
sendbuf = testngap_build_ue_context_release_request(&test_ue,
NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_user_inactivity,