mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-11-04 05:53:18 +00:00 
			
		
		
		
	Fix the test program [#536]
This commit is contained in:
		@@ -1502,3 +1502,20 @@ void ogs_pfcp_subnet_remove_all(void)
 | 
				
			|||||||
    ogs_list_for_each_safe(&self.subnet_list, next_subnet, subnet)
 | 
					    ogs_list_for_each_safe(&self.subnet_list, next_subnet, subnet)
 | 
				
			||||||
        ogs_pfcp_subnet_remove(subnet);
 | 
					        ogs_pfcp_subnet_remove(subnet);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ogs_pfcp_pool_init(ogs_pfcp_sess_t *sess)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ogs_pool_init(&sess->pdr_pool, OGS_MAX_NUM_OF_PDR);
 | 
				
			||||||
 | 
					    ogs_pool_init(&sess->far_pool, OGS_MAX_NUM_OF_FAR);
 | 
				
			||||||
 | 
					    ogs_pool_init(&sess->urr_pool, OGS_MAX_NUM_OF_URR);
 | 
				
			||||||
 | 
					    ogs_pool_init(&sess->qer_pool, OGS_MAX_NUM_OF_QER);
 | 
				
			||||||
 | 
					    ogs_pool_init(&sess->bar_pool, OGS_MAX_NUM_OF_BAR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					void ogs_pfcp_pool_final(ogs_pfcp_sess_t *sess)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ogs_pool_final(&sess->pdr_pool);
 | 
				
			||||||
 | 
					    ogs_pool_final(&sess->far_pool);
 | 
				
			||||||
 | 
					    ogs_pool_final(&sess->urr_pool);
 | 
				
			||||||
 | 
					    ogs_pool_final(&sess->qer_pool);
 | 
				
			||||||
 | 
					    ogs_pool_final(&sess->bar_pool);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -362,6 +362,9 @@ ogs_pfcp_subnet_t *ogs_pfcp_subnet_next(ogs_pfcp_subnet_t *subnet);
 | 
				
			|||||||
void ogs_pfcp_subnet_remove(ogs_pfcp_subnet_t *subnet);
 | 
					void ogs_pfcp_subnet_remove(ogs_pfcp_subnet_t *subnet);
 | 
				
			||||||
void ogs_pfcp_subnet_remove_all(void);
 | 
					void ogs_pfcp_subnet_remove_all(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ogs_pfcp_pool_init(ogs_pfcp_sess_t *sess);
 | 
				
			||||||
 | 
					void ogs_pfcp_pool_final(ogs_pfcp_sess_t *sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -427,71 +427,88 @@ int amf_nsmf_pdu_session_handle_release_sm_context(amf_sess_t *sess, int state)
 | 
				
			|||||||
    /* Check last session */
 | 
					    /* Check last session */
 | 
				
			||||||
    if (ogs_list_count(&amf_ue->sess_list) == 0) {
 | 
					    if (ogs_list_count(&amf_ue->sess_list) == 0) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_authentication)) {
 | 
					        if (state == AMF_RELEASE_SM_CONTEXT_NG_CONTEXT_REMOVE) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL,
 | 
					 | 
				
			||||||
                    amf_nausf_auth_build_authenticate);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_de_registered)) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            nas_5gs_send_de_registration_accept(amf_ue);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_exception)) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            /*
 | 
					            /*
 | 
				
			||||||
             * 1. GMM Exception
 | 
					             * 1. Initial context setup failure
 | 
				
			||||||
             * 2. Release All SM contexts
 | 
					             * 2. Release All SM contexts
 | 
				
			||||||
             * 3. UE Context release command
 | 
					             * 3. UE Context release command
 | 
				
			||||||
             * 4. UE Context release complete
 | 
					             * 4. UE Context release complete
 | 
				
			||||||
             */
 | 
					             */
 | 
				
			||||||
            ngap_send_amf_ue_context_release_command(amf_ue,
 | 
					            ngap_send_amf_ue_context_release_command(amf_ue,
 | 
				
			||||||
                    NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release,
 | 
					                    NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release,
 | 
				
			||||||
                    NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
 | 
					                    NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } else if (state == AMF_RELEASE_SM_CONTEXT_REGISTRATION_ACCEPT) {
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * 1. Registration request
 | 
				
			||||||
 | 
					             * 2. Release All SM contexts
 | 
				
			||||||
 | 
					             * 3. Registration accept
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            nas_5gs_send_registration_accept(amf_ue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } else if (state == AMF_RELEASE_SM_CONTEXT_SERVICE_ACCEPT) {
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * 1. Service request
 | 
				
			||||||
 | 
					             * 2. Release All SM contexts
 | 
				
			||||||
 | 
					             * 3. Service accept
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            nas_5gs_send_service_accept(amf_ue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            if (state == AMF_RELEASE_SM_CONTEXT_NG_CONTEXT_REMOVE) {
 | 
					            /* NO_STATE */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_authentication)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL,
 | 
				
			||||||
 | 
					                        amf_nausf_auth_build_authenticate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_de_registered)) {
 | 
				
			||||||
                /*
 | 
					                /*
 | 
				
			||||||
                 * 1. Initial context setup failure
 | 
					                 * 1. PDU session release request
 | 
				
			||||||
 | 
					                 * 2. PDUSessionResourceReleaseCommand +
 | 
				
			||||||
 | 
					                 *    PDU session release command
 | 
				
			||||||
 | 
					                 * 3. PDUSessionResourceReleaseREsponse
 | 
				
			||||||
 | 
					                 * 4. PDU session release complete
 | 
				
			||||||
 | 
					                 * 5. Deregistration request
 | 
				
			||||||
 | 
					                 * 6. UEContextReleaseCommand
 | 
				
			||||||
 | 
					                 * 7. UEContextReleaseComplete
 | 
				
			||||||
 | 
					                 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                nas_5gs_send_de_registration_accept(amf_ue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) {
 | 
				
			||||||
 | 
					                /*
 | 
				
			||||||
 | 
					                 * 1. PDU session release request
 | 
				
			||||||
 | 
					                 * 2. PDUSessionResourceReleaseCommand +
 | 
				
			||||||
 | 
					                 *    PDU session release command
 | 
				
			||||||
 | 
					                 * 3. PDUSessionResourceReleaseREsponse
 | 
				
			||||||
 | 
					                 * 4. PDU session release complete
 | 
				
			||||||
 | 
					                 *
 | 
				
			||||||
 | 
					                 * No Deregistration request in the above step
 | 
				
			||||||
 | 
					                 *
 | 
				
			||||||
 | 
					                 * So, Nothing to do!
 | 
				
			||||||
 | 
					                 */
 | 
				
			||||||
 | 
					            } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_exception)) {
 | 
				
			||||||
 | 
					                /*
 | 
				
			||||||
 | 
					                 * 1. GMM Exception
 | 
				
			||||||
                 * 2. Release All SM contexts
 | 
					                 * 2. Release All SM contexts
 | 
				
			||||||
                 * 3. UE Context release command
 | 
					                 * 3. UE Context release command
 | 
				
			||||||
                 * 4. UE Context release complete
 | 
					                 * 4. UE Context release complete
 | 
				
			||||||
                 */
 | 
					                 */
 | 
				
			||||||
                ngap_send_amf_ue_context_release_command(amf_ue,
 | 
					                ngap_send_amf_ue_context_release_command(amf_ue,
 | 
				
			||||||
                        NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release,
 | 
					                        NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release,
 | 
				
			||||||
                        NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0);
 | 
					                        NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            } else if (state == AMF_RELEASE_SM_CONTEXT_REGISTRATION_ACCEPT) {
 | 
					            } else if (OGS_FSM_CHECK(&amf_ue->sm,
 | 
				
			||||||
                /*
 | 
					 | 
				
			||||||
                 * 1. Registration request
 | 
					 | 
				
			||||||
                 * 2. Release All SM contexts
 | 
					 | 
				
			||||||
                 * 3. Registration accept
 | 
					 | 
				
			||||||
                 */
 | 
					 | 
				
			||||||
                nas_5gs_send_registration_accept(amf_ue);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            } else if (state == AMF_RELEASE_SM_CONTEXT_SERVICE_ACCEPT) {
 | 
					 | 
				
			||||||
                /*
 | 
					 | 
				
			||||||
                 * 1. Service request
 | 
					 | 
				
			||||||
                 * 2. Release All SM contexts
 | 
					 | 
				
			||||||
                 * 3. Service accept
 | 
					 | 
				
			||||||
                 */
 | 
					 | 
				
			||||||
                nas_5gs_send_service_accept(amf_ue);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                ogs_fatal("Unknown state[%d]", state);
 | 
					 | 
				
			||||||
                if (OGS_FSM_CHECK(&amf_ue->sm,
 | 
					 | 
				
			||||||
                            gmm_state_initial_context_setup)) {
 | 
					                            gmm_state_initial_context_setup)) {
 | 
				
			||||||
                    ogs_fatal("Release SM Context in initial-context-setup");
 | 
					                ogs_fatal("Release SM Context in initial-context-setup");
 | 
				
			||||||
                } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) {
 | 
					                ogs_assert_if_reached();
 | 
				
			||||||
 | 
					            } else if (OGS_FSM_CHECK(
 | 
				
			||||||
                    ogs_fatal("Release SM Context in registered");
 | 
					                        &amf_ue->sm, gmm_state_security_mode)) {
 | 
				
			||||||
 | 
					                ogs_fatal("Release SM Context in security-mode");
 | 
				
			||||||
                } else if (OGS_FSM_CHECK(
 | 
					                ogs_assert_if_reached();
 | 
				
			||||||
                            &amf_ue->sm, gmm_state_security_mode)) {
 | 
					            } else {
 | 
				
			||||||
                    ogs_fatal("Release SM Context in security-mode");
 | 
					                ogs_fatal("Release SM Context : INVALID STATE");
 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    ogs_fatal("Release SM Context : INVALID STATE");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                ogs_assert_if_reached();
 | 
					                ogs_assert_if_reached();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -389,11 +389,7 @@ sgwc_sess_t *sgwc_sess_add(sgwc_ue_t *sgwc_ue, char *apn)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    memset(sess, 0, sizeof *sess);
 | 
					    memset(sess, 0, sizeof *sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.pdr_pool, OGS_MAX_NUM_OF_PDR);
 | 
					    ogs_pfcp_pool_init(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.far_pool, OGS_MAX_NUM_OF_FAR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.urr_pool, OGS_MAX_NUM_OF_URR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.qer_pool, OGS_MAX_NUM_OF_QER);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.bar_pool, OGS_MAX_NUM_OF_BAR);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sess->index = ogs_pool_index(&sgwc_sess_pool, sess);
 | 
					    sess->index = ogs_pool_index(&sgwc_sess_pool, sess);
 | 
				
			||||||
    ogs_assert(sess->index > 0 && sess->index <= ogs_app()->pool.sess);
 | 
					    ogs_assert(sess->index > 0 && sess->index <= ogs_app()->pool.sess);
 | 
				
			||||||
@@ -490,11 +486,7 @@ int sgwc_sess_remove(sgwc_sess_t *sess)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    sgwc_bearer_remove_all(sess);
 | 
					    sgwc_bearer_remove_all(sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.pdr_pool);
 | 
					    ogs_pfcp_pool_final(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.far_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.urr_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.qer_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.bar_pool);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_free(&sgwc_sess_pool, sess);
 | 
					    ogs_pool_free(&sgwc_sess_pool, sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -374,11 +374,7 @@ sgwu_sess_t *sgwu_sess_add(ogs_pfcp_f_seid_t *cp_f_seid,
 | 
				
			|||||||
    ogs_assert(sess);
 | 
					    ogs_assert(sess);
 | 
				
			||||||
    memset(sess, 0, sizeof *sess);
 | 
					    memset(sess, 0, sizeof *sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.pdr_pool, OGS_MAX_NUM_OF_PDR);
 | 
					    ogs_pfcp_pool_init(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.far_pool, OGS_MAX_NUM_OF_FAR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.urr_pool, OGS_MAX_NUM_OF_URR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.qer_pool, OGS_MAX_NUM_OF_QER);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.bar_pool, OGS_MAX_NUM_OF_BAR);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sess->index = ogs_pool_index(&sgwu_sess_pool, sess);
 | 
					    sess->index = ogs_pool_index(&sgwu_sess_pool, sess);
 | 
				
			||||||
    ogs_assert(sess->index > 0 && sess->index <= ogs_app()->pool.sess);
 | 
					    ogs_assert(sess->index > 0 && sess->index <= ogs_app()->pool.sess);
 | 
				
			||||||
@@ -412,11 +408,7 @@ int sgwu_sess_remove(sgwu_sess_t *sess)
 | 
				
			|||||||
    ogs_hash_set(self.sess_hash, &sess->sgwc_sxa_seid,
 | 
					    ogs_hash_set(self.sess_hash, &sess->sgwc_sxa_seid,
 | 
				
			||||||
            sizeof(sess->sgwc_sxa_seid), NULL);
 | 
					            sizeof(sess->sgwc_sxa_seid), NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.pdr_pool);
 | 
					    ogs_pfcp_pool_final(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.far_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.urr_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.qer_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.bar_pool);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_free(&sgwu_sess_pool, sess);
 | 
					    ogs_pool_free(&sgwu_sess_pool, sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -777,12 +777,7 @@ smf_sess_t *smf_sess_add_by_psi(smf_ue_t *smf_ue, uint8_t psi)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    memset(sess, 0, sizeof *sess);
 | 
					    memset(sess, 0, sizeof *sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.pdr_pool, OGS_MAX_NUM_OF_PDR);
 | 
					    ogs_pfcp_pool_init(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.far_pool, OGS_MAX_NUM_OF_FAR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.urr_pool, OGS_MAX_NUM_OF_URR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.qer_pool, OGS_MAX_NUM_OF_QER);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.bar_pool, OGS_MAX_NUM_OF_BAR);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    smf_qfi_pool_init(sess);
 | 
					    smf_qfi_pool_init(sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sess->index = ogs_pool_index(&smf_sess_pool, sess);
 | 
					    sess->index = ogs_pool_index(&smf_sess_pool, sess);
 | 
				
			||||||
@@ -984,12 +979,7 @@ void smf_sess_remove(smf_sess_t *sess)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    smf_bearer_remove_all(sess);
 | 
					    smf_bearer_remove_all(sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.pdr_pool);
 | 
					    ogs_pfcp_pool_final(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.far_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.urr_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.qer_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.bar_pool);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->qfi_pool);
 | 
					    ogs_pool_final(&sess->qfi_pool);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_free(&smf_sess_pool, sess);
 | 
					    ogs_pool_free(&smf_sess_pool, sess);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -388,11 +388,7 @@ upf_sess_t *upf_sess_add(ogs_pfcp_f_seid_t *cp_f_seid,
 | 
				
			|||||||
    ogs_assert(sess);
 | 
					    ogs_assert(sess);
 | 
				
			||||||
    memset(sess, 0, sizeof *sess);
 | 
					    memset(sess, 0, sizeof *sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.pdr_pool, OGS_MAX_NUM_OF_PDR);
 | 
					    ogs_pfcp_pool_init(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.far_pool, OGS_MAX_NUM_OF_FAR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.urr_pool, OGS_MAX_NUM_OF_URR);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.qer_pool, OGS_MAX_NUM_OF_QER);
 | 
					 | 
				
			||||||
    ogs_pool_init(&sess->pfcp.bar_pool, OGS_MAX_NUM_OF_BAR);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sess->index = ogs_pool_index(&upf_sess_pool, sess);
 | 
					    sess->index = ogs_pool_index(&upf_sess_pool, sess);
 | 
				
			||||||
    ogs_assert(sess->index > 0 && sess->index <= ogs_app()->pool.sess);
 | 
					    ogs_assert(sess->index > 0 && sess->index <= ogs_app()->pool.sess);
 | 
				
			||||||
@@ -489,11 +485,7 @@ int upf_sess_remove(upf_sess_t *sess)
 | 
				
			|||||||
        ogs_pfcp_ue_ip_free(sess->ipv6);
 | 
					        ogs_pfcp_ue_ip_free(sess->ipv6);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.pdr_pool);
 | 
					    ogs_pfcp_pool_final(&sess->pfcp);
 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.far_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.urr_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.qer_pool);
 | 
					 | 
				
			||||||
    ogs_pool_final(&sess->pfcp.bar_pool);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_free(&upf_sess_pool, sess);
 | 
					    ogs_pool_free(&upf_sess_pool, sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,17 +51,24 @@ int app_initialize(const char *const argv[])
 | 
				
			|||||||
        nrf_thread = test_child_create("nrf", argv_out);
 | 
					        nrf_thread = test_child_create("nrf", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_amf == 0)
 | 
					    if (ogs_app()->parameter.no_amf == 0)
 | 
				
			||||||
        amf_thread = test_child_create("amf", argv_out);
 | 
					        amf_thread = test_child_create("amf", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_ausf == 0)
 | 
					 | 
				
			||||||
        ausf_thread = test_child_create("ausf", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_udm == 0)
 | 
					 | 
				
			||||||
        udm_thread = test_child_create("udm", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_smf == 0)
 | 
					    if (ogs_app()->parameter.no_smf == 0)
 | 
				
			||||||
        smf_thread = test_child_create("smf", argv_out);
 | 
					        smf_thread = test_child_create("smf", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_upf == 0)
 | 
					    if (ogs_app()->parameter.no_upf == 0)
 | 
				
			||||||
        upf_thread = test_child_create("upf", argv_out);
 | 
					        upf_thread = test_child_create("upf", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_ausf == 0)
 | 
				
			||||||
 | 
					        ausf_thread = test_child_create("ausf", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_udm == 0)
 | 
				
			||||||
 | 
					        udm_thread = test_child_create("udm", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_udr == 0)
 | 
					    if (ogs_app()->parameter.no_udr == 0)
 | 
				
			||||||
        udr_thread = test_child_create("udr", argv_out);
 | 
					        udr_thread = test_child_create("udr", argv_out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Wait for all sockets listening
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * If freeDiameter is not used, we can use a delay of less than 1 second.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ogs_msleep(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return OGS_OK;;
 | 
					    return OGS_OK;;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@ static ogs_thread_t *sgwc_thread = NULL;
 | 
				
			|||||||
static ogs_thread_t *sgwu_thread = NULL;
 | 
					static ogs_thread_t *sgwu_thread = NULL;
 | 
				
			||||||
static ogs_thread_t *smf_thread = NULL;
 | 
					static ogs_thread_t *smf_thread = NULL;
 | 
				
			||||||
static ogs_thread_t *mme_thread = NULL;
 | 
					static ogs_thread_t *mme_thread = NULL;
 | 
				
			||||||
 | 
					static ogs_thread_t *amf_thread = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int app_initialize(const char *const argv[])
 | 
					int app_initialize(const char *const argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -53,39 +54,22 @@ int app_initialize(const char *const argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (ogs_app()->parameter.no_nrf == 0)
 | 
					    if (ogs_app()->parameter.no_nrf == 0)
 | 
				
			||||||
        nrf_thread = test_child_create("nrf", argv_out);
 | 
					        nrf_thread = test_child_create("nrf", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_pcrf == 0)
 | 
					 | 
				
			||||||
        pcrf_thread = test_child_create("pcrf", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_hss == 0)
 | 
					 | 
				
			||||||
        hss_thread = test_child_create("hss", argv_out);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
     * To avoid freeDiameter error
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * ROUTING ERROR
 | 
					 | 
				
			||||||
     * 'No remaining suitable candidate to route the message to' for:
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    ogs_msleep(500);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_upf == 0)
 | 
					 | 
				
			||||||
        upf_thread = test_child_create("upf", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_sgwu == 0)
 | 
					 | 
				
			||||||
        sgwu_thread = test_child_create("sgwu", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_sgwc == 0)
 | 
					 | 
				
			||||||
        sgwc_thread = test_child_create("sgwc", argv_out);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
     * To avoid freeDiameter error
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * ROUTING ERROR
 | 
					 | 
				
			||||||
     * 'No remaining suitable candidate to route the message to' for:
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    ogs_msleep(500);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_smf == 0)
 | 
					 | 
				
			||||||
        smf_thread = test_child_create("smf", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_mme == 0)
 | 
					    if (ogs_app()->parameter.no_mme == 0)
 | 
				
			||||||
        mme_thread = test_child_create("mme", argv_out);
 | 
					        mme_thread = test_child_create("mme", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_sgwc == 0)
 | 
				
			||||||
 | 
					        sgwc_thread = test_child_create("sgwc", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_smf == 0)
 | 
				
			||||||
 | 
					        smf_thread = test_child_create("smf", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_amf == 0)
 | 
				
			||||||
 | 
					        amf_thread = test_child_create("amf", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_sgwu == 0)
 | 
				
			||||||
 | 
					        sgwu_thread = test_child_create("sgwu", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_upf == 0)
 | 
				
			||||||
 | 
					        upf_thread = test_child_create("upf", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_hss == 0)
 | 
				
			||||||
 | 
					        hss_thread = test_child_create("hss", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_pcrf == 0)
 | 
				
			||||||
 | 
					        pcrf_thread = test_child_create("pcrf", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_ausf == 0)
 | 
					    if (ogs_app()->parameter.no_ausf == 0)
 | 
				
			||||||
        ausf_thread = test_child_create("ausf", argv_out);
 | 
					        ausf_thread = test_child_create("ausf", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_udm == 0)
 | 
					    if (ogs_app()->parameter.no_udm == 0)
 | 
				
			||||||
@@ -93,6 +77,13 @@ int app_initialize(const char *const argv[])
 | 
				
			|||||||
    if (ogs_app()->parameter.no_udr == 0)
 | 
					    if (ogs_app()->parameter.no_udr == 0)
 | 
				
			||||||
        udr_thread = test_child_create("udr", argv_out);
 | 
					        udr_thread = test_child_create("udr", argv_out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Wait for all sockets listening
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Note that at least 1 second is needed if freeDiameter is running.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ogs_msleep(1200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return OGS_OK;;
 | 
					    return OGS_OK;;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,6 +93,7 @@ void app_terminate(void)
 | 
				
			|||||||
    if (udm_thread) ogs_thread_destroy(udm_thread);
 | 
					    if (udm_thread) ogs_thread_destroy(udm_thread);
 | 
				
			||||||
    if (ausf_thread) ogs_thread_destroy(ausf_thread);
 | 
					    if (ausf_thread) ogs_thread_destroy(ausf_thread);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (amf_thread) ogs_thread_destroy(amf_thread);
 | 
				
			||||||
    if (mme_thread) ogs_thread_destroy(mme_thread);
 | 
					    if (mme_thread) ogs_thread_destroy(mme_thread);
 | 
				
			||||||
    if (smf_thread) ogs_thread_destroy(smf_thread);
 | 
					    if (smf_thread) ogs_thread_destroy(smf_thread);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,38 +50,27 @@ int app_initialize(const char *const argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (ogs_app()->parameter.no_nrf == 0)
 | 
					    if (ogs_app()->parameter.no_nrf == 0)
 | 
				
			||||||
        nrf_thread = test_child_create("nrf", argv_out);
 | 
					        nrf_thread = test_child_create("nrf", argv_out);
 | 
				
			||||||
    if (ogs_app()->parameter.no_pcrf == 0)
 | 
					 | 
				
			||||||
        pcrf_thread = test_child_create("pcrf", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_hss == 0)
 | 
					 | 
				
			||||||
        hss_thread = test_child_create("hss", argv_out);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
     * To avoid freeDiameter error
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * ROUTING ERROR
 | 
					 | 
				
			||||||
     * 'No remaining suitable candidate to route the message to' for:
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    ogs_msleep(500);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_upf == 0)
 | 
					 | 
				
			||||||
        upf_thread = test_child_create("upf", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_sgwu == 0)
 | 
					 | 
				
			||||||
        sgwu_thread = test_child_create("sgwu", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_sgwc == 0)
 | 
					 | 
				
			||||||
        sgwc_thread = test_child_create("sgwc", argv_out);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
     * To avoid freeDiameter error
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * ROUTING ERROR
 | 
					 | 
				
			||||||
     * 'No remaining suitable candidate to route the message to' for:
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    ogs_msleep(500);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_smf == 0)
 | 
					 | 
				
			||||||
        smf_thread = test_child_create("smf", argv_out);
 | 
					 | 
				
			||||||
    if (ogs_app()->parameter.no_mme == 0)
 | 
					    if (ogs_app()->parameter.no_mme == 0)
 | 
				
			||||||
        mme_thread = test_child_create("mme", argv_out);
 | 
					        mme_thread = test_child_create("mme", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_sgwc == 0)
 | 
				
			||||||
 | 
					        sgwc_thread = test_child_create("sgwc", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_smf == 0)
 | 
				
			||||||
 | 
					        smf_thread = test_child_create("smf", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_sgwu == 0)
 | 
				
			||||||
 | 
					        sgwu_thread = test_child_create("sgwu", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_upf == 0)
 | 
				
			||||||
 | 
					        upf_thread = test_child_create("upf", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_hss == 0)
 | 
				
			||||||
 | 
					        hss_thread = test_child_create("hss", argv_out);
 | 
				
			||||||
 | 
					    if (ogs_app()->parameter.no_pcrf == 0)
 | 
				
			||||||
 | 
					        pcrf_thread = test_child_create("pcrf", argv_out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Wait for all sockets listening
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Note that at least 1 second is needed if freeDiameter is running.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ogs_msleep(1200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return OGS_OK;;
 | 
					    return OGS_OK;;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -68,14 +68,6 @@ static void initialize(const char *const argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    rv = app_initialize(argv);
 | 
					    rv = app_initialize(argv);
 | 
				
			||||||
    ogs_assert(rv == OGS_OK);
 | 
					    ogs_assert(rv == OGS_OK);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
     * To avoid freeDiameter error
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * ROUTING ERROR
 | 
					 | 
				
			||||||
     * 'No remaining suitable candidate to route the message to' for:
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    ogs_msleep(500);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, const char *const argv[])
 | 
					int main(int argc, const char *const argv[])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,14 +51,6 @@ static void initialize(const char *const argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    rv = app_initialize(argv);
 | 
					    rv = app_initialize(argv);
 | 
				
			||||||
    ogs_assert(rv == OGS_OK);
 | 
					    ogs_assert(rv == OGS_OK);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
     * To avoid freeDiameter error
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * ROUTING ERROR
 | 
					 | 
				
			||||||
     * 'No remaining suitable candidate to route the message to' for:
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    ogs_msleep(500);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, const char *const argv[])
 | 
					int main(int argc, const char *const argv[])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -387,6 +387,9 @@ static void test1_func(abts_case *tc, void *data)
 | 
				
			|||||||
    ABTS_PTR_NOTNULL(tc, recvbuf);
 | 
					    ABTS_PTR_NOTNULL(tc, recvbuf);
 | 
				
			||||||
    tests1ap_recv(test_ue, recvbuf);
 | 
					    tests1ap_recv(test_ue, recvbuf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* DELAY is needed in dedicated EPS bearer */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send GTP-U ICMP Packet */
 | 
					    /* Send GTP-U ICMP Packet */
 | 
				
			||||||
    bearer = test_bearer_find_by_ue_ebi(test_ue, 5);
 | 
					    bearer = test_bearer_find_by_ue_ebi(test_ue, 5);
 | 
				
			||||||
    ogs_assert(bearer);
 | 
					    ogs_assert(bearer);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1278,7 +1278,16 @@ static void test4_func(abts_case *tc, void *data)
 | 
				
			|||||||
        rv = testgnb_ngap_send(ngap, sendbuf);
 | 
					        rv = testgnb_ngap_send(ngap, sendbuf);
 | 
				
			||||||
        ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
					        ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ogs_msleep(100);
 | 
					        /* Send GTP-U ICMP Packet */
 | 
				
			||||||
 | 
					        qos_flow = test_qos_flow_find_by_ue_qfi(test_ue, 1);
 | 
				
			||||||
 | 
					        ogs_assert(qos_flow);
 | 
				
			||||||
 | 
					        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 PDU Session release request */
 | 
					        /* Send PDU Session release request */
 | 
				
			||||||
        sess->ul_nas_transport_param.request_type = 0;
 | 
					        sess->ul_nas_transport_param.request_type = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -253,6 +253,19 @@ static void test1_func(abts_case *tc, void *data)
 | 
				
			|||||||
    ABTS_PTR_NOTNULL(tc, recvbuf);
 | 
					    ABTS_PTR_NOTNULL(tc, recvbuf);
 | 
				
			||||||
    testngap_recv(test_ue, recvbuf);
 | 
					    testngap_recv(test_ue, recvbuf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Related to issue #536. When running with VirtualBox 1 Core,
 | 
				
			||||||
 | 
					     * AMF sends namf-callback response very late. In SMF,
 | 
				
			||||||
 | 
					     * the Session context has already been removed, so an assertion occurs.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * It seems to be related to the response part of MHD. We will check
 | 
				
			||||||
 | 
					     * if the same situation occurs after upgrading to nghttp2.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If this issue still occurs on nghttp2,
 | 
				
			||||||
 | 
					     * I will remove the assertion from SMF.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send GMM Status */
 | 
					    /* Send GMM Status */
 | 
				
			||||||
    gmmbuf = testgmm_build_gmm_status(test_ue,
 | 
					    gmmbuf = testgmm_build_gmm_status(test_ue,
 | 
				
			||||||
            OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE);
 | 
					            OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,18 +57,10 @@ static void initialize(const char *const argv[])
 | 
				
			|||||||
    ogs_assert(rv == OGS_OK);
 | 
					    ogs_assert(rv == OGS_OK);
 | 
				
			||||||
    test_epc_init();
 | 
					    test_epc_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rv = app_initialize(argv);
 | 
					    rv = pcscf_fd_init();
 | 
				
			||||||
    ogs_assert(rv == OGS_OK);
 | 
					    ogs_assert(rv == OGS_OK);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    rv = app_initialize(argv);
 | 
				
			||||||
     * To avoid freeDiameter error
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * ROUTING ERROR
 | 
					 | 
				
			||||||
     * 'No remaining suitable candidate to route the message to' for:
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    ogs_msleep(500);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    rv = pcscf_fd_init();
 | 
					 | 
				
			||||||
    ogs_assert(rv == OGS_OK);
 | 
					    ogs_assert(rv == OGS_OK);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -971,6 +971,9 @@ static void test2_func(abts_case *tc, void *data)
 | 
				
			|||||||
    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
					    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
				
			||||||
    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
					    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* DELAY is needed in dedicated EPS bearer */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send AA-Request */
 | 
					    /* Send AA-Request */
 | 
				
			||||||
    pcscf_rx_send_aar(&rx_sid, sess,
 | 
					    pcscf_rx_send_aar(&rx_sid, sess,
 | 
				
			||||||
            OGS_DIAM_RX_SUBSCRIPTION_ID_TYPE_END_USER_IMSI, 0, 1);
 | 
					            OGS_DIAM_RX_SUBSCRIPTION_ID_TYPE_END_USER_IMSI, 0, 1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -524,6 +524,9 @@ static void test1_func(abts_case *tc, void *data)
 | 
				
			|||||||
    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
					    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
				
			||||||
    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
					    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* DELAY is needed before AA-Request */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send AA-Request */
 | 
					    /* Send AA-Request */
 | 
				
			||||||
    rx_sid = NULL;
 | 
					    rx_sid = NULL;
 | 
				
			||||||
    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
					    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
				
			||||||
@@ -665,6 +668,9 @@ static void test1_func(abts_case *tc, void *data)
 | 
				
			|||||||
    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
					    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
				
			||||||
    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
					    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* DELAY is needed before AA-Request */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send AA-Request */
 | 
					    /* Send AA-Request */
 | 
				
			||||||
    rx_sid = NULL;
 | 
					    rx_sid = NULL;
 | 
				
			||||||
    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
					    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
				
			||||||
@@ -806,6 +812,9 @@ static void test1_func(abts_case *tc, void *data)
 | 
				
			|||||||
    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
					    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
				
			||||||
    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
					    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* DELAY is needed before AA-Request */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send AA-Request */
 | 
					    /* Send AA-Request */
 | 
				
			||||||
    rx_sid = NULL;
 | 
					    rx_sid = NULL;
 | 
				
			||||||
    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
					    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
				
			||||||
@@ -947,6 +956,9 @@ static void test1_func(abts_case *tc, void *data)
 | 
				
			|||||||
    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
					    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
				
			||||||
    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
					    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* DELAY is needed before AA-Request */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send AA-Request */
 | 
					    /* Send AA-Request */
 | 
				
			||||||
    rx_sid = NULL;
 | 
					    rx_sid = NULL;
 | 
				
			||||||
    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
					    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
				
			||||||
@@ -1088,6 +1100,9 @@ static void test1_func(abts_case *tc, void *data)
 | 
				
			|||||||
    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
					    rv = testenb_s1ap_send(s1ap, sendbuf);
 | 
				
			||||||
    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
					    ABTS_INT_EQUAL(tc, OGS_OK, rv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* DELAY is needed before AA-Request */
 | 
				
			||||||
 | 
					    ogs_msleep(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send AA-Request */
 | 
					    /* Send AA-Request */
 | 
				
			||||||
    rx_sid = NULL;
 | 
					    rx_sid = NULL;
 | 
				
			||||||
    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
					    pcscf_rx_send_aar2(&rx_sid, sess,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user