mirror of
https://github.com/open5gs/open5gs.git
synced 2025-11-01 20:44:06 +00:00
The validity time for NF Instances obtained through NF Discovery was not properly implemented. Since the validity was 3600 seconds(1 hour), which caused 5G Core to not work properly after 3600 seconds(1 hour). There was an issue where an NF Instance should be deleted when its validity time expired, but it was not working correctly due to incorrect use of reference count. Therefore, I have modified the Validity of NF Instances obtained through NF Discovery to work properly. I also changed the default value of valdityPeriod to 30 seconds.
70 lines
2.4 KiB
C
70 lines
2.4 KiB
C
/*
|
|
* Copyright (C) 2019-2023 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 "sbi-path.h"
|
|
#include "nnrf-handler.h"
|
|
|
|
void af_nnrf_handle_nf_discover(
|
|
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
|
|
{
|
|
ogs_sbi_nf_instance_t *nf_instance = NULL;
|
|
ogs_sbi_object_t *sbi_object = NULL;
|
|
ogs_sbi_service_type_e service_type = OGS_SBI_SERVICE_TYPE_NULL;
|
|
ogs_sbi_discovery_option_t *discovery_option = NULL;
|
|
|
|
OpenAPI_nf_type_e target_nf_type = OpenAPI_nf_type_NULL;
|
|
OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
|
|
OpenAPI_search_result_t *SearchResult = NULL;
|
|
|
|
ogs_assert(recvmsg);
|
|
ogs_assert(xact);
|
|
sbi_object = xact->sbi_object;
|
|
ogs_assert(sbi_object);
|
|
service_type = xact->service_type;
|
|
ogs_assert(service_type);
|
|
target_nf_type = ogs_sbi_service_type_to_nf_type(service_type);
|
|
ogs_assert(target_nf_type);
|
|
requester_nf_type = xact->requester_nf_type;
|
|
ogs_assert(requester_nf_type);
|
|
|
|
discovery_option = xact->discovery_option;
|
|
|
|
SearchResult = recvmsg->SearchResult;
|
|
if (!SearchResult) {
|
|
ogs_error("No SearchResult");
|
|
return;
|
|
}
|
|
|
|
ogs_nnrf_disc_handle_nf_discover_search_result(SearchResult);
|
|
|
|
nf_instance = ogs_sbi_nf_instance_find_by_discovery_param(
|
|
target_nf_type, requester_nf_type, discovery_option);
|
|
if (!nf_instance) {
|
|
ogs_error("(NF discover) No [%s:%s]",
|
|
ogs_sbi_service_type_to_name(service_type),
|
|
OpenAPI_nf_type_ToString(requester_nf_type));
|
|
return;
|
|
}
|
|
|
|
OGS_SBI_SETUP_NF_INSTANCE(
|
|
sbi_object->service_type_array[service_type], nf_instance);
|
|
|
|
ogs_expect(true == af_sbi_send_request(nf_instance, xact));
|
|
}
|