Improve GTP message (#1201)

Extended Indication
Add Delay Value
This commit is contained in:
Sukchan Lee 2021-10-16 17:26:30 +09:00
parent b35febd9c4
commit 9ba4b317d2
8 changed files with 115 additions and 45 deletions

View File

@ -20,7 +20,7 @@
/*******************************************************************************
* This file had been created by gtp-tlv.py script v0.1.0
* Please do not modify this file but regenerate it via script.
* Created on: 2021-06-15 11:28:13.532535 by acetcom
* Created on: 2021-10-16 16:32:20.655097 by acetcom
* from 29274-g30.docx
******************************************************************************/
@ -479,10 +479,10 @@ ogs_tlv_desc_t ogs_gtp_tlv_desc_s1udf_0 =
ogs_tlv_desc_t ogs_gtp_tlv_desc_delay_value_0 =
{
OGS_TLV_VAR_STR,
OGS_TLV_UINT8,
"Delay Value",
OGS_GTP_DELAY_VALUE_TYPE,
0,
1,
0,
sizeof(ogs_gtp_tlv_delay_value_t),
{ NULL }

View File

@ -20,7 +20,7 @@
/*******************************************************************************
* This file had been created by gtp-tlv.py script v0.1.0
* Please do not modify this file but regenerate it via script.
* Created on: 2021-06-15 11:28:13.527903 by acetcom
* Created on: 2021-10-16 16:32:20.650061 by acetcom
* from 29274-g30.docx
******************************************************************************/
@ -524,7 +524,7 @@ typedef ogs_tlv_octet_t ogs_gtp_tlv_tmsi_t;
typedef ogs_tlv_octet_t ogs_gtp_tlv_global_cn_id_t;
typedef ogs_tlv_octet_t ogs_gtp_tlv_s103pdf_t;
typedef ogs_tlv_octet_t ogs_gtp_tlv_s1udf_t;
typedef ogs_tlv_octet_t ogs_gtp_tlv_delay_value_t;
typedef ogs_tlv_uint8_t ogs_gtp_tlv_delay_value_t;
typedef ogs_tlv_uint32_t ogs_gtp_tlv_charging_id_t;
typedef ogs_tlv_octet_t ogs_gtp_tlv_charging_characteristics_t;
typedef ogs_tlv_octet_t ogs_gtp_tlv_trace_information_t;

View File

@ -375,6 +375,7 @@ for key in msg_list.keys():
type_list["Recovery"]["size"] = 1 # Type : 3
type_list["EBI"]["size"] = 1 # Type : 73
type_list["RAT Type"]["size"] = 1 # Type : 82
type_list["Delay Value"]["size"] = 1 # Type : 92
type_list["Charging ID"]["size"] = 4 # Type : 94
type_list["PDN Type"]["size"] = 1 # Type : 99
type_list["PTI"]["size"] = 1 # Type : 100

View File

@ -164,41 +164,86 @@ typedef struct ogs_gtp_ambr_s {
/* 8.12 Indication */
typedef struct ogs_gtp_indication_s {
ED8(uint8_t daf:1;,
uint8_t dtf:1;,
uint8_t hi:1;,
uint8_t dfi:1;,
uint8_t oi:1;,
uint8_t isrsi:1;,
uint8_t israi:1;,
uint8_t sgwci:1;)
ED8(uint8_t dual_address_bearer_flag:1;,
uint8_t direct_tunnel_flag:1;,
uint8_t handover_indication:1;,
uint8_t direct_forwarding_indication:1;,
uint8_t operation_indication:1;,
uint8_t idle_mode_signalling_reduction_supported_indication:1;,
uint8_t idle_mode_signalling_reduction_activation_indication:1;,
uint8_t sgw_change_indication:1;)
ED8(uint8_t sqci:1;,
uint8_t uimsi:1;,
uint8_t cfsi:1;,
uint8_t crsi:1;,
uint8_t p:1;,
uint8_t pt:1;,
uint8_t si:1;,
uint8_t msv:1;)
ED8(uint8_t subscribed_qos_change_indication:1;,
uint8_t unauthenticated_imsi:1;,
uint8_t change_f_teid_support_indication:1;,
uint8_t change_reporting_support_indication:1;,
uint8_t piggybacking_supported:1;,
uint8_t s5_s8_protocol_type:1;,
uint8_t scope_indication:1;,
uint8_t ms_validated:1;)
ED8(uint8_t retloc:1;,
uint8_t pbic:1;,
uint8_t srni:1;,
uint8_t s6af:1;,
uint8_t s4af:1;,
uint8_t mbmdt:1;,
uint8_t israu:1;,
uint8_t ccrsi:1;)
ED8(uint8_t retrieve_location_indication_flag:1;,
uint8_t propagate_bbai_information_change:1;,
uint8_t sgw_restoration_needed_indication:1;,
uint8_t static_ipv6_address_flag:1;,
uint8_t static_ipv4_address_flag:1;,
uint8_t management_based_mdt_allowed_flag:1;,
uint8_t isr_is_activated_for_the_ue:1;,
uint8_t csg_change_reporting_support_indication:1;)
ED8(uint8_t change_of_presence_reporting_area_information_indication:1;,
uint8_t abnormal_release_of_radio_link:1;,
uint8_t pdn_pause_off_indication:1;,
uint8_t pdn_pause_on_indication:1;,
uint8_t pdn_pause_support_indication:1;,
uint8_t csfb_indication:1;,
uint8_t change_of_location_information_indication:1;,
uint8_t cs_to_ps_srvcc_indication:1;)
ED8(uint8_t nbifom_support_indication:1;,
uint8_t ue_available_for_signalling_indication:1;,
uint8_t delay_tolerant_connection_indication:1;,
uint8_t buffered_dl_data_waiting_indication:1;,
uint8_t pending_subscription_change_indication:1;,
uint8_t p_cscf_restoration_indication:1;,
uint8_t associate_oci_with_sgw_node_s_identity:1;,
uint8_t associate_oci_with_pgw_node_s_identity:1;)
ED8(uint8_t release_over_any_access_indication:1;,
uint8_t extended_pco_support_indication:1;,
uint8_t control_plane_only:1;,
uint8_t pending_mt_short_message_indication:1;,
uint8_t s11_u_tunnel_flag:1;,
uint8_t pending_network_initiated_pdn_connection_signalling_indication:1;,
uint8_t ue_not_authorised_cause_code_support_indication:1;,
uint8_t wlcp_pdn_connection_modification_support_indication:1;)
ED8(uint8_t _5gs_interworking_without_n26_indication:1;,
uint8_t return_preferred_indication:1;,
uint8_t _5gs_interworking_indication:1;,
uint8_t extended_ebi_value_range_support_indication:1;,
uint8_t lte_m_ue_indication:1;,
uint8_t lte_m_rat_type_reporting_to_pgw_indication:1;,
uint8_t enb_change_reporting_support_indication:1;,
uint8_t triggering_sgsn_initiated_pdp_context_creation_modification_indication:1;)
ED8(uint8_t create_session_request_message_forwarded_indication:1;,
uint8_t mt_edt_not_applicable:1;,
uint8_t mt_edt_applicable:1;,
uint8_t no_5gs_n26_mobility_indication:1;,
uint8_t _5gc_not_restricted_support:1;,
uint8_t _5gc_not_restricted_indication:1;,
uint8_t _5g_srvcc_ho_indication:1;,
uint8_t ethernet_pdn_support_indication:1;)
ED8(uint8_t spare1:1;,
uint8_t spare2:1;,
uint8_t spare3:1;,
uint8_t spare4:1;,
uint8_t spare5:1;,
uint8_t csfbi:1;,
uint8_t clii:1;,
uint8_t cpsr:1;)
uint8_t same_iwk_scef_selected_for_monitoring_event_indication:1;,
uint8_t notify_source_enodeb_indication:1;,
uint8_t indirect_data_forwarding_with_upf_indication:1;,
uint8_t emergency_pdu_session_indication:1;)
} __attribute__ ((packed)) ogs_gtp_indication_t;
/* 8.13 Protocol Configuration Options (PCO)

View File

@ -194,18 +194,20 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
}
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
indication.change_reporting_support_indication = 1;
indication.enb_change_reporting_support_indication = 1;
if (req->pdn_type.u8 == OGS_PDU_SESSION_TYPE_IPV4V6) {
indication.daf = 1;
indication.dual_address_bearer_flag = 1;
}
if (sess->request_type.value == OGS_NAS_EPS_REQUEST_TYPE_HANDOVER) {
indication.hi = 1;
}
if (indication.daf || indication.hi) {
indication.handover_indication = 1;
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
}
session->paa.session_type = req->pdn_type.u8;
@ -318,7 +320,7 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
if (sess->request_type.value == OGS_NAS_EPS_REQUEST_TYPE_HANDOVER) {
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
indication.hi = 1;
indication.handover_indication = 1;
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
@ -353,6 +355,25 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
uli_buf, OGS_GTP_MAX_ULI_LEN);
}
/*
* 7.2.7 Modify Bearer Request
*
* Table 7.2.7-1: Information Elements in a Modify Bearer Request
*
* Delay Downlink Packet Nofication Request : Delay Value
*
* This IE shall be sent on the S11 interface for a UE triggered
* Packet Notification Service Request and UE initiated Connection
* Resume Request procedures. It shall contain the delay the SGW
* shall apply between receiving downlink data and sending Downlink
* Data Notification for all UEs served by that MME
* (see clause 5.3.4.2 of 3GPP TS 23.401 [3]).
*/
if (mme_ue->nas_eps.type == MME_EPS_TYPE_SERVICE_REQUEST) {
req->delay_downlink_packet_notification_request.presence = 1;
req->delay_downlink_packet_notification_request.u8 = 0;
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
}
@ -398,7 +419,7 @@ ogs_pkbuf_t *mme_s11_build_delete_session_request(
uli_buf, OGS_GTP_MAX_ULI_LEN);
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
indication.oi = 1;
indication.operation_indication = 1;
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
@ -726,6 +747,9 @@ ogs_pkbuf_t *mme_s11_build_downlink_data_notification_ack(
ack->cause.data = &cause;
ack->cause.len = sizeof(cause);
ack->data_notification_delay.presence = 1;
ack->data_notification_delay.u8 = 0;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
}

View File

@ -902,7 +902,7 @@ void sgwc_sxa_handle_session_modification_response(
indication = gtp_req->indication_flags.data;
}
if (indication && indication->hi) {
if (indication && indication->handover_indication) {
recv_message->h.type = OGS_GTP_MODIFY_BEARER_REQUEST_TYPE;
recv_message->h.teid = sess->pgw_s5c_teid;

View File

@ -440,7 +440,7 @@ void smf_s5c_handle_modify_bearer_request(
indication = req->indication_flags.data;
}
if (indication && indication->hi) {
if (indication && indication->handover_indication) {
ogs_assert(sess->session.name);
wlan_sess = smf_sess_find_by_apn(
smf_ue, sess->session.name, OGS_GTP_RAT_TYPE_WLAN);

View File

@ -59,7 +59,7 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
if (handover_ind == true) {
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
indication.hi = 1;
indication.handover_indication = 1;
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);