[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;
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_map_t *NFServiceMap = NULL;
OpenAPI_list_t *InfoList = NULL;
OpenAPI_map_t *InfoMap = NULL;
OpenAPI_smf_info_t *SmfInfo = NULL;
OpenAPI_amf_info_t *AmfInfo = NULL;
int InfoMapKey;
OpenAPI_lnode_t *node = NULL;
OpenAPI_amf_info_t *AmfInfo = NULL;
int i = 0;
char *ipstr = NULL;
@ -137,6 +132,9 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
NFProfile->is_load = true;
NFProfile->load = nf_instance->load;
if (nf_instance->num_of_ipv4 > 0) {
OpenAPI_list_t *Ipv4AddrList = NULL;
NFProfile->ipv4_addresses = Ipv4AddrList = OpenAPI_list_create();
if (!Ipv4AddrList) {
ogs_error("No Ipv4AddrList");
@ -160,6 +158,10 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
OpenAPI_list_add(Ipv4AddrList, ipstr);
}
}
}
if (nf_instance->num_of_ipv6 > 0) {
OpenAPI_list_t *Ipv6AddrList = NULL;
NFProfile->ipv6_addresses = Ipv6AddrList = OpenAPI_list_create();
if (!Ipv6AddrList) {
@ -183,6 +185,10 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
OpenAPI_list_add(Ipv6AddrList, ipstr);
}
}
}
if (nf_instance->num_of_allowed_nf_type) {
OpenAPI_list_t *AllowedNfTypeList = NULL;
NFProfile->allowed_nf_types = AllowedNfTypeList = OpenAPI_list_create();
if (!AllowedNfTypeList) {
@ -195,6 +201,7 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
OpenAPI_list_add(AllowedNfTypeList,
(void *)(uintptr_t)nf_instance->allowed_nf_type[i]);
}
}
NFServiceList = OpenAPI_list_create();
if (!NFServiceList) {
@ -240,6 +247,8 @@ OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(
if (OGS_SBI_FEATURES_IS_SET(
supported_features, OGS_SBI_NNRF_NFM_SERVICE_MAP)) {
OpenAPI_map_t *NFServiceMap = NULL;
NFServiceMap = OpenAPI_map_create(nf_service->id, NFService);
if (!NFServiceMap) {
ogs_error("No NFServiceMap");
@ -553,6 +562,7 @@ static OpenAPI_nf_service_t *build_nf_service(
}
}
if (nf_service->num_of_allowed_nf_type > 0) {
NFService->allowed_nf_types = AllowedNfTypeList = OpenAPI_list_create();
if (!AllowedNfTypeList) {
ogs_error("No AllowedNfTypeList");
@ -564,6 +574,7 @@ static OpenAPI_nf_service_t *build_nf_service(
OpenAPI_list_add(AllowedNfTypeList,
(void *)(uintptr_t)nf_service->allowed_nf_type[i]);
}
}
NFService->is_priority = true;
NFService->priority = nf_service->priority;
@ -619,19 +630,6 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
int i, j;
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);
SmfInfo = ogs_calloc(1, sizeof(*SmfInfo));
@ -640,14 +638,21 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
return NULL;
}
if (nf_info->smf.num_of_slice > 0) {
OpenAPI_list_t *sNssaiSmfInfoList = 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++) {
OpenAPI_list_t *DnnSmfInfoList = NULL;
OpenAPI_snssai_smf_info_item_t *sNssaiSmfInfoItem = NULL;
OpenAPI_snssai_t *sNssai = NULL;
DnnSmfInfoList = OpenAPI_list_create();
if (!DnnSmfInfoList) {
ogs_error("No DnnSmfInfoList");
@ -656,6 +661,8 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
}
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];
@ -685,6 +692,10 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
OpenAPI_list_add(sNssaiSmfInfoList, sNssaiSmfInfoItem);
}
}
if (nf_info->smf.num_of_nr_tai > 0) {
OpenAPI_list_t *TaiList = NULL;
SmfInfo->tai_list = TaiList = OpenAPI_list_create();
if (!TaiList) {
@ -694,6 +705,8 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
}
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");
@ -724,6 +737,10 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
OpenAPI_list_add(TaiList, TaiItem);
}
}
if (nf_info->smf.num_of_nr_tai_range > 0) {
OpenAPI_list_t *TaiRangeList = NULL;
SmfInfo->tai_range_list = TaiRangeList = OpenAPI_list_create();
if (!TaiRangeList) {
@ -733,6 +750,9 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
}
for (i = 0; i < nf_info->smf.num_of_nr_tai_range; i++) {
OpenAPI_list_t *TacRangeList = NULL;
OpenAPI_tai_range_t *TaiRangeItem = NULL;
TacRangeList = OpenAPI_list_create();
if (!TacRangeList) {
ogs_error("No TacRangeList");
@ -743,6 +763,8 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
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);
@ -777,6 +799,7 @@ static OpenAPI_smf_info_t *build_smf_info(ogs_sbi_nf_info_t *nf_info)
OpenAPI_list_add(TaiRangeList, TaiRangeItem);
}
}
return SmfInfo;
}
@ -786,16 +809,6 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
int i, j;
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);
AmfInfo = ogs_calloc(1, sizeof(*AmfInfo));
@ -817,6 +830,9 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
return NULL;
}
if (nf_info->amf.num_of_guami) {
OpenAPI_list_t *guamiAmfInfoList = NULL;
AmfInfo->guami_list = guamiAmfInfoList = OpenAPI_list_create();
if (!guamiAmfInfoList) {
ogs_error("No guamiAmfInfoList");
@ -825,6 +841,7 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
}
for (i = 0; i < nf_info->amf.num_of_guami; i++) {
OpenAPI_guami_t *guamiAmfInfoItem = NULL;
guamiAmfInfoItem = ogs_calloc(1, sizeof(*guamiAmfInfoItem));
if (!guamiAmfInfoItem) {
@ -857,6 +874,10 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
OpenAPI_list_add(guamiAmfInfoList, guamiAmfInfoItem);
}
}
if (nf_info->amf.num_of_nr_tai > 0) {
OpenAPI_list_t *TaiList = NULL;
AmfInfo->tai_list = TaiList = OpenAPI_list_create();
if (!TaiList) {
@ -866,6 +887,8 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
}
for (i = 0; i < nf_info->amf.num_of_nr_tai; i++) {
OpenAPI_tai_t *TaiItem = NULL;
TaiItem = ogs_calloc(1, sizeof(*TaiItem));
if (!TaiList) {
ogs_error("No TaiItem");
@ -896,6 +919,10 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
OpenAPI_list_add(TaiList, TaiItem);
}
}
if (nf_info->amf.num_of_nr_tai_range > 0) {
OpenAPI_list_t *TaiRangeList = NULL;
AmfInfo->tai_range_list = TaiRangeList = OpenAPI_list_create();
if (!TaiRangeList) {
@ -905,6 +932,9 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
}
for (i = 0; i < nf_info->amf.num_of_nr_tai_range; i++) {
OpenAPI_list_t *TacRangeList = NULL;
OpenAPI_tai_range_t *TaiRangeItem = NULL;
TacRangeList = OpenAPI_list_create();
if (!TacRangeList) {
ogs_error("No TacRangeList");
@ -915,6 +945,8 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
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);
@ -958,6 +990,7 @@ static OpenAPI_amf_info_t *build_amf_info(ogs_sbi_nf_info_t *nf_info)
OpenAPI_list_add(TaiRangeList, TaiRangeItem);
}
}
return AmfInfo;
}