[SBI] Do not send empty arrays when registering to NRF

OpenAPI dictates that certain arrays should have at least one item,
otherwise they should not be present.
This includes lists for IPv4/v6 addresses, TAI/TAC lists, ...

Add a check if there is at least 1 item, before creating an array.
Also move variable declarations to inner blocks, to prevent some
accidental usage out of wanted scope.
This commit is contained in:
Bostjan Meglic 2022-11-02 13:03:30 +00:00 committed by Sukchan Lee
parent 406e3f07dc
commit 00a86c5a73
1 changed files with 349 additions and 316 deletions

View File

@ -83,20 +83,15 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
ogs_sbi_nf_info_t *nf_info = NULL; ogs_sbi_nf_info_t *nf_info = NULL;
OpenAPI_nf_profile_t *NFProfile = NULL; OpenAPI_nf_profile_t *NFProfile = NULL;
OpenAPI_list_t *Ipv4AddrList = NULL;
OpenAPI_list_t *Ipv6AddrList = NULL;
OpenAPI_list_t *AllowedNfTypeList = NULL;
OpenAPI_list_t *NFServiceList = NULL; OpenAPI_list_t *NFServiceList = NULL;
OpenAPI_map_t *NFServiceMap = NULL;
OpenAPI_list_t *InfoList = NULL; OpenAPI_list_t *InfoList = NULL;
OpenAPI_map_t *InfoMap = NULL; OpenAPI_map_t *InfoMap = NULL;
OpenAPI_smf_info_t *SmfInfo = NULL; OpenAPI_smf_info_t *SmfInfo = NULL;
OpenAPI_amf_info_t *AmfInfo = NULL;
int InfoMapKey; int InfoMapKey;
OpenAPI_lnode_t *node = NULL; OpenAPI_lnode_t *node = NULL;
OpenAPI_amf_info_t *AmfInfo = NULL;
int i = 0; int i = 0;
char *ipstr = NULL; char *ipstr = NULL;
@ -137,63 +132,75 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
NFProfile->is_load = true; NFProfile->is_load = true;
NFProfile->load = nf_instance->load; NFProfile->load = nf_instance->load;
NFProfile->ipv4_addresses = Ipv4AddrList = OpenAPI_list_create(); if (nf_instance->num_of_ipv4 > 0) {
if (!Ipv4AddrList) { OpenAPI_list_t *Ipv4AddrList = NULL;
ogs_error("No Ipv4AddrList");
ogs_nnrf_nfm_free_nf_profile(NFProfile);
return NULL;
}
for (i = 0; i < nf_instance->num_of_ipv4; i++) { NFProfile->ipv4_addresses = Ipv4AddrList = OpenAPI_list_create();
if (nf_instance->ipv4[i]) { if (!Ipv4AddrList) {
ogs_trace("IPv4 [family:%d, addr:%x, port:%d]", ogs_error("No Ipv4AddrList");
nf_instance->ipv4[i]->ogs_sa_family, ogs_nnrf_nfm_free_nf_profile(NFProfile);
htobe32(nf_instance->ipv4[i]->sin.sin_addr.s_addr), return NULL;
nf_instance->ipv4[i]->ogs_sin_port); }
ogs_assert(nf_instance->ipv4[i]->ogs_sa_family == AF_INET);
ipstr = ogs_ipstrdup(nf_instance->ipv4[i]); for (i = 0; i < nf_instance->num_of_ipv4; i++) {
if (!ipstr) { if (nf_instance->ipv4[i]) {
ogs_error("No ipstr"); ogs_trace("IPv4 [family:%d, addr:%x, port:%d]",
ogs_nnrf_nfm_free_nf_profile(NFProfile); nf_instance->ipv4[i]->ogs_sa_family,
return NULL; htobe32(nf_instance->ipv4[i]->sin.sin_addr.s_addr),
nf_instance->ipv4[i]->ogs_sin_port);
ogs_assert(nf_instance->ipv4[i]->ogs_sa_family == AF_INET);
ipstr = ogs_ipstrdup(nf_instance->ipv4[i]);
if (!ipstr) {
ogs_error("No ipstr");
ogs_nnrf_nfm_free_nf_profile(NFProfile);
return NULL;
}
OpenAPI_list_add(Ipv4AddrList, ipstr);
} }
OpenAPI_list_add(Ipv4AddrList, ipstr);
} }
} }
NFProfile->ipv6_addresses = Ipv6AddrList = OpenAPI_list_create(); if (nf_instance->num_of_ipv6 > 0) {
if (!Ipv6AddrList) { OpenAPI_list_t *Ipv6AddrList = NULL;
ogs_error("No IPv6AddrList");
ogs_nnrf_nfm_free_nf_profile(NFProfile);
return NULL;
}
for (i = 0; i < nf_instance->num_of_ipv6; i++) { NFProfile->ipv6_addresses = Ipv6AddrList = OpenAPI_list_create();
if (nf_instance->ipv6[i]) { if (!Ipv6AddrList) {
ogs_trace("IPv6 [family:%d, port:%d]", ogs_error("No IPv6AddrList");
nf_instance->ipv6[i]->ogs_sa_family, ogs_nnrf_nfm_free_nf_profile(NFProfile);
nf_instance->ipv6[i]->ogs_sin_port); return NULL;
ogs_assert(nf_instance->ipv6[i]->ogs_sa_family == AF_INET6); }
ipstr = ogs_ipstrdup(nf_instance->ipv6[i]);
if (!ipstr) { for (i = 0; i < nf_instance->num_of_ipv6; i++) {
ogs_error("No ipstr"); if (nf_instance->ipv6[i]) {
ogs_nnrf_nfm_free_nf_profile(NFProfile); ogs_trace("IPv6 [family:%d, port:%d]",
return NULL; nf_instance->ipv6[i]->ogs_sa_family,
nf_instance->ipv6[i]->ogs_sin_port);
ogs_assert(nf_instance->ipv6[i]->ogs_sa_family == AF_INET6);
ipstr = ogs_ipstrdup(nf_instance->ipv6[i]);
if (!ipstr) {
ogs_error("No ipstr");
ogs_nnrf_nfm_free_nf_profile(NFProfile);
return NULL;
}
OpenAPI_list_add(Ipv6AddrList, ipstr);
} }
OpenAPI_list_add(Ipv6AddrList, ipstr);
} }
} }
NFProfile->allowed_nf_types = AllowedNfTypeList = OpenAPI_list_create(); if (nf_instance->num_of_allowed_nf_type) {
if (!AllowedNfTypeList) { OpenAPI_list_t *AllowedNfTypeList = NULL;
ogs_error("No AllowedNfTypeList");
ogs_nnrf_nfm_free_nf_profile(NFProfile);
return NULL;
}
for (i = 0; i < nf_instance->num_of_allowed_nf_type; i++) { NFProfile->allowed_nf_types = AllowedNfTypeList = OpenAPI_list_create();
OpenAPI_list_add(AllowedNfTypeList, if (!AllowedNfTypeList) {
(void *)(uintptr_t)nf_instance->allowed_nf_type[i]); ogs_error("No AllowedNfTypeList");
ogs_nnrf_nfm_free_nf_profile(NFProfile);
return NULL;
}
for (i = 0; i < nf_instance->num_of_allowed_nf_type; i++) {
OpenAPI_list_add(AllowedNfTypeList,
(void *)(uintptr_t)nf_instance->allowed_nf_type[i]);
}
} }
NFServiceList = OpenAPI_list_create(); NFServiceList = OpenAPI_list_create();
@ -240,6 +247,8 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
if (OGS_SBI_FEATURES_IS_SET( if (OGS_SBI_FEATURES_IS_SET(
supported_features, OGS_SBI_NNRF_NFM_SERVICE_MAP)) { supported_features, OGS_SBI_NNRF_NFM_SERVICE_MAP)) {
OpenAPI_map_t *NFServiceMap = NULL;
NFServiceMap = OpenAPI_map_create(nf_service->id, NFService); NFServiceMap = OpenAPI_map_create(nf_service->id, NFService);
if (!NFServiceMap) { if (!NFServiceMap) {
ogs_error("No NFServiceMap"); ogs_error("No NFServiceMap");
@ -553,16 +562,18 @@ static OpenAPI_nf_service_t *build_nf_service(
} }
} }
NFService->allowed_nf_types = AllowedNfTypeList = OpenAPI_list_create(); if (nf_service->num_of_allowed_nf_type > 0) {
if (!AllowedNfTypeList) { NFService->allowed_nf_types = AllowedNfTypeList = OpenAPI_list_create();
ogs_error("No AllowedNfTypeList"); if (!AllowedNfTypeList) {
free_nf_service(NFService); ogs_error("No AllowedNfTypeList");
return NULL; free_nf_service(NFService);
} return NULL;
}
for (i = 0; i < nf_service->num_of_allowed_nf_type; i++) { for (i = 0; i < nf_service->num_of_allowed_nf_type; i++) {
OpenAPI_list_add(AllowedNfTypeList, OpenAPI_list_add(AllowedNfTypeList,
(void *)(uintptr_t)nf_service->allowed_nf_type[i]); (void *)(uintptr_t)nf_service->allowed_nf_type[i]);
}
} }
NFService->is_priority = true; NFService->is_priority = true;
@ -619,19 +630,6 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
int i, j; int i, j;
OpenAPI_smf_info_t *SmfInfo = NULL; OpenAPI_smf_info_t *SmfInfo = NULL;
OpenAPI_list_t *sNssaiSmfInfoList = NULL;
OpenAPI_snssai_smf_info_item_t *sNssaiSmfInfoItem = NULL;
OpenAPI_snssai_t *sNssai = NULL;
OpenAPI_list_t *DnnSmfInfoList = NULL;
OpenAPI_dnn_smf_info_item_t *DnnSmfInfoItem = NULL;
OpenAPI_list_t *TaiList = NULL;
OpenAPI_tai_t *TaiItem = NULL;
OpenAPI_list_t *TaiRangeList = NULL;
OpenAPI_tai_range_t *TaiRangeItem = NULL;
OpenAPI_list_t *TacRangeList = NULL;
OpenAPI_tac_range_t *TacRangeItem = NULL;
ogs_assert(nf_info); ogs_assert(nf_info);
SmfInfo = ogs_calloc(1, sizeof(*SmfInfo)); SmfInfo = ogs_calloc(1, sizeof(*SmfInfo));
@ -640,142 +638,167 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
return NULL; return NULL;
} }
SmfInfo->s_nssai_smf_info_list = sNssaiSmfInfoList = OpenAPI_list_create();
if (!sNssaiSmfInfoList) {
ogs_error("No sNssaiSmfInfoList");
free_smf_info(SmfInfo);
return NULL;
}
for (i = 0; i < nf_info->smf.num_of_slice; i++) { if (nf_info->smf.num_of_slice > 0) {
DnnSmfInfoList = OpenAPI_list_create(); OpenAPI_list_t *sNssaiSmfInfoList = NULL;
if (!DnnSmfInfoList) {
ogs_error("No DnnSmfInfoList"); SmfInfo->s_nssai_smf_info_list = sNssaiSmfInfoList = OpenAPI_list_create();
if (!sNssaiSmfInfoList) {
ogs_error("No sNssaiSmfInfoList");
free_smf_info(SmfInfo); free_smf_info(SmfInfo);
return NULL; return NULL;
} }
for (i = 0; i < nf_info->smf.num_of_slice; i++) {
OpenAPI_list_t *DnnSmfInfoList = NULL;
OpenAPI_snssai_smf_info_item_t *sNssaiSmfInfoItem = NULL;
OpenAPI_snssai_t *sNssai = NULL;
for (j = 0; j < nf_info->smf.slice[i].num_of_dnn; j++) { DnnSmfInfoList = OpenAPI_list_create();
DnnSmfInfoItem = ogs_calloc(1, sizeof(*DnnSmfInfoItem)); if (!DnnSmfInfoList) {
ogs_assert(DnnSmfInfoItem); ogs_error("No DnnSmfInfoList");
DnnSmfInfoItem->dnn = nf_info->smf.slice[i].dnn[j]; free_smf_info(SmfInfo);
return NULL;
OpenAPI_list_add(DnnSmfInfoList, DnnSmfInfoItem);
}
if (!DnnSmfInfoList->count) {
ogs_error("CHECK CONFIGURATION: No DNN");
OpenAPI_list_free(DnnSmfInfoList);
free_smf_info(SmfInfo);
return NULL;
}
sNssaiSmfInfoItem = ogs_calloc(1, sizeof(*sNssaiSmfInfoItem));
ogs_assert(sNssaiSmfInfoItem);
sNssaiSmfInfoItem->dnn_smf_info_list = DnnSmfInfoList;
sNssaiSmfInfoItem->s_nssai = sNssai = ogs_calloc(1, sizeof(*sNssai));
ogs_assert(sNssai);
sNssai->sst = nf_info->smf.slice[i].s_nssai.sst;
sNssai->sd =
ogs_s_nssai_sd_to_string(nf_info->smf.slice[i].s_nssai.sd);
OpenAPI_list_add(sNssaiSmfInfoList, sNssaiSmfInfoItem);
}
SmfInfo->tai_list = TaiList = OpenAPI_list_create();
if (!TaiList) {
ogs_error("No TaiList");
free_smf_info(SmfInfo);
return NULL;
}
for (i = 0; i < nf_info->smf.num_of_nr_tai; i++) {
TaiItem = ogs_calloc(1, sizeof(*TaiItem));
if (!TaiItem) {
ogs_error("No TaiItem");
free_smf_info(SmfInfo);
return NULL;
}
TaiItem->plmn_id = ogs_sbi_build_plmn_id(
&nf_info->smf.nr_tai[i].plmn_id);
if (!TaiItem->plmn_id) {
ogs_error("No TaiItem->plmn_id");
if (TaiItem)
ogs_free(TaiItem);
free_smf_info(SmfInfo);
return NULL;
}
TaiItem->tac =
ogs_uint24_to_0string(nf_info->smf.nr_tai[i].tac);
if (!TaiItem->tac) {
ogs_error("No TaiItem->tac");
if (TaiItem) {
if (TaiItem->plmn_id)
ogs_free(TaiItem->plmn_id);
ogs_free(TaiItem);
} }
free_smf_info(SmfInfo);
return NULL;
}
OpenAPI_list_add(TaiList, TaiItem); for (j = 0; j < nf_info->smf.slice[i].num_of_dnn; j++) {
OpenAPI_dnn_smf_info_item_t *DnnSmfInfoItem = NULL;
DnnSmfInfoItem = ogs_calloc(1, sizeof(*DnnSmfInfoItem));
ogs_assert(DnnSmfInfoItem);
DnnSmfInfoItem->dnn = nf_info->smf.slice[i].dnn[j];
OpenAPI_list_add(DnnSmfInfoList, DnnSmfInfoItem);
}
if (!DnnSmfInfoList->count) {
ogs_error("CHECK CONFIGURATION: No DNN");
OpenAPI_list_free(DnnSmfInfoList);
free_smf_info(SmfInfo);
return NULL;
}
sNssaiSmfInfoItem = ogs_calloc(1, sizeof(*sNssaiSmfInfoItem));
ogs_assert(sNssaiSmfInfoItem);
sNssaiSmfInfoItem->dnn_smf_info_list = DnnSmfInfoList;
sNssaiSmfInfoItem->s_nssai = sNssai = ogs_calloc(1, sizeof(*sNssai));
ogs_assert(sNssai);
sNssai->sst = nf_info->smf.slice[i].s_nssai.sst;
sNssai->sd =
ogs_s_nssai_sd_to_string(nf_info->smf.slice[i].s_nssai.sd);
OpenAPI_list_add(sNssaiSmfInfoList, sNssaiSmfInfoItem);
}
} }
SmfInfo->tai_range_list = TaiRangeList = OpenAPI_list_create(); if (nf_info->smf.num_of_nr_tai > 0) {
if (!TaiRangeList) { OpenAPI_list_t *TaiList = NULL;
ogs_error("No TaiRangeList");
free_smf_info(SmfInfo); SmfInfo->tai_list = TaiList = OpenAPI_list_create();
return NULL; if (!TaiList) {
ogs_error("No TaiList");
free_smf_info(SmfInfo);
return NULL;
}
for (i = 0; i < nf_info->smf.num_of_nr_tai; i++) {
OpenAPI_tai_t *TaiItem = NULL;
TaiItem = ogs_calloc(1, sizeof(*TaiItem));
if (!TaiItem) {
ogs_error("No TaiItem");
free_smf_info(SmfInfo);
return NULL;
}
TaiItem->plmn_id = ogs_sbi_build_plmn_id(
&nf_info->smf.nr_tai[i].plmn_id);
if (!TaiItem->plmn_id) {
ogs_error("No TaiItem->plmn_id");
if (TaiItem)
ogs_free(TaiItem);
free_smf_info(SmfInfo);
return NULL;
}
TaiItem->tac =
ogs_uint24_to_0string(nf_info->smf.nr_tai[i].tac);
if (!TaiItem->tac) {
ogs_error("No TaiItem->tac");
if (TaiItem) {
if (TaiItem->plmn_id)
ogs_free(TaiItem->plmn_id);
ogs_free(TaiItem);
}
free_smf_info(SmfInfo);
return NULL;
}
OpenAPI_list_add(TaiList, TaiItem);
}
} }
for (i = 0; i < nf_info->smf.num_of_nr_tai_range; i++) { if (nf_info->smf.num_of_nr_tai_range > 0) {
TacRangeList = OpenAPI_list_create(); OpenAPI_list_t *TaiRangeList = NULL;
if (!TacRangeList) {
ogs_error("No TacRangeList"); SmfInfo->tai_range_list = TaiRangeList = OpenAPI_list_create();
if (!TaiRangeList) {
ogs_error("No TaiRangeList");
free_smf_info(SmfInfo); free_smf_info(SmfInfo);
return NULL; return NULL;
} }
for (j = 0; for (i = 0; i < nf_info->smf.num_of_nr_tai_range; i++) {
j < nf_info->smf.nr_tai_range[i].num_of_tac_range; OpenAPI_list_t *TacRangeList = NULL;
j++) { OpenAPI_tai_range_t *TaiRangeItem = NULL;
TacRangeItem = ogs_calloc(1, sizeof(*TacRangeItem));
ogs_assert(TacRangeItem);
TacRangeItem->start = ogs_uint24_to_0string( TacRangeList = OpenAPI_list_create();
nf_info->smf.nr_tai_range[i].start[j]); if (!TacRangeList) {
ogs_assert(TacRangeItem->start); ogs_error("No TacRangeList");
TacRangeItem->end = free_smf_info(SmfInfo);
ogs_uint24_to_0string( return NULL;
nf_info->smf.nr_tai_range[i].end[j]); }
ogs_assert(TacRangeItem->end);
OpenAPI_list_add(TacRangeList, TacRangeItem); for (j = 0;
j < nf_info->smf.nr_tai_range[i].num_of_tac_range;
j++) {
OpenAPI_tac_range_t *TacRangeItem = NULL;
TacRangeItem = ogs_calloc(1, sizeof(*TacRangeItem));
ogs_assert(TacRangeItem);
TacRangeItem->start = ogs_uint24_to_0string(
nf_info->smf.nr_tai_range[i].start[j]);
ogs_assert(TacRangeItem->start);
TacRangeItem->end =
ogs_uint24_to_0string(
nf_info->smf.nr_tai_range[i].end[j]);
ogs_assert(TacRangeItem->end);
OpenAPI_list_add(TacRangeList, TacRangeItem);
}
if (!TacRangeList->count) {
ogs_error("CHECK CONFIGURATION: No Start/End in TacRange");
OpenAPI_list_free(TacRangeList);
free_smf_info(SmfInfo);
return NULL;
}
TaiRangeItem = ogs_calloc(1, sizeof(*TaiRangeItem));
ogs_assert(TaiRangeItem);
TaiRangeItem->plmn_id = ogs_sbi_build_plmn_id(
&nf_info->smf.nr_tai_range[i].plmn_id);
ogs_assert(TaiRangeItem->plmn_id);
TaiRangeItem->tac_range_list = TacRangeList;
OpenAPI_list_add(TaiRangeList, TaiRangeItem);
} }
if (!TacRangeList->count) {
ogs_error("CHECK CONFIGURATION: No Start/End in TacRange");
OpenAPI_list_free(TacRangeList);
free_smf_info(SmfInfo);
return NULL;
}
TaiRangeItem = ogs_calloc(1, sizeof(*TaiRangeItem));
ogs_assert(TaiRangeItem);
TaiRangeItem->plmn_id = ogs_sbi_build_plmn_id(
&nf_info->smf.nr_tai_range[i].plmn_id);
ogs_assert(TaiRangeItem->plmn_id);
TaiRangeItem->tac_range_list = TacRangeList;
OpenAPI_list_add(TaiRangeList, TaiRangeItem);
} }
return SmfInfo; return SmfInfo;
@ -786,16 +809,6 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
int i, j; int i, j;
OpenAPI_amf_info_t *AmfInfo = NULL; OpenAPI_amf_info_t *AmfInfo = NULL;
OpenAPI_list_t *guamiAmfInfoList = NULL;
OpenAPI_guami_t *guamiAmfInfoItem = NULL;
OpenAPI_list_t *TaiList = NULL;
OpenAPI_tai_t *TaiItem = NULL;
OpenAPI_list_t *TaiRangeList = NULL;
OpenAPI_tai_range_t *TaiRangeItem = NULL;
OpenAPI_list_t *TacRangeList = NULL;
OpenAPI_tac_range_t *TacRangeItem = NULL;
ogs_assert(nf_info); ogs_assert(nf_info);
AmfInfo = ogs_calloc(1, sizeof(*AmfInfo)); AmfInfo = ogs_calloc(1, sizeof(*AmfInfo));
@ -817,146 +830,166 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
return NULL; return NULL;
} }
AmfInfo->guami_list = guamiAmfInfoList = OpenAPI_list_create(); if (nf_info->amf.num_of_guami) {
if (!guamiAmfInfoList) { OpenAPI_list_t *guamiAmfInfoList = NULL;
ogs_error("No guamiAmfInfoList");
free_amf_info(AmfInfo);
return NULL;
}
for (i = 0; i < nf_info->amf.num_of_guami; i++) { AmfInfo->guami_list = guamiAmfInfoList = OpenAPI_list_create();
if (!guamiAmfInfoList) {
guamiAmfInfoItem = ogs_calloc(1, sizeof(*guamiAmfInfoItem)); ogs_error("No guamiAmfInfoList");
if (!guamiAmfInfoItem) {
ogs_error("guamiAmfInfoItem");
free_amf_info(AmfInfo); free_amf_info(AmfInfo);
return NULL; return NULL;
} }
guamiAmfInfoItem->plmn_id = for (i = 0; i < nf_info->amf.num_of_guami; i++) {
ogs_sbi_build_plmn_id_nid(&nf_info->amf.guami[i].plmn_id); OpenAPI_guami_t *guamiAmfInfoItem = NULL;
if (!guamiAmfInfoItem->plmn_id) {
ogs_error("guamiAmfInfoItem->plmn_id"); guamiAmfInfoItem = ogs_calloc(1, sizeof(*guamiAmfInfoItem));
if (guamiAmfInfoItem) if (!guamiAmfInfoItem) {
ogs_free(guamiAmfInfoItem); ogs_error("guamiAmfInfoItem");
free_amf_info(AmfInfo); free_amf_info(AmfInfo);
return NULL; return NULL;
}
guamiAmfInfoItem->amf_id =
ogs_amf_id_to_string(&nf_info->amf.guami[i].amf_id);
if (!guamiAmfInfoItem->amf_id) {
ogs_error("guamiAmfInfoItem->amf_id");
if (guamiAmfInfoItem) {
if (guamiAmfInfoItem->plmn_id)
ogs_free(guamiAmfInfoItem->plmn_id);
ogs_free(guamiAmfInfoItem);
} }
free_amf_info(AmfInfo);
return NULL; guamiAmfInfoItem->plmn_id =
ogs_sbi_build_plmn_id_nid(&nf_info->amf.guami[i].plmn_id);
if (!guamiAmfInfoItem->plmn_id) {
ogs_error("guamiAmfInfoItem->plmn_id");
if (guamiAmfInfoItem)
ogs_free(guamiAmfInfoItem);
free_amf_info(AmfInfo);
return NULL;
}
guamiAmfInfoItem->amf_id =
ogs_amf_id_to_string(&nf_info->amf.guami[i].amf_id);
if (!guamiAmfInfoItem->amf_id) {
ogs_error("guamiAmfInfoItem->amf_id");
if (guamiAmfInfoItem) {
if (guamiAmfInfoItem->plmn_id)
ogs_free(guamiAmfInfoItem->plmn_id);
ogs_free(guamiAmfInfoItem);
}
free_amf_info(AmfInfo);
return NULL;
}
OpenAPI_list_add(guamiAmfInfoList, guamiAmfInfoItem);
} }
OpenAPI_list_add(guamiAmfInfoList, guamiAmfInfoItem);
} }
AmfInfo->tai_list = TaiList = OpenAPI_list_create(); if (nf_info->amf.num_of_nr_tai > 0) {
if (!TaiList) { OpenAPI_list_t *TaiList = NULL;
ogs_error("No TaiList");
free_amf_info(AmfInfo);
return NULL;
}
for (i = 0; i < nf_info->amf.num_of_nr_tai; i++) { AmfInfo->tai_list = TaiList = OpenAPI_list_create();
TaiItem = ogs_calloc(1, sizeof(*TaiItem));
if (!TaiList) { if (!TaiList) {
ogs_error("No TaiItem"); ogs_error("No TaiList");
free_amf_info(AmfInfo); free_amf_info(AmfInfo);
return NULL; return NULL;
} }
TaiItem->plmn_id = ogs_sbi_build_plmn_id(
&nf_info->amf.nr_tai[i].plmn_id); for (i = 0; i < nf_info->amf.num_of_nr_tai; i++) {
if (!TaiItem->plmn_id) { OpenAPI_tai_t *TaiItem = NULL;
ogs_error("No TaiItem->plmn_id");
if (TaiItem) TaiItem = ogs_calloc(1, sizeof(*TaiItem));
ogs_free(TaiItem); if (!TaiList) {
free_amf_info(AmfInfo); ogs_error("No TaiItem");
return NULL; free_amf_info(AmfInfo);
} return NULL;
TaiItem->tac = }
ogs_uint24_to_0string(nf_info->amf.nr_tai[i].tac); TaiItem->plmn_id = ogs_sbi_build_plmn_id(
if (!TaiItem->tac) { &nf_info->amf.nr_tai[i].plmn_id);
ogs_error("No TaiItem->tac"); if (!TaiItem->plmn_id) {
if (TaiItem) { ogs_error("No TaiItem->plmn_id");
if (TaiItem->plmn_id) if (TaiItem)
ogs_free(TaiItem->plmn_id); ogs_free(TaiItem);
ogs_free(TaiItem); free_amf_info(AmfInfo);
return NULL;
}
TaiItem->tac =
ogs_uint24_to_0string(nf_info->amf.nr_tai[i].tac);
if (!TaiItem->tac) {
ogs_error("No TaiItem->tac");
if (TaiItem) {
if (TaiItem->plmn_id)
ogs_free(TaiItem->plmn_id);
ogs_free(TaiItem);
}
free_amf_info(AmfInfo);
return NULL;
} }
free_amf_info(AmfInfo);
return NULL;
}
OpenAPI_list_add(TaiList, TaiItem); OpenAPI_list_add(TaiList, TaiItem);
}
} }
AmfInfo->tai_range_list = TaiRangeList = OpenAPI_list_create(); if (nf_info->amf.num_of_nr_tai_range > 0) {
if (!TaiRangeList) { OpenAPI_list_t *TaiRangeList = NULL;
ogs_error("No TaiRangeList");
free_amf_info(AmfInfo);
return NULL;
}
for (i = 0; i < nf_info->amf.num_of_nr_tai_range; i++) { AmfInfo->tai_range_list = TaiRangeList = OpenAPI_list_create();
TacRangeList = OpenAPI_list_create(); if (!TaiRangeList) {
if (!TacRangeList) { ogs_error("No TaiRangeList");
ogs_error("No TacRangeList");
free_amf_info(AmfInfo); free_amf_info(AmfInfo);
return NULL; return NULL;
} }
for (j = 0; for (i = 0; i < nf_info->amf.num_of_nr_tai_range; i++) {
j < nf_info->amf.nr_tai_range[i].num_of_tac_range; OpenAPI_list_t *TacRangeList = NULL;
j++) { OpenAPI_tai_range_t *TaiRangeItem = NULL;
TacRangeItem = ogs_calloc(1, sizeof(*TacRangeItem));
ogs_assert(TacRangeItem);
TacRangeItem->start = ogs_uint24_to_0string( TacRangeList = OpenAPI_list_create();
nf_info->amf.nr_tai_range[i].start[j]); if (!TacRangeList) {
ogs_assert(TacRangeItem->start); ogs_error("No TacRangeList");
TacRangeItem->end = free_amf_info(AmfInfo);
ogs_uint24_to_0string( return NULL;
nf_info->amf.nr_tai_range[i].end[j]); }
ogs_assert(TacRangeItem->end);
OpenAPI_list_add(TacRangeList, TacRangeItem); for (j = 0;
j < nf_info->amf.nr_tai_range[i].num_of_tac_range;
j++) {
OpenAPI_tac_range_t *TacRangeItem = NULL;
TacRangeItem = ogs_calloc(1, sizeof(*TacRangeItem));
ogs_assert(TacRangeItem);
TacRangeItem->start = ogs_uint24_to_0string(
nf_info->amf.nr_tai_range[i].start[j]);
ogs_assert(TacRangeItem->start);
TacRangeItem->end =
ogs_uint24_to_0string(
nf_info->amf.nr_tai_range[i].end[j]);
ogs_assert(TacRangeItem->end);
OpenAPI_list_add(TacRangeList, TacRangeItem);
}
if (!TacRangeList->count) {
ogs_error("CHECK CONFIGURATION: No Start/End in TacRange");
OpenAPI_list_free(TacRangeList);
free_amf_info(AmfInfo);
return NULL;
}
TaiRangeItem = ogs_calloc(1, sizeof(*TaiRangeItem));
if (!TaiRangeItem) {
ogs_error("No TaiRangeItem");
free_amf_info(AmfInfo);
return NULL;
}
TaiRangeItem->plmn_id = ogs_sbi_build_plmn_id(
&nf_info->amf.nr_tai_range[i].plmn_id);
if (!TaiRangeItem->plmn_id) {
ogs_error("No TaiRangeItem->plmn_id");
ogs_free(TaiRangeItem);
free_amf_info(AmfInfo);
return NULL;
}
TaiRangeItem->tac_range_list = TacRangeList;
OpenAPI_list_add(TaiRangeList, TaiRangeItem);
} }
if (!TacRangeList->count) {
ogs_error("CHECK CONFIGURATION: No Start/End in TacRange");
OpenAPI_list_free(TacRangeList);
free_amf_info(AmfInfo);
return NULL;
}
TaiRangeItem = ogs_calloc(1, sizeof(*TaiRangeItem));
if (!TaiRangeItem) {
ogs_error("No TaiRangeItem");
free_amf_info(AmfInfo);
return NULL;
}
TaiRangeItem->plmn_id = ogs_sbi_build_plmn_id(
&nf_info->amf.nr_tai_range[i].plmn_id);
if (!TaiRangeItem->plmn_id) {
ogs_error("No TaiRangeItem->plmn_id");
ogs_free(TaiRangeItem);
free_amf_info(AmfInfo);
return NULL;
}
TaiRangeItem->tac_range_list = TacRangeList;
OpenAPI_list_add(TaiRangeList, TaiRangeItem);
} }
return AmfInfo; return AmfInfo;