Implement PDU Session Release for Home-Routed Roaming and fix N4 step ordering in 4.3.4.2

- Add support for PDU Session Release in 3GPP TS 23.502 section 4.3.4.3
  Note: PCF-initiated release flow for Home-Routed Roaming is not implemented;
- Fix N4 release step ordering in 3GPP TS 23.502 section 4.3.4.2 UE or network requested PDU Session Release for Non-Roaming and Roaming with Local Breakout
This commit is contained in:
Sukchan Lee
2025-05-02 21:28:25 +09:00
parent d66d6f868a
commit ca61a901d5
45 changed files with 2442 additions and 722 deletions

View File

@@ -2469,6 +2469,8 @@ void ogs_sbi_object_free(ogs_sbi_object_t *sbi_object)
if (sbi_object->nf_type_array[i].nf_instance_id)
ogs_free(sbi_object->nf_type_array[i].nf_instance_id);
}
if (sbi_object->home_nsmf_pdusession.nf_instance_id)
ogs_free(sbi_object->home_nsmf_pdusession.nf_instance_id);
}
ogs_sbi_xact_t *ogs_sbi_xact_add(

View File

@@ -161,6 +161,8 @@ void ogs_sbi_message_free(ogs_sbi_message_t *message)
OpenAPI_release_data_free(message->ReleaseData);
if (message->ReleasedData)
OpenAPI_released_data_free(message->ReleasedData);
if (message->StatusNotification)
OpenAPI_status_notification_free(message->StatusNotification);
if (message->SessionManagementSubscriptionDataList) {
OpenAPI_lnode_t *node = NULL;
OpenAPI_list_for_each(message->SessionManagementSubscriptionDataList, node)
@@ -1567,6 +1569,10 @@ static char *build_json(ogs_sbi_message_t *message)
} else if (message->ReleasedData) {
item = OpenAPI_released_data_convertToJSON(message->ReleasedData);
ogs_assert(item);
} else if (message->StatusNotification) {
item = OpenAPI_status_notification_convertToJSON(
message->StatusNotification);
ogs_assert(item);
} else if (message->SessionManagementSubscriptionDataList) {
OpenAPI_lnode_t *node = NULL;
@@ -2509,6 +2515,57 @@ static int parse_json(ogs_sbi_message_t *message,
}
END
break;
CASE(OGS_SBI_RESOURCE_NAME_VSMF_PDU_SESSIONS)
SWITCH(message->h.resource.component[2])
CASE(OGS_SBI_RESOURCE_NAME_MODIFY)
if (message->res_status == 0) {
message->VsmfUpdateData =
OpenAPI_vsmf_update_data_parseFromJSON(item);
if (!message->VsmfUpdateData) {
rv = OGS_ERROR;
ogs_error("JSON parse error");
}
} else if (message->res_status == OGS_SBI_HTTP_STATUS_OK) {
message->VsmfUpdatedData =
OpenAPI_vsmf_updated_data_parseFromJSON(item);
if (!message->VsmfUpdatedData) {
rv = OGS_ERROR;
ogs_error("JSON parse error");
}
} else if (message->res_status ==
OGS_SBI_HTTP_STATUS_BAD_REQUEST ||
message->res_status ==
OGS_SBI_HTTP_STATUS_FORBIDDEN ||
message->res_status ==
OGS_SBI_HTTP_STATUS_NOT_FOUND ||
message->res_status ==
OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR ||
message->res_status ==
OGS_SBI_HTTP_STATUS_SERVICE_UNAVAILABLE ||
message->res_status ==
OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT) {
message->VsmfUpdateError =
OpenAPI_vsmf_update_error_parseFromJSON(item);
if (!message->VsmfUpdateError) {
rv = OGS_ERROR;
ogs_error("JSON parse error");
}
}
break;
DEFAULT
if (message->res_status < 300) {
message->StatusNotification =
OpenAPI_status_notification_parseFromJSON(item);
if (!message->StatusNotification) {
rv = OGS_ERROR;
ogs_error("JSON parse error");
}
} else {
ogs_error("HTTP ERROR Status : %d",
message->res_status);
}
END
break;
DEFAULT
rv = OGS_ERROR;

View File

@@ -121,7 +121,7 @@ extern "C" {
#define OGS_SBI_RESOURCE_NAME_RELEASE "release"
#define OGS_SBI_RESOURCE_NAME_PDU_SESSIONS "pdu-sessions"
#define OGS_SBI_RESOURCE_NAME_PDU_SESSION_STATUS "pdu-session-status"
#define OGS_SBI_RESOURCE_NAME_VSMF_PDU_SESSIONS "vsmf-pdu-session"
#define OGS_SBI_RESOURCE_NAME_SM_POLICY_NOTIFY "sm-policy-notify"
#define OGS_SBI_RESOURCE_NAME_N1_N2_FAILURE_NOTIFY "n1-n2-failure-notify"
@@ -576,6 +576,7 @@ typedef struct ogs_sbi_message_s {
OpenAPI_vsmf_update_error_t *VsmfUpdateError;
OpenAPI_release_data_t *ReleaseData;
OpenAPI_released_data_t *ReleasedData;
OpenAPI_status_notification_t *StatusNotification;
OpenAPI_list_t *SessionManagementSubscriptionDataList;
OpenAPI_n1_n2_message_transfer_req_data_t *N1N2MessageTransferReqData;
OpenAPI_n1_n2_message_transfer_rsp_data_t *N1N2MessageTransferRspData;

View File

@@ -99,6 +99,7 @@
#include "model/ue_context_transfer_rsp_data.h"
#include "model/ue_reg_status_update_req_data.h"
#include "model/ue_reg_status_update_rsp_data.h"
#include "model/status_notification.h"
#include "custom/links.h"