From a7898cb26c2d24de4e92a4e73ba78c376885ce5b Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Thu, 13 Jul 2023 12:43:14 +0200 Subject: [PATCH] gtp1: Add missing RAN INFORMATION RELAY msg The RAN INFORMATION RELAY message has no associated response, and hence it should not start T3-RESPONSE timer to retrigger retransmissions. TS 29.060 11.1: "The Error Indication, Version Not Supported, RAN Information Relay, Supported Extension Headers Notification and the SGSN Context Acknowledge messages shall be considered as Responses for the purpose of this clause" TS 29.060 7.5.14.1: "For handling of protocol errors the RAN Information Relay message is treated as a Response message." --- lib/gtp/xact.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/gtp/xact.c b/lib/gtp/xact.c index 3d4a08b7d..1a35544a1 100644 --- a/lib/gtp/xact.c +++ b/lib/gtp/xact.c @@ -88,15 +88,19 @@ ogs_gtp_xact_t *ogs_gtp1_xact_local_create(ogs_gtp_node_t *gnode, xact->cb = cb; xact->data = data; - xact->tm_response = ogs_timer_add( - ogs_app()->timer_mgr, response_timeout, xact); - ogs_assert(xact->tm_response); - xact->response_rcount = ogs_app()->time.message.gtp.n3_response_rcount, + /* 7.6 "The T3-RESPONSE timer shall be started when a signalling request + * message (for which a response has been defined) is sent." */ + if (hdesc->type != OGS_GTP1_RAN_INFORMATION_RELAY_TYPE) { + xact->tm_response = ogs_timer_add( + ogs_app()->timer_mgr, response_timeout, xact); + ogs_assert(xact->tm_response); + xact->response_rcount = ogs_app()->time.message.gtp.n3_response_rcount; + } xact->tm_holding = ogs_timer_add( ogs_app()->timer_mgr, holding_timeout, xact); ogs_assert(xact->tm_holding); - xact->holding_rcount = ogs_app()->time.message.gtp.n3_holding_rcount, + xact->holding_rcount = ogs_app()->time.message.gtp.n3_holding_rcount; ogs_list_add(&xact->gnode->local_list, xact); @@ -987,6 +991,7 @@ static ogs_gtp_xact_stage_t ogs_gtp1_xact_get_stage(uint8_t type, uint32_t xid) case OGS_GTP1_FORWARD_RELOCATION_REQUEST_TYPE: case OGS_GTP1_RELOCATION_CANCEL_REQUEST_TYPE: case OGS_GTP1_UE_REGISTRATION_QUERY_REQUEST_TYPE: + case OGS_GTP1_RAN_INFORMATION_RELAY_TYPE: stage = GTP_XACT_INITIAL_STAGE; break; case OGS_GTP1_ECHO_RESPONSE_TYPE: