mirror of
https://github.com/open5gs/open5gs.git
synced 2025-11-02 21:13:40 +00:00
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:
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user