diff --git a/lib/gtp/message.c b/lib/gtp/message.c index 8335da2c9..d88903ab4 100644 --- a/lib/gtp/message.c +++ b/lib/gtp/message.c @@ -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 } diff --git a/lib/gtp/message.h b/lib/gtp/message.h index bb8a81f0f..636018d32 100644 --- a/lib/gtp/message.h +++ b/lib/gtp/message.h @@ -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; diff --git a/lib/gtp/support/gtp-tlv.py b/lib/gtp/support/gtp-tlv.py index 68fbb7bd7..420c3e60a 100644 --- a/lib/gtp/support/gtp-tlv.py +++ b/lib/gtp/support/gtp-tlv.py @@ -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 diff --git a/lib/gtp/types.h b/lib/gtp/types.h index 1301a4612..6ddad2851 100644 --- a/lib/gtp/types.h +++ b/lib/gtp/types.h @@ -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) diff --git a/src/mme/mme-s11-build.c b/src/mme/mme-s11-build.c index e0e44e79c..073bf1a61 100644 --- a/src/mme/mme-s11-build.c +++ b/src/mme/mme-s11-build.c @@ -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(>p_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(>p_message); } diff --git a/src/sgwc/sxa-handler.c b/src/sgwc/sxa-handler.c index fe5c9763d..24a197734 100644 --- a/src/sgwc/sxa-handler.c +++ b/src/sgwc/sxa-handler.c @@ -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; diff --git a/src/smf/s5c-handler.c b/src/smf/s5c-handler.c index 3a94d676f..4753288af 100644 --- a/src/smf/s5c-handler.c +++ b/src/smf/s5c-handler.c @@ -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); diff --git a/tests/non3gpp/s2b-build.c b/tests/non3gpp/s2b-build.c index 0d286f13d..281647f4c 100644 --- a/tests/non3gpp/s2b-build.c +++ b/tests/non3gpp/s2b-build.c @@ -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);